Generate test matrix dynamically

This commit is contained in:
なつき
2026-01-07 22:27:00 +01:00
committed by Benoit Daloze
parent d5f787ce33
commit c2f29a7833
2 changed files with 107 additions and 82 deletions
+30 -82
View File
@@ -13,85 +13,33 @@ permissions:
contents: read
jobs:
test-matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v6
- uses: ./
with:
ruby-version: ruby
- id: matrix
run: echo "matrix=$(ruby generate-test-matrix.rb)" | tee -a "$GITHUB_OUTPUT"
- run: echo "$MATRIX" | yq -P
env:
MATRIX: ${{ steps.matrix.outputs.matrix }}
test:
needs: [test-matrix]
strategy:
fail-fast: false
matrix:
os: [ ubuntu-22.04, ubuntu-24.04, ubuntu-22.04-arm, ubuntu-24.04-arm, macos-14, macos-15, macos-15-intel, windows-2022, windows-2025, windows-11-arm ]
ruby: [
'1.9', '2.0', '2.1', '2.2', '2.3', '2.4', '2.5', '2.6', '2.7', '3.0', '3.1', '3.2', '3.3', '3.4', '4.0', ruby-head,
jruby-9.4, jruby, jruby-head,
truffleruby, truffleruby-head,
truffleruby+graalvm, truffleruby+graalvm-head
]
include:
- { os: windows-2022, ruby: mingw }
- { os: windows-2022, ruby: mswin }
- { os: windows-2022, ruby: ucrt }
- { os: windows-2025, ruby: mingw }
- { os: windows-2025, ruby: mswin }
- { os: windows-2025, ruby: ucrt }
- { os: ubuntu-24.04, ruby: asan }
- { os: ubuntu-24.04, ruby: asan-release }
exclude:
# https://github.com/ruby/setup-ruby/issues/496
- { os: ubuntu-22.04, ruby: '2.2' }
- { os: ubuntu-24.04, ruby: '1.9' }
- { os: ubuntu-24.04, ruby: '2.2' }
# These old Rubies fail to compile on macOS arm64
- { os: macos-14, ruby: '1.9' }
- { os: macos-14, ruby: '2.0' }
- { os: macos-14, ruby: '2.1' }
- { os: macos-14, ruby: '2.2' }
- { os: macos-14, ruby: '2.3' }
- { os: macos-14, ruby: '2.4' }
- { os: macos-14, ruby: '2.5' }
- { os: macos-15, ruby: '1.9' }
- { os: macos-15, ruby: '2.0' }
- { os: macos-15, ruby: '2.1' }
- { os: macos-15, ruby: '2.2' }
- { os: macos-15, ruby: '2.3' }
- { os: macos-15, ruby: '2.4' }
- { os: macos-15, ruby: '2.5' }
# These old Rubies fail to compile or segfault on Linux arm64
- { os: ubuntu-22.04-arm, ruby: '1.9' }
- { os: ubuntu-22.04-arm, ruby: '2.0' }
- { os: ubuntu-22.04-arm, ruby: '2.1' }
- { os: ubuntu-22.04-arm, ruby: '2.2' }
- { os: ubuntu-24.04-arm, ruby: '1.9' }
- { os: ubuntu-24.04-arm, ruby: '2.0' }
- { os: ubuntu-24.04-arm, ruby: '2.1' }
- { os: ubuntu-24.04-arm, ruby: '2.2' }
# RubyInstaller windows-arm64 builds only exist for Ruby 3.4+
- { os: windows-11-arm, ruby: '2.0' }
- { os: windows-11-arm, ruby: '2.1' }
- { os: windows-11-arm, ruby: '2.2' }
- { os: windows-11-arm, ruby: '2.3' }
- { os: windows-11-arm, ruby: '2.4' }
- { os: windows-11-arm, ruby: '2.5' }
- { os: windows-11-arm, ruby: '2.6' }
- { os: windows-11-arm, ruby: '2.7' }
- { os: windows-11-arm, ruby: '3.0' }
- { os: windows-11-arm, ruby: '3.1' }
- { os: windows-11-arm, ruby: '3.2' }
- { os: windows-11-arm, ruby: '3.3' }
# RubyInstaller has no 64-bit builds of 1.9 on Windows
- { os: windows-2022, ruby: '1.9' }
- { os: windows-2025, ruby: '1.9' }
- { os: windows-11-arm, ruby: '1.9' }
# TruffleRuby does not support Windows
- { os: windows-2022, ruby: truffleruby }
- { os: windows-2025, ruby: truffleruby }
- { os: windows-11-arm, ruby: truffleruby }
- { os: windows-2022, ruby: truffleruby-head }
- { os: windows-2025, ruby: truffleruby-head }
- { os: windows-11-arm, ruby: truffleruby-head }
- { os: windows-2022, ruby: truffleruby+graalvm }
- { os: windows-2025, ruby: truffleruby+graalvm }
- { os: windows-11-arm, ruby: truffleruby+graalvm }
- { os: windows-2022, ruby: truffleruby+graalvm-head }
- { os: windows-2025, ruby: truffleruby+graalvm-head }
- { os: windows-11-arm, ruby: truffleruby+graalvm-head }
include: ${{ fromJSON(needs.test-matrix.outputs.matrix) }}
name: ${{ matrix.os }} ${{ matrix.ruby }}
runs-on: ${{ matrix.os }}
@@ -113,7 +61,7 @@ jobs:
run: |
ruby -e "puts 'build compiler: ' + RbConfig::CONFIG.fetch('CC_VERSION_MESSAGE', 'unknown').lines.first"
- name: gcc and ridk version (mingw)
if: startsWith(matrix.os, 'windows')
if: runner.os == 'Windows'
run: |
$abi, $plat = $(ruby -e "STDOUT.write RbConfig::CONFIG['ruby_version'] + ' ' + RUBY_PLATFORM").split(' ')
if ($plat.Contains('mingw')) {
@@ -154,15 +102,15 @@ jobs:
- name: bundle install (bash)
run: bundle install
shell: bash
if: startsWith(matrix.os, 'windows')
if: runner.os == 'Windows'
- name: bundle exec rake --version (bash)
run: bundle exec rake --version
shell: bash
if: startsWith(matrix.os, 'windows')
if: runner.os == 'Windows'
- name: bundle exec rake (bash)
run: bundle exec rake
shell: bash
if: startsWith(matrix.os, 'windows')
if: runner.os == 'Windows'
- name: Test `gem github:` in a Gemfile
run: bundle install
@@ -179,9 +127,9 @@ jobs:
if: "matrix.ruby != 'mingw' && matrix.ruby != 'mswin' && matrix.ruby != 'ucrt'"
- name: which rake
run: which -a rake
if: "!startsWith(matrix.os, 'windows')"
if: runner.os != 'Windows'
- name: where ruby, rake, bundle
if: startsWith(matrix.os, 'windows')
if: runner.os == 'Windows'
run: |
$ErrorActionPreference = 'Continue'
$where = 'ruby', 'rake', 'bundle'
@@ -195,7 +143,7 @@ jobs:
shell: bash
run: echo ~ && bundle install
- name: Windows JRuby
if: startsWith(matrix.os, 'windows') && startsWith(matrix.ruby, 'jruby')
if: runner.os == 'Windows' && startsWith(matrix.ruby, 'jruby')
run: gem install sassc
testDotRubyVersion: