-
Notifications
You must be signed in to change notification settings - Fork 1
233 lines (194 loc) · 6.42 KB
/
release.yml
File metadata and controls
233 lines (194 loc) · 6.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
name: Release
on:
workflow_dispatch:
push:
tags: ["v*"]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
jobs:
source-gem:
name: Build source gem
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4"
bundler-cache: true
- run: bundle exec rake build
- uses: actions/upload-artifact@v7
with:
name: source-gem
path: pkg/*.gem
if-no-files-found: error
cross-compile:
name: Build native gem (${{ matrix.platform }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
platform:
- x86_64-linux
- aarch64-linux
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4"
bundler-cache: true
- run: bundle exec rb-sys-dock --ruby-versions 4.0,3.4,3.3 --platform ${{ matrix.platform }} --build
- uses: actions/upload-artifact@v7
with:
name: cross-gem-${{ matrix.platform }}
path: pkg/*.gem
if-no-files-found: error
# arm64-darwin cannot use rb-sys-dock: BoringSSL cross-compilation fails because
# CMake picks up /usr/bin/ld (ELF) instead of the osxcross Mach-O linker.
# No upstream project (wreq, rnet, boring) cross-compiles BoringSSL for Darwin.
native-darwin:
name: Build native gem (arm64-darwin)
runs-on: macos-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: macos-arm64
shared-key: release
# Compile per-Ruby-version binaries (matching rb-sys-dock behavior on Linux).
# BoringSSL is compiled once and cached; only rb-sys/magnus rebuild per version.
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
bundler-cache: true
- name: Compile for Ruby 3.3
env:
RB_SYS_CARGO_PROFILE: release
run: |
cargo clean -p rb-sys -p magnus -p serde_magnus -p wreq-ruby --release 2>/dev/null || true
bundle exec rake compile
mkdir -p lib/wreq_ruby/3.3
cp lib/wreq_ruby/wreq_ruby.bundle lib/wreq_ruby/3.3/
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4"
bundler-cache: true
- name: Compile for Ruby 3.4
env:
RB_SYS_CARGO_PROFILE: release
run: |
cargo clean -p rb-sys -p magnus -p serde_magnus -p wreq-ruby --release
bundle exec rake compile
mkdir -p lib/wreq_ruby/3.4
cp lib/wreq_ruby/wreq_ruby.bundle lib/wreq_ruby/3.4/
- uses: ruby/setup-ruby@v1
with:
ruby-version: "4.0"
bundler-cache: true
- name: Compile for Ruby 4.0
env:
RB_SYS_CARGO_PROFILE: release
run: |
cargo clean -p rb-sys -p magnus -p serde_magnus -p wreq-ruby --release
bundle exec rake compile
mkdir -p lib/wreq_ruby/4.0
cp lib/wreq_ruby/wreq_ruby.bundle lib/wreq_ruby/4.0/
- name: Build platform gem
run: ruby script/build_platform_gem.rb arm64-darwin
- uses: actions/upload-artifact@v7
with:
name: native-gem-arm64-darwin
path: pkg/*arm64-darwin*.gem
if-no-files-found: error
smoke-test:
name: Smoke test Linux (Ruby ${{ matrix.ruby }})
needs: [cross-compile]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ruby: ["3.3", "3.4", "4.0"]
steps:
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
- uses: actions/download-artifact@v8
with:
name: cross-gem-x86_64-linux
path: pkg/
- name: Install native gem
run: gem install pkg/wreq-*-x86_64-linux.gem
- name: Verify gem loads and prints version
run: ruby -rwreq -e "puts Wreq::VERSION"
smoke-test-darwin:
name: Smoke test macOS (Ruby ${{ matrix.ruby }})
needs: [native-darwin]
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
ruby: ["3.3", "3.4", "4.0"]
steps:
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
- uses: actions/download-artifact@v8
with:
name: native-gem-arm64-darwin
path: pkg/
- name: Install native gem
run: gem install pkg/wreq-*-arm64-darwin.gem
- name: Verify gem loads and prints version
run: ruby -rwreq -e "puts Wreq::VERSION"
release:
name: Release
needs: [source-gem, cross-compile, native-darwin, smoke-test, smoke-test-darwin]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.4"
bundler-cache: true
- uses: actions/download-artifact@v8
with:
path: pkg/
pattern: "{cross-gem-*,native-gem-*,source-gem}"
merge-multiple: true
- name: List gems
run: ls -la pkg/*.gem
- name: Verify version matches tag
run: |
GEM_VERSION=$(bundle exec rake version)
if [ "v${GEM_VERSION}" != "${{ github.ref_name }}" ]; then
echo "::error::Gem version v${GEM_VERSION} does not match tag ${{ github.ref_name }}"
exit 1
fi
- name: Configure trusted publishing credentials
uses: rubygems/configure-rubygems-credentials@v1.0.0
- name: Push all gems to RubyGems.org
run: |
failed=0
for gem in pkg/*.gem; do
echo "Pushing $(basename $gem)..."
if ! gem push "$gem"; then
echo "::warning::Failed to push $(basename $gem)"
failed=1
fi
done
if [ "$failed" -eq 1 ]; then
echo "::error::Some gems failed to push"
exit 1
fi
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
prerelease: ${{ contains(github.ref_name, '-rc') || contains(github.ref_name, '-alpha') || contains(github.ref_name, '-beta') }}