Skip to content

Commit ebaf08d

Browse files
committed
ci: setup crate release pipeline
Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
1 parent 97fbace commit ebaf08d

1 file changed

Lines changed: 113 additions & 48 deletions

File tree

.github/workflows/wrpc.yml

Lines changed: 113 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,28 @@ on:
77
branches:
88
- main
99
tags:
10-
- 'runtime-wasmtime-v[0-9].[0-9]+.[0-9]+'
11-
- 'runtime-wasmtime-v[0-9].[0-9]+.[0-9]+-*'
12-
- 'transport-nats-v[0-9].[0-9]+.[0-9]+'
13-
- 'transport-nats-v[0-9].[0-9]+.[0-9]+-*'
14-
- 'transport-v[0-9].[0-9]+.[0-9]+'
15-
- 'transport-v[0-9].[0-9]+.[0-9]+-*'
10+
- 'crates/cli/v[0-9].[0-9]+.[0-9]+'
11+
- 'crates/cli/v[0-9].[0-9]+.[0-9]+-*'
12+
- 'crates/introspect/v[0-9].[0-9]+.[0-9]+'
13+
- 'crates/introspect/v[0-9].[0-9]+.[0-9]+-*'
14+
- 'crates/runtime-wasmtime/v[0-9].[0-9]+.[0-9]+'
15+
- 'crates/runtime-wasmtime/v[0-9].[0-9]+.[0-9]+-*'
16+
- 'crates/transport-nats/v[0-9].[0-9]+.[0-9]+'
17+
- 'crates/transport-nats/v[0-9].[0-9]+.[0-9]+-*'
18+
- 'crates/transport-quic/v[0-9].[0-9]+.[0-9]+'
19+
- 'crates/transport-quic/v[0-9].[0-9]+.[0-9]+-*'
20+
- 'crates/transport/v[0-9].[0-9]+.[0-9]+'
21+
- 'crates/transport/v[0-9].[0-9]+.[0-9]+-*'
22+
- 'crates/wasmtime-nats-cli/v[0-9].[0-9]+.[0-9]+'
23+
- 'crates/wasmtime-nats-cli/v[0-9].[0-9]+.[0-9]+-*'
24+
- 'crates/wit-bindgen/v[0-9].[0-9]+.[0-9]+'
25+
- 'crates/wit-bindgen/v[0-9].[0-9]+.[0-9]+-*'
26+
- 'crates/wit-bindgen-go/v[0-9].[0-9]+.[0-9]+'
27+
- 'crates/wit-bindgen-go/v[0-9].[0-9]+.[0-9]+-*'
28+
- 'crates/wit-bindgen-rust/v[0-9].[0-9]+.[0-9]+'
29+
- 'crates/wit-bindgen-rust/v[0-9].[0-9]+.[0-9]+-*'
30+
- 'crates/wit-bindgen-rust-macro/v[0-9].[0-9]+.[0-9]+'
31+
- 'crates/wit-bindgen-rust-macro/v[0-9].[0-9]+.[0-9]+-*'
1632
- 'v[0-9].[0-9]+.[0-9]+'
1733
- 'v[0-9].[0-9]+.[0-9]+-*'
1834
workflow_dispatch:
@@ -150,6 +166,74 @@ jobs:
150166
if: ${{ matrix.check }} == "nextest"
151167
- run: nix build -L .#checks.x86_64-linux.${{ matrix.check }}
152168

169+
crates:
170+
strategy:
171+
matrix:
172+
include:
173+
- crate: cli
174+
175+
- crate: introspect
176+
177+
- crate: runtime-wasmtime
178+
workspace-dependencies: true
179+
180+
- crate: transport
181+
182+
- crate: transport-nats
183+
workspace-dependencies: true
184+
185+
- crate: transport-quic
186+
workspace-dependencies: true
187+
188+
- crate: wasmtime-nats-cli
189+
workspace-dependencies: true
190+
191+
- crate: wit-bindgen
192+
workspace-dependencies: true
193+
194+
- crate: wit-bindgen-go
195+
workspace-dependencies: true
196+
197+
- crate: wit-bindgen-rust
198+
workspace-dependencies: true
199+
200+
- crate: wit-bindgen-rust-macro
201+
workspace-dependencies: true
202+
203+
name: publish ${{ matrix.crate }} to crates.io
204+
needs: cargo
205+
runs-on: ubuntu-latest
206+
steps:
207+
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
208+
209+
- name: Extract tag context
210+
id: ctx
211+
run: |
212+
version=${GITHUB_REF_NAME#crates/${{ matrix.crate }}/v}
213+
echo "version is ${version}"
214+
if [[ $version == *"-"* ]]; then
215+
echo "version ${version} is a pre-release"
216+
echo "prerelease=true" >> "$GITHUB_OUTPUT"
217+
fi
218+
219+
- name: dry-run publish ${{ matrix.crate }} to crates.io
220+
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
221+
continue-on-error: ${{ matrix.workspace-dependencies }} # publish may fail due to workspace crates not being published yet
222+
run: cargo publish --dry-run
223+
working-directory: ./crates/${{ matrix.crate }}
224+
225+
- name: publish ${{ matrix.crate }} to crates.io
226+
if: startsWith(github.ref, format('refs/tags/crates/{0}/v', matrix.crate)) && !steps.ctx.outputs.prerelease
227+
continue-on-error: ${{ github.repository_owner != 'wrpc' }}
228+
run: |
229+
pkgver=$(cargo pkgid | cut -d '@' -f 2)
230+
if ![ "$pkgver" = "${{ steps.ctx.outputs.version }}" ]; then
231+
echo "version mismatch, $pkgver (package) != ${{ steps.ctx.outputs.version }} (tag)"
232+
exit 1
233+
fi
234+
cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
235+
working-directory: ./crates/${{ matrix.crate }}
236+
153237
build-doc:
154238
runs-on: ubuntu-latest
155239
steps:
@@ -265,6 +349,7 @@ jobs:
265349
- build-doc
266350
- build-lipo
267351
- cargo
352+
- crates
268353
- oci
269354
- test-linux
270355
- test-windows
@@ -273,9 +358,31 @@ jobs:
273358
contents: write
274359
steps:
275360
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
361+
362+
- name: Extract tag context
363+
id: ctx
364+
run: |
365+
version=${GITHUB_REF_NAME#v}
366+
echo "version is ${version}"
367+
if [[ $version == *"-"* ]]; then
368+
echo "version ${version} is a pre-release"
369+
echo "prerelease=true" >> "$GITHUB_OUTPUT"
370+
fi
371+
372+
- name: publish wRPC to crates.io
373+
if: startsWith(github.ref, 'refs/tags/v')
374+
run: |
375+
pkgver=$(cargo pkgid | cut -d '@' -f 2)
376+
if ![ "$pkgver" = "${{ steps.ctx.outputs.version }}" ]; then
377+
echo "version mismatch, $pkgver (package) != ${{ steps.ctx.outputs.version }} (tag)"
378+
exit 1
379+
fi
380+
cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
381+
276382
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
277383
with:
278384
path: artifacts
385+
279386
- run: |
280387
for dir in ./artifacts/wrpc-*; do
281388
target=${dir#./artifacts/wrpc-}
@@ -306,45 +413,3 @@ jobs:
306413
./wit-bindgen-wrpc/*
307414
./wrpc-wasmtime-nats/*
308415
309-
crates:
310-
strategy:
311-
matrix:
312-
include:
313-
- crate: introspect
314-
315-
- crate: runtime-wasmtime
316-
workspace-dependencies: true
317-
318-
- crate: transport
319-
workspace-dependencies: true
320-
321-
- crate: transport-nats
322-
workspace-dependencies: true
323-
324-
name: publish ${{ matrix.crate }} to crates.io
325-
needs: cargo
326-
runs-on: ubuntu-latest
327-
steps:
328-
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
329-
330-
- name: Extract tag context
331-
id: ctx
332-
run: |
333-
version=${GITHUB_REF_NAME#${{ matrix.crate }}-v}
334-
echo "version is ${version}"
335-
if [[ $version == *"-"* ]]; then
336-
echo "version ${version} is a pre-release"
337-
echo "prerelease=true" >> "$GITHUB_OUTPUT"
338-
fi
339-
340-
- name: dry-run publish ${{ matrix.crate }} to crates.io
341-
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
342-
continue-on-error: ${{ matrix.workspace-dependencies }} # publish may fail due to workspace crates not being published yet
343-
run: cargo publish --dry-run
344-
working-directory: ./crates/${{ matrix.crate }}
345-
346-
- name: publish ${{ matrix.crate }} to crates.io
347-
if: startsWith(github.ref, format('refs/tags/{0}-v', matrix.crate)) && !steps.ctx.outputs.prerelease
348-
continue-on-error: ${{ github.repository_owner != 'wrpc' }}
349-
run: cargo publish --token ${{ secrets.CRATES_PUBLISH_TOKEN }}
350-
working-directory: ./crates/${{ matrix.crate }}

0 commit comments

Comments
 (0)