# .gitlab-ci.yml

stages:
  - dockerize
  - deployment

build-push-docker-image-job:
  stage: dockerize
  # Specify a Docker image to run the job in.
  image: docker:20-dind
  # Specify an additional image 'docker:dind' ("Docker-in-Docker") that
  # will start up the Docker daemon when it is brought up by a runner.
  before_script:
    - docker login -u "$DOCKER_REGISTRY_USER" -p "$DOCKER_REGISTRY_PASSWORD" $DOCKER_REGISTRY_URL # Instructs GitLab to login to its registry
  services:
    - name: docker:20-dind
      alias: docker
      command: ["--tls=false"]
  script:
    - echo "Building..." # MAKE SURE NO SPACE ON EITHER SIDE OF = IN THE FOLLOWING LINE
    - export CONTAINER_FULL_IMAGE_NAME_WITH_TAG=$IMAGE_NAME_WITH_REGISTRY_PREFIX/my-build-image:$COMMIT_HASH
    - docker build  --network=host -f ./Dockerfile --pull -t built-image-name .
    - docker tag built-image-name "$CONTAINER_FULL_IMAGE_NAME_WITH_TAG"
    - docker push "$CONTAINER_FULL_IMAGE_NAME_WITH_TAG"
    - echo "$CONTAINER_FULL_IMAGE_NAME_WITH_TAG"
    - echo "Deploying on CapRover..."
    - docker run --network=host caprover/cli-caprover:2.2.3 caprover deploy --caproverUrl "$CAPROVER_URL" --caproverPassword "$CAPROVER_PASSWORD" -a "$CAPROVER_APP" -i "$CONTAINER_FULL_IMAGE_NAME_WITH_TAG"
  only:
    - main
  variables:
    DOCKER_REGISTRY_USER: ${CI_REGISTRY_USER}
    DOCKER_REGISTRY_PASSWORD: ${CI_REGISTRY_PASSWORD}
    DOCKER_REGISTRY_URL: ${CI_REGISTRY}
    DOCKER_DRIVER: overlay
    IMAGE_NAME_WITH_REGISTRY_PREFIX: ${CI_REGISTRY_IMAGE}
    COMMIT_HASH: ${CI_COMMIT_SHA}
    CAPROVER_URL: ${CAPROVER_URL}
    CAPROVER_PASSWORD: ${CAPROVER_PASSWORD}
    CAPROVER_APP: ${CAPROVER_APP}
