Skip to content

fix(ci): use generic arm64-darwin platform (not version-pinned) #1

fix(ci): use generic arm64-darwin platform (not version-pinned)

fix(ci): use generic arm64-darwin platform (not version-pinned) #1

Workflow file for this run

name: Publish
on:
push:
tags: ['v*']
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
permissions:
contents: write
id-token: write
jobs:
ci-data:
name: Fetch supported Ruby platforms + versions
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: |
# arm-linux: 32-bit ARM is not a sensible target for an embedded
# analytics database.
# x64-mingw32: superseded by x64-mingw-ucrt for Ruby 3.1+.
exclude: [arm-linux, x64-mingw32]
stable-ruby-versions: |
exclude: [head]
cross-gems:
name: Cross-compile - ${{ matrix.ruby-platform }}
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@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
- name: Cross-compile precompiled native gem
uses: oxidize-rb/actions/cross-gem@v1
with:
platform: ${{ matrix.ruby-platform }}
ruby-versions: ${{ join(fromJSON(needs.ci-data.outputs.result).stable-ruby-versions, ',') }}
- name: Smoke install precompiled gem (Linux x86_64 only)
if: matrix.ruby-platform == 'x86_64-linux'
run: |
gem install --verbose pkg/stoolap-*-x86_64-linux.gem
ruby -rstoolap -e "
db = Stoolap::Database.open(':memory:')
db.exec('CREATE TABLE t (id INTEGER PRIMARY KEY)')
db.execute('INSERT INTO t VALUES (\$1)', [1])
row = db.query_one('SELECT * FROM t')
raise 'precompiled gem smoke failed' unless row == { 'id' => 1 }
puts 'precompiled gem ok'
"
- name: Upload precompiled gem
uses: actions/upload-artifact@v7
with:
name: cross-gem-${{ matrix.ruby-platform }}
path: pkg/*-${{ matrix.ruby-platform }}.gem
if-no-files-found: error
retention-days: 1
source-gem:
name: Build source gem
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: oxidize-rb/actions/setup-ruby-and-rust@v1
with:
ruby-version: "3.3"
bundler-cache: true
cargo-cache: true
cache-version: v1
- name: Ensure gemspec version matches the git tag
if: startsWith(github.ref, 'refs/tags/')
run: |
GEM_VERSION=$(grep VERSION lib/stoolap/version.rb | head -n 1 | cut -d'"' -f2)
if [ "v$GEM_VERSION" != "${{ github.ref_name }}" ]; then
echo "::error::gemspec version v$GEM_VERSION does not match tag ${{ github.ref_name }}"
exit 1
fi
- name: Build source gem
run: bundle exec rake build
- name: Upload source gem
uses: actions/upload-artifact@v7
with:
name: source-gem
path: pkg/stoolap-*.gem
if-no-files-found: error
retention-days: 1
release:
name: Publish to RubyGems + GitHub Release
needs: [cross-gems, source-gem]
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
environment: rubygems
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
- name: Download all gem artifacts into pkg/
uses: actions/download-artifact@v8
with:
pattern: "{cross-gem-*,source-gem}"
merge-multiple: true
path: pkg/
- name: List gems to publish
run: ls -l pkg/
- name: Configure trusted publishing credentials
uses: rubygems/configure-rubygems-credentials@v1
- name: Push gems to RubyGems
working-directory: pkg/
run: |
for gem in *.gem; do
[ -f "$gem" ] || continue
echo "pushing $gem"
set +e
gem push "$gem" > push.out 2>&1
status=$?
set -e
if [ $status -ne 0 ]; then
sed 's/^/::error:: /' push.out
if ! grep -q "Repushing of gem" push.out; then
exit $status
fi
echo "::warning::${gem} already exists on RubyGems, skipping"
else
cat push.out
fi
done
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: pkg/*.gem