Skip to content

Commit

Permalink
Add round-trip tests for precompiled gems
Browse files Browse the repository at this point in the history
This ensures that all precompiled gems are built properly and can be
run on their target operating systems.

Closes #69
  • Loading branch information
stanhu authored and mudge committed Sep 13, 2023
1 parent 942c4e5 commit bf0e5bd
Show file tree
Hide file tree
Showing 2 changed files with 351 additions and 1 deletion.
351 changes: 351 additions & 0 deletions .github/workflows/precompiled.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,351 @@
name: precompiled
concurrency:
group: "${{github.workflow}}-${{github.ref}}"
cancel-in-progress: true
on:
workflow_dispatch:
schedule:
- cron: "0 8 * * 3" # At 08:00 on Wednesday # https://crontab.guru/#0_8_*_*_3
push:
branches:
- main
- v*.*.x
tags:
- v*.*.*
pull_request:
types: [opened, synchronize]
branches:
- '*'

jobs:
precompiled:
strategy:
fail-fast: false
matrix:
runs-on: ["ubuntu-latest", "macos-latest"]
ruby: ["2.7", "3.0", "3.1", "3.2"]
include:
- ruby: "2.7"
runs-on: "windows-2019"
- ruby: "3.0"
runs-on: "windows-2019"
- ruby: "3.1"
runs-on: "windows-2022"
- ruby: "3.2"
runs-on: "windows-2022"
runs-on: ${{matrix.runs-on}}
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{matrix.ruby}}
bundler-cache: true
- uses: actions/cache@v2
with:
path: ports
key: ports-${{matrix.runs-on}}-${{hashFiles('ext/re2/extconf.rb')}}
- run: bundle exec rake compile spec

cruby-package:
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: ports/archives
key: archives-ubuntu-${{hashFiles('ext/re2/extconf.rb')}}
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2"
bundler-cache: true
- run: ./scripts/test-gem-build gems ruby
- uses: actions/upload-artifact@v2
with:
name: cruby-gem
path: gems
retention-days: 1

cruby-linux-install:
needs: ["cruby-package"]
strategy:
fail-fast: false
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: "${{matrix.ruby}}"
- uses: actions/download-artifact@v2
with:
name: cruby-gem
path: gems
- run: ./scripts/test-gem-install gems

cruby-osx-install:
needs: ["cruby-package"]
strategy:
fail-fast: false
matrix:
ruby: ["3.2"]
sys: ["enable", "disable"]
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: "${{matrix.ruby}}"
- uses: actions/download-artifact@v2
with:
name: cruby-gem
path: gems
- run: ./scripts/test-gem-install gems

