From 5b5a5e458a47d643438a091a89e38111c7957a59 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sun, 8 Feb 2026 15:00:32 -0600 Subject: [PATCH] test(ci): Minimal pipeline to test package linking variable expansion --- .woodpecker.yml | 301 ++++-------------------------------------------- 1 file changed, 21 insertions(+), 280 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index b4640f9..33e26b0 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,307 +1,48 @@ -# Woodpecker CI Quality Enforcement Pipeline - Monorepo +# Temporary minimal pipeline for testing package linking when: - event: [push, pull_request, manual] -variables: - - &node_image "node:20-alpine" - - &install_deps | - corepack enable - pnpm install --frozen-lockfile - - &use_deps | - corepack enable - # Kaniko base command setup - - &kaniko_setup | - mkdir -p /kaniko/.docker - echo "{\"auths\":{\"git.mosaicstack.dev\":{\"username\":\"$GITEA_USER\",\"password\":\"$GITEA_TOKEN\"}}}" > /kaniko/.docker/config.json - -services: - postgres: - image: postgres:17-alpine - environment: - POSTGRES_DB: test_db - POSTGRES_USER: test_user - POSTGRES_PASSWORD: test_password - steps: - install: - image: *node_image - commands: - - *install_deps - - security-audit: - image: *node_image - commands: - - *use_deps - - pnpm audit --audit-level=high - depends_on: - - install - - lint: - image: *node_image - environment: - SKIP_ENV_VALIDATION: "true" - commands: - - *use_deps - - pnpm lint - depends_on: - - install - when: - - evaluate: 'CI_PIPELINE_EVENT != "pull_request" || CI_COMMIT_BRANCH != "main"' - - prisma-generate: - image: *node_image - environment: - SKIP_ENV_VALIDATION: "true" - commands: - - *use_deps - - pnpm --filter "@mosaic/api" prisma:generate - depends_on: - - install - - prisma-migrate: - image: *node_image - environment: - SKIP_ENV_VALIDATION: "true" - DATABASE_URL: "postgresql://test_user:test_password@postgres:5432/test_db?schema=public" - commands: - - *use_deps - - pnpm --filter "@mosaic/api" prisma migrate deploy - depends_on: - - prisma-generate - - typecheck: - image: *node_image - environment: - SKIP_ENV_VALIDATION: "true" - commands: - - *use_deps - - pnpm typecheck - depends_on: - - prisma-generate - - test: - image: *node_image - environment: - SKIP_ENV_VALIDATION: "true" - DATABASE_URL: "postgresql://test_user:test_password@postgres:5432/test_db?schema=public" - ENCRYPTION_KEY: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" - commands: - - *use_deps - - pnpm test - depends_on: - - prisma-migrate - - build: - image: *node_image - environment: - SKIP_ENV_VALIDATION: "true" - NODE_ENV: "production" - commands: - - *use_deps - - pnpm build - depends_on: - - typecheck # Only block on critical checks - - security-audit - - prisma-generate - - # ====================== - # Docker Build & Push (main/develop only) - # ====================== - # Requires secrets: gitea_username, gitea_token - # - # Tagging Strategy: - # - Always: commit SHA (e.g., 658ec077) - # - main branch: 'latest' - # - develop branch: 'dev' - # - git tags: version tag (e.g., v1.0.0) - - # Build and push API image using Kaniko - docker-build-api: - image: gcr.io/kaniko-project/executor:debug - environment: - 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 git.mosaicstack.dev/mosaic/stack-api:${CI_COMMIT_SHA:0:8}" - if [ "$CI_COMMIT_BRANCH" = "main" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-api:latest" - elif [ "$CI_COMMIT_BRANCH" = "develop" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-api:dev" - fi - if [ -n "$CI_COMMIT_TAG" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-api:$CI_COMMIT_TAG" - fi - /kaniko/executor --context . --dockerfile apps/api/Dockerfile $DESTINATIONS - when: - - branch: [main, develop] - event: [push, manual, tag] - depends_on: - - build - - # Build and push Web image using Kaniko - docker-build-web: - image: gcr.io/kaniko-project/executor:debug - environment: - 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 git.mosaicstack.dev/mosaic/stack-web:${CI_COMMIT_SHA:0:8}" - if [ "$CI_COMMIT_BRANCH" = "main" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-web:latest" - elif [ "$CI_COMMIT_BRANCH" = "develop" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-web:dev" - fi - if [ -n "$CI_COMMIT_TAG" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-web:$CI_COMMIT_TAG" - fi - /kaniko/executor --context . --dockerfile apps/web/Dockerfile --build-arg NEXT_PUBLIC_API_URL=https://api.mosaicstack.dev $DESTINATIONS - when: - - branch: [main, develop] - event: [push, manual, tag] - depends_on: - - build - - # Build and push Postgres image using Kaniko - docker-build-postgres: - image: gcr.io/kaniko-project/executor:debug - environment: - 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 git.mosaicstack.dev/mosaic/stack-postgres:${CI_COMMIT_SHA:0:8}" - if [ "$CI_COMMIT_BRANCH" = "main" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-postgres:latest" - elif [ "$CI_COMMIT_BRANCH" = "develop" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-postgres:dev" - fi - if [ -n "$CI_COMMIT_TAG" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-postgres:$CI_COMMIT_TAG" - fi - /kaniko/executor --context docker/postgres --dockerfile docker/postgres/Dockerfile $DESTINATIONS - when: - - branch: [main, develop] - event: [push, manual, tag] - depends_on: - - build - - # Build and push OpenBao image using Kaniko - docker-build-openbao: - image: gcr.io/kaniko-project/executor:debug - environment: - 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 git.mosaicstack.dev/mosaic/stack-openbao:${CI_COMMIT_SHA:0:8}" - if [ "$CI_COMMIT_BRANCH" = "main" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-openbao:latest" - elif [ "$CI_COMMIT_BRANCH" = "develop" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-openbao:dev" - fi - if [ -n "$CI_COMMIT_TAG" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-openbao:$CI_COMMIT_TAG" - fi - /kaniko/executor --context docker/openbao --dockerfile docker/openbao/Dockerfile $DESTINATIONS - when: - - branch: [main, develop] - event: [push, manual, tag] - depends_on: - - build - - # Build and push Orchestrator image using Kaniko - docker-build-orchestrator: - image: gcr.io/kaniko-project/executor:debug - environment: - 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 git.mosaicstack.dev/mosaic/stack-orchestrator:${CI_COMMIT_SHA:0:8}" - if [ "$CI_COMMIT_BRANCH" = "main" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-orchestrator:latest" - elif [ "$CI_COMMIT_BRANCH" = "develop" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-orchestrator:dev" - fi - if [ -n "$CI_COMMIT_TAG" ]; then - DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaic/stack-orchestrator:$CI_COMMIT_TAG" - fi - /kaniko/executor --context . --dockerfile apps/orchestrator/Dockerfile $DESTINATIONS - when: - - branch: [main, develop] - event: [push, manual, tag] - depends_on: - - build - - # ====================== - # Link Packages to Repository - # ====================== - # Links all Docker packages to the mosaic/stack repository - # This makes packages visible on the repository page in Gitea - link-packages: + # Test package linking with proper variable escaping + link-packages-test: image: alpine:3 environment: GITEA_TOKEN: from_secret: gitea_token commands: - apk add --no-cache curl + - echo "Testing package linking with variable expansion..." - | link_package() { PKG="$$1" - STATUS=$$(curl -s -o /dev/null -w "%{http_code}" -X POST \ + echo "" + echo "Testing package: $$PKG" + STATUS=$$(curl -s -o /tmp/link-response.txt -w "%{http_code}" -X POST \ -H "Authorization: token $$GITEA_TOKEN" \ "https://git.mosaicstack.dev/api/v1/packages/mosaic/container/$$PKG/-/link/stack") + echo " URL: https://git.mosaicstack.dev/api/v1/packages/mosaic/container/$$PKG/-/link/stack" + echo " Status: $$STATUS" + if [ "$$STATUS" = "201" ] || [ "$$STATUS" = "204" ]; then - echo "✅ Linked $$PKG to stack" + echo " ✅ Successfully linked $$PKG to stack" elif [ "$$STATUS" = "400" ]; then - echo "✅ $$PKG already linked (OK)" + echo " ✅ $$PKG already linked (OK)" + cat /tmp/link-response.txt else - echo "❌ $$PKG link failed with status $$STATUS" + echo " ❌ $$PKG link failed" + echo " Response:" + cat /tmp/link-response.txt fi } + + echo "=== Linking all stack packages ===" link_package "stack-api" link_package "stack-web" link_package "stack-postgres" link_package "stack-openbao" link_package "stack-orchestrator" + echo "" + echo "=== Test complete ===" when: - branch: [main, develop] - event: [push, manual, tag] - depends_on: - - docker-build-api - - docker-build-web - - docker-build-postgres - - docker-build-openbao - - docker-build-orchestrator + event: [push, manual]