Skip to content

Fix concurrent escape bug. Comment about over spilling #13088

Fix concurrent escape bug. Comment about over spilling

Fix concurrent escape bug. Comment about over spilling #13088

Workflow file for this run

# Some tests depending on this name 'Compilations' via $GITHUB_WORKFLOW. Make sure to update such tests when renaming this workflow.
name: Compilations
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
env:
# Work around transient crates.io download failures (curl HTTP/2 framing / partial transfer)
CARGO_NET_RETRY: 10
CARGO_HTTP_MULTIPLEXING: false
# Each job is split so that they roughly take 30min to run through.
jobs:
compile-if:
name: 'omnibus compilations, source'
runs-on: ubuntu-latest
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]')
)}}
timeout-minutes: 10
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github, persist-credentials: false }
# Set fetch-depth: 10 so that Launchable can receive commits information.
- { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
- name: Archive sources
working-directory: ${{ github.workspace }}
# `.downloaded-cache` will be restored from the common cache
run: >-
tar -cf "${RUNNER_TEMP}/compilation-source.tar"
--exclude='src/.downloaded-cache'
src
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: compilation-source
path: ${{ runner.temp }}/compilation-source.tar
compression-level: 5
overwrite: true
retention-days: 1
compile:
name: 'omnibus compilations, #${{ matrix.shard }}'
needs: compile-if
if: ${{ needs.compile-if.result == 'success' }}
strategy:
fail-fast: false
max-parallel: 12
matrix:
shard:
- '01'
- '02'
- '03'
- '04'
- '05'
- '06'
- '07'
- '08'
- '09'
- '10'
- '11'
- '12'
- '13'
- '14'
- '15'
- '16'
- '17'
- '18'
- '19'
- '20'
- '21'
- '22'
- '23'
- '24'
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github, persist-credentials: false }
- uses: './.github/actions/setup/compilation-source'
- name: 'clang 23 LTO'
uses: &compilers './.github/actions/compilers'
with:
tag: clang-23
with_gcc: 'clang-23 -flto=auto'
optflags: '-O2'
timeout-minutes: 30
if: ${{ matrix.shard == '20' }}
- { uses: *compilers, name: 'clang 23', with: { tag: 'clang-23' }, timeout-minutes: 8, if: "${{ matrix.shard == '20' }}" }
- { uses: *compilers, name: 'clang 22', with: { tag: 'clang-22' }, timeout-minutes: 8, if: "${{ matrix.shard == '05' }}" }
- { uses: *compilers, name: 'clang 21', with: { tag: 'clang-21' }, timeout-minutes: 8, if: "${{ matrix.shard == '05' }}" }
- { uses: *compilers, name: '-O0', with: { optflags: '-O0 -march=x86-64 -mtune=generic' }, timeout-minutes: 8, if: "${{ matrix.shard == '05' }}" }
- { uses: *compilers, name: 'YJIT_FORCE_ENABLE', with: { cppflags: '-DYJIT_FORCE_ENABLE' }, timeout-minutes: 8, if: "${{ matrix.shard == '05' }}" }
- name: 'GCC 15 LTO'
uses: *compilers
with:
tag: gcc-15
with_gcc: 'gcc-15 -flto=auto -ffat-lto-objects -Werror=lto-type-mismatch'
optflags: '-O2'
enable_shared: false
timeout-minutes: 10
if: ${{ matrix.shard == '21' }}
- { uses: *compilers, name: 'GCC 15', with: { tag: 'gcc-15' }, timeout-minutes: 8, if: "${{ matrix.shard == '21' }}" }
- { uses: *compilers, name: 'GCC 14', with: { tag: 'gcc-14' }, timeout-minutes: 8, if: "${{ matrix.shard == '13' }}" }
- { uses: *compilers, name: 'GCC 13', with: { tag: 'gcc-13' }, timeout-minutes: 8, if: "${{ matrix.shard == '13' }}" }
- { uses: *compilers, name: 'GCC 12', with: { tag: 'gcc-12' }, timeout-minutes: 8, if: "${{ matrix.shard == '13' }}" }
- { uses: *compilers, name: 'UNIVERSAL_PARSER', with: { cppflags: '-DUNIVERSAL_PARSER' }, timeout-minutes: 8, if: "${{ matrix.shard == '13' }}" }
- { uses: *compilers, name: 'clang 20', with: { tag: 'clang-20' }, timeout-minutes: 8, if: "${{ matrix.shard == '14' }}" }
- { uses: *compilers, name: 'clang 19', with: { tag: 'clang-19' }, timeout-minutes: 8, if: "${{ matrix.shard == '14' }}" }
- { uses: *compilers, name: 'clang 18', with: { tag: 'clang-18' }, timeout-minutes: 8, if: "${{ matrix.shard == '14' }}" }
- { uses: *compilers, name: 'clang 17', with: { tag: 'clang-17' }, timeout-minutes: 8, if: "${{ matrix.shard == '04' }}" }
- { uses: *compilers, name: 'clang 16', with: { tag: 'clang-16' }, timeout-minutes: 8, if: "${{ matrix.shard == '04' }}" }
- { uses: *compilers, name: 'clang 15', with: { tag: 'clang-15' }, timeout-minutes: 8, if: "${{ matrix.shard == '04' }}" }
- { uses: *compilers, name: 'clang 14', with: { tag: 'clang-14' }, timeout-minutes: 8, if: "${{ matrix.shard == '04' }}" }
- { uses: *compilers, name: 'clang 13', with: { tag: 'clang-13' }, timeout-minutes: 8, if: "${{ matrix.shard == '07' }}" }
- { uses: *compilers, name: 'clang 12', with: { tag: 'clang-12' }, timeout-minutes: 8, if: "${{ matrix.shard == '07' }}" }
- { uses: *compilers, name: 'clang 11', with: { tag: 'clang-11' }, timeout-minutes: 8, if: "${{ matrix.shard == '07' }}" }
- { uses: *compilers, name: 'clang 10', with: { tag: 'clang-10' }, timeout-minutes: 8, if: "${{ matrix.shard == '07' }}" }
# llvm-objcopy<=9 doesn't have --wildcard. It compiles, but leaves Rust symbols in libyjit.o and fail `make test-leaked-globals`.
- { uses: *compilers, name: 'clang 9', with: { tag: 'clang-9', append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 8, if: "${{ matrix.shard == '23' }}" }
- { uses: *compilers, name: 'clang 8', with: { tag: 'clang-8', append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 8, if: "${{ matrix.shard == '23' }}" }
- { uses: *compilers, name: 'clang 7', with: { tag: 'clang-7', append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 8, if: "${{ matrix.shard == '23' }}" }
# -Wno-strict-prototypes is necessary with clang-15 or newer, since
# older autoconf prior to 2.72 generate functions without prototype.
- { uses: *compilers, name: 'C99', with: { CFLAGS: '-std=c99 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' }, timeout-minutes: 8, if: "${{ matrix.shard == '10' }}" }
- { uses: *compilers, name: 'C11', with: { CFLAGS: '-std=c11 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' }, timeout-minutes: 8, if: "${{ matrix.shard == '10' }}" }
- { uses: *compilers, name: 'C17', with: { CFLAGS: '-std=c17 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' }, timeout-minutes: 8, if: "${{ matrix.shard == '10' }}" }
- { uses: *compilers, name: 'C23', with: { CFLAGS: '-std=c2x -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' }, timeout-minutes: 8, if: "${{ matrix.shard == '10' }}" }
- { uses: *compilers, name: 'C++98', with: { CXXFLAGS: '-std=c++98 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 8, if: "${{ matrix.shard == '22' }}" }
- { uses: *compilers, name: 'C++11', with: { CXXFLAGS: '-std=c++11 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 8, if: "${{ matrix.shard == '22' }}" }
- { uses: *compilers, name: 'C++14', with: { CXXFLAGS: '-std=c++14 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 8, if: "${{ matrix.shard == '22' }}" }
- { uses: *compilers, name: 'C++20', with: { CXXFLAGS: '-std=c++20 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 8, if: "${{ matrix.shard == '08' }}" }
- { uses: *compilers, name: 'C++23', with: { CXXFLAGS: '-std=c++23 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 8, if: "${{ matrix.shard == '08' }}" }
- { uses: *compilers, name: 'C++26', with: { CXXFLAGS: '-std=c++26 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 8, if: "${{ matrix.shard == '08' }}" }
- { uses: *compilers, name: 'gmp', with: { append_configure: '--with-gmp', test_all: 'ruby/test_bignum.rb', test_spec: '/github/workspace/src/spec/ruby/core/integer' }, timeout-minutes: 8, if: "${{ matrix.shard == '08' }}" }
- { uses: *compilers, name: 'jemalloc', with: { append_configure: '--with-jemalloc' }, timeout-minutes: 8, if: "${{ matrix.shard == '12' }}" }
- { uses: *compilers, name: 'valgrind', with: { append_configure: '--with-valgrind' }, timeout-minutes: 8, if: "${{ matrix.shard == '12' }}" }
- { uses: *compilers, name: 'coroutine=ucontext', with: { append_configure: '--with-coroutine=ucontext' }, timeout-minutes: 8, if: "${{ matrix.shard == '12' }}" }
- { uses: *compilers, name: 'coroutine=pthread', with: { append_configure: '--with-coroutine=pthread' }, timeout-minutes: 8, if: "${{ matrix.shard == '12' }}" }
- { uses: *compilers, name: 'disable-jit', with: { append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 8, if: "${{ matrix.shard == '03' }}" }
- { uses: *compilers, name: 'disable-yjit', with: { append_configure: '--disable-yjit' }, timeout-minutes: 8, if: "${{ matrix.shard == '03' }}" }
- { uses: *compilers, name: 'disable-zjit', with: { append_configure: '--disable-zjit' }, timeout-minutes: 8, if: "${{ matrix.shard == '03' }}" }
- { uses: *compilers, name: 'disable-dln', with: { append_configure: '--disable-dln' }, timeout-minutes: 8, if: "${{ matrix.shard == '03' }}" }
- { uses: *compilers, name: 'disable-rubygems', with: { append_configure: '--disable-rubygems' }, timeout-minutes: 8, if: "${{ matrix.shard == '03' }}" }
- { uses: *compilers, name: 'RUBY_DEVEL', with: { append_configure: '--enable-devel' }, timeout-minutes: 8, if: "${{ matrix.shard == '06' }}" }
- { uses: *compilers, name: 'OPT_THREADED_CODE=0', with: { cppflags: '-DOPT_THREADED_CODE=0' }, timeout-minutes: 8, if: "${{ matrix.shard == '06' }}" }
- { uses: *compilers, name: 'OPT_THREADED_CODE=1', with: { cppflags: '-DOPT_THREADED_CODE=1' }, timeout-minutes: 8, if: "${{ matrix.shard == '06' }}" }
- { uses: *compilers, name: 'OPT_THREADED_CODE=2', with: { cppflags: '-DOPT_THREADED_CODE=2' }, timeout-minutes: 8, if: "${{ matrix.shard == '06' }}" }
- { uses: *compilers, name: 'NDEBUG', with: { cppflags: '-DNDEBUG' }, timeout-minutes: 8, if: "${{ matrix.shard == '18' }}" }
- { uses: *compilers, name: 'RUBY_DEBUG', with: { cppflags: '-DRUBY_DEBUG' }, timeout-minutes: 8, if: "${{ matrix.shard == '18' }}" }
- { uses: *compilers, name: 'CCAN_LIST_DEBUG', with: { cppflags: '-DCCAN_LIST_DEBUG' }, timeout-minutes: 8, if: "${{ matrix.shard == '18' }}" }
- { uses: *compilers, name: 'CPDEBUG=-1', with: { cppflags: '-DCPDEBUG=-1' }, timeout-minutes: 8, if: "${{ matrix.shard == '01' }}" }
- { uses: *compilers, name: 'ENC_DEBUG', with: { cppflags: '-DENC_DEBUG' }, timeout-minutes: 8, if: "${{ matrix.shard == '01' }}" }
- { uses: *compilers, name: 'VM_DEBUG_BP_CHECK', with: { cppflags: '-DVM_DEBUG_BP_CHECK' }, timeout-minutes: 8, if: "${{ matrix.shard == '01' }}" }
- { uses: *compilers, name: 'VM_DEBUG_VERIFY_METHOD_CACHE', with: { cppflags: '-DVM_DEBUG_VERIFY_METHOD_CACHE' }, timeout-minutes: 8, if: "${{ matrix.shard == '01' }}" }
- { uses: *compilers, name: 'ID_TABLE_DEBUG', with: { cppflags: '-DID_TABLE_DEBUG' }, timeout-minutes: 8, if: "${{ matrix.shard == '24' }}" }
- { uses: *compilers, name: 'SYMBOL_DEBUG', with: { cppflags: '-DSYMBOL_DEBUG' }, timeout-minutes: 8, if: "${{ matrix.shard == '24' }}" }
- { uses: *compilers, name: 'RGENGC_CHECK_MODE', with: { cppflags: '-DRGENGC_CHECK_MODE' }, timeout-minutes: 8, if: "${{ matrix.shard == '19' }}" }
- { uses: *compilers, name: 'USE_EMBED_CI=0', with: { cppflags: '-DUSE_EMBED_CI=0' }, timeout-minutes: 8, if: "${{ matrix.shard == '19' }}" }
- { uses: *compilers, name: 'USE_FLONUM=0', with: { cppflags: '-DUSE_FLONUM=0', append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 8, if: "${{ matrix.shard == '19' }}" }
- { uses: *compilers, name: 'USE_LAZY_LOAD', with: { cppflags: '-DUSE_LAZY_LOAD' }, timeout-minutes: 8, if: "${{ matrix.shard == '09' }}" }
- { uses: *compilers, name: 'USE_RUBY_DEBUG_LOG=1', with: { cppflags: '-DUSE_RUBY_DEBUG_LOG=1' }, timeout-minutes: 8, if: "${{ matrix.shard == '09' }}" }
- { uses: *compilers, name: 'USE_DEBUG_COUNTER', with: { cppflags: '-DUSE_DEBUG_COUNTER=1' }, timeout-minutes: 8, if: "${{ matrix.shard == '09' }}" }
- { uses: *compilers, name: 'SHARABLE_MIDDLE_SUBSTRING', with: { cppflags: '-DSHARABLE_MIDDLE_SUBSTRING=1' }, timeout-minutes: 8, if: "${{ matrix.shard == '09' }}" }
- { uses: *compilers, name: 'DEBUG_FIND_TIME_NUMGUESS', with: { cppflags: '-DDEBUG_FIND_TIME_NUMGUESS' }, timeout-minutes: 8, if: "${{ matrix.shard == '15' }}" }
- { uses: *compilers, name: 'DEBUG_INTEGER_PACK', with: { cppflags: '-DDEBUG_INTEGER_PACK' }, timeout-minutes: 8, if: "${{ matrix.shard == '15' }}" }
- { uses: *compilers, name: 'RGENGC_PROFILE', with: { cppflags: '-DRGENGC_PROFILE' }, timeout-minutes: 8, if: "${{ matrix.shard == '15' }}" }
- { uses: *compilers, name: 'GC_DEBUG', with: { cppflags: '-DGC_DEBUG' }, timeout-minutes: 8, if: "${{ matrix.shard == '17' }}" }
- { uses: *compilers, name: 'GC_ENABLE_LAZY_SWEEP=0', with: { cppflags: '-DGC_ENABLE_LAZY_SWEEP=0' }, timeout-minutes: 8, if: "${{ matrix.shard == '17' }}" }
- { uses: *compilers, name: 'GC_PROFILE_DETAIL_MEMORY', with: { cppflags: '-DGC_PROFILE_DETAIL_MEMORY' }, timeout-minutes: 8, if: "${{ matrix.shard == '17' }}" }
- { uses: *compilers, name: 'GC_PROFILE_MORE_DETAIL', with: { cppflags: '-DGC_PROFILE_MORE_DETAIL' }, timeout-minutes: 8, if: "${{ matrix.shard == '11' }}" }
- { uses: *compilers, name: 'MALLOC_ALLOCATED_SIZE_CHECK', with: { cppflags: '-DMALLOC_ALLOCATED_SIZE_CHECK' }, timeout-minutes: 8, if: "${{ matrix.shard == '11' }}" }
- { uses: *compilers, name: 'RGENGC_ESTIMATE_OLDMALLOC', with: { cppflags: '-DRGENGC_ESTIMATE_OLDMALLOC' }, timeout-minutes: 8, if: "${{ matrix.shard == '11' }}" }
- { uses: *compilers, name: 'C++17', with: { CXXFLAGS: '-std=c++17 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 8, if: "${{ matrix.shard == '11' }}" }
- { uses: *compilers, name: 'GCC 11', with: { tag: 'gcc-11' }, timeout-minutes: 8, if: "${{ matrix.shard == '16' }}" }
- { uses: *compilers, name: 'GCC 10', with: { tag: 'gcc-10' }, timeout-minutes: 8, if: "${{ matrix.shard == '16' }}" }
- { uses: *compilers, name: 'GCC 9', with: { tag: 'gcc-9' }, timeout-minutes: 8, if: "${{ matrix.shard == '16' }}" }
- { uses: *compilers, name: 'GCC 8', with: { tag: 'gcc-8' }, timeout-minutes: 8, if: "${{ matrix.shard == '16' }}" }
- { uses: *compilers, name: 'GCC 7', with: { tag: 'gcc-7' }, timeout-minutes: 8, if: "${{ matrix.shard == '02' }}" }
- { uses: *compilers, name: 'ext/Setup', with: { static_exts: 'etc json/* */escape' }, timeout-minutes: 8, if: "${{ matrix.shard == '02' }}" }
- { uses: *compilers, name: 'enable-mkmf-verbose', with: { append_configure: '--enable-mkmf-verbose' }, timeout-minutes: 8, if: "${{ matrix.shard == '02' }}" }
- { uses: *compilers, name: 'HASH_DEBUG', with: { cppflags: '-DHASH_DEBUG' }, timeout-minutes: 8, if: "${{ matrix.shard == '02' }}" }
- { uses: *compilers, name: 'clang 6', with: { tag: 'clang-6.0', append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 8, if: "${{ matrix.shard == '02' }}" }
compilemax:
name: 'omnibus compilations, result'
runs-on: ubuntu-latest
if: ${{ always() }}
needs:
- 'compile'
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github, persist-credentials: false }
- uses: ./.github/actions/slack
with:
label: 'omnibus'
SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
# Reduce retained artifact storage.
- name: Create empty source artifact
run: touch compilation-source.empty
working-directory: ${{ runner.temp }}
if: ${{ needs.compile.result == 'success' }}
- name: Shrink source artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: compilation-source
path: ${{ runner.temp }}/compilation-source.empty
overwrite: true
retention-days: 1
if: ${{ needs.compile.result == 'success' }}
- run: false
working-directory:
if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
defaults:
run:
working-directory: build