stages:
  - build
  - deploy

variables:
  DOCKER_BUILDKIT: 1
  CI_BUILDX_ARCHS: "linux/amd64"
  DOCKER_TLS_CERTDIR: ""

workflow:
  auto_cancel:
    on_new_commit: interruptible

build:
  stage: build
  interruptible: true
  tags:
    - vntx
  image: docker:27
  services:
    - docker:27-dind
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    # Pull latest image for layer caching (ignore failures if not exists)
    - docker pull $CI_REGISTRY_IMAGE:latest || true
    # Build with cache-from for faster builds and inline cache for future builds
    - docker build
      --cache-from $CI_REGISTRY_IMAGE:latest
      --build-arg BUILDKIT_INLINE_CACHE=1
      -f k8s/Dockerfile
      -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
      -t $CI_REGISTRY_IMAGE:latest
      .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - docker push $CI_REGISTRY_IMAGE:latest
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

deploy:
  stage: deploy
  needs: ["build"]
  tags:
    - vntx
  image:
    name: bitnami/kubectl:latest
    entrypoint: [""]
  script:
    - kubectl config get-contexts
    - kubectl config use-context towerops/towerops:home-cluster-agent
    # Set deployment timestamp (ISO 8601 format in UTC)
    - DEPLOY_TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
    - echo "Deploying at $DEPLOY_TIMESTAMP"
    # Deploy new version (migrations run on app start)
    - kubectl set image deployment/towerops towerops=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -n towerops
    - kubectl set env deployment/towerops DEPLOY_TIMESTAMP=$DEPLOY_TIMESTAMP -n towerops
    - kubectl rollout status deployment/towerops -n towerops --timeout=5m
  environment:
    name: production
    kubernetes:
      namespace: towerops
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
