From bb144a7d1cb7d8e3d8584d95b70449401f80d124 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Tue, 3 Feb 2026 16:20:28 -0600 Subject: [PATCH] feat(infra): Migrate from Harbor to Gitea Packages registry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BREAKING CHANGE: Container registry changed from Harbor to Gitea Packages Changes: - Update .woodpecker.yml to push to git.mosaicstack.dev instead of reg.mosaicstack.dev - Change secret names: harbor_username/harbor_password → gitea_username/gitea_token - Update docker-compose.prod.yml image references - Update all three images: api, web, postgres Registry Migration: - Old: reg.mosaicstack.dev (Harbor) - New: git.mosaicstack.dev (Gitea Packages) - Old: reg.diversecanvas.com (Harbor) - New: git.mosaicstack.dev (Gitea Packages) Manual Steps Required: 1. Create Gitea personal access token with 'read:package' and 'write:package' scopes 2. Add Woodpecker secrets: - gitea_username: Your Gitea username - gitea_token: Personal access token from step 1 3. Test build pipeline 4. Delete old Harbor secrets after validation Related: ADR-001 in jarvis-brain See: jarvis-brain/docs/migrations/harbor-to-gitea-packages.md --- .woodpecker.yml | 52 ++++++++++++++++++++--------------------- docker-compose.prod.yml | 10 ++++---- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 1f04503..e16a089 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -12,7 +12,7 @@ variables: # Kaniko base command setup - &kaniko_setup | mkdir -p /kaniko/.docker - echo "{\"auths\":{\"reg.mosaicstack.dev\":{\"username\":\"$HARBOR_USER\",\"password\":\"$HARBOR_PASS\"}}}" > /kaniko/.docker/config.json + echo "{\"auths\":{\"git.mosaicstack.dev\":{\"username\":\"$GITEA_USER\",\"password\":\"$GITEA_TOKEN\"}}}" > /kaniko/.docker/config.json steps: install: @@ -86,7 +86,7 @@ steps: # ====================== # Docker Build & Push (main/develop only) # ====================== - # Requires secrets: harbor_username, harbor_password + # Requires secrets: gitea_username, gitea_token # # Tagging Strategy: # - Always: commit SHA (e.g., 658ec077) @@ -98,24 +98,24 @@ steps: docker-build-api: image: gcr.io/kaniko-project/executor:debug environment: - HARBOR_USER: - from_secret: harbor_username - HARBOR_PASS: - from_secret: harbor_password + GITEA_USER: + from_secret: gitea_username + GITEA_TOKEN: + from_secret: gitea_token CI_COMMIT_BRANCH: ${CI_COMMIT_BRANCH} CI_COMMIT_TAG: ${CI_COMMIT_TAG} CI_COMMIT_SHA: ${CI_COMMIT_SHA} commands: - *kaniko_setup - | - DESTINATIONS="--destination reg.mosaicstack.dev/mosaic/api:${CI_COMMIT_SHA:0:8}" + DESTINATIONS="--destination git.mosaicstack.dev/mosaic/api:${CI_COMMIT_SHA:0:8}" if [ "$CI_COMMIT_BRANCH" = "main" ]; then - DESTINATIONS="$DESTINATIONS --destination reg.mosaicstack.dev/mosaic/api:latest" + DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/api:latest" elif [ "$CI_COMMIT_BRANCH" = "develop" ]; then - DESTINATIONS="$DESTINATIONS --destination reg.mosaicstack.dev/mosaic/api:dev" + DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/api:dev" fi if [ -n "$CI_COMMIT_TAG" ]; then - DESTINATIONS="$DESTINATIONS --destination reg.mosaicstack.dev/mosaic/api:$CI_COMMIT_TAG" + DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/api:$CI_COMMIT_TAG" fi /kaniko/executor --context . --dockerfile apps/api/Dockerfile $DESTINATIONS when: @@ -128,24 +128,24 @@ steps: docker-build-web: image: gcr.io/kaniko-project/executor:debug environment: - HARBOR_USER: - from_secret: harbor_username - HARBOR_PASS: - from_secret: harbor_password + GITEA_USER: + from_secret: gitea_username + GITEA_TOKEN: + from_secret: gitea_token CI_COMMIT_BRANCH: ${CI_COMMIT_BRANCH} CI_COMMIT_TAG: ${CI_COMMIT_TAG} CI_COMMIT_SHA: ${CI_COMMIT_SHA} commands: - *kaniko_setup - | - DESTINATIONS="--destination reg.mosaicstack.dev/mosaic/web:${CI_COMMIT_SHA:0:8}" + DESTINATIONS="--destination git.mosaicstack.dev/mosaic/web:${CI_COMMIT_SHA:0:8}" if [ "$CI_COMMIT_BRANCH" = "main" ]; then - DESTINATIONS="$DESTINATIONS --destination reg.mosaicstack.dev/mosaic/web:latest" + DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/web:latest" elif [ "$CI_COMMIT_BRANCH" = "develop" ]; then - DESTINATIONS="$DESTINATIONS --destination reg.mosaicstack.dev/mosaic/web:dev" + DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/web:dev" fi if [ -n "$CI_COMMIT_TAG" ]; then - DESTINATIONS="$DESTINATIONS --destination reg.mosaicstack.dev/mosaic/web:$CI_COMMIT_TAG" + DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/web:$CI_COMMIT_TAG" fi /kaniko/executor --context . --dockerfile apps/web/Dockerfile --build-arg NEXT_PUBLIC_API_URL=https://api.mosaicstack.dev $DESTINATIONS when: @@ -158,24 +158,24 @@ steps: docker-build-postgres: image: gcr.io/kaniko-project/executor:debug environment: - HARBOR_USER: - from_secret: harbor_username - HARBOR_PASS: - from_secret: harbor_password + GITEA_USER: + from_secret: gitea_username + GITEA_TOKEN: + from_secret: gitea_token CI_COMMIT_BRANCH: ${CI_COMMIT_BRANCH} CI_COMMIT_TAG: ${CI_COMMIT_TAG} CI_COMMIT_SHA: ${CI_COMMIT_SHA} commands: - *kaniko_setup - | - DESTINATIONS="--destination reg.mosaicstack.dev/mosaic/postgres:${CI_COMMIT_SHA:0:8}" + DESTINATIONS="--destination git.mosaicstack.dev/mosaic/postgres:${CI_COMMIT_SHA:0:8}" if [ "$CI_COMMIT_BRANCH" = "main" ]; then - DESTINATIONS="$DESTINATIONS --destination reg.mosaicstack.dev/mosaic/postgres:latest" + DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/postgres:latest" elif [ "$CI_COMMIT_BRANCH" = "develop" ]; then - DESTINATIONS="$DESTINATIONS --destination reg.mosaicstack.dev/mosaic/postgres:dev" + DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/postgres:dev" fi if [ -n "$CI_COMMIT_TAG" ]; then - DESTINATIONS="$DESTINATIONS --destination reg.mosaicstack.dev/mosaic/postgres:$CI_COMMIT_TAG" + DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/postgres:$CI_COMMIT_TAG" fi /kaniko/executor --context docker/postgres --dockerfile docker/postgres/Dockerfile $DESTINATIONS when: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index cf0f806..dd346a9 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,7 +1,7 @@ -# Production Docker Compose - Uses pre-built images from Harbor +# Production Docker Compose - Uses pre-built images from Gitea Packages # # Prerequisites: -# - Images built and pushed to reg.diversecanvas.com/mosaic/* +# - Images built and pushed to git.mosaicstack.dev/mosaic/* # - .env file configured with production values # # Usage: @@ -16,7 +16,7 @@ services: # PostgreSQL Database # ====================== postgres: - image: reg.diversecanvas.com/mosaic/postgres:latest + image: git.mosaicstack.dev/mosaic/postgres:latest container_name: mosaic-postgres restart: unless-stopped environment: @@ -70,7 +70,7 @@ services: # Mosaic API # ====================== api: - image: reg.diversecanvas.com/mosaic/api:latest + image: git.mosaicstack.dev/mosaic/api:latest container_name: mosaic-api restart: unless-stopped environment: @@ -121,7 +121,7 @@ services: # Mosaic Web # ====================== web: - image: reg.diversecanvas.com/mosaic/web:latest + image: git.mosaicstack.dev/mosaic/web:latest container_name: mosaic-web restart: unless-stopped environment: -- 2.49.1