# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions name: Studio Unit Tests & Build Check on: push: branches: [master, studio] paths: - 'apps/studio/**' - 'packages/common/sentry.ts' - 'packages/common/sentry.test.ts' - 'packages/ui/**' - 'packages/ui-patterns/**' - 'pnpm-lock.yaml' pull_request: branches: [master, studio] # Cancel old builds on new commit for same workflow + branch/PR concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true permissions: contents: read jobs: test: # Uses larger hosted runner as it significantly decreases build times runs-on: blacksmith-4vcpu-ubuntu-2404 strategy: matrix: test_number: [1] outputs: tests_ran: ${{ steps.filter.outputs.relevant }} steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false # On push events paths-filter diffs against github.event.before with # local git; without enough history it falls back to a git fetch that # fails unauthenticated (persist-credentials is false). fetch-depth: 50 sparse-checkout: | apps/studio packages patches - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 id: filter with: filters: | relevant: - 'packages/ui/**' - 'packages/ui-patterns/**' - 'apps/studio/**' - 'packages/common/sentry.ts' - 'packages/common/sentry.test.ts' - 'pnpm-lock.yaml' - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 if: steps.filter.outputs.relevant == 'true' name: Install pnpm with: run_install: false - name: Use Node.js if: steps.filter.outputs.relevant == 'true' uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps if: steps.filter.outputs.relevant == 'true' run: pnpm install --frozen-lockfile working-directory: ./ - name: Run Tests if: steps.filter.outputs.relevant == 'true' env: # Default is 2 GB, increase to have less frequent OOM errors NODE_OPTIONS: '--max_old_space_size=3072' run: pnpm run test:ci working-directory: ./apps/studio - name: Upload coverage artifact if: steps.filter.outputs.relevant == 'true' uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: studio-coverage path: ./apps/studio/coverage/lcov.info retention-days: 1 coveralls: needs: test if: ${{ always() && needs.test.result == 'success' && needs.test.outputs.tests_ran == 'true' }} continue-on-error: true runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false sparse-checkout: | apps/studio patches - name: Download coverage artifact uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: studio-coverage path: ./coverage - name: Upload coverage results to Coveralls uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 continue-on-error: true with: flag-name: studio-tests github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: ./coverage/lcov.info base-path: './apps/studio' fail-on-error: false