feat(stellar): add deployment script for testing #9
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: 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/soroban/rpc" | |
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 local \ | |
--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: Wait for Stellar network | |
uses: nev7n/wait_for_response@v1 | |
with: | |
url: 'http://localhost:8000' | |
responseCode: 200 | |
timeout: 60000 | |
interval: 1000 | |
- 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 | |
./optimize.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 |