diff --git a/.gitea/workflows/deploy-namada.yml b/.gitea/workflows/deploy-namada.yml index 35ab9f9..ea3f1be 100644 --- a/.gitea/workflows/deploy-namada.yml +++ b/.gitea/workflows/deploy-namada.yml @@ -15,7 +15,9 @@ env: CERC_REGISTRY_GQL_ENDPOINT: "https://laconicd-sapo.laconic.com/api" CERC_REGISTRY_CHAIN_ID: "laconic-testnet-2" CERC_REGISTRY_DEPLOYMENT_HOSTNAME: namadillo + APP_NAME: "namada-interface" DEPLOYER_LRN: "lrn://vaasl-provider/deployers/webapp-deployer-api.apps.vaasl.io" + AUTHORITY: "vaasl" jobs: diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..354d488 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,124 @@ +#!/bin/bash + +# Exit on any error +set -e + +# Check for required positional arguments +if [ $# -ne 2 ]; then + echo "Error: Two arguments required" + echo "Usage: $0 " + exit 1 +fi + +# Check required environment variables +if [ -z "$CERC_REGISTRY_USER_KEY" ]; then + echo "Error: CERC_REGISTRY_USER_KEY environment variable is required" + exit 1 +fi + +if [ -z "$CERC_REGISTRY_BOND_ID" ]; then + echo "Error: CERC_REGISTRY_BOND_ID environment variable is required" + exit 1 +fi + +REPO_PATH="$1" +TAG="$2" +REPO="https://github.com/${REPO_PATH}" + +# Get the commit hash for the tag using GitHub API +COMMIT_HASH=$(curl -s "https://api.github.com/repos/${REPO_PATH}/git/refs/tags/${TAG}" | jq -r '.object.sha') +if [ -z "$COMMIT_HASH" ] || [ "$COMMIT_HASH" = "null" ]; then + echo "Error: Could not find commit hash for tag $TAG" + exit 1 +fi + +# Create temporary files +RECORD_FILE=tmp.rf.$$ +CONFIG_FILE=$(mktemp) + +# Generate registry configuration +cat < "$CONFIG_FILE" +services: + registry: + rpcEndpoint: '${CERC_REGISTRY_RPC_ENDPOINT}' + gqlEndpoint: '${CERC_REGISTRY_GQL_ENDPOINT}' + chainId: ${CERC_REGISTRY_CHAIN_ID} + gas: 900000 + fees: 900000alnt +EOF + +# Generate the application record +cat < "$RECORD_FILE" +record: + type: ApplicationRecord + name: "$APP_NAME" + version: "$TAG" + app_type: webapp + repository: + - "$REPO" + repository_ref: "$COMMIT_HASH" + app_version: "0.0.1" +EOF + +# Publish the application record +echo "Publishing application record..." +cat $RECORD_FILE +RECORD_ID=$(laconic -c $CONFIG_FILE registry record publish --filename $RECORD_FILE --user-key "${CERC_REGISTRY_USER_KEY}" --bond-id ${CERC_REGISTRY_BOND_ID} | jq -r '.id') +echo "Record ID: $RECORD_ID" + +# Set up LRN (Laconic Resource Name) +if [ -z "$CERC_REGISTRY_APP_LRN" ]; then + CERC_REGISTRY_APP_LRN="lrn://$AUTHORITY/applications/$APP_NAME" +fi + +# Handle deployer payment if required +if [ ! -z "$DEPLOYER_LRN" ]; then + echo "Processing deployer payment..." + paymentAddress=$(laconic -c $CONFIG_FILE registry name resolve "$DEPLOYER_LRN" | jq -r '.[0].attributes.paymentAddress') + paymentAmount=$(laconic -c $CONFIG_FILE registry name resolve "$DEPLOYER_LRN" | jq -r '.[0].attributes.minimumPayment' | sed 's/alnt//g') + + if [[ -n "$paymentAmount" && "$paymentAmount" != "null" ]]; then + payment=$(laconic -c $CONFIG_FILE registry tokens send --address "$paymentAddress" --type alnt --quantity "$paymentAmount" --user-key "$CERC_REGISTRY_USER_KEY" --bond-id "$CERC_REGISTRY_BOND_ID") + txHash=$(echo "$payment" | jq -r '.tx.hash') + echo "Paid deployer with txHash: $txHash" + else + echo "No payment required - skipping payment step" + txHash="" +fi + +# Generate deployment request +echo "Generating deployment request..." +cat < "$RECORD_FILE" +record: + type: ApplicationDeploymentRequest + version: '1.0.0' + name: "$APP_NAME" + application: "$CERC_REGISTRY_APP_LRN" + deployer: $DEPLOYER_LRN + dns: $CERC_REGISTRY_DEPLOYMENT_HOSTNAME + config: + env: + LACONIC_HOSTED_CONFIG_laconicd_chain_id: laconic-testnet-2 + meta: + note: "Added by CI @ $(date)" + repository: "$REPO" + repository_ref: "$COMMIT_HASH" + payment: $txHash +EOF + + cat $RECORD_FILE + DEPLOY_RECORD_ID=$(laconic -c $CONFIG_FILE registry record publish \ + --filename $RECORD_FILE \ + --user-key "${CERC_REGISTRY_USER_KEY}" \ + --bond-id ${CERC_REGISTRY_BOND_ID} | jq -r '.id') + echo "Deployment Record ID: $DEPLOY_RECORD_ID" +fi + +# Set name mappings +echo "Setting name mappings..." +laconic -c $CONFIG_FILE registry name set --user-key "${CERC_REGISTRY_USER_KEY}" --bond-id ${CERC_REGISTRY_BOND_ID} "$CERC_REGISTRY_APP_LRN" "$RECORD_ID" +laconic -c $CONFIG_FILE registry name set --user-key "${CERC_REGISTRY_USER_KEY}" --bond-id ${CERC_REGISTRY_BOND_ID} "$CERC_REGISTRY_APP_LRN@${CERC_REPO_REF}" "$RECORD_ID" + +# Cleanup +rm -f $RECORD_FILE $CONFIG_FILE +echo "Script completed successfully"