name: MinGW on: push: paths-ignore: - 'doc/**' - '**/man/*' - '**.md' - '**.rdoc' - '**/.document' - '.*.yml' pull_request: paths-ignore: - 'doc/**' - '**/man/*' - '**.md' - '**.rdoc' - '**/.document' - '.*.yml' merge_group: concurrency: group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} permissions: contents: read # Notes: # Actions console encoding causes issues, see test-all & test-spec steps # jobs: make: runs-on: windows-2022 name: ${{ github.workflow }} (${{ matrix.msystem }}) env: MSYSTEM: ${{ matrix.msystem }} MSYS2_ARCH: x86_64 CHOST: 'x86_64-w64-mingw32' CFLAGS: '-march=x86-64 -mtune=generic -O3 -pipe' CXXFLAGS: '-march=x86-64 -mtune=generic -O3 -pipe' CPPFLAGS: '-D_FORTIFY_SOURCE=2 -D__USE_MINGW_ANSI_STDIO=1 -DFD_SETSIZE=2048' LDFLAGS: '-pipe' GITPULLOPTIONS: --no-tags origin ${{ github.ref }} strategy: matrix: include: # To mitigate flakiness of MinGW CI, we test only one runtime that newer MSYS2 uses. # Ruby 3.2 is the first Windows Ruby to use OpenSSL 3.x - msystem: 'UCRT64' baseruby: '3.2' test_task: 'check' test-all-opts: '--name=!/TestObjSpace#test_reachable_objects_during_iteration/' fail-fast: false if: >- ${{!(false || contains(github.event.head_commit.message, '[DOC]') || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - name: Set up Ruby & MSYS2 uses: ruby/setup-ruby@f41e084df884422b269f4c01c3748a9df4431a75 # v1.236.0 with: ruby-version: ${{ matrix.baseruby }} - name: Misc system & package info working-directory: run: | # show where result=true for e in gcc.exe ragel.exe make.exe libcrypto-3-x64.dll libssl-3-x64.dll; do echo ::group::$'\033[93m'$e$'\033[m' where $e || result=false echo ::endgroup:: done # show version for e in gcc ragel make "openssl version"; do case "$e" in *" "*) ;; *) e="$e --version";; esac echo ::group::$'\033[93m'$e$'\033[m' $e || result=false echo ::endgroup:: done # show packages echo ::group::$'\033[93m'Packages$'\033[m' pacman -Qs mingw-w64-ucrt-x86_64-* | sed -n "s,local/mingw-w64-ucrt-x86_64-,,p" echo ::endgroup:: $result - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: sparse-checkout-cone-mode: false sparse-checkout: /.github - uses: ./.github/actions/setup/directories with: srcdir: src builddir: build makeup: true # Set fetch-depth: 10 so that Launchable can receive commits information. fetch-depth: 10 - name: configure run: > ../src/configure --disable-install-doc --prefix=/. --build=$CHOST --host=$CHOST --target=$CHOST - name: make all timeout-minutes: 30 run: make - name: make install run: make DESTDIR=../install install-nodoc - name: Set up Launchable uses: ./.github/actions/launchable/setup with: os: windows-2022 launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }} builddir: build srcdir: src test-tasks: '["test", "test-all", "test-spec"]' continue-on-error: true - name: test timeout-minutes: 30 run: make test shell: cmd env: GNUMAKEFLAGS: '' RUBY_TESTOPTS: '-v --tty=no' if: ${{ matrix.test_task == 'check' || matrix.test_task == 'test' }} - name: test-all timeout-minutes: 45 shell: cmd run: | make ${{ StartsWith(matrix.test_task, 'test/') && matrix.test_task || 'test-all' }} env: RUBY_TESTOPTS: >- --retry --job-status=normal --show-skip --timeout-scale=1.5 ${{ matrix.test-all-opts }} ${{ env.TESTS }} BUNDLER_VERSION: if: ${{ matrix.test_task == 'check' || matrix.test_task == 'test-all' || StartsWith(matrix.test_task, 'test/') }} - name: test-spec timeout-minutes: 10 run: | make ${{ StartsWith(matrix.test_task, 'spec/') && matrix.test_task || 'test-spec' }} shell: cmd if: ${{ matrix.test_task == 'check' || matrix.test_task == 'test-spec' || StartsWith(matrix.test_task, 'spec/') }} - uses: ./src/.github/actions/slack with: label: ${{ matrix.msystem }} / ${{ matrix.test_task }} SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot if: ${{ failure() }} defaults: run: working-directory: build shell: sh