Skip to content

Reuse ruby-matrix from metanorma/ci (#38) #55

Reuse ruby-matrix from metanorma/ci (#38)

Reuse ruby-matrix from metanorma/ci (#38) #55

Workflow file for this run

name: build
on:
push:
branches: [ main ]
paths-ignore:
- '*.adoc'
pull_request:
workflow_dispatch:
concurrency:
group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}'
cancel-in-progress: true
jobs:
prepare:
uses: metanorma/ci/.github/workflows/prepare-rake.yml@main
test:
name: Test on Ruby ${{ matrix.ruby.version }} ${{ matrix.os }}
runs-on: ${{ matrix.os }}
needs: prepare
if: needs.prepare.outputs.push-for-tag != 'true'
continue-on-error: ${{ matrix.ruby.experimental }}
strategy:
fail-fast: false
max-parallel: 5
matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@master
with:
bundler-cache: true
ruby-version: ${{ matrix.ruby.version }}
rubygems: ${{ matrix.ruby.rubygems }}
# https://github.com/microsoft/vcpkg/issues/15931
# no good solution :(
- name: Workaround for vcpkg
if: startsWith(matrix.os, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install gperf
- run: |
which make || true
which clang || true
which gcc || true
- run: bundle exec rake
build:
name: build ${{ matrix.os }}, ${{ matrix.ruby-version }}, ${{ matrix.platform }}
runs-on: ${{ matrix.os }}
needs: prepare
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
platform: any
ruby-version: ${{ needs.prepare.outputs.default-ruby-version }}
- os: ubuntu-latest
platform: x86_64-linux
ruby-version: ${{ needs.prepare.outputs.default-ruby-version }}
- os: windows-latest
platform: x64-mingw32
ruby-version: ${{ needs.prepare.outputs.default-ruby-version }}
- os: windows-latest
platform: x64-mingw-ucrt
ruby-version: ${{ needs.prepare.outputs.default-ruby-version }}
- os: macos-latest
platform: x86_64-darwin
ruby-version: ${{ needs.prepare.outputs.default-ruby-version }}
steps:
- uses: actions/checkout@v3
- name: Setup Ruby
uses: ruby/setup-ruby@master
with:
ruby-version: ${{ matrix.ruby-version }}
bundler-cache: true
- name: Workaround for vcpkg
if: startsWith(matrix.os, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install gperf
- run: bundle exec rake gem:native:${{ matrix.platform }}
- if: matrix.platform != 'any'
uses: metanorma/ci/native-deps-action@main
with:
libname: emf2svg
directory: lib/emf2svg
- uses: actions/upload-artifact@v3
with:
name: pkg
path: pkg/*.gem
cross-build:
name: build ${{ matrix.os }}, ${{ matrix.ruby-version }}, ${{ matrix.platform }}
runs-on: ${{ matrix.os }}
needs: prepare
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
platform: aarch64-linux
ruby-version: ${{ needs.prepare.outputs.default-ruby-version }}
- os: macos-latest
platform: arm64-darwin
ruby-version: ${{ needs.prepare.outputs.default-ruby-version }}
steps:
- uses: actions/checkout@v3
- name: Install Ubuntu packages
if: startsWith(matrix.os, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu gperf
- name: Install Ruby
uses: ruby/setup-ruby@master
with:
ruby-version: ${{ matrix.ruby-version }}
bundler-cache: true
- name: Build native extension
run: bundle exec rake gem:native:${{ matrix.platform }}
- if: matrix.platform != 'aarch64-linux'
uses: metanorma/ci/native-deps-action@main
with:
libname: emf2svg
directory: lib/emf2svg
- uses: actions/upload-artifact@v3
with:
name: pkg
path: pkg/*.gem
test-build:
needs: [ prepare, build, cross-build ]
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.ruby.experimental }}
strategy:
fail-fast: false
max-parallel: 5
matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@master
with:
bundler-cache: true
ruby-version: ${{ matrix.ruby.version }}
rubygems: ${{ matrix.ruby.rubygems }}
- uses: actions/download-artifact@v3
with:
name: pkg
path: pkg
- name: Install binary gem
run: gem install -b pkg/emf2svg-$(ruby -I lib -r emf2svg/version -e "puts Emf2svg::VERSION")-$(ruby -e "puts RUBY_PLATFORM.sub(/darwin\d{2}$/, 'darwin')").gem
# MacOS with have something like arm64-darwin19, others just aarch64-linux
- name: Test conversion
run: |
ruby -remf2svg -e "puts File.write('output.svg', Emf2svg.from_file('spec/examples/image1.emf'), mode: 'wb')"
test-build-any:
needs: [ prepare, build, cross-build ]
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.ruby.experimental }}
strategy:
fail-fast: false
max-parallel: 5
matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@master
with:
bundler-cache: true
ruby-version: ${{ matrix.ruby.version }}
rubygems: ${{ matrix.ruby.rubygems }}
- uses: actions/download-artifact@v3
with:
name: pkg
path: pkg
- name: Workaround for vcpkg
if: startsWith(matrix.os, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install gperf
- name: Install native gem
run: gem install -b pkg/emf2svg-$(ruby -I lib -r emf2svg/version -e "puts Emf2svg::VERSION").gem
- name: Test conversion
run: |
ruby -remf2svg -e "puts File.write('output.svg', Emf2svg.from_file('spec/examples/image1.emf'), mode: 'wb')"