From 83d928c479da3cb47b9c2bd357f0e5d29e0fa679 Mon Sep 17 00:00:00 2001 From: "raynato.c.pedrajeta" Date: Mon, 15 Jul 2024 13:54:52 +0800 Subject: [PATCH] feat(connector-daml): aio image Primary Changes --------------- 1. Create a docker image on daml-all-in-one folder that contains an initial creation of DAML smart contracts Fixes #3284 Signed-off-by: raynato.c.pedrajeta --- .github/workflows/ci.yaml | 7 +++ tools/docker/daml-all-in-one/.env | 4 ++ tools/docker/daml-all-in-one/Dockerfile | 23 ++++++++ tools/docker/daml-all-in-one/Readme.md | 30 ++++++++++ .../daml-all-in-one/daml-all-in-one.yaml | 56 +++++++++++++++++++ tools/docker/daml-all-in-one/healthcheck.sh | 11 ++++ tools/docker/daml-all-in-one/supervisord.conf | 15 +++++ 7 files changed, 146 insertions(+) create mode 100644 tools/docker/daml-all-in-one/.env create mode 100644 tools/docker/daml-all-in-one/Dockerfile create mode 100644 tools/docker/daml-all-in-one/Readme.md create mode 100644 tools/docker/daml-all-in-one/daml-all-in-one.yaml create mode 100644 tools/docker/daml-all-in-one/healthcheck.sh create mode 100644 tools/docker/daml-all-in-one/supervisord.conf diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index bb09b75514e..d8e4fbf9265 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -2630,6 +2630,13 @@ jobs: - name: ghcr.io/hyperledger/cactus-fabric2-all-in-one run: DOCKER_BUILDKIT=1 docker build ./tools/docker/fabric-all-in-one/ -f ./tools/docker/fabric-all-in-one/Dockerfile_v2.x + ghcr-daml-all-in-one: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4.1.1 + - name: ghcr.io/hyperledger/daml-all-in-one + run: DOCKER_BUILDKIT=1 docker build ./tools/docker/daml-all-in-one/ -f ./tools/docker/daml-all-in-one/Dockerfile + ghcr-keychain-vault-server: runs-on: ubuntu-22.04 steps: diff --git a/tools/docker/daml-all-in-one/.env b/tools/docker/daml-all-in-one/.env new file mode 100644 index 00000000000..6fa6d82b8ce --- /dev/null +++ b/tools/docker/daml-all-in-one/.env @@ -0,0 +1,4 @@ +# DAMLAUTH = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL2RhbWwuY29tL2xlZGdlci1hcGkiOnsibGVkZ2VySWQiOiJzYW5kYm94IiwiYXBwbGljYXRpb25JZCI6ImZvb2JhciIsImFjdEFzIjpbIkFsaWNlIl19fQ.1Y9BBFH5uVz1Nhfmx12G_ECJVcMncwm-XLaWM40EHbY +KEY=value +ANOTHER_KEY="val" +DAML_AUTH="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL2RhbWwuY29tL2xlZGdlci1hcGkiOnsibGVkZ2VySWQiOiJzYW5kYm94IiwiYXBwbGljYXRpb25JZCI6ImZvb2JhciIsImFjdEFzIjpbIkFsaWNlIl19fQ.1Y9BBFH5uVz1Nhfmx12G_ECJVcMncwm-XLaWM40EHbY" \ No newline at end of file diff --git a/tools/docker/daml-all-in-one/Dockerfile b/tools/docker/daml-all-in-one/Dockerfile new file mode 100644 index 00000000000..b6607309b21 --- /dev/null +++ b/tools/docker/daml-all-in-one/Dockerfile @@ -0,0 +1,23 @@ +FROM ubuntu:22.04 + +RUN apt update +RUN apt install curl openjdk-21-jdk -y +RUN curl -sSL https://get.daml.com/ | sh +ENV PATH="/root/.daml/bin:${PATH}" +RUN daml new create-daml-app --template create-daml-app +WORKDIR /create-daml-app + +RUN apt-get update && apt-get install -y supervisor +RUN mkdir -p /var/log/supervisor +COPY supervisord.conf /etc/supervisord.conf + +EXPOSE 9001 + +ENTRYPOINT ["/usr/bin/supervisord"] +CMD ["--configuration","/etc/supervisord.conf", "--nodaemon"] + + +COPY healthcheck.sh /healthcheck.sh +RUN chmod +x /healthcheck.sh + +HEALTHCHECK --interval=30s --timeout=60s --start-period=100s --retries=100 CMD /healthcheck.sh \ No newline at end of file diff --git a/tools/docker/daml-all-in-one/Readme.md b/tools/docker/daml-all-in-one/Readme.md new file mode 100644 index 00000000000..b1b5441deb8 --- /dev/null +++ b/tools/docker/daml-all-in-one/Readme.md @@ -0,0 +1,30 @@ +# DAML All in One Image + +An all in one DAML docker image with the `sample ledger contracts`. +- This docker image is for `testing` and `development` only. +- **Do NOT use in production!** + +## Build an image locally + +To build the besu v1.5.1 image locally, use: +```sh +docker build ./tools/docker/daml-all-in-one/ -t daml-all-in-one +``` + +## Running daml-all-in-one container: + +```sh +docker run --privileged -p 6865:6865 -p 7575:7575 daml-all-in-one +``` + +The following ports are open on the container: + +```yaml +- 6865:6865 # DAML Navigator +- 7575:7575 # DAML API entrypoint + +``` +## Logs of DAML via supervisord web UI: + +Navigate your browser to http://localhost:9001 + diff --git a/tools/docker/daml-all-in-one/daml-all-in-one.yaml b/tools/docker/daml-all-in-one/daml-all-in-one.yaml new file mode 100644 index 00000000000..fa2d8724d2c --- /dev/null +++ b/tools/docker/daml-all-in-one/daml-all-in-one.yaml @@ -0,0 +1,56 @@ +name: daml-all-in-one-publish + +on: + # Publish `v1.2.3` tags as releases. + push: + tags: + - v* + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + IMAGE_NAME: cactus-daml-all-in-one + +jobs: + # Push image to GitHub Packages. + # See also https://docs.docker.com/docker-hub/builds/ + build-tag-push-container: + runs-on: ubuntu-22.04 + env: + DOCKER_BUILDKIT: 1 + DOCKERFILE_PATH: ./tools/docker/daml-all-in-one/Dockerfile + DOCKER_BUILD_DIR: ./tools/docker/daml-all-in-one/ + permissions: + packages: write + contents: read + + steps: + - uses: actions/checkout@v4.1.1 + + - name: Build image + run: docker build "$DOCKER_BUILD_DIR" --file "$DOCKERFILE_PATH" --tag "$IMAGE_NAME" --label "runnumber=${GITHUB_RUN_ID}" + + - name: Log in to registry + # This is where you will update the PAT to GITHUB_TOKEN + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin + + - name: Push image + run: | + SHORTHASH=$(git rev-parse --short "$GITHUB_SHA") + TODAYS_DATE="$(date +%F)" + DOCKER_TAG="$TODAYS_DATE-$SHORTHASH" + IMAGE_ID="ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME" + # Change all uppercase to lowercase + IMAGE_ID=$(echo "$IMAGE_ID" | tr '[:upper:]' '[:lower:]') + # Strip git ref prefix from version + VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') + # Strip "v" prefix from tag name + [[ "${{ github.ref }}" == "refs/tags/*" ]] && VERSION="${VERSION//^v//}" + # Do not use the `latest` tag at all, tag with date + git short hash if there is no git tag + [ "$VERSION" == "main" ] && VERSION=$DOCKER_TAG + echo IMAGE_ID="$IMAGE_ID" + echo VERSION="$VERSION" + docker tag "$IMAGE_NAME" "$IMAGE_ID:$VERSION" + docker push "$IMAGE_ID:$VERSION" diff --git a/tools/docker/daml-all-in-one/healthcheck.sh b/tools/docker/daml-all-in-one/healthcheck.sh new file mode 100644 index 00000000000..316414d28a3 --- /dev/null +++ b/tools/docker/daml-all-in-one/healthcheck.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Load the environment variables from the .env file +if [ -f .env ]; then + export $(cat .env | grep -v '#' | awk '/=/ {print $1}') + echo "possible" +fi + +set -e +curl -X GET http://localhost:7575/v1/query -H "Content-Type: application/json" -H "Authorization: Bearer $DAML_AUTH" + +echo "DAML API Success!" \ No newline at end of file diff --git a/tools/docker/daml-all-in-one/supervisord.conf b/tools/docker/daml-all-in-one/supervisord.conf new file mode 100644 index 00000000000..6516e53a45b --- /dev/null +++ b/tools/docker/daml-all-in-one/supervisord.conf @@ -0,0 +1,15 @@ +[supervisord] +logfile_maxbytes = 50MB +logfile_backups=10 +loglevel = info + +[program:daml] +command=daml start +autostart=true +autorestart=true +stderr_logfile=/var/log/daml.err.log +stdout_logfile=/var/log/daml.out.log + +[inet_http_server] +port = 0.0.0.0:9001 +