Skip to content

Update soroban-env-* crates to version =v26.1.2 #980

Update soroban-env-* crates to version =v26.1.2

Update soroban-env-* crates to version =v26.1.2 #980

name: Test with soroban-examples
on:
push:
branches: [main, release/**]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref_protected == 'true' && github.sha || github.ref }}-{{ github.event_name }}
cancel-in-progress: true
# No permissions. This workflow downloads code from outside this repository and
# compiles it. No permissions ensures that any exploit in an external
# repository does not gain access to anything in this repo.
permissions: {}
jobs:
collect-examples:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
repository: stellar/soroban-examples
ref: main
- id: dirs
run: |
dirs=$(
for dir in $(find . -type f -name 'Makefile' -mindepth 2 | xargs dirname | sed 's|^\./||'); do
if (cargo metadata --manifest-path "$dir/Cargo.toml" --no-deps --format-version 1 | jq -r --arg pwd "$(pwd)" '.packages[0] | (any(.dependencies[]; .name == "soroban-sdk") and any(.targets[]; any(.crate_types[]; . == "cdylib")))' | grep -q '^true$'); then
echo "$dir"
fi
done | jq -Rnc '[inputs | "\(.)"]'
)
echo "dirs=$dirs" >> $GITHUB_OUTPUT
outputs:
dirs: ${{ steps.dirs.outputs.dirs }}
test-example:
needs: collect-examples
strategy:
fail-fast: false
matrix:
working-directory: ${{ fromJSON(needs.collect-examples.outputs.dirs) }}
# Exclude examples that depend on crates.io packages that transitively
# depend on soroban-sdk (e.g. soroban-poseidon). Cargo does not provide
# a way to override the version of soroban-sdk required as a transitive
# dependency of another dependency where the version to override is a
# different major version or does not match the semver compatibility
# defined by the importer, causing two copies of soroban-sdk to be
# compiled and duplicate lang item (panic_impl) errors.
# https://github.com/stellar/rs-soroban-sdk/issues/1723
exclude:
- working-directory: privacy-pools
defaults:
run:
working-directory: soroban-examples/${{ matrix.working-directory }}
runs-on: ubuntu-latest
steps:
- name: Checkout rs-soroban-sdk
uses: actions/checkout@v5
with:
path: rs-soroban-sdk
- name: Checkout soroban-examples
uses: actions/checkout@v5
with:
repository: stellar/soroban-examples
ref: main
path: soroban-examples
- name: Install Rust
run: |
rustup update
rustup target add wasm32v1-none
- uses: denoland/setup-deno@909cc5acb0fdd60627fb858598759246509fa755 # v2.0.2
with:
deno-version: v2.x
- uses: stellar/stellar-cli@v23.1.4
- uses: stellar/actions/rust-cache@main
- name: Patch SDK versions
run: |
# TODO: Update this patch logic to use `cargo add` once this issue is resolved: https://github.com/rust-lang/cargo/issues/16101
crates=$(cd ${{ github.workspace }}/rs-soroban-sdk && cargo metadata --format-version 1 --no-deps | jq -r '.packages[] | select(.publish != []) | .name')
# Find Cargo.toml files to patch
local_files=$(find . -name Cargo.toml)
workspace_root=$(cargo metadata --format-version 1 --no-deps | jq -r '.workspace_root')
files=$(echo "$local_files"; echo "$workspace_root/Cargo.toml")
# Patch local files and workspace root (sort -u to deduplicate)
echo "$files" | sort -u | while read -r file; do
echo Patching "$file" ...
dir=$(dirname "$file")
for crate in $crates; do
rel_path=$(realpath --relative-to="$dir" ${{ github.workspace }}/rs-soroban-sdk/$crate)
sed -i 's|'"$crate"' = "\([^"]*\)"|'"$crate"' = { path = "'"$rel_path"'" }|g' "$file"
sed -i 's|'"$crate"' = {.*version = "[^"]*"\(.*\)|'"$crate"' = { path = "'"$rel_path"'" \1|g' "$file"
done
done
- name: Diff
run: (! git diff --exit-code) || (echo 'A diff is expected'; exit 1)
- name: Build soroban-examples
env:
CARGO_BUILD_RUSTFLAGS: "-A deprecated"
SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2: "true"
run: make build
- name: Set artifact name
id: artifact-name
run: echo "name=wasm-$(echo ${{ matrix.working-directory }} | sed 's/\//-/g')" | tee -a $GITHUB_OUTPUT
- name: Upload WASM artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ steps.artifact-name.outputs.name }}
path: 'soroban-examples/${{ matrix.working-directory }}/**/*.wasm'
retention-days: 3
- name: Test soroban-examples
env:
CARGO_BUILD_RUSTFLAGS: "-A deprecated"
SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2: "true"
run: make test
- name: Diff
run: git add -N . && git diff HEAD