From be761d10b183b60807288623543f7d3d9461b9d4 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 22 Mar 2023 17:05:04 -0600 Subject: [PATCH 01/13] Initial commit Former-commit-id: f55aeee5838441cf1f69e3ad9e5f60862beb9125 --- .../fixturenet-laconic-loaded/README.md | 50 +++++++++++++++++++ .../fixturenet-laconic-loaded/stack.yml | 19 +++++++ 2 files changed, 69 insertions(+) create mode 100644 app/data/stacks/fixturenet-laconic-loaded/README.md create mode 100644 app/data/stacks/fixturenet-laconic-loaded/stack.yml diff --git a/app/data/stacks/fixturenet-laconic-loaded/README.md b/app/data/stacks/fixturenet-laconic-loaded/README.md new file mode 100644 index 0000000..000596e --- /dev/null +++ b/app/data/stacks/fixturenet-laconic-loaded/README.md @@ -0,0 +1,50 @@ +# Laconic Fixturenet (experimental) + +Testing a "Loaded" fixturenet with console. + +Instructions for deploying a local Laconic blockchain "fixturenet" for development and testing purposes using laconic-stack-orchestrator. + +## 1. Install Laconic Stack Orchestrator +Installation is covered in detail [here](https://github.com/cerc-io/stack-orchestrator#user-mode) but if you're on Linux and already have docker installed it should be as simple as: +``` +$ mkdir my-working-dir +$ cd my-working-dir +$ curl -L -o ./laconic-so https://github.com/cerc-io/stack-orchestrator/releases/latest/download/laconic-so +$ chmod +x ./laconic-so +$ export PATH=$PATH:$(pwd) # Or move laconic-so to ~/bin or your favorite on-path directory +``` +## 2. Prepare the local build environment +Note that this step needs only to be done once on a new machine. +Detailed instructions can be found [here](../build-support/README.md). For the impatient run these commands: +``` +$ laconic-so --stack build-support build-containers --exclude cerc/builder-gerbil +$ laconic-so --stack package-registry setup-repositories +$ laconic-so --stack package-registry deploy-system up +``` +Then add the localhost alias `gitea.local` and set `CERC_NPM_AUTH_TOKEN` to the token printed when the package-registry stack was deployed above: +``` +$ sudo vi /etc/hosts +$ export CERC_NPM_AUTH_TOKEN= +``` + +## 3. Clone required repositories +``` +$ laconic-so --stack fixturenet-laconicd setup-repositories +``` +## 4. Build the stack's packages and containers +``` +$ laconic-so --stack fixturenet-laconicd build-npms +$ laconic-so --stack fixturenet-laconicd build-containers +``` +## 5. Deploy the stack +``` +$ laconic-so --stack fixturenet-laconicd deploy up +``` +Correct operation should be verified by checking the laconicd container's logs with: +``` +$ laconic-so --stack fixturenet-laconicd deploy logs +``` +## 6. Test with the Registry CLI +``` +$ laconic-so --stack fixturenet-laconicd deploy exec cli "laconic cns status" +``` diff --git a/app/data/stacks/fixturenet-laconic-loaded/stack.yml b/app/data/stacks/fixturenet-laconic-loaded/stack.yml new file mode 100644 index 0000000..a82e9e5 --- /dev/null +++ b/app/data/stacks/fixturenet-laconic-loaded/stack.yml @@ -0,0 +1,19 @@ +version: "1.0" +name: fixturenet-laconic-loaded +description: "A full featured laconic fixturenet" +repos: + - cerc-io/laconicd + - cerc-io/laconic-sdk + - cerc-io/laconic-registry-cli + - cerc-io/laconic-console +npms: + - laconic-sdk + - laconic-registry-cli +containers: + - cerc/laconicd + - cerc/laconic-registry-cli +pods: + - fixturenet-laconicd +config: + cli: + key: laconicd.mykey From 9e138d8a6a9690e400825b63250ce0b5562d5764 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 23 Mar 2023 16:02:55 -0600 Subject: [PATCH 02/13] Initial commit Former-commit-id: c9e931c212f9871f7f328f34a9bad69a490f0db8 --- .../cerc-laconic-console-host/Dockerfile | 55 +++++++++++++++++++ .../cerc-laconic-console-host/build.sh | 9 +++ app/data/container-image-list.txt | 1 + .../fixturenet-laconic-loaded/stack.yml | 1 + 4 files changed, 66 insertions(+) create mode 100644 app/data/container-build/cerc-laconic-console-host/Dockerfile create mode 100755 app/data/container-build/cerc-laconic-console-host/build.sh diff --git a/app/data/container-build/cerc-laconic-console-host/Dockerfile b/app/data/container-build/cerc-laconic-console-host/Dockerfile new file mode 100644 index 0000000..a3dc9b1 --- /dev/null +++ b/app/data/container-build/cerc-laconic-console-host/Dockerfile @@ -0,0 +1,55 @@ +# Originally from: https://github.com/devcontainers/images/blob/main/src/javascript-node/.devcontainer/Dockerfile +# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster +ARG VARIANT=16-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 + +# [Optional] Uncomment this section to install additional OS packages. +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends jq + +# [Optional] Uncomment if you want to install an additional version of node using nvm +# ARG EXTRA_NODE_VERSION=10 +# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" + +# [Optional] Uncomment if you want to install more global node modules +# RUN su node -c "npm install -g " + +# Configure the local npm registry +RUN npm config set @lirewine:registry ${CERC_NPM_URL} \ + && npm config set @cerc-io:registry ${CERC_NPM_URL} \ + && npm config set @lirewine:registry ${CERC_NPM_URL} \ + && npm config set -- ${CERC_NPM_URL}:_authToken ${CERC_NPM_AUTH_TOKEN} + +# TODO: the image at this point could be made a base image for several different CLI images +# that install different Node-based CLI commands + +# Globally install the cli package +RUN yarn global add @cerc-io/console-app + +# Default command sleeps forever so docker doesn't kill it +CMD ["sh", "-c", "while :; do sleep 600; done"] diff --git a/app/data/container-build/cerc-laconic-console-host/build.sh b/app/data/container-build/cerc-laconic-console-host/build.sh new file mode 100755 index 0000000..cc84d24 --- /dev/null +++ b/app/data/container-build/cerc-laconic-console-host/build.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# Build cerc/laconic-registry-cli + +# See: https://stackoverflow.com/a/246128/1701505 +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +docker build -t cerc/laconic-console-host:local -f ${SCRIPT_DIR}/Dockerfile \ + --add-host gitea.local:host-gateway \ + --build-arg CERC_NPM_AUTH_TOKEN --build-arg CERC_NPM_URL ${SCRIPT_DIR} diff --git a/app/data/container-image-list.txt b/app/data/container-image-list.txt index 58e5e05..a822fe6 100644 --- a/app/data/container-image-list.txt +++ b/app/data/container-image-list.txt @@ -11,6 +11,7 @@ cerc/ipld-eth-beacon-indexer cerc/ipld-eth-server cerc/laconicd cerc/laconic-registry-cli +cerc/laconic-console-host cerc/fixturenet-eth-geth cerc/fixturenet-eth-lighthouse cerc/watcher-mobymask diff --git a/app/data/stacks/fixturenet-laconic-loaded/stack.yml b/app/data/stacks/fixturenet-laconic-loaded/stack.yml index a82e9e5..345430f 100644 --- a/app/data/stacks/fixturenet-laconic-loaded/stack.yml +++ b/app/data/stacks/fixturenet-laconic-loaded/stack.yml @@ -9,6 +9,7 @@ repos: npms: - laconic-sdk - laconic-registry-cli + - laconic-console containers: - cerc/laconicd - cerc/laconic-registry-cli From 2d64f49dc5e07b42d54ac731e242bc68196806bd Mon Sep 17 00:00:00 2001 From: David Boreham Date: Fri, 24 Mar 2023 02:59:03 -0600 Subject: [PATCH 03/13] Fix npm config Former-commit-id: 5b8c91d19d40d868d89c6037f9f498f003c8aab9 --- app/data/container-build/cerc-laconic-console-host/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/data/container-build/cerc-laconic-console-host/Dockerfile b/app/data/container-build/cerc-laconic-console-host/Dockerfile index a3dc9b1..5a62cc7 100644 --- a/app/data/container-build/cerc-laconic-console-host/Dockerfile +++ b/app/data/container-build/cerc-laconic-console-host/Dockerfile @@ -40,8 +40,7 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ # RUN su node -c "npm install -g " # Configure the local npm registry -RUN npm config set @lirewine:registry ${CERC_NPM_URL} \ - && npm config set @cerc-io:registry ${CERC_NPM_URL} \ +RUN npm config set @cerc-io:registry ${CERC_NPM_URL} \ && npm config set @lirewine:registry ${CERC_NPM_URL} \ && npm config set -- ${CERC_NPM_URL}:_authToken ${CERC_NPM_AUTH_TOKEN} From e608dca17590f9d883fd3644b55e7a67bf6c56ef Mon Sep 17 00:00:00 2001 From: David Boreham Date: Fri, 24 Mar 2023 17:31:41 -0600 Subject: [PATCH 04/13] Add sdk repo and npm Former-commit-id: f67e367ead160ec27ac2ac894be2cdfa8bf058ff --- app/data/npm-package-list.txt | 1 + app/data/repository-list.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/app/data/npm-package-list.txt b/app/data/npm-package-list.txt index 3b6656b..f7c43b7 100644 --- a/app/data/npm-package-list.txt +++ b/app/data/npm-package-list.txt @@ -3,3 +3,4 @@ laconic-registry-cli gem debug crypto +sdk diff --git a/app/data/repository-list.txt b/app/data/repository-list.txt index 2922d8c..5abfca7 100644 --- a/app/data/repository-list.txt +++ b/app/data/repository-list.txt @@ -22,3 +22,4 @@ dboreham/foundry lirewine/gem lirewine/debug lirewine/crypto +lirewine/sdk From 741b2257067a318c344fc79c063f4620f70f62ce Mon Sep 17 00:00:00 2001 From: David Boreham Date: Fri, 24 Mar 2023 19:32:41 -0600 Subject: [PATCH 05/13] Console host container builds Former-commit-id: 4ad2729ae8d8b009254756a703e49ce4b814f0ef --- app/data/npm-package-list.txt | 3 ++- app/data/repository-list.txt | 1 + app/data/stacks/fixturenet-laconic-loaded/stack.yml | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/data/npm-package-list.txt b/app/data/npm-package-list.txt index f7c43b7..f194e62 100644 --- a/app/data/npm-package-list.txt +++ b/app/data/npm-package-list.txt @@ -1,6 +1,7 @@ laconic-sdk laconic-registry-cli -gem +laconic-console debug crypto sdk +gem diff --git a/app/data/repository-list.txt b/app/data/repository-list.txt index 59dcb3d..0f2f976 100644 --- a/app/data/repository-list.txt +++ b/app/data/repository-list.txt @@ -9,6 +9,7 @@ cerc-io/ipld-eth-beacon-db cerc-io/laconicd cerc-io/laconic-sdk cerc-io/laconic-registry-cli +cerc-io/laconic-console cerc-io/mobymask-watcher cerc-io/watcher-ts cerc-io/react-peer diff --git a/app/data/stacks/fixturenet-laconic-loaded/stack.yml b/app/data/stacks/fixturenet-laconic-loaded/stack.yml index 345430f..efa3b19 100644 --- a/app/data/stacks/fixturenet-laconic-loaded/stack.yml +++ b/app/data/stacks/fixturenet-laconic-loaded/stack.yml @@ -3,6 +3,10 @@ name: fixturenet-laconic-loaded description: "A full featured laconic fixturenet" repos: - cerc-io/laconicd + - lirewine/debug + - lirewine/crypto + - lirewine/gem + - lirewine/sdk - cerc-io/laconic-sdk - cerc-io/laconic-registry-cli - cerc-io/laconic-console From aa7697dd3e3c060a81f66ea4359fc29611e6f3c1 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Sat, 25 Mar 2023 12:07:44 -0600 Subject: [PATCH 06/13] Add lirewine packages Former-commit-id: ca82d39c0cf9217bd5ebce29f810fc78b3195323 --- app/data/stacks/fixturenet-laconic-loaded/stack.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/data/stacks/fixturenet-laconic-loaded/stack.yml b/app/data/stacks/fixturenet-laconic-loaded/stack.yml index efa3b19..12fe28b 100644 --- a/app/data/stacks/fixturenet-laconic-loaded/stack.yml +++ b/app/data/stacks/fixturenet-laconic-loaded/stack.yml @@ -13,6 +13,10 @@ repos: npms: - laconic-sdk - laconic-registry-cli + - debug + - crypto + - sdk + - gem - laconic-console containers: - cerc/laconicd From 9b2268548476f2eb58691d7d9fdc308e2055cd0e Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 30 Mar 2023 00:15:36 -0600 Subject: [PATCH 07/13] Add web server to host container Former-commit-id: d01fb777d4ca03f24ba607dac6156f08d69f53e5 --- .../container-build/cerc-laconic-console-host/Dockerfile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/data/container-build/cerc-laconic-console-host/Dockerfile b/app/data/container-build/cerc-laconic-console-host/Dockerfile index 5a62cc7..7f86c69 100644 --- a/app/data/container-build/cerc-laconic-console-host/Dockerfile +++ b/app/data/container-build/cerc-laconic-console-host/Dockerfile @@ -44,11 +44,14 @@ RUN npm config set @cerc-io:registry ${CERC_NPM_URL} \ && npm config set @lirewine:registry ${CERC_NPM_URL} \ && npm config set -- ${CERC_NPM_URL}:_authToken ${CERC_NPM_AUTH_TOKEN} -# TODO: the image at this point could be made a base image for several different CLI images -# that install different Node-based CLI commands +# Install simple web server for now (use nginx perhaps later) +RUN yarn global add http-server -# Globally install the cli package +# Globally install the payload web app package RUN yarn global add @cerc-io/console-app +# Expose port for http +EXPOSE 80 + # Default command sleeps forever so docker doesn't kill it CMD ["sh", "-c", "while :; do sleep 600; done"] From 1fdfb9f568d3800da8112314897ecd28991e012c Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 30 Mar 2023 00:27:19 -0600 Subject: [PATCH 08/13] Add console container pod Former-commit-id: 3fb968c9cfe905c3a98f97d888ece0c707a3f1f9 --- .../compose/docker-compose-fixturenet-laconic-console.yml | 6 ++++++ .../container-build/cerc-laconic-console-host/Dockerfile | 2 +- app/data/stacks/fixturenet-laconic-loaded/stack.yml | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 app/data/compose/docker-compose-fixturenet-laconic-console.yml diff --git a/app/data/compose/docker-compose-fixturenet-laconic-console.yml b/app/data/compose/docker-compose-fixturenet-laconic-console.yml new file mode 100644 index 0000000..f402fa7 --- /dev/null +++ b/app/data/compose/docker-compose-fixturenet-laconic-console.yml @@ -0,0 +1,6 @@ +services: + laconic-console: + restart: unless-stopped + image: cerc/laconic-console-host:local + ports: + - "80" diff --git a/app/data/container-build/cerc-laconic-console-host/Dockerfile b/app/data/container-build/cerc-laconic-console-host/Dockerfile index 7f86c69..d2bac36 100644 --- a/app/data/container-build/cerc-laconic-console-host/Dockerfile +++ b/app/data/container-build/cerc-laconic-console-host/Dockerfile @@ -54,4 +54,4 @@ RUN yarn global add @cerc-io/console-app EXPOSE 80 # Default command sleeps forever so docker doesn't kill it -CMD ["sh", "-c", "while :; do sleep 600; done"] +CMD ["http-server", "-p", "80", "/usr/local/share/.config/yarn/global/node_modules/@cerc-io/console-app/dist/production"] diff --git a/app/data/stacks/fixturenet-laconic-loaded/stack.yml b/app/data/stacks/fixturenet-laconic-loaded/stack.yml index 12fe28b..5dcb3c7 100644 --- a/app/data/stacks/fixturenet-laconic-loaded/stack.yml +++ b/app/data/stacks/fixturenet-laconic-loaded/stack.yml @@ -23,6 +23,7 @@ containers: - cerc/laconic-registry-cli pods: - fixturenet-laconicd + - fixturenet-laconic-console config: cli: key: laconicd.mykey From d25de90df2e7acf1366843ba500c5022c0790ce0 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Fri, 31 Mar 2023 07:59:43 -0600 Subject: [PATCH 09/13] Add console host container to stack Former-commit-id: c45dd545dd6fe45593a9c603a7dd85f02a5c8206 --- app/data/stacks/fixturenet-laconic-loaded/stack.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/data/stacks/fixturenet-laconic-loaded/stack.yml b/app/data/stacks/fixturenet-laconic-loaded/stack.yml index 5dcb3c7..03d0a4c 100644 --- a/app/data/stacks/fixturenet-laconic-loaded/stack.yml +++ b/app/data/stacks/fixturenet-laconic-loaded/stack.yml @@ -21,6 +21,7 @@ npms: containers: - cerc/laconicd - cerc/laconic-registry-cli + - cerc/laconic-console-host pods: - fixturenet-laconicd - fixturenet-laconic-console From 1342be5723b28fae363a370548512e5e465b5882 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Fri, 31 Mar 2023 08:00:24 -0600 Subject: [PATCH 10/13] Add a temporary version of config to the hosting container Former-commit-id: 3372cac35e282e7b6d7d6963fe4d5f94d30c31d2 --- app/data/container-build/cerc-laconic-console-host/Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/data/container-build/cerc-laconic-console-host/Dockerfile b/app/data/container-build/cerc-laconic-console-host/Dockerfile index d2bac36..de477a8 100644 --- a/app/data/container-build/cerc-laconic-console-host/Dockerfile +++ b/app/data/container-build/cerc-laconic-console-host/Dockerfile @@ -50,6 +50,10 @@ RUN yarn global add http-server # Globally install the payload web app package RUN yarn global add @cerc-io/console-app +# Temp hack to fix up config +RUN cd /usr/local/share/.config/yarn/global/node_modules/@cerc-io/console-app/dist/production && \ + find . -type f -exec sed -i 's#LACONIC_HOSTED_CONFIG_SERVICES_WNS_SERVER#http://laconicd:9473/api#g' {} + + # Expose port for http EXPOSE 80 From 31f9f0e864497cbd9366efdc58531087a0479d03 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Fri, 31 Mar 2023 16:29:59 -0600 Subject: [PATCH 11/13] Implement deploy time config Former-commit-id: 409f61d68d756c605501f76fbfc41730cc239a1e --- .../cerc-laconic-console-host/Dockerfile | 14 ++++++-- .../apply-webapp-config.sh | 34 +++++++++++++++++++ .../cerc-laconic-console-host/config.yml | 6 ++++ .../start-serving-app.sh | 4 +++ 4 files changed, 55 insertions(+), 3 deletions(-) create mode 100755 app/data/container-build/cerc-laconic-console-host/apply-webapp-config.sh create mode 100644 app/data/container-build/cerc-laconic-console-host/config.yml create mode 100644 app/data/container-build/cerc-laconic-console-host/start-serving-app.sh diff --git a/app/data/container-build/cerc-laconic-console-host/Dockerfile b/app/data/container-build/cerc-laconic-console-host/Dockerfile index de477a8..fe5e50a 100644 --- a/app/data/container-build/cerc-laconic-console-host/Dockerfile +++ b/app/data/container-build/cerc-laconic-console-host/Dockerfile @@ -36,6 +36,12 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ # ARG EXTRA_NODE_VERSION=10 # RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" +# We do this to get a yq binary from the published container, for the correct architecture we're building here +COPY --from=docker.io/mikefarah/yq:latest /usr/bin/yq /usr/local/bin/yq + +RUN mkdir -p /scripts +COPY ./apply-webapp-config.sh /scripts + # [Optional] Uncomment if you want to install more global node modules # RUN su node -c "npm install -g " @@ -44,15 +50,17 @@ RUN npm config set @cerc-io:registry ${CERC_NPM_URL} \ && npm config set @lirewine:registry ${CERC_NPM_URL} \ && npm config set -- ${CERC_NPM_URL}:_authToken ${CERC_NPM_AUTH_TOKEN} +RUN mkdir -p /config +COPY ./config.yml /config + # Install simple web server for now (use nginx perhaps later) RUN yarn global add http-server # Globally install the payload web app package RUN yarn global add @cerc-io/console-app -# Temp hack to fix up config -RUN cd /usr/local/share/.config/yarn/global/node_modules/@cerc-io/console-app/dist/production && \ - find . -type f -exec sed -i 's#LACONIC_HOSTED_CONFIG_SERVICES_WNS_SERVER#http://laconicd:9473/api#g' {} + +# Run this script to substitute the config values into the unpackaged webapp files: +# ./scripts/apply-webapp-config.sh ./config/config.yml /usr/local/share/.config/yarn/global/node_modules/@cerc-io/console-app/dist/production # Expose port for http EXPOSE 80 diff --git a/app/data/container-build/cerc-laconic-console-host/apply-webapp-config.sh b/app/data/container-build/cerc-laconic-console-host/apply-webapp-config.sh new file mode 100755 index 0000000..a453cc8 --- /dev/null +++ b/app/data/container-build/cerc-laconic-console-host/apply-webapp-config.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi +if [[ $# -ne 2 ]]; then + echo "Illegal number of parameters" >&2 + exit 1 +fi +config_file_name=$1 +webapp_files_dir=$2 +if ![[ -f ${config_file_name} ]]; then + echo "Config file ${config_file_name} does not exist" >&2 + exit 1 +fi +if ![[ -d ${webapp_files_dir} ]]; then + echo "Webapp directory ${webapp_files_dir} does not exist" >&2 + exit 1 +fi +# First some magic using yq to translate our yaml config file into an array of key value pairs like: +# LACONIC_HOSTED_CONFIG_= +readarray -t config_kv_pair_array < <( yq '.. | select(length > 2) | ([path | join("_"), .] | join("=") )' ${config_file_name} | sed 's/^/LACONIC_HOSTED_CONFIG_/' ) +declare -p config_kv_pair_array +# Then iterate over that kv array making the template substitution in our web app files +for kv_pair_string in "${config_kv_pair_array[@]}" +do + kv_pair=(${kv_pair_string//=/ }) + template_string_to_replace=${kv_pair[0]} + template_value_to_substitute=${kv_pair[1]} + # Run find and sed to do the substitution of one variable over all files + # See: https://stackoverflow.com/a/21479607/1701505 + echo "Substituting: ${template_string_to_replace} = ${template_value_to_substitute}" + # Note: we do not escape our strings, on the expectation they do not container the '#' char. + find ${webapp_files_dir} -type f -exec sed -i 's#'${template_string_to_replace}'#'${template_value_to_substitute}'#g' {} + +done diff --git a/app/data/container-build/cerc-laconic-console-host/config.yml b/app/data/container-build/cerc-laconic-console-host/config.yml new file mode 100644 index 0000000..dc385bf --- /dev/null +++ b/app/data/container-build/cerc-laconic-console-host/config.yml @@ -0,0 +1,6 @@ +# Config for laconic-console running in a fixturenet with laconicd + +services: + wns: + server: 'http:/laconicd:9473/api' + webui: 'http://laconicd:9473/console' diff --git a/app/data/container-build/cerc-laconic-console-host/start-serving-app.sh b/app/data/container-build/cerc-laconic-console-host/start-serving-app.sh new file mode 100644 index 0000000..ab46667 --- /dev/null +++ b/app/data/container-build/cerc-laconic-console-host/start-serving-app.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi From 2b94ed12c272e98816bb251b7e943ee8b2bbfc3b Mon Sep 17 00:00:00 2001 From: David Boreham Date: Fri, 31 Mar 2023 16:33:48 -0600 Subject: [PATCH 12/13] Run template substitution on start Former-commit-id: e072a6bc4bd5072905b32f9739cfeadca04288fb --- .../container-build/cerc-laconic-console-host/Dockerfile | 6 ++---- .../cerc-laconic-console-host/start-serving-app.sh | 4 ++++ 2 files changed, 6 insertions(+), 4 deletions(-) mode change 100644 => 100755 app/data/container-build/cerc-laconic-console-host/start-serving-app.sh diff --git a/app/data/container-build/cerc-laconic-console-host/Dockerfile b/app/data/container-build/cerc-laconic-console-host/Dockerfile index fe5e50a..66eec1f 100644 --- a/app/data/container-build/cerc-laconic-console-host/Dockerfile +++ b/app/data/container-build/cerc-laconic-console-host/Dockerfile @@ -41,6 +41,7 @@ COPY --from=docker.io/mikefarah/yq:latest /usr/bin/yq /usr/local/bin/yq RUN mkdir -p /scripts COPY ./apply-webapp-config.sh /scripts +COPY ./start-serving-app.sh /scripts # [Optional] Uncomment if you want to install more global node modules # RUN su node -c "npm install -g " @@ -59,11 +60,8 @@ RUN yarn global add http-server # Globally install the payload web app package RUN yarn global add @cerc-io/console-app -# Run this script to substitute the config values into the unpackaged webapp files: -# ./scripts/apply-webapp-config.sh ./config/config.yml /usr/local/share/.config/yarn/global/node_modules/@cerc-io/console-app/dist/production - # Expose port for http EXPOSE 80 # Default command sleeps forever so docker doesn't kill it -CMD ["http-server", "-p", "80", "/usr/local/share/.config/yarn/global/node_modules/@cerc-io/console-app/dist/production"] +CMD ["/scripts/start-serving-app.sh"] diff --git a/app/data/container-build/cerc-laconic-console-host/start-serving-app.sh b/app/data/container-build/cerc-laconic-console-host/start-serving-app.sh old mode 100644 new mode 100755 index ab46667..a322e5f --- a/app/data/container-build/cerc-laconic-console-host/start-serving-app.sh +++ b/app/data/container-build/cerc-laconic-console-host/start-serving-app.sh @@ -2,3 +2,7 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi +# TODO: Don't hard wire this: +webapp_files_dir=/usr/local/share/.config/yarn/global/node_modules/@cerc-io/console-app/dist/production +/scripts/apply-webapp-config.sh /config/config.yml ${webapp_files_dir} +http-server -p 80 ${webapp_files_dir} From bddf72ee46f916d2d57e173369e844cca0dab53d Mon Sep 17 00:00:00 2001 From: David Boreham Date: Sat, 1 Apr 2023 10:06:39 -0600 Subject: [PATCH 13/13] Temporary punch the port through to the host to make things work Former-commit-id: f6cb041634df98b29e793bbbb2938d7515bcfef3 --- app/data/compose/docker-compose-fixturenet-laconicd.yml | 2 +- app/data/container-build/cerc-laconic-console-host/config.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/data/compose/docker-compose-fixturenet-laconicd.yml b/app/data/compose/docker-compose-fixturenet-laconicd.yml index 9663e7f..5d777b5 100644 --- a/app/data/compose/docker-compose-fixturenet-laconicd.yml +++ b/app/data/compose/docker-compose-fixturenet-laconicd.yml @@ -13,7 +13,7 @@ services: - "6060" - "26657" - "26656" - - "9473" + - "9473:9473" - "8545" - "8546" - "9090" diff --git a/app/data/container-build/cerc-laconic-console-host/config.yml b/app/data/container-build/cerc-laconic-console-host/config.yml index dc385bf..da57724 100644 --- a/app/data/container-build/cerc-laconic-console-host/config.yml +++ b/app/data/container-build/cerc-laconic-console-host/config.yml @@ -2,5 +2,5 @@ services: wns: - server: 'http:/laconicd:9473/api' - webui: 'http://laconicd:9473/console' + server: 'http://localhost:9473/api' + webui: 'http://localhost:9473/console'