Skip to content

Build Ruby for GitHub Actions #12

Build Ruby for GitHub Actions

Build Ruby for GitHub Actions #12

Workflow file for this run

name: Build Ruby for GitHub Actions
on:
workflow_dispatch:
# push:
# paths-ignore:
# - README.md
jobs:
# Build stable releases
build:
if: true
strategy:
fail-fast: false
matrix:
include:
# - os: ubuntu-22.04
# ruby: 3.2.3
# runs-on: ruby-builder-amd64
- os: ubuntu-22.04
ruby: 3.2.3
runs-on: ruby-builder-arm64
runs-on: ${{ matrix.runs-on }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.12.0'
- name: Set tag name
id: info
run: |
tag=toolcache
echo "tag=$tag" >> $GITHUB_OUTPUT
- name: Set ruby
id: ruby
run: |
ruby=${{ matrix.ruby }}
if [[ "$ruby" == [0-9]* ]]; then
ruby="ruby-$ruby"
fi
echo "ruby=$ruby" >> $GITHUB_OUTPUT
- name: Check if already built
run: '! curl -s -L --head --fail https://github.com/quipper/ruby-builder/releases/download/${{ steps.info.outputs.tag }}/${{ steps.ruby.outputs.ruby }}-${{ matrix.os }}.tar.gz'
- name: Set NO_DOCUMENT
run: |
if [[ "${{ steps.ruby.outputs.ruby }}" == ruby-1.9* ]]; then
echo "NO_DOCUMENT=--no-ri --no-rdoc" >> $GITHUB_ENV
else
echo "NO_DOCUMENT=--no-document" >> $GITHUB_ENV
fi
- name: Clone ruby-build
run: git clone https://github.com/rbenv/ruby-build.git
- name: Install ruby-build
run: sudo ./ruby-build/install.sh
- name: List versions
run: ruby-build --definitions
# Install packages
- run: sudo apt-get install -y --no-install-recommends libyaml-dev libgdbm-dev libreadline-dev libncurses5-dev zlib1g-dev wget
if: startsWith(matrix.os, 'ubuntu') && startsWith(steps.ruby.outputs.ruby, 'ruby-')
- name: Set RUBY_BUILD_RUBY_NAME
run: |
ruby="${{ steps.ruby.outputs.ruby }}"
if [[ $ruby == ruby-* ]]; then
echo "RUBY_BUILD_RUBY_NAME=${ruby#ruby-}" >> $GITHUB_ENV
else
echo "RUBY_BUILD_RUBY_NAME=$ruby" >> $GITHUB_ENV
fi
- name: Set PREFIX
run: |
ruby="${{ steps.ruby.outputs.ruby }}"
if [[ $ruby == ruby-* ]]; then
# See https://github.com/ruby/setup-ruby/issues/98
arch=$(node -e 'console.log(os.arch())')
echo "PREFIX=$RUNNER_TOOL_CACHE/Ruby/${ruby#ruby-}/$arch" >> $GITHUB_ENV
else
echo "PREFIX=$HOME/.rubies/$ruby" >> $GITHUB_ENV
fi
- run: rm -rf $PREFIX
- name: Build Ruby
run: ruby-build --verbose $RUBY_BUILD_RUBY_NAME $PREFIX
env:
CPPFLAGS: "-DENABLE_PATH_CHECK=0" # https://github.com/actions/virtual-environments/issues/267
- name: Create archive
run: tar czf ${{ steps.ruby.outputs.ruby }}-${{ steps.platform.outputs.platform }}.tar.gz -C $(dirname $PREFIX) $(basename $PREFIX)
- name: Install Bundler if needed
run: |
if [ ! -e $PREFIX/bin/bundle ]; then
export PATH="$PREFIX/bin:$PATH"
gem install bundler -v '~> 1' $NO_DOCUMENT
fi
- run: echo "$PREFIX/bin" >> $GITHUB_PATH
- run: ruby --version
- run: ruby -ropen-uri -e 'puts URI.send(:open, %{https://rubygems.org/}) { |f| f.read(1024) }'
- name: Install JSON gem
run: gem install json -v '2.2.0' $NO_DOCUMENT
- run: bundle --version
- run: bundle install
- run: bundle exec rake --version
- run: ruby test_subprocess.rb
# https://github.com/cli/cli/blob/trunk/docs/install_linux.md#debian-ubuntu-linux-raspberry-pi-os-apt
- name: install gh
run: |
sudo mkdir -p -m 755 /etc/apt/keyrings && wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y
- name: Upload Built Ruby
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: gh release upload "toolcache" "${{ steps.ruby.outputs.ruby }}-${{ steps.platform.outputs.platform }}.tar.gz"
createPullRequest:
name: Create PR to setup-ruby
needs: [build]
if: startsWith(github.event.head_commit.message, 'Build ')
runs-on: ubuntu-latest
steps:
- name: Set versions
id: versions
env:
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
run: |
commit_message="$COMMIT_MESSAGE"
if [[ "$commit_message" =~ ^Build\ * ]]; then
versions=${commit_message#* }
echo "versions=$versions" >> $GITHUB_OUTPUT
else
exit 2
fi
- uses: ruby/ruby-builder/.github/actions/create-pr-to-setup-ruby@master
with:
versions: ${{ steps.versions.outputs.versions }}
title: Add ${{ steps.versions.outputs.versions }}
token: ${{ secrets.CHECK_NEW_RELEASES_TOKEN }}