Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
204 changes: 204 additions & 0 deletions .github/workflows/native-gem-precompilation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
name: Native gem precompilation
concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true

on:
push:
branches:
- main
tags:
- v*
pull_request:
paths:
- Rakefile
- Gemfile
- Gemfile.lock
- prism.gemspec
- ext/prism/**
- lib/prism.rb
- bin/test-gem-*
- bin/build-gems
- .github/workflows/native-gem-precompilation.yml
workflow_dispatch:

jobs:
native_setup:
name: "Setup"
runs-on: ubuntu-latest
outputs:
rcd_image_version: ${{ steps.rcd_image_version.outputs.rcd_image_version }}
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4"
bundler-cache: true
- id: rcd_image_version
run: bundle exec ruby -e 'require "rake_compiler_dock"; puts "rcd_image_version=#{RakeCompilerDock::IMAGE_VERSION}"' >> $GITHUB_OUTPUT

build_source_gem:
name: "build source"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4"
bundler-cache: true
- run: ./bin/test-gem-build gems ruby
- uses: actions/upload-artifact@v7
with:
name: source-gem
path: gems
retention-days: 1

install_source_gem:
needs: build_source_gem
name: "test source ${{ matrix.os }} ${{ matrix.ruby }}"
strategy:
fail-fast: false
matrix:
os: [ubuntu, macos, windows]
ruby: ["3.3", "3.4", "4.0"]
runs-on: ${{ matrix.os }}-latest
steps:
- if: matrix.os == 'windows'
name: configure git crlf
run: |
git config --system core.autocrlf false
git config --system core.eol lf
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
- uses: actions/download-artifact@v8
with:
name: source-gem
path: gems
- run: ./bin/test-gem-install gems
shell: sh

build_native_gem:
needs: native_setup
name: "build native ${{ matrix.platform }}"
strategy:
fail-fast: false
matrix:
platform:
- aarch64-linux-gnu
- aarch64-linux-musl
- aarch64-mingw-ucrt
- arm-linux-gnu
- arm-linux-musl
- arm64-darwin
- x64-mingw-ucrt
- x86_64-darwin
- x86_64-linux-gnu
- x86_64-linux-musl
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- run: |
docker run --rm -v $PWD:/work -w /work \
ghcr.io/rake-compiler/rake-compiler-dock-image:${{ needs.native_setup.outputs.rcd_image_version }}-mri-${{ matrix.platform }} \
./bin/test-gem-build gems ${{ matrix.platform }}
- uses: actions/upload-artifact@v7
with:
name: "cruby-${{ matrix.platform }}-gem"
path: gems
retention-days: 1

test_linux_native:
name: "${{ matrix.platform }} ${{ matrix.ruby }}"
needs: build_native_gem
strategy:
fail-fast: false
matrix:
platform:
- aarch64-linux-gnu
- aarch64-linux-musl
- arm-linux-gnu
- arm-linux-musl
- x86_64-linux-gnu
- x86_64-linux-musl
ruby: ["3.3", "3.4", "4.0"]
include:
# musl platforms need alpine image and build-base
- { platform: aarch64-linux-musl, docker_tag: "-alpine", bootstrap: "apk add build-base linux-headers yaml-dev &&" }
- { platform: arm-linux-musl, docker_tag: "-alpine", bootstrap: "apk add build-base linux-headers yaml-dev &&" }
- { platform: x86_64-linux-musl, docker_tag: "-alpine", bootstrap: "apk add build-base linux-headers yaml-dev &&" }
# docker platform for each platform
- { platform: aarch64-linux-gnu, runner: ubuntu-24.04-arm, docker_platform: "--platform=linux/arm64" }
- { platform: aarch64-linux-musl, runner: ubuntu-24.04-arm, docker_platform: "--platform=linux/arm64" }
- { platform: arm-linux-gnu, runner: ubuntu-24.04-arm, docker_platform: "--platform=linux/arm/v7" }
- { platform: arm-linux-musl, runner: ubuntu-24.04-arm, docker_platform: "--platform=linux/arm/v7" }
runs-on: ${{ matrix.runner || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v6
- uses: actions/download-artifact@v8
with:
name: cruby-${{ matrix.platform }}-gem
path: gems
- run: |
docker run --rm -v $PWD:/work -w /work \
${{ matrix.docker_platform }} ruby:${{ matrix.ruby }}${{ matrix.docker_tag }} \
sh -c "
${{ matrix.bootstrap }}
./bin/test-gem-install ./gems
"

test_darwin_native:
name: "${{ matrix.platform }} ${{ matrix.ruby }}"
needs: build_native_gem
strategy:
fail-fast: false
matrix:
os: [macos-15, macos-15-intel]
ruby: ["3.3", "3.4", "4.0"]
include:
- os: macos-15
platform: arm64-darwin
- os: macos-15-intel
platform: x86_64-darwin
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: "${{ matrix.ruby }}"
- uses: actions/download-artifact@v8
with:
name: cruby-${{ matrix.platform }}-gem
path: gems
- run: ./bin/test-gem-install gems

test_windows_native:
name: "${{ matrix.platform }} ${{ matrix.ruby }}"
needs: build_native_gem
strategy:
fail-fast: false
matrix:
platform: [x64-mingw-ucrt, aarch64-mingw-ucrt]
ruby: ["3.3", "3.4", "4.0"]
include:
- { platform: x64-mingw-ucrt, os: windows-latest }
- { platform: aarch64-mingw-ucrt, os: windows-11-arm }
exclude:
- { platform: aarch64-mingw-ucrt, ruby: "3.3" }
runs-on: ${{ matrix.os }}
steps:
- name: configure git crlf
run: |
git config --system core.autocrlf false
git config --system core.eol lf
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: "${{ matrix.ruby }}"
- uses: actions/download-artifact@v8
with:
name: cruby-${{ matrix.platform }}-gem
path: gems
- run: ./bin/test-gem-install gems
shell: bash
39 changes: 0 additions & 39 deletions .github/workflows/publish-gem.yml

This file was deleted.

1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ gem "benchmark-ips"
gem "parser"
gem "rake"
gem "rake-compiler"
gem "rake-compiler-dock", "~> 1.12.0"
gem "ruby_parser"
gem "test-unit"

Expand Down
26 changes: 26 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ GEM
erb (6.0.2)
erb (6.0.2-java)
ffi (1.17.3)
ffi (1.17.3-aarch64-linux-gnu)
ffi (1.17.3-aarch64-linux-musl)
ffi (1.17.3-arm64-darwin)
ffi (1.17.3-x86_64-darwin)
ffi (1.17.3-x86_64-linux-gnu)
ffi (1.17.3-x86_64-linux-musl)
io-console (0.8.2)
io-console (0.8.2-java)
irb (1.17.0)
Expand All @@ -25,8 +31,20 @@ GEM
nokogiri (1.19.1)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
nokogiri (1.19.1-aarch64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.1-aarch64-linux-musl)
racc (~> 1.4)
nokogiri (1.19.1-arm64-darwin)
racc (~> 1.4)
nokogiri (1.19.1-java)
racc (~> 1.4)
nokogiri (1.19.1-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.19.1-x86_64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.1-x86_64-linux-musl)
racc (~> 1.4)
onigmo (0.1.0)
parser (3.3.10.2)
ast (~> 2.4.1)
Expand All @@ -46,6 +64,7 @@ GEM
rake (13.3.1)
rake-compiler (1.3.1)
rake
rake-compiler-dock (1.12.0)
rdoc (7.2.0)
erb
psych (>= 4.0.0)
Expand All @@ -64,8 +83,14 @@ GEM
tsort (0.2.0)

PLATFORMS
aarch64-linux-gnu
aarch64-linux-musl
arm64-darwin
java
ruby
x86_64-darwin
x86_64-linux-gnu
x86_64-linux-musl

DEPENDENCIES
benchmark-ips
Expand All @@ -76,6 +101,7 @@ DEPENDENCIES
prism!
rake
rake-compiler
rake-compiler-dock (~> 1.12.0)
rdoc
ruby_memcheck
ruby_parser
Expand Down
Loading
Loading