Skip to content

wrpc

wrpc #1034

Workflow file for this run

name: wrpc
on:
merge_group:
pull_request:
push:
branches:
- main
tags:
- 'crates/cli/v[0-9].[0-9]+.[0-9]+'
- 'crates/cli/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/introspect/v[0-9].[0-9]+.[0-9]+'
- 'crates/introspect/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/pack/v[0-9].[0-9]+.[0-9]+'
- 'crates/pack/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/runtime-wasmtime/v[0-9].[0-9]+.[0-9]+'
- 'crates/runtime-wasmtime/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/transport-nats/v[0-9].[0-9]+.[0-9]+'
- 'crates/transport-nats/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/transport-quic/v[0-9].[0-9]+.[0-9]+'
- 'crates/transport-quic/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/transport/v[0-9].[0-9]+.[0-9]+'
- 'crates/transport/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/wasmtime-nats-cli/v[0-9].[0-9]+.[0-9]+'
- 'crates/wasmtime-nats-cli/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/wit-bindgen-go/v[0-9].[0-9]+.[0-9]+'
- 'crates/wit-bindgen-go/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/wit-bindgen-rust-macro/v[0-9].[0-9]+.[0-9]+'
- 'crates/wit-bindgen-rust-macro/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/wit-bindgen-rust/v[0-9].[0-9]+.[0-9]+'
- 'crates/wit-bindgen-rust/v[0-9].[0-9]+.[0-9]+-*'
- 'crates/wit-bindgen/v[0-9].[0-9]+.[0-9]+'
- 'crates/wit-bindgen/v[0-9].[0-9]+.[0-9]+-*'
- 'v[0-9].[0-9]+.[0-9]+'
- 'v[0-9].[0-9]+.[0-9]+-*'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-bin:
strategy:
matrix:
config:
- target: aarch64-unknown-linux-musl
test-bin: |
nix profile install --inputs-from . 'nixpkgs#qemu'
qemu-aarch64 ./result/bin/wit-bindgen-wrpc --version
qemu-aarch64 ./result/bin/wrpc-wasmtime-nats --version
test-oci: docker load < ./result
# TODO: Run aarch64 binary within OCI
- target: aarch64-apple-darwin
test-bin: |
file ./result/bin/wit-bindgen-wrpc
file ./result/bin/wrpc-wasmtime-nats
test-oci: docker load < ./result
- target: aarch64-linux-android
test-bin: |
file ./result/bin/wit-bindgen-wrpc
file ./result/bin/wrpc-wasmtime-nats
test-oci: docker load < ./result
- target: riscv64gc-unknown-linux-gnu-fhs
test-bin: |
nix build -L '.#wrpc-riscv64gc-unknown-linux-gnu'
nix shell --inputs-from . 'nixpkgs#qemu' -c qemu-riscv64 ./result/bin/wit-bindgen-wrpc --version
nix shell --inputs-from . 'nixpkgs#qemu' -c qemu-riscv64 ./result/bin/wrpc-wasmtime-nats --version
- target: x86_64-apple-darwin
test-bin: |
file ./result/bin/wit-bindgen-wrpc
file ./result/bin/wrpc-wasmtime-nats
test-oci: docker load < ./result
- target: x86_64-pc-windows-gnu
test-bin: |
nix profile install --inputs-from . 'nixpkgs#wine64'
wine64 ./result/bin/wit-bindgen-wrpc.exe --version
wine64 ./result/bin/wrpc-wasmtime-nats.exe --version
test-oci: docker load < ./result
# TODO: Run win64 binary within OCI
- target: x86_64-unknown-linux-musl
test-bin: |
./result/bin/wit-bindgen-wrpc --version
./result/bin/wrpc-wasmtime-nats --version
test-oci: |
docker load < ./result
docker run --rm wrpc:$(nix eval --raw .#wrpc-x86_64-unknown-linux-musl-oci.imageTag) wit-bindgen-wrpc --version
docker run --rm wrpc:$(nix eval --raw .#wrpc-x86_64-unknown-linux-musl-oci.imageTag) wrpc-wasmtime-nats --version
name: wrpc-${{ matrix.config.target }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: ./.github/actions/install-nix
with:
cachixAuthToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- uses: ./.github/actions/build-nix
with:
package: wrpc-${{ matrix.config.target }}
- run: ${{ matrix.config.test-bin }}
- uses: ./.github/actions/build-nix
if: ${{ !endsWith(matrix.config.target, 'fhs') }}
with:
package: wrpc-${{ matrix.config.target }}-oci
- run: ${{ matrix.config.test-oci }}
if: ${{ !endsWith(matrix.config.target, 'fhs') }}
build-lipo:
if: ${{ !startsWith(github.ref, 'refs/tags/go/') }}
name: wrpc-universal-darwin
needs: build-bin
runs-on: macos-latest
steps:
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: wrpc-aarch64-apple-darwin
path: aarch64
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: wrpc-x86_64-apple-darwin
path: x86_64
- run: chmod +x ./x86_64/bin/*
- run: ./x86_64/bin/wit-bindgen-wrpc --version
- run: ./x86_64/bin/wrpc-wasmtime-nats --version
- run: mkdir -p ./artifact/bin
- run: lipo -create ./aarch64/bin/wit-bindgen-wrpc ./x86_64/bin/wit-bindgen-wrpc -output ./artifact/bin/wit-bindgen-wrpc
- run: lipo -create ./aarch64/bin/wrpc-wasmtime-nats ./x86_64/bin/wrpc-wasmtime-nats -output ./artifact/bin/wrpc-wasmtime-nats
- run: chmod +x ./artifact/bin/wit-bindgen-wrpc
- run: ./artifact/bin/wit-bindgen-wrpc --version
- run: chmod +x ./artifact/bin/wrpc-wasmtime-nats
- run: ./artifact/bin/wrpc-wasmtime-nats --version
- uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: wrpc-universal-darwin
path: artifact
test-linux:
if: ${{ !startsWith(github.ref, 'refs/tags/go/') }}
runs-on: ubuntu-latest
needs: build-bin
steps:
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: wrpc-x86_64-unknown-linux-musl
- run: chmod +x ./bin/wit-bindgen-wrpc
- run: chmod +x ./bin/wrpc-wasmtime-nats
- run: ./bin/wit-bindgen-wrpc --version
- run: ./bin/wrpc-wasmtime-nats --version
test-windows:
if: ${{ !startsWith(github.ref, 'refs/tags/go/') }}
runs-on: windows-latest
needs: build-bin
steps:
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: wrpc-x86_64-pc-windows-gnu
- run: .\bin\wit-bindgen-wrpc.exe --version
- run: .\bin\wrpc-wasmtime-nats.exe --version
cargo:
strategy:
matrix:
check:
- audit
- fmt
- clippy
- nextest
name: cargo ${{ matrix.check }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: ./.github/actions/install-nix
with:
cachixAuthToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- run: go work vendor -e -v
if: ${{ matrix.check }} == "nextest"
- run: git add .
if: ${{ matrix.check }} == "nextest"
- run: nix build -L .#checks.x86_64-linux.${{ matrix.check }}
crates:
if: ${{ !startsWith(github.ref, 'refs/tags/go/') }}
strategy:
matrix:
include:
- crate: cli
- crate: introspect
- crate: pack
workspace-dependencies: true
- crate: runtime-wasmtime
workspace-dependencies: true
- crate: transport
- crate: transport-nats
workspace-dependencies: true
- crate: transport-quic
workspace-dependencies: true
- crate: wasmtime-nats-cli
workspace-dependencies: true
- crate: wit-bindgen
workspace-dependencies: true
- crate: wit-bindgen-go
workspace-dependencies: true
- crate: wit-bindgen-rust
workspace-dependencies: true
- crate: wit-bindgen-rust-macro
workspace-dependencies: true
name: publish ${{ matrix.crate }} to crates.io
needs: cargo
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Extract tag context
id: ctx
run: |
version=${GITHUB_REF_NAME#crates/${{ matrix.crate }}/v}
echo "version=${version}" >> "$GITHUB_OUTPUT"
echo "version is ${version}"
if [[ $version == *"-"* ]]; then
echo "version ${version} is a pre-release"
echo "prerelease=true" >> "$GITHUB_OUTPUT"
fi
- name: dry-run publish ${{ matrix.crate }} to crates.io
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
continue-on-error: ${{ matrix.workspace-dependencies }} # publish may fail due to workspace crates not being published yet
run: cargo publish --dry-run
working-directory: ./crates/${{ matrix.crate }}
- name: publish ${{ matrix.crate }} to crates.io
if: startsWith(github.ref, format('refs/tags/crates/{0}/v', matrix.crate)) && !steps.ctx.outputs.prerelease
continue-on-error: ${{ github.repository_owner != 'bytecodealliance' }}
run: |
pkgver=$(cargo pkgid | cut -d '@' -f 2)
tagver="${{ steps.ctx.outputs.version }}"
if ! [ "$pkgver" = "$tagver" ]; then
echo "version mismatch, $pkgver (package) != $tagver (tag)"
exit 1
fi
cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
working-directory: ./crates/${{ matrix.crate }}
build-doc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: ./.github/actions/install-nix
with:
cachixAuthToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- run: nix build -L .#checks.x86_64-linux.doc
- run: cp --no-preserve=mode -R ./result/share/doc ./doc
- run: rm -f doc/.lock
- name: Create `.nojekyll`
run: touch doc/.nojekyll
- name: Write `index.html`
run: |
cat <<EOF > doc/index.html
<!DOCTYPE html>
<meta charset="utf-8">
<title>Redirecting to wrpc/index.html</title>
<meta http-equiv="refresh" content="0; URL=wrpc/index.html">
<link rel="canonical" href="https://${{ github.repository_owner }}.github.io/wrpc/wrpc/index.html">
EOF
- uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1
with:
path: doc
deploy-doc:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
needs: build-doc
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
id: deployment
oci:
if: ${{ !startsWith(github.ref, 'refs/tags/crates/') && !startsWith(github.ref, 'refs/tags/go/') }}
runs-on: ubuntu-latest
permissions:
packages: write
needs:
- build-bin
- test-linux
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: ./.github/actions/install-nix
with:
cachixAuthToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- name: Extract tag context
id: ctx
run: |
echo "owner=${GITHUB_REPOSITORY_OWNER,,}" >> "$GITHUB_OUTPUT"
echo "sha_short=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
version=${GITHUB_REF_NAME#${{ matrix.prefix }}v}
echo "version=${version}" >> "$GITHUB_OUTPUT"
echo "version is ${version}"
if [[ $version == *"-"* ]]; then
echo "version ${version} is a pre-release"
echo "prerelease=true" >> "$GITHUB_OUTPUT"
fi
- name: Login to GitHub Container Registry
if: startswith(github.ref, format('refs/tags/{0}v', matrix.prefix)) || github.ref == 'refs/heads/main'
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Install `buildah`
run: nix profile install --inputs-from . 'nixpkgs#buildah'
- name: Build `wrpc` image
run: nix run -L .#build-wrpc-oci wrpc
- name: Test `wrpc` image
run: |
buildah push wrpc:$(nix eval --raw .#wrpc-x86_64-unknown-linux-musl-oci.imageTag) docker-daemon:wrpc:test
docker run --rm wrpc:test wit-bindgen-wrpc --version
- name: Push `wrpc` commit rev tag
if: startswith(github.ref, format('refs/tags/{0}v', matrix.prefix)) || github.ref == 'refs/heads/main'
run: |
buildah manifest push --all --format 'v2s2' wrpc docker://ghcr.io/${{ steps.ctx.outputs.owner }}/wrpc:${{ github.sha }}
buildah manifest push --all --format 'v2s2' wrpc docker://ghcr.io/${{ steps.ctx.outputs.owner }}/wrpc:${{ steps.ctx.outputs.sha_short }}
docker run --rm ghcr.io/${{ steps.ctx.outputs.owner }}/wrpc:${{ github.sha }} wit-bindgen-wrpc --version
docker run --rm ghcr.io/${{ steps.ctx.outputs.owner }}/wrpc:${{ steps.ctx.outputs.sha_short }} wit-bindgen-wrpc --version
- name: Push `wrpc` version tag
if: startswith(github.ref, format('refs/tags/{0}v', matrix.prefix))
continue-on-error: ${{ github.repository_owner != 'bytecodealliance' }}
run: |
buildah manifest push --all --format 'v2s2' wrpc docker://ghcr.io/${{ steps.ctx.outputs.owner }}/wrpc:${{ steps.ctx.outputs.version }}
docker run --rm ghcr.io/${{ steps.ctx.outputs.owner }}/wrpc:${{ steps.ctx.outputs.version }} wit-bindgen-wrpc --version
- name: Push `wrpc` `latest` tag
if: startswith(github.ref, format('refs/tags/{0}v', matrix.prefix)) && !steps.ctx.outputs.prerelease
continue-on-error: ${{ github.repository_owner != 'bytecodealliance' }}
run: |
buildah manifest push --all --format 'v2s2' wrpc docker://ghcr.io/${{ steps.ctx.outputs.owner }}/wrpc:latest
docker run --rm ghcr.io/${{ steps.ctx.outputs.owner }}/wrpc:latest wit-bindgen-wrpc --version
release:
if: startsWith(github.ref, 'refs/tags/v')
needs:
- build-bin
- build-doc
- build-lipo
- cargo
- crates
- oci
- test-linux
- test-windows
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Extract tag context
id: ctx
run: |
version=${GITHUB_REF_NAME#v}
echo "version=${version}" >> "$GITHUB_OUTPUT"
echo "version is ${version}"
if [[ $version == *"-"* ]]; then
echo "version ${version} is a pre-release"
echo "prerelease=true" >> "$GITHUB_OUTPUT"
fi
- name: publish wRPC to crates.io
run: |
pkgver=$(cargo pkgid | cut -d '@' -f 2)
tagver="${{ steps.ctx.outputs.version }}"
if ![ "$pkgver" = "$tagver" ]; then
echo "version mismatch, $pkgver (package) != $tagver (tag)"
exit 1
fi
cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
path: artifacts
- run: |
for dir in ./artifacts/wrpc-*; do
target=${dir#./artifacts/wrpc-}
for bin_path in $(find ${dir}/bin -type f); do
chmod +x ${bin_path}
bin=$(basename ${bin_path})
case "$bin" in
*.exe)
bin="${bin%.exe}"
mkdir -p ./${bin}
mv ${bin_path} ./${bin}/${bin}-${target}.exe
;;
*)
mkdir -p ./${bin}
mv ${bin_path} ./${bin}/${bin}-${target%-fhs}
;;
esac
done
done
- uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191 # v2.0.8
with:
draft: true
prerelease: true
generate_release_notes: true
files: |
./wit-bindgen-wrpc/*
./wrpc-wasmtime-nats/*