diff options
Diffstat (limited to '.github/workflows/macos.yml')
| -rw-r--r-- | .github/workflows/macos.yml | 207 |
1 files changed, 144 insertions, 63 deletions
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index aa162565bd..4f1807121f 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -3,17 +3,15 @@ on: push: paths-ignore: - 'doc/**' - - '**/man' + - '**/man/*' - '**.md' - '**.rdoc' - '**/.document' + - '.*.yml' pull_request: - paths-ignore: - - 'doc/**' - - '**/man' - - '**.md' - - '**.rdoc' - - '**/.document' + # Do not use paths-ignore for required status checks + # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks + merge_group: concurrency: group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} @@ -26,84 +24,167 @@ jobs: make: strategy: matrix: - test_task: ["check"] # "test-bundler-parallel", "test-bundled-gems" - os: - - macos-11 - - macos-12 + include: + - test_task: check + os: macos-26 + - test_task: check + os: macos-15 + configure_args: '--with-gcc=gcc-14' + - test_task: check + os: macos-26 + configure_args: '--with-jemalloc --with-opt-dir=$(brew --prefix jemalloc)' + - test_task: check + os: macos-26 + configure_args: '--with-gmp' + - test_task: test-all + test_opts: --repeat-count=2 + os: macos-26 + - test_task: test-bundler-parallel + os: macos-26 + - test_task: test-bundled-gems + os: macos-26 + - test_task: check + os: macos-15 + - test_task: check + os: macos-15-intel + - test_task: check + os: macos-14 fail-fast: false + env: - GITPULLOPTIONS: --no-tags origin ${{github.ref}} + GITPULLOPTIONS: --no-tags origin ${{ github.ref }} + runs-on: ${{ matrix.os }} - if: ${{ !contains(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} + + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event.pull_request.user.login == 'dependabot[bot]') + )}} + steps: - - run: mkdir build - working-directory: - - name: git config - run: | - git config --global advice.detachedHead 0 - git config --global init.defaultBranch garbage - - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - with: - path: src - - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: - path: src/.downloaded-cache - key: downloaded-cache + sparse-checkout-cone-mode: false + sparse-checkout: /.github + persist-credentials: false + - name: Install libraries + uses: ./.github/actions/setup/macos + + - uses: ./.github/actions/setup/directories + with: + srcdir: src + builddir: build + makeup: true + clean: true + dummy-files: ${{ matrix.test_task == 'check' }} + # Set fetch-depth: 0 so that Launchable can receive commits information. + fetch-depth: 10 + + - name: make sure that kern.coredump=1 run: | - brew upgrade - brew install gmp libffi openssl@1.1 zlib autoconf automake libtool readline bison - working-directory: src - - name: Set ENV + sysctl -n kern.coredump + sudo sysctl -w kern.coredump=1 + sudo chmod -R +rwx /cores/ + + - name: Delete unused SDKs + # To free up disk space to not run out during the run run: | - echo "MAKEFLAGS=-j$((1 + $(sysctl -n hw.activecpu)))" >> $GITHUB_ENV - echo "PATH="/usr/local/opt/bison/bin:$PATH"" >> $GITHUB_ENV - for lib in openssl@1.1 readline; do - CONFIGURE_ARGS="${CONFIGURE_ARGS:+$CONFIGURE_ARGS }--with-${lib%@*}-dir=$(brew --prefix $lib)" - done - echo CONFIGURE_ARGS="${CONFIGURE_ARGS}" >> $GITHUB_ENV - - run: ./autogen.sh - working-directory: src + sudo rm -rf ~/.dotnet + sudo rm -rf /Library/Android + sudo rm -rf /Library/Developer/CoreSimulator + continue-on-error: true + - name: Run configure - run: ../src/configure -C --disable-install-doc - - run: make incs + run: ../src/configure -C --disable-install-doc ${ruby_configure_args} ${{ matrix.configure_args }} + - run: make prepare-gems if: ${{ matrix.test_task == 'test-bundled-gems' }} + - run: make - - run: make leaked-globals - if: ${{ matrix.test_task == 'check' }} + + - run: make hello + + - name: runirb + run: | + echo IRB::VERSION | make runirb RUNOPT="-- -f" + + - name: Set test options for skipped tests + run: | + set -x + TESTS="$(echo "${{ matrix.skipped_tests }}" | sed 's| |$$/ -n!/|g;s|^|-n!/|;s|$|$$/|')" + echo "TESTS=${TESTS}" >> $GITHUB_ENV + if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }} + + - name: Set up Launchable + id: launchable + uses: ./.github/actions/launchable/setup + with: + os: ${{ matrix.os }} + test-opts: ${{ matrix.test_opts }} + launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }} + builddir: build + srcdir: src + continue-on-error: true + timeout-minutes: 3 + + - name: Set extra test options + run: | + echo "TESTS=$TESTS ${{ matrix.test_opts }}" >> $GITHUB_ENV + echo "RUBY_TEST_TIMEOUT_SCALE=10" >> $GITHUB_ENV # With --repeat-count=2, flaky test by timeout occurs frequently for some reason + if: matrix.test_opts + - name: make ${{ matrix.test_task }} run: | - make -s ${{ matrix.test_task }} ${TESTS:+TESTS=`echo "$TESTS" | sed 's| |$$/ -n!/|g;s|^|-n!/|;s|$|$$/|'`} - timeout-minutes: 40 + test -n "${LAUNCHABLE_STDOUT}" && exec 1> >(tee "${LAUNCHABLE_STDOUT}") + test -n "${LAUNCHABLE_STDERR}" && exec 2> >(tee "${LAUNCHABLE_STDERR}") + + ulimit -c unlimited + make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} + timeout-minutes: 90 env: - RUBY_TESTOPTS: "-q --tty=no" - TESTS: ${{ matrix.test_task == 'check' && matrix.skipped_tests || '' }} - TEST_BUNDLED_GEMS_ALLOW_FAILURES: "" - PRECHECK_BUNDLED_GEMS: "no" + RUBY_TESTOPTS: '-q --tty=no' + TEST_BUNDLED_GEMS_ALLOW_FAILURES: '' + PRECHECK_BUNDLED_GEMS: 'no' + LAUNCHABLE_STDOUT: ${{ steps.launchable.outputs.stdout_report_path }} + LAUNCHABLE_STDERR: ${{ steps.launchable.outputs.stderr_report_path }} + - name: make skipped tests run: | - make -s test-all TESTS=`echo "$TESTS" | sed 's| |$$/ -n/|g;s|^|-n/|;s|$|$$/|'` + make -s test-all TESTS="${TESTS//-n!\//-n/}" env: - GNUMAKEFLAGS: "" - RUBY_TESTOPTS: "-v --tty=no" - TESTS: ${{ matrix.skipped_tests }} - PRECHECK_BUNDLED_GEMS: "no" - if: ${{ matrix.test_task == 'check' && matrix.skipped_tests != '' }} + GNUMAKEFLAGS: '' + RUBY_TESTOPTS: '-v --tty=no' + PRECHECK_BUNDLED_GEMS: 'no' + if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }} continue-on-error: ${{ matrix.continue-on-skipped_tests || false }} - - uses: ruby/action-slack@0bd85c72233cdbb6a0fe01d37aaeff1d21b5fce1 # v3.2.1 + + - name: CAPI extensions + uses: ./.github/actions/capiext with: - payload: | - { - "ci": "GitHub Actions", - "env": "${{ matrix.os }} / ${{ matrix.test_task }}${{ matrix.configure }}", - "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", - "commit": "${{ github.sha }}", - "branch": "${{ github.ref_name }}" - } + builddir: build env: + RUBY_TESTOPTS: '-v --tty=no' + if: ${{ contains(matrix.extra_checks, 'capi') }} + + - uses: ./.github/actions/slack + with: + label: ${{ matrix.os }} / ${{ matrix.test_task }} SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot - if: ${{ failure() && github.event_name == 'push' }} + if: ${{ failure() }} + + result: + if: ${{ always() }} + name: ${{ github.workflow }} result + runs-on: ubuntu-latest + needs: [make] + steps: + - run: exit 1 + working-directory: + if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} defaults: run: |
