From 83cf05c3cb1c93a2bc6955d986181c624314ab4c Mon Sep 17 00:00:00 2001 From: cgeek <cem.moreau@gmail.com> Date: Wed, 15 Nov 2023 15:13:33 +0100 Subject: [PATCH] fix(#122): only use multiplatform docker release --- .gitlab-ci.yml | 113 +++++++++++++---------------------------------- docker/README.md | 30 ++++++------- 2 files changed, 46 insertions(+), 97 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d9a0e484a..19ce0aa6c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -64,80 +64,6 @@ fmt_and_clippy: - cargo clippy -- -V - cargo clippy --all --tests -- -D warnings -.docker_release_build: - stage: build - rules: - - if: $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_BRANCH =~ /^(release\/runtime-)[0-9].*/ - when: manual - changes: - - node/specs/$CHAIN-raw.json - variables: - IMAGE_NAME: "duniter/duniter-v2s-$CHAIN" - IMAGE_TAG: "latest" - PODMAN_BUILD_OPTIONS: "--platform linux/amd64 --build-arg chain=$CHAIN" - script: - - echo podman build --layers --tag "$IMAGE_NAME:$IMAGE_TAG" -f docker/Dockerfile $PODMAN_BUILD_OPTIONS . - - podman build --layers --tag "$IMAGE_NAME:$IMAGE_TAG" -f docker/Dockerfile $PODMAN_BUILD_OPTIONS . - tags: - - podman - -.docker_release_deploy: - stage: deploy - rules: - - if: $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_BRANCH =~ /^(release\/runtime-)[0-9].*/ - when: manual - changes: - - node/specs/$CHAIN-raw.json - variables: - IMAGE_NAME: "duniter/duniter-v2s-$CHAIN" - IMAGE_TAG: "latest" - script: - - echo podman push "localhost/$IMAGE_NAME:$IMAGE_TAG" "docker://docker.io/$IMAGE_NAME:$IMAGE_TAG" - - podman podman push "localhost/$IMAGE_NAME:$IMAGE_TAG" "docker://docker.io/$IMAGE_NAME:$IMAGE_TAG" - tags: - - podman - -gdev_docker_release_build: - extends: .docker_release_build - variables: - CHAIN: gdev - -gtest_docker_release_build: - extends: .docker_release_build - variables: - CHAIN: gtest - -gdev_docker_release_deploy: - extends: .docker_release_deploy - needs: ['gdev_docker_release_build'] - variables: - CHAIN: gdev - -gtest_docker_release_deploy: - extends: .docker_release_deploy - needs: ['gtest_docker_release_build'] - variables: - CHAIN: gtest - -.docker_deploy: - stage: deploy - before_script: - - sh -c "[ -n '$DUNITERTEAM_PASSWD' ] || ( echo No access to environment variable 'DUNITERTEAM_PASSWD'; exit 1 )" - - podman login -u "duniterteam" -p "$DUNITERTEAM_PASSWD" docker.io - tags: - - podman - -.docker_deploy_multiplatform: - extends: .docker_deploy - script: - - podman manifest rm "$MANIFEST" 2>/dev/null || true - - podman build --layers --platform linux/amd64,linux/arm64 --manifest "$MANIFEST" -f docker/Dockerfile $PODMAN_BUILD_OPTIONS . - - podman manifest push --all "$MANIFEST" "docker://docker.io/$IMAGE_NAME:$IMAGE_TAG" - after_script: - - podman manifest rm "$MANIFEST" - variables: - MANIFEST: "localhost/manifest-$IMAGE_NAME:$IMAGE_TAG" - run_benchmarks: stage: tests extends: .docker_build @@ -194,23 +120,46 @@ tests: - cargo tu - cargo cucumber -deploy_docker_release_tag_multiplatform: +.deploy_docker_multiplatform: stage: deploy - needs: ["deploy_docker_release_tag"] - extends: .docker_deploy_multiplatform rules: - - if: "$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^(v|runtime-)[0-9].*/" + - if: $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_BRANCH =~ /^(release\/runtime-)[0-9].*/ + when: manual + changes: + - node/specs/$CHAIN-raw.json - when: never + before_script: + - sh -c "[ -n '$DUNITERTEAM_PASSWD' ] || ( echo No access to environment variable 'DUNITERTEAM_PASSWD'; exit 1 )" + - podman login -u "duniterteam" -p "$DUNITERTEAM_PASSWD" docker.io script: - - !reference [.docker_deploy_multiplatform, script] + - export MILESTONE=$(echo $CI_COMMIT_BRANCH | sed -e "s/release\///g") + - echo $MILESTONE + - export MANIFEST=localhost/manifest-$IMAGE_NAME:$MILESTONE + - echo $MANIFEST + - podman manifest rm "$MANIFEST" 2>/dev/null || true + - podman build --layers --platform linux/amd64 --manifest "$MANIFEST" -f docker/Dockerfile $PODMAN_BUILD_OPTIONS . + - podman manifest push --all "$MANIFEST" "docker://docker.io/$IMAGE_NAME:$MILESTONE" - podman manifest push --all "$MANIFEST" "docker://docker.io/$IMAGE_NAME:latest" + after_script: + - podman manifest rm "$MANIFEST" variables: - IMAGE_NAME: "duniter/duniter-v2s" - IMAGE_TAG: "$CI_COMMIT_TAG" + IMAGE_NAME: "duniter/duniter-v2s-$CHAIN" + PODMAN_BUILD_OPTIONS: "--build-arg chain=$CHAIN" + tags: + - podman + +gdev_docker_deploy: + extends: .deploy_docker_multiplatform + variables: + CHAIN: gdev + +gtest_docker_deploy: + extends: .deploy_docker_multiplatform + variables: + CHAIN: gtest readme_docker_release_tag: stage: deploy_readme - needs: ["deploy_docker_release_tag"] rules: - if: "$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^(v|runtime-)[0-9].*/" - when: never diff --git a/docker/README.md b/docker/README.md index 673851b18..3f7791239 100644 --- a/docker/README.md +++ b/docker/README.md @@ -11,7 +11,7 @@ version: "3.5" services: duniter-mirror: - image: duniter/duniter-v2s:latest + image: duniter/duniter-v2s-gdev:latest restart: unless-stopped ports: # Prometheus endpoint @@ -39,7 +39,7 @@ version: "3.5" services: duniter-validator: - image: duniter/duniter-v2s:latest + image: duniter/duniter-v2s-gdev:latest restart: unless-stopped ports: # Prometheus endpoint @@ -59,17 +59,17 @@ volumes: ## Environment variables -| Name | Description | Default | -| ---- | ----------- | ------- | -| `DUNITER_NODE_NAME` | The node name. This name will appear on the Substrate telemetry server when telemetry is enabled. | Random name | -| `DUNITER_CHAIN_NAME` | The currency to process. "gdev" uses the embeded chainspec. A path allows to use a local json raw chainspec. | `dev` (development mode) | -| `DUNITER_PUBLIC_ADDR` | The libp2p public address base. See [libp2p documentation](https://docs.libp2p.io/concepts/fundamentals/addressing/). This variable is useful when the node is behind a reverse proxy with its ports not directly exposed.<br>Note: the `p2p/<peer_id>` part of the address shouldn't be set in this variable. It is automatically added by Duniter. | duniter-v2s guesses one from the node's IPv4 address. | -| `DUNITER_LISTEN_ADDR` | The libp2p listen address. See [libp2p documentation](https://docs.libp2p.io/concepts/fundamentals/addressing/). This variable is useful when running a validator node behind a reverse proxy, to force the P2P end point in websocket mode with:<br> `DUNITER_LISTEN_ADDR=/ip4/0.0.0.0/tcp/30333/ws` | Non validator node: `/ip4/0.0.0.0/tcp/30333/ws`<br>Validator node: `/ip4/0.0.0.0/tcp/30333` | -| `DUNITER_RPC_CORS` | Value of the polkadot `--rpc-cors` option. | `all` | -| `DUNITER_VALIDATOR` | Boolean (`true` / `false`) to run the node in validator mode. Configure the polkadot options `--validator --rpc-methods Unsafe`. | `false` | -| `DUNITER_DISABLE_PROMETHEUS` | Boolean to disable the Prometheus endpoint on port 9615. | `false` | -| `DUNITER_DISABLE_TELEMETRY` | Boolean to disable connecting to the Substrate telemetry server. | `false` | -| `DUNITER_PRUNING_PROFILE` | * `default`<br> * `archive`: keep all blocks and state blocks<br> * `light`: keep only last 256 state blocks and last 14400 blocks (one day duration) | `default` | +| Name | Description | Default | +|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------| +| `DUNITER_NODE_NAME` | The node name. This name will appear on the Substrate telemetry server when telemetry is enabled. | Random name | +| `DUNITER_CHAIN_NAME` | The currency to process. "gdev" uses the embeded chainspec. A path allows to use a local json raw chainspec. | `dev` (development mode) | +| `DUNITER_PUBLIC_ADDR` | The libp2p public address base. See [libp2p documentation](https://docs.libp2p.io/concepts/fundamentals/addressing/). This variable is useful when the node is behind a reverse proxy with its ports not directly exposed.<br>Note: the `p2p/<peer_id>` part of the address shouldn't be set in this variable. It is automatically added by Duniter. | duniter-v2s guesses one from the node's IPv4 address. | +| `DUNITER_LISTEN_ADDR` | The libp2p listen address. See [libp2p documentation](https://docs.libp2p.io/concepts/fundamentals/addressing/). This variable is useful when running a validator node behind a reverse proxy, to force the P2P end point in websocket mode with:<br> `DUNITER_LISTEN_ADDR=/ip4/0.0.0.0/tcp/30333/ws` | Non validator node: `/ip4/0.0.0.0/tcp/30333/ws`<br>Validator node: `/ip4/0.0.0.0/tcp/30333` | +| `DUNITER_RPC_CORS` | Value of the polkadot `--rpc-cors` option. | `all` | +| `DUNITER_VALIDATOR` | Boolean (`true` / `false`) to run the node in validator mode. Configure the polkadot options `--validator --rpc-methods Unsafe`. | `false` | +| `DUNITER_DISABLE_PROMETHEUS` | Boolean to disable the Prometheus endpoint on port 9615. | `false` | +| `DUNITER_DISABLE_TELEMETRY` | Boolean to disable connecting to the Substrate telemetry server. | `false` | +| `DUNITER_PRUNING_PROFILE` | * `default`<br> * `archive`: keep all blocks and state blocks<br> * `light`: keep only last 256 state blocks and last 14400 blocks (one day duration) | `default` | ## Other Duniter options @@ -93,6 +93,6 @@ docker compose up -d To run duniter from the command line without the default configuration detailed in the "Environment variables" section use `--` as the first argument. For example: ``` -$ docker run --rm duniter/duniter-v2s:latest -- key generate -$ docker run --rm duniter/duniter-v2s:latest -- --chain gdev ... +$ docker run --rm duniter/duniter-v2s-gdev:latest -- key generate +$ docker run --rm duniter/duniter-v2s-gdev:latest -- --chain gdev ... ``` -- GitLab