Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
2edfc51
Make Thread::Queue and SizedQueue support compaction
peterzhu2118 Aug 27, 2025
6b7ed4c
ZJIT: Add zjit-test-update for updating insta snapshot
st0012 Aug 27, 2025
89e1847
ZJIT: Update doc about snapshot update
st0012 Aug 27, 2025
d19a1ee
ZJIT: Enable no-fail-fast on zjit-test
st0012 Aug 27, 2025
05fc011
rb_ivar_delete: allow complex transition
byroot Aug 28, 2025
8eb1ed5
Revert "CI: Drop Ubuntu s390x temporarily."
junaruga Aug 27, 2025
dd09d89
CI: ubuntu-ibm.yml: Refactor
junaruga Aug 27, 2025
4fc0db7
CI: ubuntu-ibm.yml: Add GitHub Actions ppc64le case
junaruga Aug 27, 2025
c4c93a0
ZJIT: Refactor stats implementations (#14378)
k0kubun Aug 28, 2025
737ffd3
ZJIT: Add Ractor mode PatchPoint for ivar get/set (#14375)
st0012 Aug 28, 2025
b95700f
ZJIT: Track object embedded bit
tekknolagi Aug 28, 2025
11f115b
ZJIT: Track if object is a T_OBJECT
tekknolagi Aug 28, 2025
ca0ef79
ZJIT: Generate code for HashDup
tekknolagi Aug 28, 2025
ec55b5b
ZJIT: Generate code for ArrayPush
tekknolagi Aug 28, 2025
b108f11
ZJIT: Generate code for ToArray, ToNewArray
tekknolagi Aug 28, 2025
07e28ba
ZJIT: Generate code for DefinedIvar
tekknolagi Aug 28, 2025
8521725
ZJIT: Generate code for ArrayExtend
tekknolagi Aug 28, 2025
7d670ea
ZJIT: Disable profiling in compile_iseq (#14385)
tekknolagi Aug 28, 2025
c2d99d0
ZJIT: Fix a typo
k0kubun Aug 28, 2025
b47ea34
ZJIT: Fix a flipped stat
k0kubun Aug 28, 2025
fa3c23e
ZJIT: Prepare getglobal for non-leaf call (#14387)
st0012 Aug 28, 2025
041450a
rb_ivar_delete: also re-embed T_IMEMO/fields
byroot Aug 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 192 additions & 0 deletions .github/workflows/ubuntu-ibm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
name: Ubuntu IBM
on:
push:
paths-ignore:
- 'doc/**'
- '**/man/*'
- '**.md'
- '**.rdoc'
- '**/.document'
- '.*.yml'
pull_request:
# 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 }}
cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}

permissions:
contents: read

jobs:
make:
strategy:
matrix:
test_task: [check]
configure: ['']
os:
- ubuntu-24.04-ppc64le
- ubuntu-24.04-s390x
# Add a x86_64 case to make this CI pass on fork repositories.
- ubuntu-24.04
# The ppc64le/s390x runners work only in the registered repositories.
# They don't work in forked repositories.
# https://github.com/IBM/actionspz/blob/main/docs/FAQ.md#what-about-forked-repos
upstream:
- ${{ github.repository == 'ruby/ruby' }}
exclude:
- os: ubuntu-24.04-ppc64le
upstream: false
- os: ubuntu-24.04-s390x
upstream: false
- os: ubuntu-24.04
upstream: true
fail-fast: false

env:
GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
RUBY_DEBUG: ci

runs-on: ${{ matrix.os }}

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_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
)}}

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
sparse-checkout-cone-mode: false
sparse-checkout: /.github

- uses: ./.github/actions/setup/ubuntu

- uses: ruby/setup-ruby@a9bfc2ecf3dd40734a9418f89a7e9d484c32b990 # v1.248.0
with:
ruby-version: '3.1'
bundler: none
if: ${{ !endsWith(matrix.os, 'ppc64le') && !endsWith(matrix.os, 's390x') }}

# Avoid possible test failures with the zlib applying the following patch
# on s390x CPU architecture.
# https://github.com/madler/zlib/pull/410
- name: Disable DFLTCC
run: echo "DFLTCC=0" >> $GITHUB_ENV
working-directory:
if: ${{ endsWith(matrix.os, 's390x') }}

