2023-10-12 17:03:47 +03:00
|
|
|
name: YJIT macOS Arm64
|
|
|
|
on:
|
|
|
|
push:
|
|
|
|
paths-ignore:
|
|
|
|
- 'doc/**'
|
|
|
|
- '**/man'
|
|
|
|
- '**.md'
|
|
|
|
- '**.rdoc'
|
|
|
|
- '**/.document'
|
|
|
|
pull_request:
|
2023-10-13 03:30:04 +03:00
|
|
|
# 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
|
2023-10-12 17:03:47 +03:00
|
|
|
merge_group:
|
|
|
|
paths-ignore:
|
|
|
|
- 'doc/**'
|
|
|
|
- '**/man'
|
|
|
|
- '**.md'
|
|
|
|
- '**.rdoc'
|
|
|
|
- '**/.document'
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
jobs:
|
|
|
|
make:
|
|
|
|
strategy:
|
|
|
|
matrix:
|
|
|
|
include:
|
|
|
|
- test_task: 'check'
|
|
|
|
configure: '--enable-yjit'
|
|
|
|
yjit_opts: '--yjit'
|
|
|
|
- test_task: 'check'
|
|
|
|
configure: '--enable-yjit=dev'
|
|
|
|
yjit_opts: '--yjit-call-threshold=1 --yjit-verify-ctx'
|
|
|
|
fail-fast: false
|
|
|
|
|
|
|
|
env:
|
|
|
|
GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
|
|
|
|
RUN_OPTS: ${{ matrix.yjit_opts }}
|
|
|
|
|
|
|
|
runs-on: macos-arm-oss
|
|
|
|
|
|
|
|
if: >-
|
2023-10-13 16:23:12 +03:00
|
|
|
${{github.repository == 'ruby/ruby' &&
|
|
|
|
!(false
|
2023-10-12 17:03:47 +03:00
|
|
|
|| contains(github.event.head_commit.message, '[DOC]')
|
|
|
|
|| contains(github.event.pull_request.title, '[DOC]')
|
|
|
|
|| contains(github.event.pull_request.labels.*.name, 'Documentation')
|
|
|
|
|| (github.event_name == 'push' && github.actor == 'dependabot[bot]')
|
|
|
|
)}}
|
|
|
|
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
|
|
|
|
with:
|
|
|
|
sparse-checkout-cone-mode: false
|
|
|
|
sparse-checkout: /.github
|
|
|
|
|
|
|
|
- name: Install libraries
|
|
|
|
uses: ./.github/actions/setup/macos
|
|
|
|
|
|
|
|
- uses: ./.github/actions/setup/directories
|
|
|
|
with:
|
|
|
|
srcdir: src
|
|
|
|
builddir: build
|
|
|
|
makeup: true
|
|
|
|
dummy-files: ${{ matrix.test_task == 'check' }}
|
|
|
|
|
|
|
|
- name: Run configure
|
|
|
|
run: ../src/configure -C --disable-install-doc ${{ matrix.configure }}
|
|
|
|
|
|
|
|
- run: make prepare-gems
|
|
|
|
if: ${{ matrix.test_task == 'test-bundled-gems' }}
|
|
|
|
|
|
|
|
- run: make
|
|
|
|
|
|
|
|
- name: Enable YJIT through ENV
|
|
|
|
run: echo "RUBY_YJIT_ENABLE=1" >> $GITHUB_ENV
|
|
|
|
|
|
|
|
- name: make ${{ matrix.test_task }}
|
|
|
|
run: |
|
|
|
|
make -s ${{ matrix.test_task }} ${TESTS:+TESTS=`echo "$TESTS" | sed 's| |$$/ -n!/|g;s|^|-n!/|;s|$|$$/|'`}
|
|
|
|
timeout-minutes: 60
|
|
|
|
env:
|
|
|
|
RUBY_TESTOPTS: '-q --tty=no'
|
|
|
|
TESTS: ${{ matrix.test_task == 'check' && matrix.skipped_tests || '' }}
|
|
|
|
TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
|
|
|
|
PRECHECK_BUNDLED_GEMS: 'no'
|
|
|
|
|
|
|
|
- name: make skipped tests
|
|
|
|
run: |
|
|
|
|
make -s test-all TESTS=`echo "$TESTS" | sed 's| |$$/ -n/|g;s|^|-n/|;s|$|$$/|'`
|
|
|
|
env:
|
|
|
|
GNUMAKEFLAGS: ''
|
|
|
|
RUBY_TESTOPTS: '-v --tty=no'
|
|
|
|
TESTS: ${{ matrix.skipped_tests }}
|
|
|
|
PRECHECK_BUNDLED_GEMS: 'no'
|
|
|
|
if: ${{ matrix.test_task == 'check' && matrix.skipped_tests != '' }}
|
|
|
|
continue-on-error: ${{ matrix.continue-on-skipped_tests || false }}
|
|
|
|
|
|
|
|
- uses: ./.github/actions/slack
|
|
|
|
with:
|
|
|
|
label: ${{ matrix.test_task }} ${{ matrix.configure }} ${{ matrix.yjit_opts }}
|
|
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
|
|
|
|
if: ${{ failure() }}
|
|
|
|
|
Add result job for required status checks
We've been using matrix jobs as required status checks. However, when
[DOC] pull requests are created, the matrix content and templated
variables are not executed, which results in changing the name of the
matrix jobs. Then required status checks are considered missing because
of the different names. So we can't merge [DOC] PRs right now.
This `result` is a known technique to check the composite status of
matrix jobs. https://github.com/orgs/community/discussions/26822
The `result` job is not only a non-matrix job, which doesn't have the
above problem, but also an independent job that is not skipped by [DOC].
`needs` works even if all dependent jobs are skipped, so this trick
works well.
This is also useful when we want to change the content of matrix. When
we change one, we usually have to update branches of old pull requests
so that they get newly required jobs. However, with this method, only
`result` jobs are required, so you don't need to update old pull
requests.
I still don't like the fact that now you cannot visualize which matrix
jobs are "Required", but this seems like the best compromise.
2023-10-15 07:09:08 +03:00
|
|
|
result:
|
|
|
|
if: ${{ always() }}
|
2023-10-15 07:52:33 +03:00
|
|
|
name: ${{ github.workflow }} result
|
Add result job for required status checks
We've been using matrix jobs as required status checks. However, when
[DOC] pull requests are created, the matrix content and templated
variables are not executed, which results in changing the name of the
matrix jobs. Then required status checks are considered missing because
of the different names. So we can't merge [DOC] PRs right now.
This `result` is a known technique to check the composite status of
matrix jobs. https://github.com/orgs/community/discussions/26822
The `result` job is not only a non-matrix job, which doesn't have the
above problem, but also an independent job that is not skipped by [DOC].
`needs` works even if all dependent jobs are skipped, so this trick
works well.
This is also useful when we want to change the content of matrix. When
we change one, we usually have to update branches of old pull requests
so that they get newly required jobs. However, with this method, only
`result` jobs are required, so you don't need to update old pull
requests.
I still don't like the fact that now you cannot visualize which matrix
jobs are "Required", but this seems like the best compromise.
2023-10-15 07:09:08 +03:00
|
|
|
runs-on: macos-arm-oss
|
|
|
|
needs: [make]
|
|
|
|
steps:
|
|
|
|
- run: exit 1
|
|
|
|
if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
|
|
|
|
|
2023-10-12 17:03:47 +03:00
|
|
|
defaults:
|
|
|
|
run:
|
|
|
|
working-directory: build
|