# .github/workflows/js-tests.yml name: JS Tests on: workflow_call: jobs: workspaces: name: List npm workspaces runs-on: ubuntu-latest outputs: packages: ${{ steps.set-matrix.outputs.packages }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: 22 cache: npm - uses: ./.github/actions/retry with: command: npm ci --ignore-scripts - id: set-matrix run: | PACKAGES=$(npm query .workspace | jq -c '[.[].location]') if [ "$PACKAGES" = "[]" ] || [ -z "$PACKAGES" ]; then echo "::error::Workspace discovery produced an empty package list — refusing to emit a zero-length matrix (would skip all JS/TS checks silently)." exit 1 fi echo "packages=$PACKAGES" >> "$GITHUB_OUTPUT" check: name: Typecheck & Test needs: workspaces runs-on: ubuntu-latest strategy: matrix: package: ${{ fromJson(needs.workspaces.outputs.packages) }} fail-fast: false # report all failures, not just the first one steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: 22 cache: npm - uses: ./.github/actions/retry with: command: npm ci - run: npm run --prefix ${{ matrix.package }} check - run: npm run --prefix ${{ matrix.package }} fix