Build Ruby for GitHub Actions #12
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: 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 }} |