Use build:images instead of build:all and decouple build task from image-builds
#722
Workflow file for this run
This file contains hidden or 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: CI | |
| concurrency: | |
| group: "${{github.workflow}}-${{github.ref}}" | |
| cancel-in-progress: true | |
| on: | |
| workflow_dispatch: | |
| schedule: | |
| - cron: "0 5 * * 3" # At 05:00 on Wednesday # https://crontab.guru/#0_5_*_*_3 | |
| push: | |
| branches: | |
| - main | |
| tags: | |
| - "*.*.*" | |
| pull_request: | |
| types: [opened, synchronize] | |
| branches: | |
| - "*" | |
| jobs: | |
| build_source_gem: | |
| name: build source | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: "3.3" | |
| working-directory: test/rcd_test | |
| bundler-cache: true | |
| - name: Build source gem | |
| run: | | |
| cd test/rcd_test/ | |
| bundle exec rake gem | |
| - name: Upload source gem | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: gem-ruby | |
| path: test/rcd_test/pkg/rcd_test-?.?.?.gem # e.g. rcd_test-1.0.0.gem | |
| build_native_gem: | |
| name: build native | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - ubuntu-24.04-arm | |
| platform: | |
| - aarch64-linux-gnu | |
| - aarch64-linux-musl | |
| - aarch64-mingw-ucrt | |
| - arm-linux-gnu | |
| - arm-linux-musl | |
| - arm64-darwin | |
| - jruby | |
| - x64-mingw-ucrt | |
| - x64-mingw32 | |
| - x86-linux-gnu | |
| - x86-linux-musl | |
| - x86-mingw32 | |
| - x86_64-darwin | |
| - x86_64-linux-gnu | |
| - x86_64-linux-musl | |
| include: | |
| - platform: aarch64-linux-gnu | |
| alias: aarch64-linux | |
| - platform: aarch64-linux-musl | |
| - platform: aarch64-mingw-ucrt | |
| - platform: arm-linux-gnu | |
| alias: arm-linux | |
| - platform: arm-linux-musl | |
| - platform: arm64-darwin | |
| - platform: jruby | |
| - platform: x64-mingw-ucrt | |
| static: true | |
| - platform: x64-mingw32 | |
| static: true | |
| - platform: x86-linux-gnu | |
| alias: x86-linux | |
| - platform: x86-linux-musl | |
| - platform: x86-mingw32 | |
| - platform: x86_64-darwin | |
| - platform: x86_64-linux-gnu | |
| alias: x86_64-linux | |
| - platform: x86_64-linux-musl | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: "3.3" | |
| bundler-cache: true | |
| - name: Fetch docker buildx layer cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: tmp/build-cache-${{ runner.arch }} | |
| key: ${{ runner.os }}-on-${{ runner.arch }}-${{ matrix.platform }}-buildx-${{ github.sha }} | |
| restore-keys: ${{ runner.os }}-on-${{ runner.arch }}-${{ matrix.platform }}-buildx | |
| enableCrossOsArchive: true | |
| - name: Change docker to a cache-able driver | |
| run: | | |
| docker buildx create --driver docker-container --use | |
| bundle exec rake build:${{ matrix.platform }} RCD_DOCKER_BUILD="docker buildx build --cache-from=type=local,src=tmp/build-cache-${{ runner.arch }} --cache-to=type=local,dest=tmp/build-cache-new" | |
| - name: Show docker images | |
| run: docker images | |
| - name: Update and prune docker buildx layer cache | |
| run: | | |
| rm -rf tmp/build-cache-${{ runner.arch }} | |
| mv tmp/build-cache-new tmp/build-cache-${{ runner.arch }} | |
| - name: Test the generated image | |
| run: bundle exec rake test TEST_PLATFORM=${{ matrix.platform }} | |
| - name: Build native gem | |
| run: | | |
| cd test/rcd_test/ | |
| bundle install | |
| bundle exec rake clean clobber | |
| bundle exec rake gem:${{ matrix.platform }} | |
| - name: Upload native gem | |
| if: runner.arch == 'X64' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: gem-${{ matrix.platform }} | |
| path: test/rcd_test/pkg/*-*-*.gem | |
| - if: matrix.static | |
| name: Build static native gem | |
| env: | |
| RCD_TEST_CONFIG: "--link-static" | |
| run: | | |
| cd test/rcd_test/ | |
| bundle install | |
| bundle exec rake clean clobber | |
| bundle exec rake gem:${{ matrix.platform }} | |
| - if: matrix.static && runner.arch == 'X64' | |
| name: Upload static native gem | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: gem-${{ matrix.platform }}-static | |
| path: test/rcd_test/pkg/*-*-*.gem | |
| - if: matrix.alias | |
| name: Build native gem ${{ matrix.alias }} | |
| run: | | |
| cd test/rcd_test/ | |
| bundle install | |
| bundle exec rake clean clobber | |
| bundle exec rake gem:${{ matrix.alias }} | |
| - if: matrix.alias && runner.arch == 'X64' | |
| name: Upload native gem ${{ matrix.alias }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: gem-${{ matrix.alias }} | |
| path: test/rcd_test/pkg/*-*-*.gem | |
| test_source_gem: | |
| name: source gem | |
| needs: build_source_gem | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest] | |
| ruby: ["3.4", "3.3", "3.2", "3.1", "3.0", "2.7"] | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: ${{ matrix.ruby }} | |
| - name: Download source gem | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: gem-ruby | |
| - name: Test source gem | |
| run: | | |
| gem install --local *.gem --verbose | |
| cd test/rcd_test/ | |
| bundle install | |
| ruby -rrcd_test -S rake test | |
| test-x86_64-linux-setup-ruby: | |
| name: "${{ matrix.platform }} setup-ruby(${{ matrix.ruby }})" | |
| needs: build_native_gem | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platform: [x86_64-linux, x86_64-linux-gnu] | |
| ruby: ["3.4", "3.3", "3.2", "3.1", "3.0", "2.7"] | |
| include: | |
| # declare rubygems for each ruby version | |
| - { ruby: "3.0", rubygems: "3.5.23" } | |
| - { ruby: "2.7", rubygems: "3.4.22" } | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: ${{ matrix.ruby }} | |
| - name: Download gem-${{ matrix.platform }} | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: gem-${{ matrix.platform }} | |
| - if: matrix.rubygems | |
| run: gem update --system ${{ matrix.rubygems }} | |
| - name: Test gem-${{ matrix.platform }} | |
| run: | | |
| gem install --local *.gem --verbose | |
| cd test/rcd_test/ | |
| bundle install | |
| ruby -rrcd_test -S rake test | |
| test_architecture_matrix: | |
| name: "${{ matrix.platform }} ${{ matrix.ruby }}" | |
| needs: build_native_gem | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platform: | |
| - aarch64-linux | |
| - aarch64-linux-gnu | |
| - aarch64-linux-musl | |
| - arm-linux | |
| - arm-linux-gnu | |
| - arm-linux-musl | |
| - x86-linux | |
| - x86-linux-gnu | |
| - x86-linux-musl | |
| - x86_64-linux | |
| - x86_64-linux-gnu | |
| - x86_64-linux-musl | |
| ruby: ["3.4", "3.3", "3.2", "3.1", "3.0", "2.7"] | |
| include: | |
| # declare rubygems for each ruby version | |
| - { ruby: "3.0", rubygems: "3.5.23" } | |
| - { ruby: "2.7", rubygems: "3.4.22" } | |
| # declare docker image for each platform | |
| - { platform: aarch64-linux-musl, runon: "ubuntu-24.04-arm", docker_tag: "-alpine" } | |
| - { platform: arm-linux-musl, runon: "ubuntu-24.04-arm", docker_tag: "-alpine" } | |
| - { platform: x86-linux-musl, runon: "ubuntu-latest", docker_tag: "-alpine" } | |
| - { platform: x86_64-linux-musl, runon: "ubuntu-latest", docker_tag: "-alpine" } | |
| - { platform: x86_64-linux, runon: "ubuntu-latest" } | |
| - { platform: x86_64-linux-gnu, runon: "ubuntu-latest" } | |
| # declare docker platform for each platform | |
| - { platform: aarch64-linux, runon: "ubuntu-24.04-arm", docker_platform: "--platform=linux/arm64" } | |
| - { platform: aarch64-linux-gnu, runon: "ubuntu-24.04-arm", docker_platform: "--platform=linux/arm64" } | |
| - { platform: aarch64-linux-musl, runon: "ubuntu-24.04-arm", docker_platform: "--platform=linux/arm64" } | |
| - { platform: arm-linux, runon: "ubuntu-24.04-arm", docker_platform: "--platform=linux/arm/v7" } | |
| - { platform: arm-linux-gnu, runon: "ubuntu-24.04-arm", docker_platform: "--platform=linux/arm/v7" } | |
| - { platform: arm-linux-musl, runon: "ubuntu-24.04-arm", docker_platform: "--platform=linux/arm/v7" } | |
| - { platform: x86-linux, runon: "ubuntu-latest", docker_platform: "--platform=linux/386" } | |
| - { platform: x86-linux-gnu, runon: "ubuntu-latest", docker_platform: "--platform=linux/386" } | |
| - { platform: x86-linux-musl, runon: "ubuntu-latest", docker_platform: "--platform=linux/386" } | |
| runs-on: ${{ matrix.runon }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download gem-${{ matrix.platform }} | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: gem-${{ matrix.platform }} | |
| - name: Run tests | |
| run: | | |
| docker run --rm -v $PWD:/work -w /work \ | |
| ${{ matrix.docker_platform}} ruby:${{ matrix.ruby }}${{ matrix.docker_tag }} \ | |
| sh -c " | |
| if test -n '${{ matrix.rubygems }}' ; then gem update --system ${{ matrix.rubygems }} ; fi && | |
| gem install --local *.gem --verbose && | |
| cd test/rcd_test/ && | |
| bundle install && | |
| ruby -rrcd_test -S rake test | |
| " | |
| test_the_rest: | |
| name: "${{ matrix.platform }} ${{ matrix.ruby }}" | |
| needs: build_native_gem | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [macos-13, macos-14] | |
| ruby: ["3.4", "3.3", "3.2", "3.1", "3.0", "2.7"] | |
| include: | |
| - os: macos-13 | |
| platform: x86_64-darwin | |
| - os: macos-14 | |
| platform: arm64-darwin | |
| - os: ubuntu-latest | |
| ruby: jruby | |
| platform: jruby | |
| - os: windows-latest | |
| ruby: "2.7" | |
| platform: x64-mingw32 | |
| - os: windows-latest | |
| ruby: "3.0" | |
| platform: x64-mingw32 | |
| - os: windows-latest | |
| ruby: "3.1" | |
| platform: x64-mingw-ucrt | |
| - os: windows-latest | |
| ruby: "3.2" | |
| platform: x64-mingw-ucrt | |
| - os: windows-latest | |
| ruby: "3.3" | |
| platform: x64-mingw-ucrt | |
| - os: windows-latest | |
| ruby: "3.4" | |
| platform: x64-mingw-ucrt | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: ${{ matrix.ruby }} | |
| - name: Print ruby version and gem env | |
| run: | | |
| ruby --version | |
| gem env | |
| - name: Download gem-${{ matrix.platform }} | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: gem-${{ matrix.platform }} | |
| - name: Test gem-${{ matrix.platform }} | |
| run: | | |
| gem install --local *.gem --verbose | |
| cd test/rcd_test/ | |
| bundle install | |
| ruby -rrcd_test -S rake test | |
| test_windows_static: | |
| name: "static ${{ matrix.platform }} ${{ matrix.ruby }}" | |
| needs: build_native_gem | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: windows-latest | |
| ruby: "2.7" | |
| platform: x64-mingw32 | |
| - os: windows-latest | |
| ruby: "3.0" | |
| platform: x64-mingw32 | |
| - os: windows-latest | |
| ruby: "3.1" | |
| platform: x64-mingw-ucrt | |
| - os: windows-latest | |
| ruby: "3.2" | |
| platform: x64-mingw-ucrt | |
| - os: windows-latest | |
| ruby: "3.3" | |
| platform: x64-mingw-ucrt | |
| - os: windows-latest | |
| ruby: "3.4" | |
| platform: x64-mingw-ucrt | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: ${{ matrix.ruby }} | |
| - name: Print ruby version and gem env | |
| run: | | |
| ruby --version | |
| gem env | |
| - name: Download gem-${{ matrix.platform }}-static | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: gem-${{ matrix.platform }}-static | |
| - name: Test gem-${{ matrix.platform }}-static | |
| run: | | |
| gem install --local *.gem --verbose | |
| cd test/rcd_test/ | |
| bundle install | |
| ruby -rrcd_test -S rake test | |
| test_ad_hoc: | |
| name: "${{ matrix.platform }} on ${{ matrix.from_image }}" | |
| needs: build_native_gem | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - runon: ubuntu-24.04-arm | |
| from_image: navikey/raspbian-bullseye | |
| image_platform: linux/arm/v7 | |
| platform: arm-linux # bullseye ships ruby 2.7, rubygems won't recognize -gnu suffix | |
| dockerfile: debian | |
| - runon: ubuntu-24.04-arm | |
| from_image: arm64v8/ubuntu | |
| image_platform: linux/aarch64 | |
| platform: aarch64-linux # arm64v8 ships ruby 3.0, rubygems won't recognize -gnu suffix | |
| dockerfile: debian | |
| - runon: ubuntu-latest | |
| from_image: i386/alpine | |
| image_platform: linux/386 | |
| platform: x86-linux-musl | |
| dockerfile: alpine | |
| - runon: ubuntu-24.04-arm | |
| from_image: arm32v6/alpine | |
| image_platform: linux/arm/v6 | |
| platform: arm-linux-musl | |
| dockerfile: alpine | |
| - runon: ubuntu-latest | |
| from_image: alpine | |
| image_platform: linux/amd64 | |
| platform: x86_64-linux-musl | |
| dockerfile: alpine | |
| runs-on: ${{ matrix.runon }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download gem-${{ matrix.platform }} | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: gem-${{ matrix.platform }} | |
| - name: Build ${{ matrix.from_image }} image | |
| run: | | |
| docker build --rm --build-arg from_image=${{ matrix.from_image }} --platform=${{ matrix.image_platform }} -t ruby-test -f test/env/Dockerfile.${{ matrix.dockerfile }} . | |
| - name: Run tests | |
| run: docker run --rm -t --network=host -v `pwd`:/build ruby-test |