From 421d6d826ade5acdcf8db3ad6fcdeef4cec41f73 Mon Sep 17 00:00:00 2001 From: Henrik Soerensen Date: Thu, 8 Aug 2024 21:13:07 -0400 Subject: [PATCH] Add Docker file for testnet relay setup guide --- .github/workflows/build-legay-relay.yml | 157 ++++++++++++++++++++++++ Dockerfile.legacy-relay | 9 ++ bake.hcl | 6 + 3 files changed, 172 insertions(+) create mode 100644 .github/workflows/build-legay-relay.yml create mode 100644 Dockerfile.legacy-relay diff --git a/.github/workflows/build-legay-relay.yml b/.github/workflows/build-legay-relay.yml new file mode 100644 index 0000000..20d714a --- /dev/null +++ b/.github/workflows/build-legay-relay.yml @@ -0,0 +1,157 @@ +name: build + +on: + push: + branches: + - 'main' + - 'v[0-9]*' + tags: + - 'v*' + pull_request: + workflow_dispatch: + +env: + REGISTRY_IMAGE: ghcr.io/voinetwork/voi-node-legacy-relay + +jobs: + prepare: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.platforms.outputs.matrix }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Create matrix + id: platforms + run: | + echo "matrix=$(docker buildx bake -f ./bake.hcl image-all --print | jq -cr '.target."image-all".platforms')" >>${GITHUB_OUTPUT} + + - name: Show matrix + run: | + echo ${{ steps.platforms.outputs.matrix }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + + - name: Rename meta bake definition file + run: | + mv "${{ steps.meta.outputs.bake-file }}" "/tmp/bake-meta.json" + + - name: Upload meta bake definition + uses: actions/upload-artifact@v4 + with: + name: bake-meta + path: /tmp/bake-meta.json + if-no-files-found: error + retention-days: 1 + + build: + runs-on: ubuntu-latest + needs: + - prepare + strategy: + fail-fast: false + matrix: + platform: ${{ fromJson(needs.prepare.outputs.matrix) }} + steps: + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_TOKEN }} + + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@v4 + + - name: Download meta bake definition + uses: actions/download-artifact@v4 + with: + name: bake-meta + path: /tmp + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build + id: bake + uses: docker/bake-action@v5 + with: + files: | + ./bake.hcl + /tmp/bake-meta.json + targets: legacy-relay-image + set: | + *.tags= + *.platform=${{ matrix.platform }} + *.output=type=image,"name=${{ env.REGISTRY_IMAGE }}",push-by-digest=true,name-canonical=true,push=true + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ fromJSON(steps.bake.outputs.metadata).legacy-relay-image['containerimage.digest'] }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge: + runs-on: ubuntu-latest + needs: + - build + steps: + - name: Download meta bake definition + uses: actions/download-artifact@v4 + with: + name: bake-meta + path: /tmp + + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.target."docker-metadata-action".tags | map(select(startswith("${{ env.REGISTRY_IMAGE }}")) | "-t " + .) | join(" ")' /tmp/bake-meta.json) \ + $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:$(jq -r '.target."docker-metadata-action".args.DOCKER_META_VERSION' /tmp/bake-meta.json) diff --git a/Dockerfile.legacy-relay b/Dockerfile.legacy-relay new file mode 100644 index 0000000..f1c95e5 --- /dev/null +++ b/Dockerfile.legacy-relay @@ -0,0 +1,9 @@ +ARG BASE_ALGORAND_VERSION="3.25.0" +FROM algorand/stable:${BASE_ALGORAND_VERSION} AS algorand + +FROM gcr.io/distroless/cc AS distroless +COPY --from=algorand --chown=0:0 /root/node/algod /node/algod +COPY --from=algorand --chown=0:0 /root/node/goal /node/goal +COPY --from=algorand --chown=0:0 /root/node/node_exporter /node/node_exporter +ARG NETWORK="testnet" +COPY configuration/${NETWORK}/genesis.json /node/data/genesis.json diff --git a/bake.hcl b/bake.hcl index b2c3afc..5d08ef8 100644 --- a/bake.hcl +++ b/bake.hcl @@ -22,6 +22,12 @@ target "participation-image" { dockerfile = "Dockerfile.participation" } +target "legacy-relay-image" { + inherits = ["docker-metadata-action"] + context = "." + dockerfile = "Dockerfile.legacy-relay" +} + target "image-local" { inherits = ["image"] output = ["type=docker"]