diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml new file mode 100644 index 0000000000..8845fb16bd --- /dev/null +++ b/.github/actions/setup/action.yml @@ -0,0 +1,21 @@ +name: Setup +runs: + using: composite + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + node-version: 14 + registry-url: https://registry.npmjs.org + cache: yarn + + - uses: actions/cache@v3 + id: install-cache + with: + path: node_modules/ + key: ${{ runner.os }}-install-${{ hashFiles('**/yarn.lock') }} + + - if: steps.install-cache.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile --ignore-scripts + shell: bash diff --git a/.github/workflows/check-pr-title.yaml b/.github/workflows/check-pr-title.yaml index b741f571ec..f2907eca4f 100644 --- a/.github/workflows/check-pr-title.yaml +++ b/.github/workflows/check-pr-title.yaml @@ -1,4 +1,4 @@ -name: "Check PR Title" +name: Check PR Title on: pull_request_target: @@ -8,8 +8,8 @@ on: - synchronize jobs: - check-pr-title: - name: Check PR Title + # Ensures that the PR title adheres to [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/). + conventional-commit: runs-on: ubuntu-latest steps: - uses: amannn/action-semantic-pull-request@v3.4.0 diff --git a/.github/workflows/crowdin-sync.yaml b/.github/workflows/crowdin-sync.yaml index 3e25ec8ce0..7b0e181c74 100644 --- a/.github/workflows/crowdin-sync.yaml +++ b/.github/workflows/crowdin-sync.yaml @@ -2,34 +2,18 @@ name: Crowdin Download on: schedule: - - cron: '0 * * * *' # every hour we download translations and update the pr from crowdin - + # Download translations every hour. + # This is not done as part of the build so that builds remain reproducible. + - cron: '0 * * * *' # manual trigger workflow_dispatch: jobs: download-translations: - name: Download translations runs-on: ubuntu-latest - steps: - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: 14 - registry-url: https://registry.npmjs.org - cache: 'yarn' - - - uses: actions/cache@v3 - id: install-cache - with: - path: node_modules/ - key: ${{ runner.os }}-install-${{ hashFiles('**/yarn.lock') }} - - - if: steps.install-cache.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile --ignore-scripts - + - uses: ./.github/actions/setup - run: yarn i18n:extract - name: Download Crowdin translations diff --git a/.github/workflows/crowdin.yaml b/.github/workflows/crowdin.yaml index d29131499e..4766364a8e 100644 --- a/.github/workflows/crowdin.yaml +++ b/.github/workflows/crowdin.yaml @@ -6,28 +6,11 @@ on: - main jobs: - synchronize-with-crowdin: - name: Upload sources to Crowdin + upload-sources: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: 14 - registry-url: https://registry.npmjs.org - cache: 'yarn' - - - uses: actions/cache@v3 - id: install-cache - with: - path: node_modules/ - key: ${{ runner.os }}-install-${{ hashFiles('**/yarn.lock') }} - - - if: steps.install-cache.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile --ignore-scripts - + - uses: ./.github/actions/setup - run: yarn i18n:extract - name: Upload Crowdin sources diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index b4f5c29fb7..0000000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Lint - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - run-linters: - name: Run linters - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: 14 - registry-url: https://registry.npmjs.org - cache: 'yarn' - - - uses: actions/cache@v3 - id: install-cache - with: - path: node_modules/ - key: ${{ runner.os }}-install-${{ hashFiles('**/yarn.lock') }} - - - if: steps.install-cache.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile --ignore-scripts - - - name: Run eslint w/ autofix - if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.owner.login == github.repository_owner }} - uses: wearerequired/lint-action@36c7e6689e80d785d27a22f71d970f3a3b4fcb70 - with: - github_token: ${{ secrets.github_token }} - eslint: true - eslint_args: "-c .eslintrc.json" - auto_fix: true - - - name: Run eslint - if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.owner.login != github.repository_owner }} - run: yarn eslint . diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 4e8e4fe8ea..06a6545baf 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -1,62 +1,49 @@ name: Release on: - # disable deploys until this action is amended to include seeding cloudflare IPFS - # schedule: - # - cron: '0 12 * * 1-4' # every day 12:00 UTC Monday-Thursday - + schedule: + - cron: '0 12 * * 1-4' # every day 12:00 UTC Monday-Thursday # manual trigger workflow_dispatch: jobs: - bump_version: - name: Bump Version + wait-on-test: + runs-on: ubuntu-latest + steps: + - uses: jitterbit/await-check-suites@v1 + # Only wait for the first check suite, so that only tests are awaited, and not eg crowdin. + onlyFirstCheckSuite: true + + tag: + needs: wait-on-test runs-on: ubuntu-latest outputs: new_tag: ${{ steps.github_tag_action.outputs.new_tag }} changelog: ${{ steps.github_tag_action.outputs.changelog }} steps: - uses: actions/checkout@v3 - - - name: Bump version and push tag - id: github_tag_action - uses: mathieudutour/github-tag-action@331898d5052eedac9b15fec867b5ba66ebf9b692 + - name: Bump and tag + id: github-tag-action + uses: mathieudutour/github-tag-action@v6.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} release_branches: .* - default_bump: false + default_bump: patch - create_release: - name: Create Release + release: + needs: tag + if: ${{ needs.tag.outputs.new_tag != null }} runs-on: ubuntu-latest - needs: bump_version - if: ${{ needs.bump_version.outputs.new_tag != null }} steps: - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: 14 - registry-url: https://registry.npmjs.org - cache: 'yarn' - - - uses: actions/cache@v3 - id: install-cache - with: - path: node_modules/ - key: ${{ runner.os }}-install-${{ hashFiles('**/yarn.lock') }} - - - if: steps.install-cache.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile --ignore-scripts - + - uses: ./.github/actions/setup - run: yarn prepare - - run: yarn build - name: Pin to IPFS - id: upload + id: pinata uses: anantaramdas/ipfs-pinata-deploy-action@39bbda1ce1fe24c69c6f57861b8038278d53688d with: - pin-name: Uniswap ${{ needs.bump_version.outputs.new_tag }} + pin-name: Uniswap ${{ needs.tag.outputs.new_tag }} path: './build' pinata-api-key: ${{ secrets.PINATA_API_KEY }} pinata-secret-api-key: ${{ secrets.PINATA_API_SECRET_KEY }} @@ -70,12 +57,24 @@ jobs: seeds: ${{ secrets.CRUST_SEEDS }} - name: Convert CIDv0 to CIDv1 - id: convert_cidv0 + id: convert-cidv0 uses: uniswap/convert-cidv0-cidv1@v1.0.0 with: - cidv0: ${{ steps.upload.outputs.hash }} + cidv0: ${{ steps.pinata.outputs.hash }} - - run: sleep 600 + - uses: actions/cache@v3 + id: cypress-cache + with: + path: /home/runner/.cache/Cypress + key: ${{ runner.os }}-cypress-${{ hashFiles('node_modules/cypress') }} + - if: steps.cypress-cache.outputs.cache-hit != 'true' + run: yarn cypress install + - uses: cypress-io/github-action@v4 + with: + install: false + browser: chrome + spec: cypress/e2e/landing.test.ts + config: pageLoadTimeout=180000,retries=4,baseUrl=https://cloudflare-ipfs.com/ipfs/${{ steps.pinata.outputs.hash }} - name: Update DNS with new IPFS hash env: @@ -85,20 +84,19 @@ jobs: CLOUDFLARE_ZONE_ID: ${{ secrets.CLOUDFLARE_ZONE_ID }} uses: textileio/cloudflare-update-dnslink@0fe7b7a1ffc865db3a4da9773f0f987447ad5848 with: - cid: ${{ steps.upload.outputs.hash }} + cid: ${{ steps.pinata.outputs.hash }} - - name: Create GitHub Release - id: create_release + - name: Release uses: actions/create-release@v1.1.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tag_name: ${{ needs.bump_version.outputs.new_tag }} - release_name: Release ${{ needs.bump_version.outputs.new_tag }} + tag_name: ${{ needs.tag.outputs.new_tag }} + release_name: Release ${{ needs.tag.outputs.new_tag }} body: | IPFS hash of the deployment: - - CIDv0: `${{ steps.upload.outputs.hash }}` - - CIDv1: `${{ steps.convert_cidv0.outputs.cidv1 }}` + - CIDv0: `${{ steps.pinata.outputs.hash }}` + - CIDv1: `${{ steps.convert-cidv0.outputs.cidv1 }}` The latest release is always accessible via our alias to the Cloudflare IPFS gateway at [app.uniswap.org](https://app.uniswap.org). @@ -108,8 +106,8 @@ jobs: Your Uniswap settings are never remembered across different URLs. IPFS gateways: - - https://${{ steps.convert_cidv0.outputs.cidv1 }}.ipfs.dweb.link/ - - https://${{ steps.convert_cidv0.outputs.cidv1 }}.ipfs.cf-ipfs.com/ - - [ipfs://${{ steps.upload.outputs.hash }}/](ipfs://${{ steps.upload.outputs.hash }}/) + - https://${{ steps.convert-cidv0.outputs.cidv1 }}.ipfs.dweb.link/ + - https://${{ steps.convert-cidv0.outputs.cidv1 }}.ipfs.cf-ipfs.com/ + - [ipfs://${{ steps.upload.outputs.hash }}/](ipfs://${{ steps.pinata.outputs.hash }}/) - ${{ needs.bump_version.outputs.changelog }} + ${{ needs.tag.outputs.changelog }} diff --git a/.github/workflows/tests-e2e.yaml b/.github/workflows/test.yml similarity index 56% rename from .github/workflows/tests-e2e.yaml rename to .github/workflows/test.yml index 3b3471a2a1..d63ca92518 100644 --- a/.github/workflows/tests-e2e.yaml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -name: End-to-End Tests +name: Test on: push: @@ -7,33 +7,33 @@ on: pull_request: branches: - main + # manual trigger + workflow_dispatch: jobs: - build: - name: Build + lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - uses: ./.github/actions/setup + - run: yarn lint - - uses: actions/setup-node@v3 - with: - node-version: 14 - registry-url: https://registry.npmjs.org - cache: 'yarn' - - - uses: actions/cache@v3 - id: install-cache - with: - path: node_modules/ - key: ${{ runner.os }}-install-${{ hashFiles('**/yarn.lock') }} - - - if: steps.install-cache.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile --ignore-scripts + unit-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/setup + - run: yarn prepare + - run: yarn test + cypress-build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/setup - run: yarn prepare - run: yarn build - - uses: actions/upload-artifact@v2 with: name: build @@ -45,35 +45,19 @@ jobs: with: path: /home/runner/.cache/Cypress key: ${{ runner.os }}-cypress-${{ hashFiles('node_modules/cypress') }} - - if: steps.cypress-cache.outputs.cache-hit != 'true' run: yarn cypress install - + cypress-tests: - name: Run tests + needs: cypress-build runs-on: ubuntu-latest - needs: build strategy: fail-fast: false matrix: containers: [1, 2, 3, 4] steps: - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: 14 - registry-url: https://registry.npmjs.org - cache: 'yarn' - - - uses: actions/cache@v3 - id: install-cache - with: - path: node_modules/ # this should always be a cache hit, from install - key: ${{ runner.os }}-install-${{ hashFiles('**/yarn.lock') }} - - - if: steps.install-cache.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile --ignore-scripts + - uses: ./.github/actions/setup - uses: actions/download-artifact@v2 with: @@ -85,7 +69,6 @@ jobs: with: path: /home/runner/.cache/Cypress key: ${{ runner.os }}-cypress-${{ hashFiles('node_modules/cypress') }} - - if: steps.cypress-cache.outputs.cache-hit != 'true' run: yarn cypress install @@ -98,6 +81,5 @@ jobs: record: true parallel: true env: - CI: false # disables lint checks when building CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/tests-unit.yaml b/.github/workflows/tests-unit.yaml deleted file mode 100644 index 899e2f5179..0000000000 --- a/.github/workflows/tests-unit.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: Unit Tests - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - unit-tests: - name: Run tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: 14 - registry-url: https://registry.npmjs.org - cache: 'yarn' - - - uses: actions/cache@v3 - id: install-cache - with: - path: node_modules/ - key: ${{ runner.os }}-install-${{ hashFiles('**/yarn.lock') }} - - - if: steps.install-cache.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile --ignore-scripts - - - run: yarn prepare - - - run: yarn test diff --git a/package.json b/package.json index 65cb456bdb..71171e4d2e 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "start": "react-scripts start", "build": "react-scripts build", "serve": "serve build -l 3000", + "lint": "yarn eslint .", "test": "react-scripts test --coverage", "cypress:open": "cypress open --browser chrome --e2e", "cypress:run": "cypress run --browser chrome --e2e"