From 3c0458811085373dd258afdb4974085fc189fd00 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Fri, 24 Mar 2023 23:44:14 +0800 Subject: [PATCH] ci: simplify the CI (#1684) --- .github/actions/setup-node/action.yml | 75 ++++++++++++++++++++++++ .github/workflows/build-master.yml | 43 ++------------ .github/workflows/build-test-version.yml | 25 +------- .github/workflows/build.yml | 59 ++++--------------- .github/workflows/client-app.yml | 41 +++---------- .github/workflows/languages-sync.yml | 13 +--- .github/workflows/publish.yml | 16 +---- .nvmrc | 2 +- .pnpmfile.cjs | 28 --------- 9 files changed, 105 insertions(+), 197 deletions(-) create mode 100644 .github/actions/setup-node/action.yml delete mode 100644 .pnpmfile.cjs diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml new file mode 100644 index 000000000..ec4cfd70d --- /dev/null +++ b/.github/actions/setup-node/action.yml @@ -0,0 +1,75 @@ +name: 'AFFiNE Node.js Setup' +description: 'Node.js setup for CI, including cache configuration' +inputs: + extra-flags: + description: 'Extra flags to pass to the yarn install.' + required: false + default: '' + package-install: + description: 'Run the install step.' + required: false + default: 'true' + +runs: + using: 'composite' + steps: + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + registry-url: https://npm.pkg.github.com + scope: '@toeverything' + cache: 'yarn' + + - name: CI Module Resolve + shell: bash + run: node scripts/module-resolve/ci.cjs + + - name: yarn install + if: ${{ inputs.package-install == 'true' }} + continue-on-error: true + shell: bash + run: yarn install ${{ inputs.extra-flags }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_GITHUB_AUTH_TOKEN }} + + - name: yarn install (try again) + if: ${{ steps.install.outcome == 'failure' }} + shell: bash + run: yarn install ${{ inputs.extra-flags }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_GITHUB_AUTH_TOKEN }} + + - name: Get installed Playwright version + id: playwright-version + shell: bash + run: echo "::set-output name=version::$(yarn why --json @playwright/test | grep -h 'workspace:.' | jq --raw-output '.children[].locator' | sed -e 's/@playwright\/test@.*://')" + + # Attempt to restore the correct Playwright browser binaries based on the + # currently installed version of Playwright (The browser binary versions + # may change with Playwright versions). + # Note: Playwright's cache directory is hard coded because that's what it + # says to do in the docs. There doesn't appear to be a command that prints + # it out for us. + - uses: actions/cache@v3 + id: playwright-cache + with: + path: '~/.cache/ms-playwright' + key: '${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.version }}' + # As a fallback, if the Playwright version has changed, try use the + # most recently cached version. There's a good chance that at least one + # of the browser binary versions haven't been updated, so Playwright can + # skip installing that in the next step. + # Note: When falling back to an old cache, `cache-hit` (used below) + # will be `false`. This allows us to restore the potentially out of + # date cache, but still let Playwright decide if it needs to download + # new binaries or not. + restore-keys: | + ${{ runner.os }}-playwright- + + # If the Playwright browser binaries weren't able to be restored, we tell + # paywright to install everything for us. + - name: Install Playwright's dependencies + shell: bash + if: steps.playwright-cache.outputs.cache-hit != 'true' + run: yarn playwright install --with-deps diff --git a/.github/workflows/build-master.yml b/.github/workflows/build-master.yml index 0c5eea47b..b0686cf3d 100644 --- a/.github/workflows/build-master.yml +++ b/.github/workflows/build-master.yml @@ -12,29 +12,8 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Use Node.js LTS - uses: actions/setup-node@v3 - with: - node-version-file: '.nvmrc' - cache: 'yarn' - registry-url: https://npm.pkg.github.com - scope: '@toeverything' - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - uses: actions/cache@v3 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - run: node scripts/module-resolve/ci.cjs - - - run: yarn install - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_GITHUB_AUTH_TOKEN }} + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Build run: yarn build @@ -125,22 +104,8 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Use Node.js 18 - uses: actions/setup-node@v3 - with: - node-version: 18 - cache: 'yarn' - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - uses: actions/cache@v3 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - run: yarn install + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Download artifact uses: actions/download-artifact@v3 with: diff --git a/.github/workflows/build-test-version.yml b/.github/workflows/build-test-version.yml index 7526b4238..bc8eed4aa 100644 --- a/.github/workflows/build-test-version.yml +++ b/.github/workflows/build-test-version.yml @@ -24,29 +24,8 @@ jobs: steps: - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version-file: '.nvmrc' - registry-url: https://npm.pkg.github.com - scope: '@toeverything' - cache: 'yarn' - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - - run: node scripts/module-resolve/ci.cjs - - - uses: actions/cache@v3 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - run: yarn install - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_GITHUB_AUTH_TOKEN }} + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Lint run: | diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f1e9ae975..3d4e9d10f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -89,22 +89,13 @@ jobs: - uses: actions/checkout@v3 with: ref: ${{ needs.pull_request.outputs.pr_sha }} - - name: Use Node.js LTS - uses: actions/setup-node@v3 - with: - node-version-file: '.nvmrc' - cache: 'yarn' - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - uses: actions/cache@v3 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - + - name: Setup Node.js + uses: ./.github/actions/setup-node + # To prevent tampering with Yarn’s binary file + - name: Check yarn releases + run: | + yarn set version self + git diff --exit-code - run: yarn install - run: yarn lint --max-warnings=0 @@ -210,22 +201,8 @@ jobs: }, }); return check.id; - - name: Use Node.js 18 - uses: actions/setup-node@v3 - with: - node-version: 18 - cache: 'yarn' - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - uses: actions/cache@v3 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - run: yarn install + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Download artifact uses: actions/download-artifact@v3 with: @@ -337,22 +314,8 @@ jobs: }, }); return check.id; - - name: Use Node.js LTS - uses: actions/setup-node@v3 - with: - node-version-file: '.nvmrc' - cache: 'yarn' - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - uses: actions/cache@v3 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - run: yarn install + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Download artifact uses: actions/download-artifact@v3 with: diff --git a/.github/workflows/client-app.yml b/.github/workflows/client-app.yml index 3b187609e..628dfe619 100644 --- a/.github/workflows/client-app.yml +++ b/.github/workflows/client-app.yml @@ -34,18 +34,8 @@ jobs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - uses: actions/cache@v3 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - name: Install dependencies - run: yarn install + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: before-make working-directory: apps/electron @@ -76,13 +66,8 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: Install dependencies - run: yarn install # that's right, yarn - working-directory: apps/electron + - name: Setup Node.js + uses: ./.github/actions/setup-node - uses: actions/download-artifact@v3 with: @@ -114,13 +99,8 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: Install dependencies - run: yarn install # that's right, yarn - working-directory: apps/electron + - name: Setup Node.js + uses: ./.github/actions/setup-node - uses: actions/download-artifact@v3 with: @@ -152,13 +132,8 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: Install dependencies - run: yarn install # that's right, yarn - working-directory: apps/electron + - name: Setup Node.js + uses: ./.github/actions/setup-node - uses: actions/download-artifact@v3 with: diff --git a/.github/workflows/languages-sync.yml b/.github/workflows/languages-sync.yml index 980dbd5c5..afeebe9e8 100644 --- a/.github/workflows/languages-sync.yml +++ b/.github/workflows/languages-sync.yml @@ -26,17 +26,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - uses: actions/cache@v3 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - run: yarn install + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Check Language Key if: github.ref != 'refs/heads/master' working-directory: ./packages/i18n diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e482eda31..357fe0712 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -20,20 +20,8 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - uses: actions/cache@v3 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - run: yarn install - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_GITHUB_AUTH_TOKEN }} + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Build run: yarn build diff --git a/.nvmrc b/.nvmrc index 8e2afd342..3c032078a 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -17 \ No newline at end of file +18 diff --git a/.pnpmfile.cjs b/.pnpmfile.cjs deleted file mode 100644 index d2541eb7e..000000000 --- a/.pnpmfile.cjs +++ /dev/null @@ -1,28 +0,0 @@ -const fs = require('fs'); - -function getCustomize() { - const customed = fs.existsSync('./module-resolve.cjs'); - if (!customed) { - return null; - } - const script = require('./module-resolve.cjs'); - return script && script.resolve; -} - -const customize = getCustomize(); - -function readPackage(pkg) { - if (!customize) { - return pkg; - } - - const customizedPkg = customize(pkg); - - return customizedPkg; -} - -module.exports = { - hooks: { - readPackage, - }, -};