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 mudge#69
  • Loading branch information
stanhu committed Jul 18, 2023
1 parent 1800a97 commit 732bb39
Showing 1 changed file with 351 additions and 0 deletions.
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

0 comments on commit 732bb39

Please sign in to comment.