# build 1
labels:
  hostname: "macmini7"
clone:
  git:
    image: woodpeckerci/plugin-git
    settings:
      partial: false
      depth: 1
steps:
  # Build Step for staging Branch
  build-staging:
    name: build-staging
    image: woodpeckerci/plugin-docker-buildx
    secrets: [REGISTRY_USER, REGISTRY_PASSWORD]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    commands:
      - echo "Building application for staging branch"
      - echo "$${REGISTRY_PASSWORD}" | docker login -u "$${REGISTRY_USER}" --password-stdin git.nixc.us
      - echo compose build
      - docker compose -f docker-compose.staging.yml build --no-cache 
    when:
      branch: main
      event: push
      # path:
      #     include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ]

  deploy-new:
    name: deploy-new
    when:
      branch: main
      # path:
      #     include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ]
    image: woodpeckerci/plugin-docker-buildx
    secrets: [REGISTRY_USER, REGISTRY_PASSWORD]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    commands:
      - echo "$${REGISTRY_PASSWORD}" | docker login -u "$${REGISTRY_USER}" --password-stdin git.nixc.us
      - echo compose push
      - docker compose -f docker-compose.staging.yml push
      # - docker stack deploy --with-registry-auth -c ./stack.staging.yml $${CI_REPO_NAME}-staging

  # # Wait for Deploy to Complete
  # wait-for-deploy-staging:
  #   name: wait-for-deploy-staging
  #   image: woodpeckerci/plugin-git
  #   commands:
  #     - echo "Waiting for staging deploy step to complete rollout."
  #     - sleep 60
  #   when:
  #     - branch: main
  #     - event: push

  # # Run Automated Tests on staging Branch
  # test-staging:
  #   name: run-tests-staging
  #   image: git.nixc.us/colin/playwright:latest
  #   secrets: [ base_url ]
  #   when:
  #     - branch: main
  #     - event: push
  #     - path:
  #         include: [ 'tests/', 'src/','docker-compose.staging.yml', 'docker-compose.production.yml', '*.tests.ts' ] # Specify paths relevant to tests
  #   volumes:
  #     - /var/run/docker.sock:/var/run/docker.sock:ro

  cleanup-staging:
    name: cleanup-staging
    when:
      branch: main
      # path:
      #     include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ]
    image: woodpeckerci/plugin-docker-buildx
    secrets: [REGISTRY_USER, REGISTRY_PASSWORD]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    commands:
      # - docker stack rm $${CI_REPO_NAME}-staging 
      ## added fault tolerance for docker stack rm
      - for i in {1..5}; do docker stack rm ${CI_REPO_NAME}-staging && break || sleep 10; done
      - docker compose -f docker-compose.staging.yml down
      - docker compose -f docker-compose.staging.yml rm -f

  # Build Step for staging Branch
  build-push-production:
    name: build-push-production
    image: woodpeckerci/plugin-docker-buildx
    secrets: [REGISTRY_USER, REGISTRY_PASSWORD]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    commands:
      - echo "Building application for staging branch"
      - echo "$${REGISTRY_PASSWORD}" | docker login -u "$${REGISTRY_USER}" --password-stdin git.nixc.us
      - echo compose build
      - docker compose -f docker-compose.production.yml build --no-cache
      - docker compose -f docker-compose.production.yml push
    when:
      branch: main
      event: [push, cron]
      # path:
      #     include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ]

  # Deploy to Production Branch
  deploy-production:
    name: deploy-production
    image: woodpeckerci/plugin-docker-buildx
    secrets: [REGISTRY_USER, REGISTRY_PASSWORD]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    commands:
      - echo "$${REGISTRY_PASSWORD}" | docker login -u "$${REGISTRY_USER}" --password-stdin git.nixc.us
      - docker stack deploy --with-registry-auth -c ./stack.production.yml $${CI_REPO_NAME}
      # - docker image rm git.nixc.us/colin/$${CI_REPO_NAME}:production
    when:
      branch: main
      event: [push, cron]
      # path:
      #     include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ]


  # # Wait for Deploy to Complete
  # wait-for-deploy-production:
  #   name: wait-for-deploy-production
  #   image: woodpeckerci/plugin-git
  #   commands:
  #     - echo "Waiting for deploy step to complete rollout."
  #     - sleep 60
  #   when:
  #     branch: main
  #     event: push

  # # Run Post-Deployment Smoke Tests
  # post-deploy-smoke-tests-git-nixc-us:
  #   name: run-post-deploy-smoke-tests-git-nixc-us
  #   image: git.nixc.us/colin/playwright:latest
  #   # secrets: [TEST_USER, TEST_PASSWORD]
  #   environment:
  #     - BASE_URL=https://git.nixc.us
  #   when:
  #     branch: main
  #     event: push
  #     # path:
  #     #     include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ]