diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a1d5b2d7..5ef9d62c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,50 +18,74 @@ concurrency: cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} env: - NODE_VERSION: 18 CACHE_KEY: "${{ github.ref }}-${{ github.run_id }}-${{ github.run_attempt }}" jobs: + configure: + name: Configure Build Matrix + runs-on: ubuntu-latest + + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha || github.ref }} + + - id: set-matrix + run: echo "matrix=$(jq -c . < ./.github/workflows/matrix.json)" >> $GITHUB_OUTPUT + build: + needs: configure + name: Build Package runs-on: ubuntu-latest + strategy: + matrix: ${{ fromJson(needs.configure.outputs.matrix) }} + steps: - name: Checkout code uses: actions/checkout@v4 - uses: ./.github/actions/build with: - node: ${{ env.NODE_VERSION }} + node: ${{ matrix.node }} - name: Save build artifacts uses: actions/cache/save@v3 with: path: . - key: ${{ env.CACHE_KEY }} + key: ${{ matrix.node }}-${{ env.CACHE_KEY }} unit: - needs: build # Require build to complete before running tests + needs: [configure, build] # Require build to complete before running tests name: Run Unit Tests runs-on: ubuntu-latest + strategy: + matrix: ${{ fromJson(needs.configure.outputs.matrix) }} + steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ matrix.node }} cache: npm - uses: actions/cache/restore@v3 with: path: . - key: ${{ env.CACHE_KEY }} + key: ${{ matrix.node }}-${{ env.CACHE_KEY }} - run: npm run test:ci - - uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # pin@3.1.4 + # only upload coverage on one node version + - if: matrix.node == 18 + uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # pin@3.1.4 lint: needs: build # Require build to complete before running tests @@ -74,12 +98,12 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: ${{ env.NODE_VERSION }} + node-version: ${{ matrix.node }} cache: npm - uses: actions/cache/restore@v3 with: path: . - key: ${{ env.CACHE_KEY }} + key: ${{ matrix.node }}-${{ env.CACHE_KEY }} - run: npm run lint