This repository has been archived by the owner on Nov 15, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* new pipeline was added * new pipeline was added * update version
- Loading branch information
Showing
4 changed files
with
398 additions
and
72 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,397 @@ | ||
name: Pipeline | ||
on: | ||
push: | ||
jobs: | ||
build: | ||
name: Build | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
- name: Set up Rust | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
profile: minimal | ||
toolchain: stable | ||
- name: Build | ||
run: | | ||
cargo build --verbose | ||
working-directory: . | ||
test: | ||
needs: build | ||
name: Test | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
- name: Set up Rust | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
profile: minimal | ||
toolchain: stable | ||
- name: test | ||
run: | | ||
cargo test --verbose | ||
working-directory: . | ||
devnet: | ||
needs: test | ||
name: deploy on devnet | ||
runs-on: ubuntu-latest | ||
if: github.ref == 'refs/heads/devnet' | ||
environment: devnet | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Downloading elys | ||
run: | | ||
URL=https://github.com/elys-network/elys/releases/download/v0.30.0/elysd-v0.30.0-linux-amd64 | ||
wget $URL -O elysd | ||
chmod +x elysd | ||
- name: Set up Rust | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
profile: minimal | ||
toolchain: stable | ||
- name: Compile | ||
run: | | ||
VERSION=$(cat .version) | ||
sed -i "s/^version = .*/version = \"$VERSION\"/" contracts/account-history-contract/Cargo.toml | ||
sed -i "s/^version = .*/version = \"$VERSION\"/" contracts/trade-shield-contract/Cargo.toml | ||
sed -i "s/^version = .*/version = \"$VERSION\"/" contracts/financial-snapshot-contract/Cargo.toml | ||
cargo update | ||
docker run --rm -v "$(pwd)":/code \ | ||
--mount type=volume,source="$(basename "$(pwd)")_cache",target=/target \ | ||
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ | ||
cosmwasm/workspace-optimizer:0.14.0 | ||
- name: Deploy | ||
run: | | ||
# helper functions | ||
extract_txhash() { awk -F 'txhash: ' '/txhash:/{print $2; exit}'; } | ||
extract_code_id() { awk -F 'key: code_id|value: ' '/key: code_id/ { getline; gsub(/"/, "", $2); print $2; exit }'; } | ||
extract_contract_address() { awk -F 'key: _contract_address|value: ' '/key: _contract_address/ { getline; gsub(/"/, "", $2); print $2; exit }'; } | ||
extract_account_number() { awk -F 'account_number: ' '/account_number:/ { gsub(/"/, "", $2); print $2 + 0; exit; }'; } | ||
extract_sequence() { awk -F 'sequence: ' '/sequence:/ { gsub(/"/, "", $2); print $2 + 0; exit; }'; } | ||
ELYSD=./elysd | ||
wait_for_tx() { | ||
local txhash=$1 | ||
# loop until query tx cli does not fail | ||
while ! $ELYSD q tx $txhash --node "$NODE" &> /dev/null; do | ||
echo "Waiting for the transaction $txhash to be included in a block..." | ||
sleep 0.5 | ||
done | ||
} | ||
exit_if_tx_is_empty() { | ||
local tx=$1 | ||
if [[ -z "$tx" ]]; then | ||
echo "Error: there is not a txhash" | ||
exit 1 | ||
fi | ||
} | ||
# environment variables | ||
NODE=${{vars.NODE}} | ||
NAME=${{vars.NAME}} | ||
# contract addresses enviroment variables | ||
# set elysd config | ||
$ELYSD config keyring-backend test | ||
$ELYSD config node $NODE | ||
$ELYSD config chain-id ${{vars.CHAIN_ID}} | ||
$ELYSD config broadcast-mode sync | ||
|
||
# save private keys to files | ||
echo "${{ secrets.PRIVATE_KEY_MALLORCA }}" > /tmp/private_key_mallorca.txt | ||
# recover keys | ||
|
||
echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD keys import mallorca --keyring-backend test /tmp/private_key_mallorca.txt | ||
|
||
user_address=$(echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD keys show $NAME -a) | ||
|
||
# get account and sequence number | ||
account_number=$($ELYSD q account $user_address --node $NODE | extract_account_number) | ||
sequence=$($ELYSD q account $user_address --node $NODE | extract_sequence) | ||
|
||
echo "account_number: $account_number" | ||
echo "sequence: $sequence" | ||
|
||
|
||
# environment variables | ||
OPTIONS="--from $NAME --node $NODE --chain-id ${{vars.CHAIN_ID}} --keyring-backend=test --gas auto --gas-adjustment 1.3 --fees 300000uelys -y --account-number $account_number -b async --log_level trace --trace" | ||
|
||
##contracts | ||
FS_CONTRACT_ADDRESS=${{vars.FS_CONTRACT_ADDRESS}} | ||
TS_CONTRACT_ADDRESS=${{vars.TS_CONTRACT_ADDRESS}} | ||
AH_CONTRACT_ADDRESS=${{vars.AH_CONTRACT_ADDRESS}} | ||
|
||
printf "FS_CONTRACT_ADDRESS=%s\n" "$FS_CONTRACT_ADDRESS" | ||
printf "TS_CONTRACT_ADDRESS=%s\n" "$TS_CONTRACT_ADDRESS" | ||
printf "AH_CONTRACT_ADDRESS=%s\n" "$AH_CONTRACT_ADDRESS" | ||
|
||
# store and init/migrate financial snapshot contract | ||
txhash=$(echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD tx wasm store $OPTIONS --sequence $(($sequence + 1)) artifacts/financial_snapshot_contract.wasm | extract_txhash) | ||
echo "fs store txhash: $txhash" | ||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
codeid=$($ELYSD q tx $txhash --node $NODE | extract_code_id) | ||
echo "fs code id: $codeid" | ||
|
||
if [ "$FS_CONTRACT_ADDRESS" != "empty" ]; then | ||
txhash=$( echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD tx wasm migrate $OPTIONS --sequence $(($sequence + 2)) $FS_CONTRACT_ADDRESS $codeid '{}' | extract_txhash) | ||
echo "fs migrate txhash: $txhash" | ||
else | ||
txhash=$( echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD tx wasm init $OPTIONS --sequence $(($sequence + 2)) --label "fs" --admin $NAME $codeid '{}' | extract_txhash) | ||
echo "fs init txhash: $txhash" | ||
fi | ||
|
||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
export fs_contract_address=$($ELYSD q tx $txhash --node $NODE | extract_contract_address) | ||
echo "fs_contract_address: $fs_contract_address" | ||
|
||
# store and init/migrate trade shield contract | ||
txhash=$(echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD tx wasm store $OPTIONS --sequence $(($sequence + 3)) artifacts/trade_shield_contract.wasm | extract_txhash) | ||
echo "ts store txhash: $txhash" | ||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
codeid=$($ELYSD q tx $txhash --node $NODE | extract_code_id) | ||
echo "ts code id: $codeid" | ||
|
||
if [ "$TS_CONTRACT_ADDRESS" != "empty" ]; then | ||
txhash=$(echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD tx wasm migrate $OPTIONS --sequence $(($sequence + 4)) $TS_CONTRACT_ADDRESS $codeid '{ | ||
"account_history_address": "'"$AH_CONTRACT_ADDRESS"'" | ||
}' | extract_txhash) | ||
echo "ts migrate txhash: $txhash" | ||
else | ||
# set localnet AH deterministic address as param | ||
txhash=$(echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD tx wasm init $OPTIONS --sequence $(($sequence + 4)) --label "ts" --admin $NAME $codeid '{ | ||
"account_history_address": "elys17p9rzwnnfxcjp32un9ug7yhhzgtkhvl9jfksztgw5uh69wac2pgs98tvuy" | ||
}' | extract_txhash) | ||
echo "ts init txhash: $txhash" | ||
fi | ||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
export ts_contract_address=$($ELYSD q tx $txhash --node $NODE | extract_contract_address) | ||
echo "ts_contract_address: $ts_contract_address" | ||
|
||
# store and init/migrate account history contract | ||
txhash=$(echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD tx wasm store artifacts/account_history_contract.wasm $OPTIONS --sequence $(($sequence + 5)) | extract_txhash) | ||
|
||
echo "ah store txhash: $txhash" | ||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
|
||
codeid=$($ELYSD q tx $txhash --node $NODE | extract_code_id) | ||
echo "ah code id: $codeid" | ||
|
||
if [ "$AH_CONTRACT_ADDRESS" != "empty" ]; then | ||
txhash=$(echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD tx wasm migrate $OPTIONS --sequence $(($sequence + 6)) $AH_CONTRACT_ADDRESS $codeid '{ | ||
"trade_shield_address": "'"$TS_CONTRACT_ADDRESS"'", | ||
"limit": 1 | ||
}' | extract_txhash) | ||
echo "ah migrate txhash: $txhash" | ||
else | ||
txhash=$(echo "${{ secrets.PASSPHRASE_MALLORCA }}" | $ELYSD tx wasm init $OPTIONS --sequence $(($sequence + 6)) --label "ah" --admin $NAME $codeid '{ | ||
"limit": 300, | ||
"expiration": { | ||
"at_time": "604800000000000" | ||
}, | ||
"trade_shield_address": "'"$ts_contract_address"'" | ||
}' | extract_txhash) | ||
echo "ah init txhash: $txhash" | ||
fi | ||
|
||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
ah_contract_address=$($ELYSD q tx $txhash --node $NODE | extract_contract_address) | ||
echo "ah_contract_address: $ah_contract_address" | ||
|
||
# print environment variables to set | ||
printf "\nset those environment variables to use the contracts:\n\n" | ||
printf "export NODE=%s\n" "$NODE" | ||
printf "export NAME=%s\n" "$NAME" | ||
printf "export FS_CONTRACT_ADDRESS=%s\n" "$fs_contract_address" | ||
printf "export TS_CONTRACT_ADDRESS=%s\n" "$ts_contract_address" | ||
printf "export AH_CONTRACT_ADDRESS=%s\n" "$ah_contract_address" | ||
testnet: | ||
needs: test | ||
name: deploy on testnet | ||
runs-on: ubuntu-latest | ||
if: github.ref == 'refs/heads/testnet' | ||
environment: testnet | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Downloading elys | ||
run: | | ||
URL=https://github.com/elys-network/elys/releases/download/v0.30.0/elysd-v0.30.0-linux-amd64 | ||
wget $URL -O elysd | ||
chmod +x elysd | ||
- name: Set up Rust | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
profile: minimal | ||
toolchain: stable | ||
- name: Compile | ||
run: | | ||
VERSION=$(cat .version) | ||
sed -i "s/^version = .*/version = \"$VERSION\"/" contracts/account-history-contract/Cargo.toml | ||
sed -i "s/^version = .*/version = \"$VERSION\"/" contracts/trade-shield-contract/Cargo.toml | ||
sed -i "s/^version = .*/version = \"$VERSION\"/" contracts/financial-snapshot-contract/Cargo.toml | ||
cargo update | ||
docker run --rm -v "$(pwd)":/code \ | ||
--mount type=volume,source="$(basename "$(pwd)")_cache",target=/target \ | ||
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ | ||
cosmwasm/workspace-optimizer:0.14.0 | ||
- name: Deploy | ||
run: | | ||
# helper functions | ||
extract_txhash() { awk -F 'txhash: ' '/txhash:/{print $2; exit}'; } | ||
extract_code_id() { awk -F 'key: code_id|value: ' '/key: code_id/ { getline; gsub(/"/, "", $2); print $2; exit }'; } | ||
extract_contract_address() { awk -F 'key: _contract_address|value: ' '/key: _contract_address/ { getline; gsub(/"/, "", $2); print $2; exit }'; } | ||
extract_account_number() { awk -F 'account_number: ' '/account_number:/ { gsub(/"/, "", $2); print $2 + 0; exit; }'; } | ||
extract_sequence() { awk -F 'sequence: ' '/sequence:/ { gsub(/"/, "", $2); print $2 + 0; exit; }'; } | ||
ELYSD=./elysd | ||
wait_for_tx() { | ||
local txhash=$1 | ||
# loop until query tx cli does not fail | ||
while ! $ELYSD q tx $txhash --node "$NODE" &> /dev/null; do | ||
echo "Waiting for the transaction $txhash to be included in a block..." | ||
sleep 0.5 | ||
done | ||
} | ||
exit_if_tx_is_empty() { | ||
local tx=$1 | ||
if [[ -z "$tx" ]]; then | ||
echo "Error: there is not a txhash" | ||
exit 1 | ||
fi | ||
} | ||
# environment variables | ||
NODE=${{vars.NODE}} | ||
NAME=${{vars.NAME}} | ||
# set elysd config | ||
$ELYSD config keyring-backend test | ||
$ELYSD config node $NODE | ||
$ELYSD config chain-id ${{vars.CHAIN_ID}} | ||
$ELYSD config broadcast-mode sync | ||
|
||
echo "${{ secrets.KEY_MNEMONIC }}" | elysd keys add $NAME --recover --keyring-backend test | ||
|
||
user_address=$(elysd keys show $NAME -a) | ||
|
||
# get account and sequence number | ||
account_number=$($ELYSD q account $user_address --node $NODE | extract_account_number) | ||
sequence=$($ELYSD q account $user_address --node $NODE | extract_sequence) | ||
|
||
echo "account_number: $account_number" | ||
echo "sequence: $sequence" | ||
|
||
|
||
# environment variables | ||
OPTIONS="--from $NAME --gas auto --gas-adjustment 1.3 --fees 300000uelys -y --account-number $account_number -b async --log_level trace --trace" | ||
|
||
##contracts | ||
FS_CONTRACT_ADDRESS=${{vars.FS_CONTRACT_ADDRESS}} | ||
TS_CONTRACT_ADDRESS=${{vars.TS_CONTRACT_ADDRESS}} | ||
AH_CONTRACT_ADDRESS=${{vars.AH_CONTRACT_ADDRESS}} | ||
|
||
printf "FS_CONTRACT_ADDRESS=%s\n" "$FS_CONTRACT_ADDRESS" | ||
printf "TS_CONTRACT_ADDRESS=%s\n" "$TS_CONTRACT_ADDRESS" | ||
printf "AH_CONTRACT_ADDRESS=%s\n" "$AH_CONTRACT_ADDRESS" | ||
|
||
# store and init/migrate financial snapshot contract | ||
txhash=$($ELYSD tx wasm store $OPTIONS --sequence $(($sequence + 1)) artifacts/financial_snapshot_contract.wasm | extract_txhash) | ||
echo "fs store txhash: $txhash" | ||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
codeid=$($ELYSD q tx $txhash --node $NODE | extract_code_id) | ||
echo "fs code id: $codeid" | ||
|
||
if [ "$FS_CONTRACT_ADDRESS" != "empty" ]; then | ||
txhash=$( $ELYSD tx wasm migrate $OPTIONS --sequence $(($sequence + 2)) $FS_CONTRACT_ADDRESS $codeid '{}' | extract_txhash) | ||
echo "fs migrate txhash: $txhash" | ||
else | ||
txhash=$( $ELYSD tx wasm init $OPTIONS --sequence $(($sequence + 2)) --label "fs" --admin $NAME $codeid '{}' | extract_txhash) | ||
echo "fs init txhash: $txhash" | ||
fi | ||
|
||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
export fs_contract_address=$($ELYSD q tx $txhash --node $NODE | extract_contract_address) | ||
echo "fs_contract_address: $fs_contract_address" | ||
|
||
# store and init/migrate trade shield contract | ||
txhash=$($ELYSD tx wasm store $OPTIONS --sequence $(($sequence + 3)) artifacts/trade_shield_contract.wasm | extract_txhash) | ||
echo "ts store txhash: $txhash" | ||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
codeid=$($ELYSD q tx $txhash --node $NODE | extract_code_id) | ||
echo "ts code id: $codeid" | ||
|
||
if [ "$TS_CONTRACT_ADDRESS" != "empty" ]; then | ||
txhash=$($ELYSD tx wasm migrate $OPTIONS --sequence $(($sequence + 4)) $TS_CONTRACT_ADDRESS $codeid '{ | ||
"account_history_address": "'"$AH_CONTRACT_ADDRESS"'" | ||
}' | extract_txhash) | ||
echo "ts migrate txhash: $txhash" | ||
else | ||
# set localnet AH deterministic address as param | ||
txhash=$($ELYSD tx wasm init $OPTIONS --sequence $(($sequence + 4)) --label "ts" --admin $NAME $codeid '{ | ||
"account_history_address": "elys17p9rzwnnfxcjp32un9ug7yhhzgtkhvl9jfksztgw5uh69wac2pgs98tvuy" | ||
}' | extract_txhash) | ||
echo "ts init txhash: $txhash" | ||
fi | ||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
export ts_contract_address=$($ELYSD q tx $txhash --node $NODE | extract_contract_address) | ||
echo "ts_contract_address: $ts_contract_address" | ||
|
||
# store and init/migrate account history contract | ||
txhash=$($ELYSD tx wasm store artifacts/account_history_contract.wasm $OPTIONS --sequence $(($sequence + 5)) | extract_txhash) | ||
|
||
echo "ah store txhash: $txhash" | ||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
|
||
codeid=$($ELYSD q tx $txhash --node $NODE | extract_code_id) | ||
echo "ah code id: $codeid" | ||
|
||
if [ "$AH_CONTRACT_ADDRESS" != "empty" ]; then | ||
txhash=$($ELYSD tx wasm migrate $OPTIONS --sequence $(($sequence + 6)) $AH_CONTRACT_ADDRESS $codeid '{ | ||
"trade_shield_address": "'"$TS_CONTRACT_ADDRESS"'", | ||
"limit": 1 | ||
}' | extract_txhash) | ||
echo "ah migrate txhash: $txhash" | ||
else | ||
txhash=$($ELYSD tx wasm init $OPTIONS --sequence $(($sequence + 6)) --label "ah" --admin $NAME $codeid '{ | ||
"limit": 300, | ||
"expiration": { | ||
"at_time": "604800000000000" | ||
}, | ||
"trade_shield_address": "'"$ts_contract_address"'" | ||
}' | extract_txhash) | ||
echo "ah init txhash: $txhash" | ||
fi | ||
|
||
exit_if_tx_is_empty $txhash | ||
wait_for_tx $txhash | ||
ah_contract_address=$($ELYSD q tx $txhash --node $NODE | extract_contract_address) | ||
echo "ah_contract_address: $ah_contract_address" | ||
|
||
# print environment variables to set | ||
printf "\nset those environment variables to use the contracts:\n\n" | ||
printf "export NODE=%s\n" "$NODE" | ||
printf "export NAME=%s\n" "$NAME" | ||
printf "export FS_CONTRACT_ADDRESS=%s\n" "$fs_contract_address" | ||
printf "export TS_CONTRACT_ADDRESS=%s\n" "$ts_contract_address" | ||
printf "export AH_CONTRACT_ADDRESS=%s\n" "$ah_contract_address" |
Oops, something went wrong.