Skip to content

feat(stellar): add deployment script for testing #8

feat(stellar): add deployment script for testing

feat(stellar): add deployment script for testing #8

Workflow file for this run

name: Test Stellar
on: pull_request
jobs:
check-relevant-changes:
name: Check for Relevant Changes
runs-on: blacksmith-2vcpu-ubuntu-2204
outputs:
run_tests: ${{ steps.filter.outputs.stellar == 'true' || steps.filter.outputs.common == 'true' || steps.filter.outputs.github == 'true' }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
stellar:
- 'stellar/**'
common:
- 'common/**'
github:
- '.github/workflows/test-stellar.yaml'
- name: Summarize Changes
run: |
echo "Changes in stellar: ${{ steps.filter.outputs.stellar }}"
echo "Changes in common: ${{ steps.filter.outputs.common }}"
echo "Changes in github: ${{ steps.filter.outputs.github }}"
test-stellar:
name: Test Stellar
needs: check-relevant-changes
if: ${{ needs.check-relevant-changes.outputs.run_tests == 'true' }}
runs-on: blacksmith-2vcpu-ubuntu-2204
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18' # Hardcoded to ensure consistency.
cache: 'npm'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
shell: bash
run: npm ci
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: 1.81.0
- name: Install Stellar CLI
shell: bash
run: |
cargo install --locked stellar-cli --features opt --version ~21
- name: Pull stellar/quickstart docker image
run: |
docker pull stellar/quickstart
- name: Setup Stellar standalone network
run: |
docker run -d --rm -it \
-p 8000:8000 \
--name stellar \
stellar/quickstart:testing \
--local \
--enable-soroban-rpc \
--protocol-version 21
RPC_URL="http://localhost:8000"
NETWORK_PASSPHRASE="Standalone Network ; February 2017"
echo "RPC_URL=${RPC_URL}" >> $GITHUB_ENV
echo "NETWORK_PASSPHRASE=${NETWORK_PASSPHRASE}" >> $GITHUB_ENV
- name: Add as configured network
run: |
stellar network add standalone \
--rpc-url "$RPC_URL" \
--network-passphrase "$NETWORK_PASSPHRASE"
- name: Setup Stellar wallet
run: |
stellar keys generate test \
--rpc-url "$RPC_URL" \
--network-passphrase "$NETWORK_PASSPHRASE"
STELLAR_PRIVATE_KEY=$(stellar keys show test)
STELLAR_ADDRESS=$(stellar keys address test)
echo "STELLAR_PRIVATE_KEY=${STELLAR_PRIVATE_KEY}" >> $GITHUB_ENV
echo "STELLAR_ADDRESS=${STELLAR_ADDRESS}" >> $GITHUB_ENV
- name: Prepare local.json
run: |
echo '{
"chains": {
"stellar": {
"name": "Stellar",
"axelarId": "stellar",
"networkType": "local",
"chainType": "stellar",
"tokenSymbol": "XLM",
"rpc": "http://127.0.0.1:8000/soroban/rpc",
"horizonRpc": "http://127.0.0.1:8000",
"contracts": {}
}
}
}' > ./axelar-chains-config/info/local.json
- name: Start Stellar network
run: |
stellar network container start local
- name: Wait for Stellar network
uses: nev7n/wait_for_response@v1
with:
url: 'http://localhost:8000'
responseCode: 200
timeout: 60000
interval: 1000
# Create .env file with default hardhat private key that's prefunded
- name: Prepare .env
run: |
echo "PRIVATE_KEY=$STELLAR_PRIVATE_KEY" >> .env
echo 'ENV=local' >> .env
- name: Display local.json
run: cat ./axelar-chains-config/info/local.json
###### Compile Wasm Contracts ######
- name: Checkout axelar-cgp-soroban repo
uses: actions/checkout@v4
with:
repository: axelarnetwork/axelar-cgp-soroban
- name: Compile WASM contracts
run: |
stellar contract build --manifest-path=axelar-cgp-soroban/Cargo.toml
cd axelar-cgp-soroban
./optmize.sh
cd ..
WASM_DIR=axelar-cgp-soroban/target/wasm32-unknown-unknown/release
echo "WASM_DIR=${WASM_DIR}" >> $GITHUB_ENV
###### Command: Deploy Contract ######
- name: Deploy axelar_gateway
run: |
CONTRACT=axelar_gateway
node stellar/deploy-contract deploy $CONTRACT --wasm-path $WASM_DIR/$CONTRACT.optimized.wasm --initialize
- name: Deploy axelar_operators
run: |
CONTRACT=axelar_operators
node stellar/deploy-contract deploy $CONTRACT --wasm-path $WASM_DIR/$CONTRACT.optimized.wasm --initialize
###### Command: Gateway ######
# FIXME:
# - name: Gateway Approve
# run: |
# node stellar/gateway approve avalanche 0x32034b47cb29d162d9d803cc405356f4ac0ec07fe847ace431385fe8acf3e6e5-2 0x4F4495243837681061C4743b74B3eEdf548D56A5 wallet 0x1234
- name: Gateway Call Contract
run: node stellar/gateway.js call-contract avalanche 0x4F4495243837681061C4743b74B3eEdf548D56A5 0x1234
- name: Gateway Rotate Signers
run: |
node stellar/gateway rotate --new-nonce test --signers wallet
node stellar/gateway rotate --new-nonce test2 --current-nonce test --signers wallet
- name: Upgrade gateway contract
run: |
CONTRACT=axelar_gateway
node stellar/deploy-contract.js upgrade $CONTRACT --wasm-path $WASM_DIR/$CONTRACT.optimized.wasm
###### Command: Operators ######
- name: Execute is_operator action
run: node stellar/operators.js --action is_operator --args $STELLAR_ADDRESS
- name: Execute add_operator action
run: node stellar/operators.js --action add_operator --args $STELLAR_ADDRESS
- name: Execute remove_operator action
run: node stellar/operators.js --action remove_operator --args $STELLAR_ADDRESS
- name: Execute refund action
run: node stellar/operators.js --action refund
- name: Execute execute action
run: node stellar/operators.js --action execute
# TODO: currently fails
# - name: is_operator with estimate_cost
# run: node stellar/operators.js --action is_operator --args $STELLAR_ADDRESS --estimate-cost
###### Command: Generate Bindings #####
- name: generate operators bindings
run: |
CONTRACT=axelar_operators
node stellar/generate-bindings.js --wasm-path $WASM_DIR/$CONTRACT.optimized.wasm --contract-id $(jq .chains.stellar.contracts.$CONTRACT.address axelar-chains-config/info/local.json) --output-dir ./stellar/bindings/$CONTRACT
- name: generate gateway bindings
run: |
CONTRACT=axelar_gateway
node stellar/generate-bindings.js --wasm-path $WASM_DIR/$CONTRACT.optimized.wasm --contract-id $(jq .chains.stellar.contracts.$CONTRACT.address axelar-chains-config/info/local.json) --output-dir ./stellar/bindings/$CONTRACT