Merge pull request #420 from bytecodealliance/update-cross-gem #70
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: Release | |
on: | |
workflow_dispatch: | |
push: | |
tags: ["v*"] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
ci-data: | |
runs-on: ubuntu-latest | |
outputs: | |
result: ${{ steps.fetch.outputs.result }} | |
steps: | |
- id: fetch | |
uses: oxidize-rb/actions/fetch-ci-data@v1 | |
with: | |
supported-ruby-platforms: | | |
# Excluding: | |
# `arm-linux`: Cranelift doesn't support 32-bit architectures | |
# `x64-mingw32`: `x64-mingw-ucrt` should be used for Ruby 3.1+ (https://github.com/rake-compiler/rake-compiler-dock?tab=readme-ov-file#windows) | |
# 3.0 is deprecated as stable ruby version according to: | |
# https://github.com/oxidize-rb/actions/blob/main/fetch-ci-data/evaluate.rb#L54 | |
exclude: [arm-linux, x64-mingw32] | |
stable-ruby-versions: | | |
exclude: [head] | |
build: | |
name: Build native gems | |
needs: ci-data | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ruby-platform: ${{ fromJSON(needs.ci-data.outputs.result).supported-ruby-platforms }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: "3.4" | |
- uses: oxidize-rb/actions/cross-gem@v1 | |
id: cross-gem | |
with: | |
platform: ${{ matrix.ruby-platform }} | |
ruby-versions: ${{ join(fromJSON(needs.ci-data.outputs.result).stable-ruby-versions, ',') }} | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: cross-gem-${{ matrix.ruby-platform }} | |
path: pkg/*-${{ matrix.ruby-platform }}.gem | |
if-no-files-found: error | |
- name: Smoke gem install | |
if: matrix.ruby-platform == 'x86_64-linux' # GitHub actions architecture | |
run: | | |
gem install pkg/wasmtime-*.gem --verbose | |
script="puts Wasmtime::Engine.new.precompile_module('(module)')" | |
ruby -rwasmtime -e "$script" | grep wasmtime.info | |
echo "✅ Successfully gem installed" | |
release: | |
name: Release | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: oxidize-rb/actions/setup-ruby-and-rust@v1 | |
with: | |
ruby-version: "3.4" | |
bundler-cache: true | |
cargo-cache: true | |
cache-version: v1 | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: cross-gem-* | |
merge-multiple: true | |
path: pkg/ | |
- name: Package source gem | |
run: bundle exec rake pkg:ruby | |
- name: Ensure version matches the tag | |
run: | | |
GEM_VERSION=$(grep VERSION lib/wasmtime/version.rb | head -n 1 | cut -d'"' -f2) | |
if [ "v$GEM_VERSION" != "${{ github.ref_name }}" ]; then | |
echo "Gem version does not match tag" | |
echo " v$GEM_VERSION != ${{ github.ref_name }}" | |
exit 1 | |
fi | |
- name: Push Gem | |
working-directory: pkg/ | |
env: | |
GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_KEY }} | |
run: | | |
mkdir -p $HOME/.gem | |
touch $HOME/.gem/credentials | |
chmod 0600 $HOME/.gem/credentials | |
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials | |
ls -l | |
for i in *.gem; do | |
if [ -f "$i" ]; then | |
if ! gem push "$i" >push.out; then | |
gemerr=$? | |
sed 's/^/::error:: /' push.out | |
if ! grep -q "Repushing of gem" push.out; then | |
exit $gemerr | |
fi | |
fi | |
fi | |
done | |
- name: Create GitHub release | |
uses: ncipollo/release-action@v1 | |
with: | |
allowUpdates: true | |
generateReleaseNotes: true | |
draft: true | |
omitBodyDuringUpdate: true | |
omitNameDuringUpdate: true | |
omitPrereleaseDuringUpdate: true | |
skipIfReleaseExists: true |