diff --git a/deploy/.registry.env.example b/deploy/.registry.env.example new file mode 100644 index 0000000..dc814bf --- /dev/null +++ b/deploy/.registry.env.example @@ -0,0 +1,10 @@ +# ENV for registry operations + +# Bond to use +REGISTRY_BOND_ID= + +# Target deployer LRN +DEPLOYER_LRN= + +# Authority to deploy the app under +AUTHORITY= diff --git a/deploy/Dockerfile b/deploy/Dockerfile new file mode 100644 index 0000000..7c038f5 --- /dev/null +++ b/deploy/Dockerfile @@ -0,0 +1,46 @@ +ARG VARIANT=20-bullseye +FROM node:${VARIANT} + +ARG USERNAME=node +ARG NPM_GLOBAL=/usr/local/share/npm-global + +# This container pulls npm packages from a local registry configured via these env vars +ARG CERC_NPM_URL +ARG CERC_NPM_AUTH_TOKEN + +# Add NPM global to PATH. +ENV PATH=${NPM_GLOBAL}/bin:${PATH} + +RUN \ + # Configure global npm install location, use group to adapt to UID/GID changes + if ! cat /etc/group | grep -e "^npm:" > /dev/null 2>&1; then groupadd -r npm; fi \ + && usermod -a -G npm ${USERNAME} \ + && umask 0002 \ + && mkdir -p ${NPM_GLOBAL} \ + && touch /usr/local/etc/npmrc \ + && chown ${USERNAME}:npm ${NPM_GLOBAL} /usr/local/etc/npmrc \ + && chmod g+s ${NPM_GLOBAL} \ + && npm config -g set prefix ${NPM_GLOBAL} \ + && su ${USERNAME} -c "npm config -g set prefix ${NPM_GLOBAL}" \ + # Install eslint + && su ${USERNAME} -c "umask 0002 && npm install -g eslint" \ + && npm cache clean --force > /dev/null 2>&1 + +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends jq bash + +# laconic-so +RUN curl -LO https://git.vdb.to/cerc-io/stack-orchestrator/releases/download/latest/laconic-so && \ +chmod +x ./laconic-so && \ +mv ./laconic-so /usr/bin/laconic-so + +RUN which laconic-so + +# Configure the npm registry +RUN npm config set @cerc-io:registry https://git.vdb.to/api/packages/cerc-io/npm/ + +# DEBUG, remove +RUN yarn info @cerc-io/laconic-registry-cli + +# Globally install the cli package +RUN yarn global add @cerc-io/laconic-registry-cli diff --git a/deploy/README.md b/deploy/README.md new file mode 100644 index 0000000..87f6863 --- /dev/null +++ b/deploy/README.md @@ -0,0 +1,42 @@ +# Deploy + +## Setup + +* Build registry CLI image: + + ```bash + docker build -t cerc/laconic-registry-cli . + + # Builds image cerc/laconic-registry-cli:latest + ``` + +* Configure `userKey` and `bondId` in registry CLI [config](./config.yml) + +* Add configuration for registry operations: + + ```bash + cp .registry.env.example .registry.env + + # Fill in the required values + nano .registry.env + ``` + +* Add configuration for the app: + + ```bash + cp ../env.example .app.env + + # Fill in the required values + nano .app.env + ``` + +## Run + +* Deploy sol-mem-gen App: + + ```bash + docker run -it \ + -v ./:/app/deploy -w /app/deploy \ + cerc/laconic-registry-cli:latest \ + ./deploy.sh + ``` diff --git a/deploy/config.yml b/deploy/config.yml new file mode 100644 index 0000000..0d5bbdb --- /dev/null +++ b/deploy/config.yml @@ -0,0 +1,10 @@ +# Registry CLI config +services: + registry: + rpcEndpoint: 'https://laconicd-sapo.laconic.com' + gqlEndpoint: 'https://laconicd-sapo.laconic.com/api' + userKey: + bondId: + chainId: laconic-testnet-2 + fees: 2.5 + gasPrice: 0.01alnt diff --git a/deploy/deploy.sh b/deploy/deploy.sh new file mode 100755 index 0000000..cd7969c --- /dev/null +++ b/deploy/deploy.sh @@ -0,0 +1,125 @@ +#!/bin/bash + +# Fail on error +set -e + +source .registry.env +echo "Using REGISTRY_BOND_ID: $REGISTRY_BOND_ID" +echo "Using DEPLOYER_LRN: $DEPLOYER_LRN" +echo "Using AUTHORITY: $AUTHORITY" + +# Repository URL +REPO_URL="https://git.vdb.to/deep-stack/sol-mem-gen" + +# Get the latest commit hash from the repository +LATEST_HASH=$(git ls-remote $REPO_URL HEAD | awk '{print $1}') + +echo "Repo: ${REPO_URL}" +echo "Latest hash: ${LATEST_HASH}" + +# Hardcoded, increment on each subsequent deployment with code changes +# TODO: Take from package.json +PACKAGE_VERSION=0.0.8 +APP_NAME=sol-mem-gen + +# Current date and time for note +CURRENT_DATE_TIME=$(date -u) + +CONFIG_FILE=config.yml + +# Reference: https://git.vdb.to/cerc-io/test-progressive-web-app/src/branch/main/scripts + +# Get latest version from registry and increment application-record version +NEW_APPLICATION_VERSION=$(laconic -c $CONFIG_FILE registry record list --type ApplicationRecord --all --name "$APP_NAME" 2>/dev/null | jq -r -s ".[] | sort_by(.createTime) | reverse | [ .[] | select(.bondId == \"$REGISTRY_BOND_ID\") ] | .[0].attributes.version" | awk -F. -v OFS=. '{$NF += 1 ; print}') + +if [ -z "$NEW_APPLICATION_VERSION" ] || [ "1" == "$NEW_APPLICATION_VERSION" ]; then + # Set application-record version if no previous records were found + NEW_APPLICATION_VERSION=0.0.2 +fi + +# Generate application-record.yml with incremented version +RECORD_FILE=./records/application-record.yml + +cat >$RECORD_FILE <