# Build & push the pre-baked CI base image (Dockerfile.ci) to the Gitea
# registry CI already publishes to. Reuses the exact kaniko + auth pattern
# from publish.yml (REGISTRY_USER/REGISTRY_PASS from_secret, /kaniko/.docker
# config.json). Other pipelines (ci.yml, publish.yml) pull `ci-base:latest`
# for their install step.
#
# Rebuild ONLY when the dependency set or the image recipe changes — a normal
# code push must not trigger a 25-min image build. `path` applies to push/PR
# events; `event: tag` (releases) rebuilds unconditionally so a tagged release
# always ships a fresh base.
when:
  - event: tag
  - event: [push, manual]
    branch: main
    path:
      include:
        - 'pnpm-lock.yaml'
        - 'Dockerfile.ci'

steps:
  build-ci-base:
    image: gcr.io/kaniko-project/executor:debug
    environment:
      REGISTRY_USER:
        from_secret: REGISTRY_USERNAME
      REGISTRY_PASS:
        from_secret: REGISTRY_PASSWORD
      CI_COMMIT_BRANCH: ${CI_COMMIT_BRANCH}
      CI_COMMIT_TAG: ${CI_COMMIT_TAG}
      CI_COMMIT_SHA: ${CI_COMMIT_SHA}
    commands:
      - mkdir -p /kaniko/.docker
      - echo "{\"auths\":{\"git.mosaicstack.dev\":{\"username\":\"$REGISTRY_USER\",\"password\":\"$REGISTRY_PASS\"}}}" > /kaniko/.docker/config.json
      - |
        # Lockfile-hash tag: an immutable identity for the exact dep set baked
        # into this image. `:latest` is the mutable pointer pipelines consume.
        LOCK_HASH=$(sha256sum pnpm-lock.yaml | cut -c1-12)
        DESTINATIONS="--destination git.mosaicstack.dev/mosaicstack/stack/ci-base:latest"
        DESTINATIONS="$DESTINATIONS --destination git.mosaicstack.dev/mosaicstack/stack/ci-base:lock-$LOCK_HASH"
        /kaniko/executor --context . --dockerfile Dockerfile.ci $DESTINATIONS
