Skip to content

Share built docker images between Linux CI matrix runs #125

Share built docker images between Linux CI matrix runs

Share built docker images between Linux CI matrix runs #125

Workflow file for this run

name: Test
on:
push:
branches:
- master
pull_request:
env:
DOCKER_FLAGS: ""
CI: 1
jobs:
output:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: diff output
run: rake docker_test_output
build-docker:
runs-on: ubuntu-latest
strategy:
matrix:
compiler:
- gcc
- clang
outputs:
docker_image_sha: ${{ steps.build.outputs.sha }}
steps:
- name: Check out code
uses: actions/checkout@v3
with:
submodules: true
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
id: build
uses: docker/build-push-action@v5
with:
build-args: |
IMAGE=ruby:3.3
NAT_CXX_FLAGS=-DNAT_GC_GUARD
NAT_BUILD_MODE=debug
BUILD_TEST_SUPPORT=true
CC=${{ matrix.compiler == 'clang' && 'clang' || 'gcc' }}
CXX=${{ matrix.compiler == 'clang' && 'clang++' || 'g++' }}
context: .
push: true
tags: ghcr.io/${{ github.repository_owner }}/natalie:${{ matrix.compiler }}-${{ github.run_id }}
outputs: type=image,push=true,sha=true
linux:
needs: build-docker
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
compiler:
- gcc
- clang
group:
- group1
- group2
- group3
steps:
- name: Check out code
uses: actions/checkout@v3
with:
submodules: true
- name: Log in to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Pull Docker image
run: docker pull ghcr.io/${{ github.repository_owner }}/natalie:${{ matrix.compiler }}-${{ github.run_id }}
- name: Run tests
run: |
export GLOB=$(ruby spec/support/split_specs.rb 3 ${{ matrix.group }})
docker run -e GLOB="$GLOB" --entrypoint rake ghcr.io/${{ github.repository_owner }}/natalie:${{ matrix.compiler }}-${{ github.run_id }} test
macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
group:
- group1
- group2
- group3
- group4
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: install ruby
run: |
brew update
brew uninstall -f --ignore-dependencies ruby
brew uninstall -f --ignore-dependencies [email protected]
rm -rf /usr/local/lib/ruby/gems/3.0.0 /usr/local/opt/[email protected]
brew install [email protected]
- name: check ruby
run: |
export PATH="/opt/homebrew/opt/ruby/bin:$PATH"
which ruby
ruby --version
which bundle
- name: install build tools
run: brew install --force --overwrite autoconf automake libtool pkg-config
- name: install openssl
run: brew install openssl
- name: install libffi
run: brew install libffi
# - name: setup upterm session for remote debugging
# uses: owenthereal/action-upterm@v1
- name: test with clang on macOS
env:
PKG_CONFIG_PATH: /usr/local/opt/openssl@3/lib/pkgconfig:/opt/homebrew/opt/openssl@3/lib/pkgconfig:/usr/local/opt/libffi/lib/pkgconfig:/opt/homebrew/opt/libffi/lib/pkgconfig
NAT_BUILD_MODE: release
run: |
export GLOB=$(ruby spec/support/split_specs.rb 4 ${{ matrix.group }})
export PATH="/opt/homebrew/opt/ruby/bin:$PATH"
rake test
self-hosted:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: build self-hosted binary
run: rake docker_test_self_hosted
asan:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: test with AddressSanitizer
run: rake docker_test_asan