diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index 3846462ea7..294f2dab70 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -57,25 +57,34 @@ jobs: script/ci-changes-detector "$BASE_REF" shell: bash - examples: + setup-matrix: needs: detect-changes + runs-on: ubuntu-22.04 + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - id: set-matrix + run: | + # Determine if we should run full matrix (master, workflow_dispatch, force_run, or full-ci label) + if [[ "${{ github.ref }}" == "refs/heads/master" ]] || \ + [[ "${{ github.event_name }}" == "workflow_dispatch" ]] || \ + [[ "${{ inputs.force_run }}" == "true" ]] || \ + [[ "${{ needs.detect-changes.outputs.has_full_ci_label }}" == "true" ]]; then + # Full matrix: test both latest and minimum supported versions + echo 'matrix={"include":[{"ruby-version":"3.4","dependency-level":"latest"},{"ruby-version":"3.2","dependency-level":"minimum"}]}' >> $GITHUB_OUTPUT + else + # PR matrix: test only latest versions for fast feedback + echo 'matrix={"include":[{"ruby-version":"3.4","dependency-level":"latest"}]}' >> $GITHUB_OUTPUT + fi + + examples: + needs: [detect-changes, setup-matrix] # Run on master, workflow_dispatch, OR when generators needed if: | github.ref == 'refs/heads/master' || github.event_name == 'workflow_dispatch' || needs.detect-changes.outputs.run_generators == 'true' strategy: fail-fast: false - matrix: - include: - # Always run: Latest versions (fast feedback on PRs) - - ruby-version: '3.4' - dependency-level: 'latest' - # Master and workflow_dispatch: Minimum supported versions (full coverage) - - ruby-version: '3.2' - dependency-level: 'minimum' - exclude: - # Skip minimum dependency matrix on regular PRs (run only on master/workflow_dispatch/force_run/full-ci label) - - ruby-version: ${{ github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && inputs.force_run != true && needs.detect-changes.outputs.has_full_ci_label != 'true' && '3.2' || '' }} - dependency-level: ${{ github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && inputs.force_run != true && needs.detect-changes.outputs.has_full_ci_label != 'true' && 'minimum' || '' }} + matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} env: SKIP_YARN_COREPACK_CHECK: 0 BUNDLE_FROZEN: ${{ matrix.dependency-level == 'minimum' && 'false' || 'true' }} diff --git a/.github/workflows/gem-tests.yml b/.github/workflows/gem-tests.yml index 62773d5bf2..3c4a9e4992 100644 --- a/.github/workflows/gem-tests.yml +++ b/.github/workflows/gem-tests.yml @@ -61,25 +61,32 @@ jobs: script/ci-changes-detector "$BASE_REF" shell: bash - rspec-package-tests: + setup-gem-tests-matrix: needs: detect-changes + runs-on: ubuntu-22.04 + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - id: set-matrix + run: | + # Determine if we should run full matrix (master or full-ci label) + if [[ "${{ github.ref }}" == "refs/heads/master" ]] || \ + [[ "${{ needs.detect-changes.outputs.has_full_ci_label }}" == "true" ]]; then + # Full matrix: test both latest and minimum supported versions + echo 'matrix={"include":[{"ruby-version":"3.4","dependency-level":"latest"},{"ruby-version":"3.2","dependency-level":"minimum"}]}' >> $GITHUB_OUTPUT + else + # PR matrix: test only latest versions for fast feedback + echo 'matrix={"include":[{"ruby-version":"3.4","dependency-level":"latest"}]}' >> $GITHUB_OUTPUT + fi + + rspec-package-tests: + needs: [detect-changes, setup-gem-tests-matrix] # Run on master OR when Ruby tests needed on PR if: | (github.ref == 'refs/heads/master' || needs.detect-changes.outputs.run_ruby_tests == 'true') strategy: fail-fast: false - matrix: - include: - # Always run: Latest versions (fast feedback on PRs) - - ruby-version: '3.4' - dependency-level: 'latest' - # Master and full-ci label: Minimum supported versions (full coverage) - - ruby-version: '3.2' - dependency-level: 'minimum' - exclude: - # Skip minimum dependency matrix on regular PRs (run only on master or with full-ci label) - - ruby-version: ${{ github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && needs.detect-changes.outputs.has_full_ci_label != 'true' && '3.2' || '' }} - dependency-level: ${{ github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && needs.detect-changes.outputs.has_full_ci_label != 'true' && 'minimum' || '' }} + matrix: ${{ fromJson(needs.setup-gem-tests-matrix.outputs.matrix) }} env: BUNDLE_FROZEN: ${{ matrix.dependency-level == 'minimum' && 'false' || 'true' }} runs-on: ubuntu-22.04 diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 03231da3ca..b086557cdd 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -58,21 +58,33 @@ jobs: fi shell: bash - build-dummy-app-webpack-test-bundles: + setup-integration-matrix: needs: detect-changes + runs-on: ubuntu-22.04 + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - id: set-matrix + run: | + # Determine if we should run full matrix (master, workflow_dispatch, force_run, or full-ci label) + if [[ "${{ github.ref }}" == "refs/heads/master" ]] || \ + [[ "${{ github.event_name }}" == "workflow_dispatch" ]] || \ + [[ "${{ inputs.force_run }}" == "true" ]] || \ + [[ "${{ needs.detect-changes.outputs.has_full_ci_label }}" == "true" ]]; then + # Full matrix: test both latest and minimum supported versions + echo 'matrix={"include":[{"ruby-version":"3.4","node-version":"22","dependency-level":"latest"},{"ruby-version":"3.2","node-version":"20","dependency-level":"minimum"}]}' >> $GITHUB_OUTPUT + else + # PR matrix: test only latest versions for fast feedback + echo 'matrix={"include":[{"ruby-version":"3.4","node-version":"22","dependency-level":"latest"}]}' >> $GITHUB_OUTPUT + fi + + build-dummy-app-webpack-test-bundles: + needs: [detect-changes, setup-integration-matrix] # Run on master, workflow_dispatch, OR when tests needed on PR if: | github.ref == 'refs/heads/master' || github.event_name == 'workflow_dispatch' || needs.detect-changes.outputs.run_dummy_tests == 'true' strategy: - matrix: - ruby-version: ['3.4'] - node-version: ['22'] - dependency-level: ['latest'] - include: - # Skip minimum dependency matrix on regular PRs (run only on master/workflow_dispatch/force_run/full-ci label) - - ruby-version: ${{ (github.ref == 'refs/heads/master' || inputs.force_run == true || needs.detect-changes.outputs.has_full_ci_label == 'true') && '3.2'}} - node-version: ${{ (github.ref == 'refs/heads/master' || inputs.force_run == true || needs.detect-changes.outputs.has_full_ci_label == 'true') && '20'}} - dependency-level: ${{ (github.ref == 'refs/heads/master' || inputs.force_run == true || needs.detect-changes.outputs.has_full_ci_label == 'true') && 'minimum'}} + matrix: ${{ fromJson(needs.setup-integration-matrix.outputs.matrix) }} runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -142,25 +154,12 @@ jobs: key: dummy-app-webpack-bundle-${{ steps.get-sha.outputs.sha }}-ruby${{ matrix.ruby-version }}-${{ matrix.dependency-level }} dummy-app-integration-tests: - needs: [detect-changes, build-dummy-app-webpack-test-bundles] + needs: [detect-changes, setup-integration-matrix, build-dummy-app-webpack-test-bundles] # Run on master, workflow_dispatch, OR when tests needed on PR if: | github.ref == 'refs/heads/master' || github.event_name == 'workflow_dispatch' || needs.detect-changes.outputs.run_dummy_tests == 'true' strategy: - matrix: - ruby-version: ['3.4'] - node-version: ['22'] - dependency-level: ['latest'] - include: - # Skip minimum dependency matrix on regular PRs (run only on master/workflow_dispatch/force_run/full-ci label) - - ruby-version: ${{ (github.ref == 'refs/heads/master' || inputs.force_run == true || needs.detect-changes.outputs.has_full_ci_label == 'true') && '3.2'}} - node-version: ${{ (github.ref == 'refs/heads/master' || inputs.force_run == true || needs.detect-changes.outputs.has_full_ci_label == 'true') && '20'}} - dependency-level: ${{ (github.ref == 'refs/heads/master' || inputs.force_run == true || needs.detect-changes.outputs.has_full_ci_label == 'true') && 'minimum'}} - exclude: - # Skip minimum dependency matrix on regular PRs (run only on master/workflow_dispatch/force_run/full-ci label) - - ruby-version: ${{ github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && inputs.force_run != true && needs.detect-changes.outputs.has_full_ci_label != 'true' && '3.2' || '' }} - node-version: ${{ github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && inputs.force_run != true && needs.detect-changes.outputs.has_full_ci_label != 'true' && '20' || '' }} - dependency-level: ${{ github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && inputs.force_run != true && needs.detect-changes.outputs.has_full_ci_label != 'true' && 'minimum' || '' }} + matrix: ${{ fromJson(needs.setup-integration-matrix.outputs.matrix) }} runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4