diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6936f60ef9..00dd9e0b7f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -2597,6 +2597,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/Dockerfile b/tools/docker/daml-all-in-one/Dockerfile new file mode 100644 index 0000000000..b6607309b2 --- /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 0000000000..b1b5441deb --- /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 0000000000..fa2d8724d2 --- /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 0000000000..818ddefb69 --- /dev/null +++ b/tools/docker/daml-all-in-one/healthcheck.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# docker exec -it eb40b692a662 /bin/bash +set -e +curl -X GET http://localhost:7575/v1/query -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL2RhbWwuY29tL2xlZGdlci1hcGkiOnsibGVkZ2VySWQiOiJzYW5kYm94IiwiYXBwbGljYXRpb25JZCI6ImZvb2JhciIsImFjdEFzIjpbIkFsaWNlIl19fQ.1Y9BBFH5uVz1Nhfmx12G_ECJVcMncwm-XLaWM40EHbY" + +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 0000000000..6516e53a45 --- /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 +