# A temporary workaround: Set HOME env to pass the step
# ./.github/actions/setup/directories.
# https://github.com/IBM/actionspz/issues/30
- name: Set HOME env
run: |
echo "HOME: #{HOME}"
echo "HOME=$(ls -d ~)" >> $GITHUB_ENV
working-directory:
if: ${{ endsWith(matrix.os, 'ppc64le') || endsWith(matrix.os, 's390x') }}

- uses: ./.github/actions/setup/directories
with:
srcdir: src
builddir: build
makeup: true
clean: true
dummy-files: ${{ matrix.test_task == 'check' }}
# Set fetch-depth: 10 so that Launchable can receive commits information.
fetch-depth: 10

- name: Run configure
env:
configure: ${{ matrix.configure }}
# Don't set cppflags=-DRUBY_DEBUG on ppc64le, due to some Ractor tests
# failing in the case.
# https://bugs.ruby-lang.org/issues/21534
run: |
if [ "$(uname -m)" != "ppc64le" ]; then
configure="${configure:-cppflags=-DRUBY_DEBUG}"
fi
../src/configure -C --disable-install-doc ${configure}

- run: make

- 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.configure }}
launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
builddir: build
srcdir: src
continue-on-error: true
timeout-minutes: 3

# A temporary workaround: Skip user ground id test
# There is a mismatch between the group IDs of "id -g" and C function
# getpwuid(uid_t uid) pw_gid.
# https://github.com/IBM/actionspz/issues/31
- name: Skip user group id test
run: |
sed -i.orig '/^ it "returns user group id" do/a\ skip' \
../src/spec/ruby/library/etc/struct_passwd_spec.rb
diff -u ../src/spec/ruby/library/etc/struct_passwd_spec.rb{.orig,} || :
if: ${{ endsWith(matrix.os, 'ppc64le') || endsWith(matrix.os, 's390x') }}

- name: make ${{ matrix.test_task }}
run: |
test -n "${LAUNCHABLE_STDOUT}" && exec 1> >(tee "${LAUNCHABLE_STDOUT}")
test -n "${LAUNCHABLE_STDERR}" && exec 2> >(tee "${LAUNCHABLE_STDERR}")

make -s ${{ matrix.test_task }} \
${TESTS:+TESTS="$TESTS"} \
${{ !contains(matrix.test_task, 'bundle') && 'RUBYOPT=-w' || '' }}
timeout-minutes: ${{ matrix.timeout || 40 }}
env:
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="${TESTS//-n!\//-n/}"
env:
GNUMAKEFLAGS: ''
RUBY_TESTOPTS: '-v --tty=no'
if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}
continue-on-error: ${{ matrix.continue-on-skipped_tests || false }}

- name: test-pc
run: |
DESTDIR=${RUNNER_TEMP-${TMPDIR-/tmp}}/installed
make test-pc "DESTDIR=$DESTDIR"

- uses: ./.github/actions/slack
with:
label: ${{ matrix.test_task }} ${{ matrix.configure }}
SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
if: ${{ failure() }}

defaults:
run:
working-directory: build
26 changes: 20 additions & 6 deletions doc/zjit.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ in a way that can be easily shared with other team members.

## Testing

Make sure you have a `--enable-zjit=dev` build, and run `brew install cargo-nextest` first.
Make sure you have a `--enable-zjit=dev` build, and install the following tools:
- `brew install cargo-nextest` - Required for running tests
- `cargo install cargo-insta` - Required for updating snapshots

### make zjit-check

Expand All @@ -38,7 +40,7 @@ make zjit-check

### make zjit-test

This command runs Rust unit tests.
This command runs Rust unit tests using `insta` for snapshot testing.

```
make zjit-test
Expand All @@ -50,12 +52,24 @@ You can also run a single test case by specifying the function name:
make zjit-test ZJIT_TESTS=test_putobject
```

If you expect that your changes cause tests to fail and they do, you can have
`expect-test` fix the expected value for you by putting `UPDATE_EXPECT=1`
before your test command, like so:
#### Snapshot Testing

ZJIT uses [insta](https://insta.rs/) for snapshot testing. When tests fail due to snapshot mismatches, pending snapshots are created. The test command will notify you if there are pending snapshots:

```
Pending snapshots found. Accept with: make zjit-test-update
```

To update/accept all the snapshot changes:

```
make zjit-test-update
```

You can also review snapshot changes interactively one by one:

```
UPDATE_EXPECT=1 make zjit-test ZJIT_TESTS=test_putobject
cd zjit && cargo insta review
```

Test changes will be reviewed alongside code changes.
Expand Down
Loading