Skip to content

Add native gem precompilation support #8943

Add native gem precompilation support

Add native gem precompilation support #8943

Workflow file for this run

name: Main
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
on:
push:
branches:
- main
- ruby-4.0
pull_request:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4"
bundler-cache: true
- name: Lint
run: bundle exec rake lint
template:
runs-on: ubuntu-latest
env:
BUNDLE_GEMFILE: gemfiles/2.7/Gemfile
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "2.7.0"
bundler-cache: true
- name: Generate templates
run: bundle exec rake templates
env:
LANG: "C"
typecheck:
runs-on: ubuntu-latest
env:
BUNDLE_GEMFILE: gemfiles/typecheck/Gemfile
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4"
bundler-cache: true
- name: Check Sorbet
run: bundle exec rake typecheck:tapioca typecheck:sorbet
- name: Check Steep
run: bundle exec rake typecheck:steep
- name: Check field kinds
run: rm lib/prism/node.rb && CHECK_FIELD_KIND=true bundle exec rake
build:
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- ubuntu-24.04-arm
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: head
bundler-cache: true
- name: Run Ruby tests
run: bundle exec rake
shell: bash
build-ibm:
if: github.repository == 'ruby/prism'
strategy:
fail-fast: false
matrix:
os:
- ubuntu-24.04-ppc64le
- ubuntu-24.04-s390x
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
run: |
sudo apt-get update
sudo apt-get install ruby-full bundler libyaml-dev
- name: Install dependencies
run: sudo bundle install --jobs $(nproc)
- name: Run Ruby tests
run: bundle exec rake
shell: bash
build-ffi:
strategy:
fail-fast: false
matrix:
target:
- { ruby: "head", gemfile: "4.1" }
- { ruby: "jruby", gemfile: ".." }
- { ruby: "truffleruby", gemfile: ".." }
runs-on: ubuntu-latest
env:
PRISM_FFI_BACKEND: "true"
BUNDLE_GEMFILE: gemfiles/${{ matrix.target.gemfile }}/Gemfile
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.target.ruby }}
bundler-cache: true
- name: Run Ruby tests
run: bundle exec rake
build-without-assertions:
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, ubuntu-24.04]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: head
bundler-cache: true
- name: Run Ruby tests
run: bundle exec rake compile_no_debug test
build-debug:
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- ubuntu-24.04-arm
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: head
bundler-cache: true
- name: Run Ruby tests
run: bundle exec rake
env:
PRISM_BUILD_DEBUG: "1"
build-minimal:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: head
bundler-cache: true
- name: Run Ruby tests
run: bundle exec rake compile_minimal test
env:
PRISM_BUILD_MINIMAL: "1"
build-with-various-compilers:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ruby
bundler-cache: true
- name: Build with various compilers
run: bundle exec rake build_in_docker
build-java:
runs-on: ubuntu-latest
env:
JRUBY_OPTS: "--dev"
steps:
- uses: actions/checkout@v6
- name: Set up JRuby
uses: ruby/setup-ruby@v1
with:
ruby-version: jruby
bundler-cache: true
- name: Run Java Loader test
run: PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS=1 JRUBY_OPTS="-J-ea" bundle exec rake test:java_loader
build-java-truffleruby:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up JRuby
uses: ruby/setup-ruby@v1
with:
ruby-version: jruby
bundler-cache: true
- name: Run Java Loader test
run: PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS=1 PRISM_JAVA_BACKEND=truffleruby bundle exec rake compile
lex-ruby:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: head
bundler-cache: true
- name: Lex ruby/ruby
run: bundle exec rake lex:ruby
lex-discourse:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: head
bundler-cache: true
- name: Lex discourse/discourse
run: bundle exec rake lex:discourse
lex-top-100:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: head
bundler-cache: true
- name: Lex Top 100 Gems
run: bundle exec rake lex:topgems
- name: Parse Top 100 Gems
run: bundle exec rake parse:topgems
- name: Serialized size stats with all fields
run: bundle exec rake serialized_size:topgems
- name: Recompile with only semantic fields
run: PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS=1 bundle exec rake clobber compile
- name: Serialized size stats with only semantic fields
run: bundle exec rake serialized_size:topgems
memcheck:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
- name: Install valgrind
run: |
sudo apt-get update
sudo apt-get install -y valgrind
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: head
bundler-cache: true
- name: Run Ruby tests with valgrind
run: bundle exec rake test:valgrind
gcc-analyzer:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: head
bundler-cache: true
- name: Run build with gcc-analyzer enabled
run: |
CFLAGS='-fanalyzer' bundle exec rake compile
clang-analyzer:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: head
bundler-cache: true
- name: Install clang-analyzer
run: sudo apt-get install -y clang-tools
- name: Run build with clang-analyzer
run: |
scan-build bundle exec rake compile 2>&1 | tee /tmp/scan_build_output.log
grep -q 'scan-build: No bugs found.' /tmp/scan_build_output.log