From 9c723d8600e3e56e86a4c04bc60345b1bc5c0d75 Mon Sep 17 00:00:00 2001 From: zramsay Date: Wed, 5 Feb 2025 16:37:42 -0500 Subject: [PATCH] update --- .github/workflows/publish.yml | 13 +++- scripts/deploy.sh | 124 ++++++++++++++++++++++++++++++ scripts/publish-app-record.sh | 69 ----------------- scripts/request-app-deployment.sh | 57 -------------- 4 files changed, 133 insertions(+), 130 deletions(-) create mode 100755 scripts/deploy.sh delete mode 100755 scripts/publish-app-record.sh delete mode 100755 scripts/request-app-deployment.sh diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 02c6449..08888b2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -7,8 +7,15 @@ on: - '*' env: + env: CERC_REGISTRY_USER_KEY: ${{ secrets.CICD_LACONIC_USER_KEY }} CERC_REGISTRY_BOND_ID: ${{ secrets.CICD_LACONIC_BOND_ID }} + CERC_REGISTRY_RPC_ENDPOINT: "https://laconicd-sapo.laconic.com" + CERC_REGISTRY_GQL_ENDPOINT: "https://laconicd-sapo.laconic.com/api" + CERC_REGISTRY_CHAIN_ID: "laconic-testnet-2" + CERC_REGISTRY_DEPLOYMENT_HOSTNAME: laconic-dot-com + DEPLOYER_LRN: "lrn://vaasl-provider/deployers/webapp-deployer-api.apps.vaasl.io" + AUTHORITY: "vaasl" jobs: registry_publish: @@ -28,7 +35,5 @@ jobs: yarn global add @cerc-io/laconic-registry-cli@0.2.0 - name: "Install jq" run: apt -y update && apt -y install jq - - name: "Publish Application Record" - run: scripts/publish-app-record.sh - - name: "Request Deployment" - run: scripts/request-app-deployment.sh + - name: "Deploy" + run: scripts/deploy.sh diff --git a/scripts/deploy.sh b/scripts/deploy.sh new file mode 100755 index 0000000..3a87d41 --- /dev/null +++ b/scripts/deploy.sh @@ -0,0 +1,124 @@ +#!/bin/bash + +# Exit on any error +set -e + +# Trigger + +# 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 + +TAG="0.0.2" +REPO="https://git.vdb.to/LaconicNetwork/laconic-dot-com" + +# Get the commit hash for the tag using GitHub API +COMMIT_HASH=$(`git log -1 --format="%H"`) + + +# 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: + NEXT_PUBLIC_DATOCMS_BYPASS_TYPE: "local_json" + CERC_MAX_GENERATE_TIME: 180 + 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" + diff --git a/scripts/publish-app-record.sh b/scripts/publish-app-record.sh deleted file mode 100755 index 7d21d85..0000000 --- a/scripts/publish-app-record.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash - -set -e - -RECORD_FILE=tmp.rf.$$ -CONFIG_FILE=`mktemp` - -CERC_APP_TYPE=${CERC_APP_TYPE:-"webapp"} -CERC_REPO_REF=${CERC_REPO_REF:-${GITHUB_SHA:-`git log -1 --format="%H"`}} -CERC_IS_LATEST_RELEASE=${CERC_IS_LATEST_RELEASE:-"true"} - -rcd_name=$(jq -r '.name' package.json | sed 's/null//') -rcd_desc=$(jq -r '.description' package.json | sed 's/null//') -rcd_repository=$(jq -r '.repository' package.json | sed 's/null//') -rcd_homepage=$(jq -r '.homepage' package.json | sed 's/null//') -rcd_license=$(jq -r '.license' package.json | sed 's/null//') -rcd_author=$(jq -r '.author' package.json | sed 's/null//') -rcd_app_version=$(jq -r '.version' package.json | sed 's/null//') - -cat < "$CONFIG_FILE" -services: - registry: - rpcEndpoint: '${CERC_REGISTRY_REST_ENDPOINT:-http://159.203.31.82:26657}' - gqlEndpoint: '${CERC_REGISTRY_GQL_ENDPOINT:-http://159.203.31.82:9473/api}' - chainId: ${CERC_REGISTRY_CHAIN_ID:-laconic_9000-1} - gas: 550000 - fees: 20000photon -EOF - -next_ver=$(laconic -c $CONFIG_FILE registry record list --type ApplicationRecord --all --name "$rcd_name" 2>/dev/null | jq -r -s ".[] | sort_by(.createTime) | reverse | [ .[] | select(.bondId == \"$CERC_REGISTRY_BOND_ID\") ] | .[0].attributes.version" | awk -F. -v OFS=. '{$NF += 1 ; print}') - -if [ -z "$next_ver" ] || [ "1" == "$next_ver" ]; then - next_ver=0.0.1 -fi - -cat < "$RECORD_FILE" -record: - type: ApplicationRecord - version: ${next_ver} - name: "$rcd_name" - description: "$rcd_desc" - homepage: "$rcd_homepage" - license: "$rcd_license" - author: "$rcd_author" - repository: - - "$rcd_repository" - repository_ref: "$CERC_REPO_REF" - app_version: "$rcd_app_version" - app_type: "$CERC_APP_TYPE" -EOF - - -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 - -if [ -z "$CERC_REGISTRY_APP_CRN" ]; then - authority=$(echo "$rcd_name" | cut -d'/' -f1 | sed 's/@//') - app=$(echo "$rcd_name" | cut -d'/' -f2-) - CERC_REGISTRY_APP_CRN="lrn://$authority/applications/$app" -fi - -laconic -c $CONFIG_FILE registry name set --user-key "${CERC_REGISTRY_USER_KEY}" --bond-id ${CERC_REGISTRY_BOND_ID} "$CERC_REGISTRY_APP_CRN@${rcd_app_version}" "$RECORD_ID" -laconic -c $CONFIG_FILE registry name set --user-key "${CERC_REGISTRY_USER_KEY}" --bond-id ${CERC_REGISTRY_BOND_ID} "$CERC_REGISTRY_APP_CRN@${CERC_REPO_REF}" "$RECORD_ID" -if [ "true" == "$CERC_IS_LATEST_RELEASE" ]; then - laconic -c $CONFIG_FILE registry name set --user-key "${CERC_REGISTRY_USER_KEY}" --bond-id ${CERC_REGISTRY_BOND_ID} "$CERC_REGISTRY_APP_CRN" "$RECORD_ID" -fi - -rm -f $RECORD_FILE $CONFIG_FILE diff --git a/scripts/request-app-deployment.sh b/scripts/request-app-deployment.sh deleted file mode 100755 index 9ac8d5d..0000000 --- a/scripts/request-app-deployment.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - -set -e - -RECORD_FILE=tmp.rf.$$ -CONFIG_FILE=`mktemp` - -rcd_name=$(jq -r '.name' package.json | sed 's/null//' | sed 's/^@//') -rcd_app_version=$(jq -r '.version' package.json | sed 's/null//') - -cat < "$CONFIG_FILE" -services: - registry: - rpcEndpoint: '${CERC_REGISTRY_REST_ENDPOINT:-http://159.203.31.82:26657}' - gqlEndpoint: '${CERC_REGISTRY_GQL_ENDPOINT:-http://159.203.31.82:9473/api}' - chainId: ${CERC_REGISTRY_CHAIN_ID:-laconic_9000-1} - gas: 550000 - fees: 20000photon -EOF - -if [ -z "$CERC_REGISTRY_APP_CRN" ]; then - authority=$(echo "$rcd_name" | cut -d'/' -f1 | sed 's/@//') - app=$(echo "$rcd_name" | cut -d'/' -f2-) - CERC_REGISTRY_APP_CRN="lrn://$authority/applications/$app" -fi - -APP_RECORD=$(laconic -c $CONFIG_FILE registry name resolve "$CERC_REGISTRY_APP_CRN" | jq '.[0]') -if [ -z "$APP_RECORD" ] || [ "null" == "$APP_RECORD" ]; then - echo "No record found for $CERC_REGISTRY_APP_CRN." - exit 1 -fi - -cat < "$RECORD_FILE" -record: - type: ApplicationDeploymentRequest - version: 1.0.0 - name: "$rcd_name@$rcd_app_version" - application: "$CERC_REGISTRY_APP_CRN@$rcd_app_version" - dns: "$CERC_REGISTRY_DEPLOYMENT_SHORT_HOSTNAME" - deployment: "$CERC_REGISTRY_DEPLOYMENT_CRN" - config: - env: - CERC_WEBAPP_DEBUG: "$rcd_app_version" - NEXT_PUBLIC_DATOCMS_BYPASS_TYPE: "local_json" - CERC_MAX_GENERATE_TIME: 180 - CERC_NEXT_VERSION: 13.4.2 - meta: - note: "Added by CI @ `date`" - repository: "`git remote get-url origin`" - repository_ref: "${GITHUB_SHA:-`git log -1 --format="%H"`}" -EOF - -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 - -rm -f $RECORD_FILE $CONFIG_FILE