name: Reusable units test workflow on: workflow_call: inputs: ref: description: GitHub ref to test. required: false type: string default: master nodeVersion: description: Version of node to use. required: false type: string default: 20.x cacheKey: description: Cache key for modules and build artifacts. required: false default: '' type: string collectCoverage: required: false default: false type: boolean ignoreTurboCache: required: false default: false type: boolean skipFrontendTests: required: false default: false type: boolean secrets: CODECOV_TOKEN: description: 'Codecov upload token.' required: false jobs: unit-test: name: Unit tests runs-on: blacksmith-2vcpu-ubuntu-2204 env: TURBO_FORCE: ${{ inputs.ignoreTurboCache }} COVERAGE_ENABLED: ${{ inputs.collectCoverage }} steps: - uses: actions/checkout@v4.1.1 with: ref: ${{ inputs.ref }} - name: Use Node.js ${{ inputs.nodeVersion }} uses: useblacksmith/setup-node@v5 with: node-version: ${{ inputs.nodeVersion }} - name: Setup corepack and pnpm run: | npm i -g corepack@0.31 corepack enable - name: Install dependencies run: pnpm install --frozen-lockfile - name: Setup build cache uses: useblacksmith/caching-for-turbo@v1 - name: Build if: ${{ inputs.cacheKey == '' }} run: pnpm build - name: Restore cached build artifacts if: ${{ inputs.cacheKey != '' }} uses: useblacksmith/cache/restore@v5 with: path: ./packages/**/dist key: ${{ inputs.cacheKey }} fail-on-cache-miss: true - name: Test Backend run: pnpm test:backend - name: Test Nodes run: pnpm test:nodes - name: Test Frontend if: ${{ !inputs.skipFrontendTests }} run: pnpm test:frontend - name: Upload coverage to Codecov if: inputs.collectCoverage uses: codecov/codecov-action@v5.1.2 with: token: ${{ secrets.CODECOV_TOKEN }}