Skip to content

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

feat(stellar): add deployment script for testing

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

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:
# this sets up nested repos: https://github.com/actions/checkout?tab=readme-ov-file#checkout-multiple-repos-nested
#
# axelar-contract-deployments
# - axelar-cgp-soroban
#
# future steps depend on this directory structure
- name: Checkout code
uses: actions/checkout@v4
- name: Checkout axelar-cgp-soroban repo
uses: actions/checkout@v4
with:
repository: axelarnetwork/axelar-cgp-soroban
path: axelar-cgp-soroban
- 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
targets: wasm32-unknown-unknown
# install binary to avoid lengthy compilation process
- name: Install Stellar CLI
shell: bash
run: |
# Query latest release from official Stellar repo
URL=$(curl -s https://api.github.com/repos/stellar/stellar-cli/releases/latest | jq -r .assets[].browser_download_url | grep 'stellar.*x86_64-unknown-linux')
# download + extract binary
wget -q $URL
tar -xzf $(basename $URL)
# setup bin/ directory
mkdir bin
mv soroban bin/
# the cargo install defines these as aliases, so mimic that behaviour
ln -s $PWD/bin/soroban bin/stellar
echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH
- name: Setup Stellar local network
run: |
docker pull stellar/quickstart
docker run -d --rm -it \
-p 8000:8000 \
--name stellar \
stellar/quickstart:testing \
--local \
--enable-soroban-rpc \
--protocol-version 22
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
shell: bash
run: |
stellar network add local \
--rpc-url "$RPC_URL" \
--network-passphrase "$NETWORK_PASSPHRASE"
- 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: Display local.json
run: cat ./axelar-chains-config/info/local.json
###### Compile Wasm Contracts ######
- 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
- 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: Fund Stellar wallet
run: node stellar/faucet --recipient $STELLAR_ADDRESS
- name: Prepare .env
run: |
echo "PRIVATE_KEY = '$STELLAR_PRIVATE_KEY'" >> .env
echo "ENV = 'local'" >> .env
echo "YES = 'true'" >> .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
# TODO: needs gas-service contract
# - name: Execute refund action
# run: node stellar/operators.js --action refund
# FIXME: find proper way to execute this
# - name: Execute execute action
# run: node stellar/operators.js --action execute --target $STELLAR_ADDRESS --method "is_operator"
# 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