JRuby Dev Builds #1888
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: JRuby Dev Builds | |
on: | |
workflow_dispatch: | |
push: | |
tags: | |
- '*' | |
schedule: | |
- cron: '0 19 * * *' | |
jobs: | |
prepare: | |
name: Check if the latest jruby snapshot is already built | |
runs-on: ubuntu-latest | |
outputs: | |
should_build: ${{ steps.check_commit.outputs.result }} | |
url: ${{ steps.url.outputs.url }} | |
steps: | |
- name: Clone to get find-jruby-head-url-nokogiri.rb | |
uses: actions/checkout@v4 | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: ruby | |
bundler-cache: true | |
- name: Get latest jruby nightly archive url | |
id: url | |
run: | | |
echo "url=$(bundle exec ruby find-jruby-head-url-nokogiri.rb)" | tee -a "$GITHUB_OUTPUT" | |
- name: Check if latest commit already built | |
uses: actions/github-script@v7 | |
id: check_commit | |
with: | |
script: | | |
const latestSnapshotUrl = "${{ steps.url.outputs.url }}" | |
const { owner, repo } = context.repo | |
let { data: release } = await github.rest.repos.getLatestRelease({ owner, repo }) | |
const latestTaggedUrl = release.body.split(/\s+/)[1] | |
console.log(`Latest snapshot url: ${latestSnapshotUrl}`) | |
console.log(`Latest tagged url: ${latestTaggedUrl}`) | |
if (latestSnapshotUrl === latestTaggedUrl) { | |
return 'false' | |
} else { | |
return 'true' | |
} | |
result-encoding: string | |
release: | |
name: Create GitHub Release | |
needs: [prepare] | |
if: needs.prepare.outputs.should_build == 'true' | |
runs-on: ubuntu-latest | |
outputs: | |
tag: ${{ steps.tag.outputs.tag }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
if: github.event_name != 'push' | |
- name: Set tag name | |
id: tag | |
run: | | |
if [[ "${{ github.event_name }}" != "push" ]]; then | |
tag=v$(date +%Y%m%d.%H%M%S) | |
else | |
tag=$(basename "${{ github.ref }}") | |
fi | |
echo "tag=$tag" >> $GITHUB_OUTPUT | |
- name: Create Release | |
env: | |
GH_TOKEN: ${{ github.token }} | |
GH_REPO: ${{ github.repository }} | |
run: | | |
tag="${{ steps.tag.outputs.tag }}" | |
gh release create --draft "$tag" --title "$tag" | |
build: | |
needs: [prepare, release] | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, ubuntu-22.04-arm, ubuntu-24.04-arm, macos-13, macos-14, windows-2019 ] | |
runs-on: ${{ matrix.os }} | |
outputs: | |
commit: ${{ steps.latest_commit.outputs.commit }} | |
steps: | |
- name: Set platform | |
id: platform | |
shell: bash | |
run: | | |
platform=${{ matrix.os }} | |
platform=${platform/macos-13/macos-latest} | |
platform=${platform/macos-14/macos-13-arm64} | |
platform=${platform/%-arm/-arm64} | |
platform=${platform/windows-*/windows-latest} | |
echo "platform=$platform" >> $GITHUB_OUTPUT | |
# Build | |
- name: Clone to get test/Gemfile | |
uses: actions/checkout@v4 | |
- name: Download latest jruby nightly archive | |
shell: bash | |
run: curl --fail -L -o jruby-head.tar.gz "${{ needs.prepare.outputs.url }}" | |
- uses: eregon/clean-path@v1 | |
with: | |
regexp: '\bruby\b' | |
- run: tar xf jruby-head.tar.gz | |
if: "!startsWith(matrix.os, 'windows')" | |
# Extracting must be done in the native shell: https://github.com/MSP-Greg/ruby-setup-ruby/issues/1 | |
# We need to use to use the system tar, the Git tar seems basically broken | |
- run: C:\windows\system32\tar.exe xf jruby-head.tar.gz | |
if: startsWith(matrix.os, 'windows') | |
- name: Rename to jruby-head | |
shell: bash | |
run: | | |
ls -l jruby-*-SNAPSHOT/bin | |
mv jruby-*-SNAPSHOT jruby-head | |
ls -l jruby-head/bin | |
- name: Add ruby alias | |
if: "!startsWith(matrix.os, 'windows')" | |
run: | | |
cd jruby-head/bin | |
ln -s jruby ruby | |
- name: Add ruby alias (Windows) | |
if: startsWith(matrix.os, 'windows') | |
shell: bash | |
run: | | |
cd jruby-head/bin | |
# Copy bash launcher, so 'ruby' works in bash | |
cp jruby ruby | |
# Create ruby.bat, so 'ruby' works in pwsh | |
echo -en "@ECHO OFF\r\n@\"%~dp0jruby.exe\" %*\r\n" > ruby.bat | |
ls -l | |
- name: Create archive | |
run: tar czf jruby-head-${{ steps.platform.outputs.platform }}.tar.gz jruby-head | |
# Test | |
- run: echo "$PWD/jruby-head/bin" >> $GITHUB_PATH | |
if: "!startsWith(matrix.os, 'windows')" | |
- run: echo "$($pwd.Path)\jruby-head\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append | |
if: startsWith(matrix.os, 'windows') | |
- run: which ruby | |
if: "!startsWith(matrix.os, 'windows')" | |
- run: where.exe ruby | |
if: startsWith(matrix.os, 'windows') | |
- run: echo $Env:Path | |
- run: ruby --version | |
- run: ruby -e 'raise unless RUBY_ENGINE == %{jruby}' | |
- run: gem --version | |
- run: rake --version | |
- run: ruby -ropen-uri -e 'puts URI.send(:open, %{https://rubygems.org/}) { |f| f.read(1024) }' | |
- run: gem install json:2.2.0 --no-document | |
- run: bundle --version | |
working-directory: test | |
- run: bundle install | |
working-directory: test | |
- run: bundle exec rake --version | |
working-directory: test | |
- name: Set latest_commit | |
id: latest_commit | |
run: echo "commit=$(ruby -e 'puts JRUBY_REVISION')" >> $GITHUB_OUTPUT | |
- name: Upload Built Ruby | |
env: | |
GH_TOKEN: ${{ github.token }} | |
GH_REPO: ${{ github.repository }} | |
run: gh release upload "${{ needs.release.outputs.tag }}" "jruby-head-${{ steps.platform.outputs.platform }}.tar.gz" | |
publish: | |
name: Publish Release | |
needs: [prepare, release, build] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Publish Release | |
env: | |
GH_TOKEN: ${{ github.token }} | |
GH_REPO: ${{ github.repository }} | |
run: | | |
body="jruby/jruby@${{ needs.build.outputs.commit }} ${{ needs.prepare.outputs.url }}" | |
gh release edit "${{ needs.release.outputs.tag }}" --draft=false --notes "$body" | |
- uses: eregon/keep-last-n-releases@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
n: 3 | |
remove_tags_without_release: true |