4040 platform :
4141 - x86_64-linux
4242 - aarch64-linux
43- - arm64-darwin
4443 steps :
4544 - uses : actions/checkout@v6
4645
5756 path : pkg/*.gem
5857 if-no-files-found : error
5958
59+ # arm64-darwin cannot use rb-sys-dock: BoringSSL cross-compilation fails because
60+ # CMake picks up /usr/bin/ld (ELF) instead of the osxcross Mach-O linker.
61+ # No upstream project (wreq, rnet, boring) cross-compiles BoringSSL for Darwin.
62+ native-darwin :
63+ name : Build native gem (arm64-darwin)
64+ runs-on : macos-latest
65+ steps :
66+ - uses : actions/checkout@v6
67+
68+ - uses : dtolnay/rust-toolchain@stable
69+
70+ - uses : Swatinem/rust-cache@v2
71+ with :
72+ prefix-key : macos-arm64
73+ shared-key : release
74+
75+ # Compile per-Ruby-version binaries (matching rb-sys-dock behavior on Linux).
76+ # BoringSSL is compiled once and cached; only rb-sys/magnus rebuild per version.
77+ - uses : ruby/setup-ruby@v1
78+ with :
79+ ruby-version : " 3.3"
80+ bundler-cache : true
81+
82+ - name : Compile for Ruby 3.3
83+ env :
84+ RB_SYS_CARGO_PROFILE : release
85+ run : |
86+ cargo clean -p rb-sys -p magnus -p serde_magnus -p wreq-ruby --release 2>/dev/null || true
87+ bundle exec rake compile
88+ mkdir -p lib/wreq_ruby/3.3
89+ cp lib/wreq_ruby/wreq_ruby.bundle lib/wreq_ruby/3.3/
90+
91+ - uses : ruby/setup-ruby@v1
92+ with :
93+ ruby-version : " 3.4"
94+ bundler-cache : true
95+
96+ - name : Compile for Ruby 3.4
97+ env :
98+ RB_SYS_CARGO_PROFILE : release
99+ run : |
100+ cargo clean -p rb-sys -p magnus -p serde_magnus -p wreq-ruby --release
101+ bundle exec rake compile
102+ mkdir -p lib/wreq_ruby/3.4
103+ cp lib/wreq_ruby/wreq_ruby.bundle lib/wreq_ruby/3.4/
104+
105+ - uses : ruby/setup-ruby@v1
106+ with :
107+ ruby-version : " 4.0"
108+ bundler-cache : true
109+
110+ - name : Compile for Ruby 4.0
111+ env :
112+ RB_SYS_CARGO_PROFILE : release
113+ run : |
114+ cargo clean -p rb-sys -p magnus -p serde_magnus -p wreq-ruby --release
115+ bundle exec rake compile
116+ mkdir -p lib/wreq_ruby/4.0
117+ cp lib/wreq_ruby/wreq_ruby.bundle lib/wreq_ruby/4.0/
118+
119+ - name : Build platform gem
120+ run : ruby script/build_platform_gem.rb arm64-darwin
121+
122+ - uses : actions/upload-artifact@v4
123+ with :
124+ name : native-gem-arm64-darwin
125+ path : pkg/*arm64-darwin*.gem
126+ if-no-files-found : error
127+
60128 smoke-test :
61- name : Smoke test (Ruby ${{ matrix.ruby }})
129+ name : Smoke test Linux (Ruby ${{ matrix.ruby }})
62130 needs : [cross-compile]
63131 runs-on : ubuntu-latest
64132 strategy :
@@ -81,9 +149,33 @@ jobs:
81149 - name : Verify gem loads and prints version
82150 run : ruby -rwreq -e "puts Wreq::VERSION"
83151
152+ smoke-test-darwin :
153+ name : Smoke test macOS (Ruby ${{ matrix.ruby }})
154+ needs : [native-darwin]
155+ runs-on : macos-latest
156+ strategy :
157+ fail-fast : false
158+ matrix :
159+ ruby : ["3.3", "3.4", "4.0"]
160+ steps :
161+ - uses : ruby/setup-ruby@v1
162+ with :
163+ ruby-version : ${{ matrix.ruby }}
164+
165+ - uses : actions/download-artifact@v4
166+ with :
167+ name : native-gem-arm64-darwin
168+ path : pkg/
169+
170+ - name : Install native gem
171+ run : gem install pkg/wreq-*-arm64-darwin.gem
172+
173+ - name : Verify gem loads and prints version
174+ run : ruby -rwreq -e "puts Wreq::VERSION"
175+
84176 release :
85177 name : Release
86- needs : [source-gem, cross-compile, smoke-test]
178+ needs : [source-gem, cross-compile, native-darwin, smoke-test, smoke-test-darwin ]
87179 runs-on : ubuntu-latest
88180 if : startsWith(github.ref, 'refs/tags/v')
89181 permissions :
@@ -102,7 +194,7 @@ jobs:
102194 - uses : actions/download-artifact@v4
103195 with :
104196 path : pkg/
105- pattern : " {cross-gem-*,source-gem}"
197+ pattern : " {cross-gem-*,native-gem-*, source-gem}"
106198 merge-multiple : true
107199
108200 - name : List gems
0 commit comments