Multiplatform TS bindings test #1740
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: bindings typescript | |
on: | |
push: | |
branches: [main, release/**] | |
pull_request: | |
jobs: | |
test: | |
name: test generated libraries | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest-16-cores, macos-13, windows-latest-8-cores] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Setup docker (missing on MacOS) | |
if: runner.os == 'macos' | |
run: | | |
brew install docker | |
brew install colima | |
colima start | |
- name: Install wsl | |
if: runner.os == 'windows' | |
uses: vedantmgoyal9/setup-wsl2@4edf825c69cdaad7d6a852f57c9446f83fea8b91 | |
# https://github.com/vedantmgoyal9/setup-wsl2/issues/3 | |
- name: Enable systemd | |
if: runner.os == 'windows' | |
run: | | |
echo "[boot] | |
systemd=true" > /etc/wsl.conf | |
shell: wsl-run {0} | |
- name: Restart WSL | |
if: runner.os == 'windows' | |
run: | | |
Write-Output 'Restarting WSL...' | |
wsl --shutdown | |
# https://learn.microsoft.com/en-us/windows/wsl/wsl-config#the-8-second-rule-for-configuration-changes | |
# although the documentation says 8 seconds, we wait for 10 seconds to be safe | |
Start-Sleep -Seconds 10 | |
- name: Install Docker | |
if: runner.os == 'windows' | |
run: | | |
systemctl list-unit-files --type=service | |
# Add Docker's official GPG key: | |
sudo apt-get update | |
sudo apt-get install --yes ca-certificates curl | |
sudo install -m 0755 -d /etc/apt/keyrings | |
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc | |
sudo chmod a+r /etc/apt/keyrings/docker.asc | |
# Add the repository to Apt sources: | |
echo \ | |
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ | |
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ | |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null | |
sudo apt-get update | |
sudo apt-get install --yes docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | |
sudo systemctl start docker.socket | |
sudo systemctl start docker.service | |
sudo systemctl status docker.service | |
sudo docker run hello-world | |
shell: wsl-run {0} | |
- run: | | |
docker run -d --name quickstart -p 8000:8000 -e ENABLE_LOGS=true -e NETWORK=local -e ENABLE_SOROBAN_RPC=true --health-cmd "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\"}' && curl --no-progress-meter \"http://localhost:8000/friendbot\" | grep '\"invalid_field\": \"addr\"'" --health-interval 10s --health-timeout 5s --health-retries 50 stellar/quickstart:testing | |
if: runner.os != 'windows' | |
shell: bash | |
- run: | | |
while true; do | |
status=`docker inspect -f {{.State.Health.Status}} quickstart` | |
echo "quickstart status: $status" | |
if [ "$status" == "healthy" ]; then | |
break | |
fi | |
sleep 1; | |
done; | |
if: runner.os != 'windows' | |
shell: bash | |
- run: | | |
docker run -d --name quickstart -p 8000:8000 -e ENABLE_LOGS=true -e NETWORK=local -e ENABLE_SOROBAN_RPC=true --health-cmd "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\"}' && curl --no-progress-meter \"http://localhost:8000/friendbot\" | grep '\"invalid_field\": \"addr\"'" --health-interval 10s --health-timeout 5s --health-retries 50 stellar/quickstart:testing | |
if: runner.os == 'windows' | |
shell: wsl-run {0} | |
- run: | | |
while true; do | |
status=`docker inspect -f {{.State.Health.Status}} quickstart` | |
echo "quickstart status: $status" | |
if [ "$status" == "healthy" ]; then | |
break | |
fi | |
sleep 1; | |
done; | |
if: runner.os == 'windows' | |
shell: wsl-run {0} | |
- run: rustup update | |
- run: cargo build | |
- run: rustup target add wasm32-unknown-unknown | |
- run: make build-test-wasms | |
- run: npm ci | |
if: runner.os != 'windows' | |
working-directory: cmd/crates/soroban-spec-typescript/ts-tests | |
- run: | | |
npm ci --ignore-scripts | |
cargo run --quiet -p stellar-cli -- keys generate root | |
cargo run --quiet -p stellar-cli -- keys fund root | |
$contract_id=(cargo run --quiet -p stellar-cli -- contract deploy --quiet --source root --wasm ../../../../target/wasm32-unknown-unknown/test-wasms/test_custom_types.wasm --ignore-checks) | |
cargo run --quiet -p stellar-cli -- contract bindings typescript --contract-id $contract_id --output-dir ./node_modules/test-custom-types --overwrite | |
cd ./node_modules/test-custom-types | |
npm install | |
npm run build | |
if: runner.os == 'windows' | |
working-directory: cmd/crates/soroban-spec-typescript/ts-tests | |
- run: npm run test | |
working-directory: cmd/crates/soroban-spec-typescript/ts-tests | |
- name: quickstart logs | |
if: always() && runner.os != 'windows' | |
run: docker logs quickstart | |
- name: quickstart logs | |
if: always() && runner.os == 'windows' | |
run: docker logs quickstart | |
shell: wsl-run {0} |