From c4278016218e45f024cb695387f259769ca0d107 Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev Date: Wed, 24 Jun 2026 02:15:45 +0700 Subject: [PATCH] Load Mapbox token from Vault in CI --- .gitea/workflows/build-and-deploy.yml | 16 +++++++++++++++- Dockerfile | 6 ++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/build-and-deploy.yml b/.gitea/workflows/build-and-deploy.yml index 817acad..e839b88 100644 --- a/.gitea/workflows/build-and-deploy.yml +++ b/.gitea/workflows/build-and-deploy.yml @@ -16,18 +16,32 @@ jobs: SERVICE_NAME: flutter IMAGE_SHA: gitea.dsrptlab.com/mapflow/flutter:${{ github.sha }} IMAGE_LATEST: gitea.dsrptlab.com/mapflow/flutter:latest + VAULT_HOST: mars + VAULT_SERVICE: mapflow-vault-zy5kwf + VAULT_PROJECT_PATH: secret/projects/mapflow/prod steps: - uses: actions/checkout@v4 - name: Build and push image run: | set -euo pipefail + mapbox_token_file="$(mktemp)" + trap 'rm -f "$mapbox_token_file"' EXIT + ssh -o StrictHostKeyChecking=accept-new -o BatchMode=yes "root@$VAULT_HOST" \ + "set -euo pipefail + vault_service='$VAULT_SERVICE' + vault_project_path='$VAULT_PROJECT_PATH' + c=\$(docker ps --format '{{.Names}}' | grep \"^\$vault_service\" | head -1) + token=\$(docker service inspect \"\$vault_service\" --format '{{json .Spec.TaskTemplate.ContainerSpec.Env}}' | jq -r '.[] | select(startswith(\"VAULT_ROOT_TOKEN=\")) | sub(\"^VAULT_ROOT_TOKEN=\"; \"\")') + docker exec -e VAULT_ADDR=http://127.0.0.1:8200 -e VAULT_TOKEN=\"\$token\" \"\$c\" vault kv get -field=MAPBOX_ACCESS_TOKEN \"\$vault_project_path\"" \ + > "$mapbox_token_file" + [ -s "$mapbox_token_file" ] for attempt in 1 2 3; do if docker build \ --provenance=false \ --tag "$IMAGE_SHA" \ --tag "$IMAGE_LATEST" \ - --build-arg MAPBOX_ACCESS_TOKEN="${{ secrets.MAPBOX_ACCESS_TOKEN }}" \ + --secret id=mapbox_access_token,src="$mapbox_token_file" \ --build-arg MAPBOX_STYLE="mapbox/standard" \ --build-arg TELEGRAM_BOT_USERNAME="carfteebot" \ --build-arg BUILD_VERSION="${GITHUB_SHA}" \ diff --git a/Dockerfile b/Dockerfile index a66b216..2e99e8d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,15 @@ +# syntax=docker/dockerfile:1.7 FROM ghcr.io/cirruslabs/flutter:stable AS build WORKDIR /app -ARG MAPBOX_ACCESS_TOKEN="" ARG MAPBOX_STYLE="mapbox/standard" ARG TELEGRAM_BOT_USERNAME="carfteebot" ARG BUILD_VERSION="local" COPY pubspec.* ./ RUN flutter pub get COPY . . -RUN rm -rf build/web && \ +RUN --mount=type=secret,id=mapbox_access_token,required=true \ + MAPBOX_ACCESS_TOKEN="$(cat /run/secrets/mapbox_access_token)" && \ + rm -rf build/web && \ flutter build web --release --base-href=/ -o build/web \ --dart-define=MAPBOX_ACCESS_TOKEN="$MAPBOX_ACCESS_TOKEN" \ --dart-define=MAPBOX_STYLE="$MAPBOX_STYLE" \