Skip to content

Commit 88572ee

Browse files
committed
feat: refactor workflows
1 parent 9eb145c commit 88572ee

File tree

5 files changed

+252
-275
lines changed

5 files changed

+252
-275
lines changed

.github/workflows/gem-build.yml

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
name: gem-build
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
platforms:
7+
description: 'JSON array of platforms to build (e.g., ["x86_64-linux", "arm64-darwin"])'
8+
required: false
9+
type: string
10+
default: '["x64-mingw32", "x64-mingw-ucrt", "x86_64-darwin", "arm64-darwin", "x86_64-linux", "x86_64-linux-gnu", "x86_64-linux-musl", "aarch64-linux", "aarch64-linux-gnu", "aarch64-linux-musl", "any"]'
11+
workflow_dispatch:
12+
inputs:
13+
platforms:
14+
description: 'JSON array of platforms to build'
15+
required: false
16+
type: string
17+
default: '["x64-mingw32", "x64-mingw-ucrt", "x86_64-darwin", "arm64-darwin", "x86_64-linux", "x86_64-linux-gnu", "x86_64-linux-musl", "aarch64-linux", "aarch64-linux-gnu", "aarch64-linux-musl", "any"]'
18+
19+
env:
20+
BUNDLER_VER: latest
21+
22+
jobs:
23+
build:
24+
name: build (${{ matrix.os }}, ${{ matrix.platform }})
25+
runs-on: ${{ matrix.os }}
26+
strategy:
27+
fail-fast: false
28+
matrix:
29+
include:
30+
# Windows platforms
31+
- os: windows-latest
32+
platform: x64-mingw32
33+
ruby: '3.4'
34+
- os: windows-latest
35+
platform: x64-mingw-ucrt
36+
ruby: '3.4'
37+
# macOS platforms
38+
- os: macos-latest
39+
platform: x86_64-darwin
40+
ruby: '3.4'
41+
- os: macos-latest
42+
platform: arm64-darwin
43+
ruby: '3.4'
44+
# Linux x86_64 platforms (gnu and musl)
45+
- os: ubuntu-latest
46+
platform: x86_64-linux
47+
ruby: '3.4'
48+
- os: ubuntu-latest
49+
platform: x86_64-linux-gnu
50+
ruby: '3.4'
51+
- os: ubuntu-latest
52+
platform: x86_64-linux-musl
53+
ruby: '3.4'
54+
# Linux aarch64 platforms (gnu and musl)
55+
- os: ubuntu-latest
56+
platform: aarch64-linux
57+
ruby: '3.4'
58+
- os: ubuntu-latest
59+
platform: aarch64-linux-gnu
60+
ruby: '3.4'
61+
- os: ubuntu-latest
62+
platform: aarch64-linux-musl
63+
ruby: '3.4'
64+
# Any platform (source gem)
65+
- os: ubuntu-latest
66+
platform: any
67+
ruby: '3.4'
68+
steps:
69+
- uses: actions/checkout@v6
70+
71+
- uses: ruby/setup-ruby@v1
72+
with:
73+
ruby-version: ${{ matrix.ruby }}
74+
bundler: ${{ env.BUNDLER_VER }}
75+
bundler-cache: true
76+
77+
- if: matrix.platform == 'aarch64-linux' || matrix.platform == 'aarch64-linux-gnu' || matrix.platform == 'aarch64-linux-musl'
78+
name: Install aarch64 compilers
79+
run: |
80+
sudo apt-get update
81+
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu gperf
82+
echo "CMAKE_TOOLCHAIN_FILE=$(pwd)/toolchain/aarch64-linux-gnu.cmake" >> $GITHUB_ENV
83+
84+
- if: matrix.platform == 'aarch64-linux-musl'
85+
name: Install musl cross-compiler for aarch64
86+
run: |
87+
# Install musl-tools for musl builds
88+
sudo apt-get install musl-tools
89+
# For aarch64-musl, we'll use musl-gcc wrapper with aarch64-linux-gnu-gcc
90+
# This creates a musl-targeted build
91+
92+
- run: bundle exec rake gem:native:${{ matrix.platform }}
93+
94+
- uses: actions/upload-artifact@v6
95+
if: failure()
96+
with:
97+
name: build-logs-${{ matrix.platform }}
98+
path: tmp/*/ports/*/*/*.log
99+
100+
- if: matrix.platform != 'any' && !startsWith(matrix.platform, 'aarch64-')
101+
uses: metanorma/metanorma-build-scripts/native-deps-action@main
102+
with:
103+
libname: archive
104+
directory: lib/ffi-libarchive-binary
105+
106+
- run: |
107+
cd pkg/
108+
gem unpack ffi-libarchive-binary-*.gem
109+
ls */lib/ffi-libarchive-binary
110+
111+
- uses: actions/upload-artifact@v6
112+
with:
113+
name: ${{ matrix.platform }}-pkg
114+
path: pkg/*.gem
115+
116+
- if: matrix.platform != 'any'
117+
uses: actions/upload-artifact@v6
118+
with:
119+
name: lib-${{ matrix.platform }}
120+
path: lib/ffi-libarchive-binary/libarchive.*

.github/workflows/metanorma.yml

Lines changed: 5 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -15,63 +15,18 @@ env:
1515
BUNDLER_VER: latest
1616

1717
jobs:
18-
pack:
19-
name: pack (${{ matrix.os }}, ${{ matrix.platform }}, ${{ matrix.ruby }})
20-
runs-on: ${{ matrix.os }}
21-
strategy:
22-
fail-fast: false
23-
matrix:
24-
include:
25-
# Minimal platforms needed for metanorma testing
26-
- os: windows-latest
27-
platform: x64-mingw-ucrt
28-
ruby: '3.4'
29-
- os: macos-latest
30-
platform: arm64-darwin
31-
ruby: '3.4'
32-
- os: ubuntu-latest
33-
platform: x86_64-linux
34-
ruby: '3.4'
35-
steps:
36-
- uses: actions/checkout@v6
37-
38-
- uses: ruby/setup-ruby@v1
39-
with:
40-
ruby-version: ${{ matrix.ruby }}
41-
bundler: ${{ env.BUNDLER_VER }}
42-
bundler-cache: true
43-
44-
- run: bundle exec rake gem:native:${{ matrix.platform }}
45-
46-
- uses: actions/upload-artifact@v6
47-
if: failure()
48-
with:
49-
name: build-logs-${{ matrix.platform }}
50-
path: tmp/*/ports/*/*/*.log
51-
52-
- uses: metanorma/metanorma-build-scripts/native-deps-action@main
53-
with:
54-
libname: archive
55-
directory: lib/ffi-libarchive-binary
56-
57-
- run: |
58-
cd pkg/
59-
gem unpack ffi-libarchive-binary-*.gem
60-
ls */lib/ffi-libarchive-binary
61-
62-
- uses: actions/upload-artifact@v6
63-
with:
64-
name: ${{ matrix.platform }}-pkg
65-
path: pkg/*.gem
18+
build:
19+
name: Build gems for metanorma testing
20+
uses: ./.github/workflows/gem-build.yml
6621

6722
metanorma:
68-
needs: pack
23+
needs: build
6924
runs-on: ${{ matrix.env.os }}
7025
strategy:
7126
fail-fast: false
7227
matrix:
7328
ruby: [ '3.2', '3.4' ]
74-
env:
29+
env:
7530
- { os: macos-latest, platform: arm64-darwin }
7631
- { os: ubuntu-latest, platform: x86_64-linux }
7732
- { os: windows-latest, platform: x64-mingw-ucrt }

.github/workflows/release.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: release
2+
3+
on:
4+
push:
5+
tags: [ 'v*' ]
6+
workflow_dispatch:
7+
8+
env:
9+
BUNDLER_VER: latest
10+
11+
jobs:
12+
build:
13+
name: Build gems for release
14+
uses: ./.github/workflows/gem-build.yml
15+
16+
release:
17+
name: Release to RubyGems
18+
needs: build
19+
runs-on: ubuntu-latest
20+
steps:
21+
- uses: actions/checkout@v6
22+
23+
- uses: actions/download-artifact@v7
24+
with:
25+
path: pkg
26+
pattern: '*-pkg'
27+
merge-multiple: true
28+
29+
- name: Publish to rubygems.org
30+
env:
31+
RUBYGEMS_API_KEY: ${{secrets.FONTIST_CI_RUBYGEMS_API_KEY}}
32+
run: |
33+
mkdir -p ~/.gem
34+
touch ~/.gem/credentials
35+
cat > ~/.gem/credentials << EOF
36+
---
37+
:rubygems_api_key: ${RUBYGEMS_API_KEY}
38+
EOF
39+
chmod 0600 ~/.gem/credentials
40+
gem signin
41+
mkdir tmp
42+
for gem in pkg/*.gem; do gem push -V $gem; done

0 commit comments

Comments
 (0)