Merge pull request #7098 from BitGo/WP-6096/nx-cache #23625
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: BitGo SDK | |
| on: | |
| push: | |
| branches: | |
| - master | |
| pull_request: | |
| branches: | |
| - master | |
| - rel/** | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| env: | |
| NX_NO_CLOUD: true | |
| NX_CACHE_FILES: "modules/*/src/**/*.ts,modules/*/src/**/*.js,modules/*/*.json" | |
| jobs: | |
| unit-test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node-version: [20.x, 22.x] | |
| steps: | |
| - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| fetch-depth: 0 | |
| - name: Setup node:${{ matrix.node-version }} | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| - name: Build Info | |
| run: | | |
| echo "node $(node --version)" | |
| echo "npm $(npm --version)" | |
| echo "yarn $(yarn --version)" | |
| git --version | |
| echo "base ref $GITHUB_BASE_REF" | |
| echo "head ref $GITHUB_HEAD_REF" | |
| - name: Fetch Base Ref | |
| run: | | |
| git fetch origin $GITHUB_BASE_REF | |
| - name: restore lerna dependencies | |
| id: lerna-cache | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 #v4.2.3 | |
| with: | |
| path: | | |
| node_modules | |
| modules/*/node_modules | |
| key: ${{ runner.os }}-node${{matrix.node-version}}-${{ hashFiles('yarn.lock') }}-${{ hashFiles('tsconfig.packages.json') }}-${{ hashFiles('**/package.json') }} | |
| - name: Install Packages | |
| if: steps.lerna-cache.outputs.cache-hit != 'true' || contains( github.event.pull_request.labels.*.name, 'SKIP_CACHE') | |
| run: yarn install --with-frozen-lockfile --ignore-scripts | |
| - name: Check In-Repo Package Versions | |
| run: yarn run check-versions | |
| - name: restore nx cache | |
| id: nx-cache | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 #v4.2.3 | |
| if: "!contains( github.event.pull_request.labels.*.name, 'SKIP_CACHE')" | |
| with: | |
| path: | | |
| .nx/cache | |
| modules/*/dist | |
| key: ${{ runner.os }}-nx-${{ matrix.node-version }}-${{ hashFiles('yarn.lock') }}-${{ hashFiles(env.NX_CACHE_FILES) }} | |
| restore-keys: | | |
| ${{ runner.os }}-nx-${{ matrix.node-version }}-${{ hashFiles('yarn.lock') }}- | |
| ${{ runner.os }}-nx-${{ matrix.node-version }}- | |
| - name: build packages | |
| env: | |
| # Workaround for https://github.com/nodejs/node/issues/51555 | |
| DISABLE_V8_COMPILE_CACHE: '1' | |
| NX_SKIP_NX_CACHE: ${{ contains(github.event.pull_request.labels.*.name, 'SKIP_CACHE') && 'true' || '' }} | |
| run: yarn run postinstall | |
| - name: Unit Test | |
| run: yarn run unit-test-changed | |
| env: | |
| BITGOJS_TEST_PASSWORD: ${{ secrets.BITGOJS_TEST_PASSWORD }} | |
| NX_SKIP_NX_CACHE: ${{ contains(github.event.pull_request.labels.*.name, 'SKIP_CACHE') && 'true' || '' }} | |
| # - name: Upload Code Coverage | |
| # run: | | |
| # yarn run gen-coverage-changed | |
| # yarn run coverage | |
| # env: | |
| # CODECOV_FLAG: unit | |
| # CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| code-quality: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| check: ['lint', 'format', 'commit-lint', 'dependencies', 'audit'] | |
| steps: | |
| - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Setup node 20 | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | |
| with: | |
| node-version: 20 | |
| - name: restore lerna dependencies | |
| id: lerna-cache | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 #v4.2.3 | |
| with: | |
| path: | | |
| node_modules | |
| modules/*/node_modules | |
| key: ${{ runner.os }}-node20-${{ hashFiles('yarn.lock') }}-${{ hashFiles('tsconfig.packages.json') }}-${{ hashFiles('**/package.json') }} | |
| - name: Install Packages | |
| if: steps.lerna-cache.outputs.cache-hit != 'true' || contains( github.event.pull_request.labels.*.name, 'SKIP_CACHE') | |
| run: yarn install --with-frozen-lockfile --ignore-scripts | |
| - name: Lint Source Code | |
| if: matrix.check == 'lint' | |
| run: yarn run lint | |
| - name: Check Source Code Formatting | |
| if: matrix.check == 'format' | |
| run: yarn run check-fmt | |
| - name: Lint Commit Messages | |
| if: matrix.check == 'commit-lint' | |
| run: | | |
| git fetch --unshallow origin $GITHUB_BASE_REF | |
| GITHUB_REPO_BRANCH=$GITHUB_BASE_REF yarn run check-commits | |
| - name: Check Package Dependencies | |
| if: matrix.check == 'dependencies' | |
| run: yarn run check-deps | |
| - name: Audit Dependencies | |
| if: matrix.check == 'audit' | |
| run: yarn run improved-yarn-audit --min-severity high | |
| license-analysis: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Setup node 22 | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | |
| with: | |
| node-version: 22 | |
| - name: restore lerna dependencies | |
| id: lerna-cache | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 #v4.2.3 | |
| with: | |
| path: | | |
| node_modules | |
| modules/*/node_modules | |
| key: ${{ runner.os }}-node22-${{ hashFiles('yarn.lock') }}-${{ hashFiles('tsconfig.packages.json') }}-${{ hashFiles('**/package.json') }} | |
| - name: Install Packages | |
| if: steps.lerna-cache.outputs.cache-hit != 'true' | |
| run: yarn install --with-frozen-lockfile --ignore-scripts | |
| - name: restore nx cache | |
| id: nx-cache | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 #v4.2.3 | |
| if: "!contains( github.event.pull_request.labels.*.name, 'SKIP_CACHE')" | |
| with: | |
| path: | | |
| .nx/cache | |
| modules/*/dist | |
| key: ${{ runner.os }}-nx-license-${{ hashFiles('yarn.lock') }}-${{ hashFiles(env.NX_CACHE_FILES) }} | |
| restore-keys: | | |
| ${{ runner.os }}-nx-license-${{ hashFiles('yarn.lock') }}- | |
| ${{ runner.os }}-nx-license- | |
| - name: build packages | |
| env: | |
| # Workaround for https://github.com/nodejs/node/issues/51555 | |
| DISABLE_V8_COMPILE_CACHE: '1' | |
| NX_SKIP_NX_CACHE: ${{ contains(github.event.pull_request.labels.*.name, 'SKIP_CACHE') && 'true' || '' }} | |
| run: yarn run postinstall | |
| - name: Run Fossa Analysis | |
| uses: fossas/fossa-action@3ebcea1862c6ffbd5cf1b4d0bd6b3fe7bd6f2cac # v1.7.0 | |
| with: | |
| api-key: ${{ secrets.FOSSA_API_KEY }} | |
| branch: ${{ github.head_ref || github.ref_name }} | |
| project: BitGo/BitGoJS | |
| browser-test: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Setup node 20 | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | |
| with: | |
| node-version: 20 # this just needs to pass our lock file requirement for compilation | |
| - name: Build Info | |
| run: | | |
| echo "node $(node --version)" | |
| echo "npm $(npm --version)" | |
| echo "yarn $(yarn --version)" | |
| git --version | |
| echo "base ref $GITHUB_BASE_REF" | |
| echo "head ref $GITHUB_HEAD_REF" | |
| - name: Install APT Packages | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| gconf-service \ | |
| libasound2 \ | |
| libatk1.0-0 \ | |
| libatk-bridge2.0-0 \ | |
| libc6 \ | |
| libcairo2 \ | |
| libcups2 \ | |
| libdbus-1-3 \ | |
| libexpat1 \ | |
| libfontconfig1 \ | |
| libgcc1 \ | |
| libgconf-2-4 \ | |
| libgdk-pixbuf2.0-0 \ | |
| libglib2.0-0 \ | |
| libgtk-3-0 \ | |
| libnspr4 \ | |
| libpango-1.0-0 \ | |
| libpangocairo-1.0-0 \ | |
| libstdc++6 \ | |
| libx11-6 \ | |
| libx11-xcb1 \ | |
| libxcb1 \ | |
| libxcomposite1 \ | |
| libxcursor1 \ | |
| libxdamage1 \ | |
| libxext6 \ | |
| libxfixes3 \ | |
| libxi6 \ | |
| libxrandr2 \ | |
| libxrender1 \ | |
| libxss1 \ | |
| libxtst6 \ | |
| ca-certificates \ | |
| fonts-liberation \ | |
| libappindicator1 \ | |
| libnss3 \ | |
| lsb-release \ | |
| xdg-utils \ | |
| wget | |
| - name: restore lerna dependencies | |
| id: lerna-cache | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 #v4.2.3 | |
| with: | |
| path: | | |
| node_modules | |
| modules/*/node_modules | |
| /home/runner/.cache/Cypress | |
| key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }}-${{ hashFiles('tsconfig.packages.json')}}-${{ hashFiles('**/package.json') }} | |
| - name: Install Packages | |
| if: steps.lerna-cache.outputs.cache-hit != 'true' || contains( github.event.pull_request.labels.*.name, 'SKIP_CACHE') | |
| run: yarn install --with-frozen-lockfile | |
| - name: restore nx cache | |
| id: nx-cache | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 #v4.2.3 | |
| if: "!contains( github.event.pull_request.labels.*.name, 'SKIP_CACHE')" | |
| with: | |
| path: | | |
| .nx/cache | |
| modules/*/dist | |
| key: ${{ runner.os }}-nx-browser-${{ hashFiles('yarn.lock') }}-${{ hashFiles(env.NX_CACHE_FILES) }} | |
| restore-keys: | | |
| ${{ runner.os }}-nx-browser-${{ hashFiles('yarn.lock') }}- | |
| ${{ runner.os }}-nx-browser- | |
| - name: build packages | |
| if: steps.lerna-cache.outputs.cache-hit == 'true' | |
| env: | |
| # Workaround for https://github.com/nodejs/node/issues/51555 | |
| DISABLE_V8_COMPILE_CACHE: '1' | |
| run: yarn run postinstall | |
| - name: Browser Tests | |
| run: yarn run browser-tests | |
| env: | |
| BITGOJS_TEST_PASSWORD: ${{ secrets.BITGOJS_TEST_PASSWORD }} | |
| NX_SKIP_NX_CACHE: ${{ contains(github.event.pull_request.labels.*.name, 'SKIP_CACHE') && 'true' || '' }} | |
| docker-build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Setup Docker compatibility with Podman | |
| run: sudo ln -sf /usr/bin/podman /usr/local/bin/docker | |
| - name: Build BitGoJS Express Docker Image | |
| run: ./scripts/build-docker-express.sh | |
| dockerfile-check: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Setup node 22 | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | |
| with: | |
| node-version: 22 | |
| - name: restore lerna dependencies | |
| id: lerna-cache | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 #v4.2.3 | |
| with: | |
| path: | | |
| node_modules | |
| modules/*/node_modules | |
| key: ${{ runner.os }}-node22-${{ hashFiles('yarn.lock') }}-${{ hashFiles('tsconfig.packages.json') }}-${{ hashFiles('package.json') }} | |
| - name: Install Packages | |
| if: steps.lerna-cache.outputs.cache-hit != 'true' || contains( github.event.pull_request.labels.*.name, 'SKIP_CACHE') | |
| run: yarn install --with-frozen-lockfile --ignore-scripts | |
| - name: Check Dockerfile is up to date | |
| run: | | |
| yarn update-dockerfile | |
| if ! git diff --quiet; then | |
| echo "Dockerfile is not up to date. Please run 'yarn update-dockerfile' and commit the changes." | |
| git diff | |
| exit 1 | |
| fi |