Skip to content

Commit

Permalink
Add round-trip tests for precompiled gems
Browse files Browse the repository at this point in the history
Closes mudge#69
  • Loading branch information
stanhu committed Jul 16, 2023
1 parent 603bcbe commit fa2fe40
Show file tree
Hide file tree
Showing 3 changed files with 395 additions and 0 deletions.
330 changes: 330 additions & 0 deletions .github/workflows/precompiled.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,330 @@
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: precompiled/ports
key: precompiled-ports-${{matrix.runs-on}}-${{hashFiles('precompiled/ext/precompiled/extconf.rb')}}
- run: bundle exec rake compile test

cruby-package:
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: precompiled/ports/archives
key: archives-ubuntu-${{hashFiles('ext/re2/extconf.rb')}}
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2"
bundler-cache: true
- run: ./bin/test-gem-build gems ruby
- uses: actions/upload-artifact@v2
with:
name: cruby-gem
path: precompiled/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: ./bin/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: ./bin/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:
strategy:
fail-fast: false
matrix:
plat:
- "aarch64-linux"
- "arm-linux"
# - "arm64-darwin" # omitted until github actions supports it
- "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:
key: archives-ubuntu-${{hashFiles('ext/re2/extconf.rb')}}
- run: |
docker run --rm -v "$(pwd):/re2" -w /re2 \
larskanis/rake-compiler-dock-mri-${{matrix.plat}}:1.2.0 \
./bin/test-gem-build gems ${{matrix.plat}}
- uses: actions/upload-artifact@v2
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: ./bin/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}} \
./bin/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}} \
./bin/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}} \
./bin/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: ./bin/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: ./bin/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: ./bin/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: ./bin/test-gem-install gems
32 changes: 32 additions & 0 deletions bin/test-gem-build
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#! /usr/bin/env bash
#
# run as part of CI
#
if [[ $# -lt 2 ]] ; then
echo "usage: $(basename $0) <output_dir> <platform>"
exit 1
fi

set -e -u

OUTPUT_DIR=$1
BUILD_NATIVE_GEM=$2

test -e /etc/os-release && cat /etc/os-release

set -x

bundle install --local || bundle install
bundle exec rake set-version-to-timestamp

if [[ "${BUILD_NATIVE_GEM}" == "ruby" ]] ; then
# TODO we're only compiling so that we retrieve tarballs, we can do better.
bundle exec rake clean compile
bundle exec rake gem
else
bundle exec rake gem:${BUILD_NATIVE_GEM}
fi

mkdir -p ${OUTPUT_DIR}
cp -v pkg/*.gem ${OUTPUT_DIR}
ls -l ${OUTPUT_DIR}/*
33 changes: 33 additions & 0 deletions bin/test-gem-install
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#! /usr/bin/env bash
#
# run as part of CI
#
if [[ $# -lt 1 ]] ; then
echo "usage: $(basename $0) <gems_dir> [install_flags]"
exit 1
fi

GEMS_DIR=$1
shift
INSTALL_FLAGS=$*

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}
gem list -d re2
popd

if [ -n "${BUNDLE_APP_CONFIG:-}" ] ; then
export BUNDLE_CACHE_PATH="${BUNDLE_APP_CONFIG}/cache"
fi

bundle install --local || bundle install

rm -rf lib ext # ensure we don't use the local files
rake test

0 comments on commit fa2fe40

Please sign in to comment.