cruby-windows-install:
needs: ["cruby-package"]
strategy:
fail-fast: false
matrix:
ruby: ["3.0"]
sys: ["enable", "disable"]
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.1"
- uses: actions/download-artifact@v2
with:
name: cruby-gem
path: gems
- run: |
gem install --verbose --no-document gems/*.gem
gem list -d re2
ruby -r re2 -e "puts RE2::Regexp.new('(\\d+)').match('bob 123')"
cruby-windows-install-ucrt:
needs: ["cruby-package"]
strategy:
fail-fast: false
matrix:
ruby: ["3.2"]
sys: ["enable", "disable"]
runs-on: windows-2022
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2"
- uses: actions/download-artifact@v2
with:
name: cruby-gem
path: gems
- run: |
gem install --verbose --no-document gems/*.gem
gem list -d re2
ruby -r re2 -e "puts RE2::Regexp.new('(\\d+)').match('bob 123')"
cruby-native-package:
needs: ["rcd_image_version"]
strategy:
fail-fast: false
matrix:
plat:
- "aarch64-linux"
- "arm-linux"
- "arm64-darwin"
- "x64-mingw-ucrt"
- "x64-mingw32"
- "x86-linux"
- "x86_64-darwin"
- "x86_64-linux"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: ports/archives
key: archives-ubuntu-${{hashFiles('ext/re2/extconf.rb')}}
- env:
DOCKER_IMAGE: "ghcr.io/rake-compiler/rake-compiler-dock-image:${{needs.rcd_image_version.outputs.rcd_image_version}}-mri-${{matrix.plat}}"
run: |
docker run --rm -v "$(pwd):/re2" -w /re2 \
${DOCKER_IMAGE} \
./scripts/test-gem-build gems ${{matrix.plat}}
- uses: actions/upload-artifact@v3
with:
name: "cruby-${{matrix.plat}}-gem"
path: gems
retention-days: 1

cruby-x86_64-linux-install:
needs: ["cruby-native-package"]
strategy:
fail-fast: false
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: "${{matrix.ruby}}"
- uses: actions/download-artifact@v2
with:
name: cruby-x86_64-linux-gem
path: gems
- run: ./scripts/test-gem-install gems

cruby-x86-linux-install:
needs: ["cruby-native-package"]
strategy:
fail-fast: false
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: cruby-x86-linux-gem
path: gems
- run: |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run --rm -v "$(pwd):/re2" -w /re2 \
--platform=linux/386 \
ruby:${{matrix.ruby}} \
./scripts/test-gem-install ./gems
cruby-aarch64-linux-install:
needs: ["cruby-native-package"]
strategy:
fail-fast: false
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: cruby-aarch64-linux-gem
path: gems
- run: |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run --rm -v "$(pwd):/re2" -w /re2 \
--platform=linux/arm64/v8 \
ruby:${{matrix.ruby}} \
./scripts/test-gem-install ./gems
cruby-arm-linux-install:
needs: ["cruby-native-package"]
strategy:
fail-fast: false
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: cruby-arm-linux-gem
path: gems
- run: |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run --rm -v "$(pwd):/re2" -w /re2 \
--platform=linux/arm/v7 \
ruby:${{matrix.ruby}} \
./scripts/test-gem-install ./gems
cruby-x86_64-musl-install:
needs: ["cruby-native-package"]
strategy:
fail-fast: false
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2"]
runs-on: ubuntu-latest
container:
image: "ruby:${{matrix.ruby}}-alpine"
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: cruby-x86_64-linux-gem
path: gems
- run: apk add bash
- run: ./scripts/test-gem-install gems

cruby-x86_64-darwin-install:
needs: ["cruby-native-package"]
strategy:
fail-fast: false
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2"]
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: "${{matrix.ruby}}"
- uses: actions/download-artifact@v2
with:
name: cruby-x86_64-darwin-gem
path: gems
- run: ./scripts/test-gem-install gems

## arm64-darwin installation testing is omitted until github actions supports it
# cruby-arm64-darwin-install:
# ...

cruby-x64-mingw32-install:
needs: ["cruby-native-package"]
strategy:
fail-fast: false
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2"]
runs-on: windows-2019
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: "${{matrix.ruby}}"
- uses: actions/download-artifact@v2
with:
name: cruby-x64-mingw32-gem
path: gems
- run: ./scripts/test-gem-install gems

cruby-x64-mingw-ucrt-install:
needs: ["cruby-native-package"]
strategy:
fail-fast: false
matrix:
ruby: ["3.2"]
runs-on: windows-2022
steps:
- uses: actions/checkout@v2
- uses: MSP-Greg/setup-ruby-pkgs@v1
with:
ruby-version: "${{matrix.ruby}}"
- uses: actions/download-artifact@v2
with:
name: cruby-x64-mingw-ucrt-gem
path: gems
- run: ./scripts/test-gem-install gems

#
# SECTION the end-to-end gem installation tests
#
rcd_image_version:
runs-on: ubuntu-latest
outputs:
rcd_image_version: ${{steps.rcd_image_version.outputs.rcd_image_version}}
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2"
bundler-cache: true
bundler: latest
- id: rcd_image_version
run: bundle exec ruby -e 'require "rake_compiler_dock"; puts "rcd_image_version=#{RakeCompilerDock::IMAGE_VERSION}"' >> $GITHUB_OUTPUT
1 change: 0 additions & 1 deletion scripts/test-gem-install
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ test -e /etc/os-release && cat /etc/os-release
set -e -x -u

pushd $GEMS_DIR

gemfile=$(ls *.gem | head -n1)
ls -l ${gemfile}
gem install --no-document ${gemfile} -- ${INSTALL_FLAGS}
Expand Down

0 comments on commit bf0e5bd

Please sign in to comment.