variables:
  DOCKER_HOST: $DOCKER_HOST_BIO
  PROJECT_NAME: "frontend"
  
cache:
  key: $CI_COMMIT_REF_NAME
  paths:
    - build/

stages:
  - build
  - publish
  - cleanup


# ===========================================================================
# Stage: build
# ===========================================================================

docker-build-latest:
  stage: build
  image: docker:git
  tags:
    - cache
  only:
    refs:
      - main
  except:
    variables:
      - $CI_COMMIT_TAG
  before_script:
    - mkdir -p build
  script:
    - docker build -t $DOCKER_NAMESPACE/$PROJECT_NAME:latest .
    - docker save -o build/image.tar $DOCKER_NAMESPACE/$PROJECT_NAME:latest


docker-build-tag:
  stage: build
  image: docker:git
  tags:
    - cache
  only:
    variables:
      - $CI_COMMIT_TAG
  before_script:
    - mkdir -p build
  script:
    - docker build -t $DOCKER_NAMESPACE/$PROJECT_NAME:$CI_COMMIT_TAG .
    - docker save -o build/image.tar $DOCKER_NAMESPACE/$PROJECT_NAME:$CI_COMMIT_TAG
  artifacts:
    paths:
      - build/image.tar
    expire_in: 10 mins  # Optional: Set an expiration time for the artifact


# ===========================================================================
# Stage: test
#
# TODO
# ===========================================================================



# ===========================================================================
# Stage: publish
# ===========================================================================

docker-push-latest:
  stage: publish
  image: docker
  tags:
    - cache
  only:
   - main
  before_script:
    - docker login -u $DOCKER_USERNAME -p $DOCKER_TOKEN $DOCKER_REGISTRY
  script:
    - docker load -i build/image.tar
    - docker push $DOCKER_NAMESPACE/$PROJECT_NAME:latest

docker-push-tag:
  stage: publish
  image: docker
  tags:
    - cache
  only:
    variables:
      - $CI_COMMIT_TAG
  before_script:
    - docker login -u $DOCKER_USERNAME -p $DOCKER_TOKEN $DOCKER_REGISTRY
  script:
    - docker load -i build/image.tar
    - docker push $DOCKER_NAMESPACE/$PROJECT_NAME:$CI_COMMIT_TAG

cleanup:
  stage: cleanup
  image: docker:git
  tags:
    - cache
  script:
    - docker system prune -a -f || true 
    - rm -rf build/ || true
  when: always
  allow_failure: true