Skip to content

chore: release

chore: release #64

Workflow file for this run

name: RPC Tests
permissions:
contents: read
on:
workflow_dispatch:
push:
branches: [main, release/**]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build:
name: build
runs-on: ubuntu-latest
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
PKG_CONFIG_PATH: /usr/lib/pkgconfig
CI_CACHE: "/tmp/.cache"
CI_BUILD: "--locked"
steps:
- uses: actions/checkout@v6
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libdbus-1-dev pkg-config libudev-dev
- run: rustup update
- run: rustup target add wasm32v1-none
- uses: taiki-e/install-action@just
- uses: taiki-e/install-action@nextest
- uses: cargo-bins/cargo-binstall@main
- uses: stellar/stellar-cli@v26.0.0
- uses: mozilla-actions/sccache-action@v0.0.10
# Integration tests load registry.wasm + hello_v1/v2.wasm from
# target/stellar/local. The registry contract lives in a sibling repo;
# the hello_v1/v2 fixtures are local (crates/stellar-registry-test/
# fixtures/contracts) and build with the CLI. Assemble both into the dir.
- name: Checkout stellar-registry/contracts
uses: actions/checkout@v6
with:
repository: stellar-registry/contracts
path: _contracts
# The contracts repo builds with the default release profile (its
# size-optimized settings moved to [profile.release] in contracts#13);
# it has no `contracts` cargo profile.
- name: Build registry.wasm
run: stellar contract build --package registry --manifest-path _contracts/Cargo.toml
- name: Build hello fixtures
run: |
stellar contract build --profile contracts --package hello_v1
stellar contract build --profile contracts --package hello_v2
- name: Assemble test wasms
run: |
mkdir -p target/stellar/local
cp _contracts/target/wasm32v1-none/release/registry.wasm target/stellar/local/
cp target/wasm32v1-none/contracts/hello_v1.wasm target/stellar/local/
cp target/wasm32v1-none/contracts/hello_v2.wasm target/stellar/local/
- run: just build
- name: Create nextest archive
run: cargo nextest archive --archive-file nextest-archive.tar.zst --package stellar-registry-cli --features integration-tests
- name: Package runtime artifacts
run: |
tar -cf - \
target/debug/stellar-registry \
target/stellar/local/ \
| zstd -1 -o runtime-artifacts.tar.zst
- name: Upload nextest archive
uses: actions/upload-artifact@v7
with:
name: nextest-archive
path: nextest-archive.tar.zst
retention-days: 1
- name: Upload runtime artifacts
uses: actions/upload-artifact@v7
with:
name: runtime-artifacts
path: runtime-artifacts.tar.zst
retention-days: 1
test:
name: test ${{ matrix.name }}
needs: build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: registry-cli
filter: "test-integration-registry"
env:
STELLAR_RPC_URL: http://localhost:8000/soroban/rpc
STELLAR_NETWORK_PASSPHRASE: "Standalone Network ; February 2017"
STELLAR_ACCOUNT: default
STELLAR_CONTRACT_ID: core
steps:
- uses: actions/checkout@v6
- uses: taiki-e/install-action@just
- uses: taiki-e/install-action@nextest
- uses: stellar/stellar-cli@v27.0.0
# Start the local network through the CLI at the protocol the stellar-cli
# pin targets. Without an explicit protocol, quickstart's local network
# arms its baked-in default (p25) and p27 contracts fail transaction
# simulation on deploy — surfacing as Account NotFound during upload.
- name: Start local Stellar network
run: |
PROTOCOL_VERSION=$(sed -n 's/.*stellar-cli = .*version = "\([0-9]*\).*/\1/p' Cargo.toml | head -1)
if [ -z "$PROTOCOL_VERSION" ]; then
echo "Could not derive protocol version from stellar-cli pin in Cargo.toml" >&2
exit 1
fi
echo "Starting local network at protocol $PROTOCOL_VERSION"
stellar container start local --protocol-version "$PROTOCOL_VERSION"
echo "Waiting for RPC + friendbot to become healthy..."
for _ in $(seq 1 50); do
if curl --no-progress-meter --fail-with-body -X POST "http://localhost:8000/soroban/rpc" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":8675309,"method":"getNetwork"}' >/dev/null 2>&1 \
&& curl --no-progress-meter "http://localhost:8000/friendbot" 2>/dev/null \
| grep -q '"invalid_field": "addr"'; then
echo "Local network healthy."
exit 0
fi
sleep 2
done
echo "Local network failed to become healthy in time." >&2
docker logs stellar --tail 100 || true
exit 1
- name: Download nextest archive
uses: actions/download-artifact@v8
with:
name: nextest-archive
- name: Download runtime artifacts
uses: actions/download-artifact@v8
with:
name: runtime-artifacts
- name: Extract runtime artifacts
run: zstd -d runtime-artifacts.tar.zst --stdout | tar xf -
- run: stellar keys generate default --fund
- name: Extract nextest archive
run: |
mkdir -p /tmp/nextest-run
cargo nextest run --archive-file nextest-archive.tar.zst --extract-to /tmp/nextest-run --workspace-remap . --no-run
cp -a /tmp/nextest-run/target/* target/
- name: Run tests
run: just ${{ matrix.filter }} true