image: python:3.10-bullseye

stages:
  - build
  - deploy

variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
  GIT_SUBMODULE_STRATEGY: recursive

cache:
  paths:
    - .cache/pip
    - venv/

before_script:
  - python -V
  - pip install virtualenv
  - virtualenv venv
  - source venv/bin/activate
  - pip install -r requirements.txt

build-book:
  stage: build
  script:
    # Previous debug commands remain the same
    - |
      if [ "$CI_COMMIT_BRANCH" == "release" ]; then
        echo "Building production version"
        teachbooks build --publish book/ > >(tee stdout.log) 2> >(tee stderr.log >&2)
      else
        echo "Building draft version"
        teachbooks build book/ > >(tee stdout.log) 2> >(tee stderr.log >&2)
      fi
    # Cleanup steps
    - echo "Directory sizes before cleanup:" | tee -a build_debug.log
    - du -sh book/_build/* | tee -a build_debug.log
    - echo "Cleaning up build artifacts..."
    - rm -rf book/_build/.doctrees
    # - rm -rf book/_build/jupyter_execute
    # - find book/_build -name "*.ipynb" -delete
    # - find book/_build -name "__pycache__" -exec rm -rf {} +
    # - find book/_build -name "*.pyc" -delete
    # Keep debug output
    - echo "Final directory sizes after cleanup:" | tee -a build_debug.log
    - du -sh book/_build/* | tee -a build_debug.log
    - echo $CI_JOB_ID > build_job_id.txt
  artifacts:
    paths:
      - book/_build/html/**
      # - book/_build/html/**/*.html
      # - book/_build/html/**/*.css
      # - book/_build/html/**/*.js
      # - book/_build/html/_images/**/*
      # - book/_build/html/_static/**/*.{css,js,woff,woff2,ttf}
      - stdout.log
      - stderr.log
      - build_job_id.txt
      - build_debug.log
    # exclude:
    #   - book/_build/html/**/*.ipynb
    #   - book/_build/html/**/__pycache__/
    #   - book/_build/html/**/*.doctree
    #   - book/_build/html/**/*.pickle
    expire_in: 1 week
  rules:
    - if: $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "release"
    - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "release"
      when: always

deploy-draft:
  stage: deploy
  needs: ["build-book"]
  script:
    - BUILD_JOB_ID=$(cat build_job_id.txt)
    - |
      curl -X POST https://mude.citg.tudelft.nl/hooks/book-deploy-draft \
      -H "Content-Type: application/json" \
      -H "X-Gitlab-Token: glpat-m4CzsDqHnXNn3Pf5Whyd" \
      -d "{\"object_kind\":\"pipeline\",\"object_attributes\":{\"status\":\"success\",\"ref\":\"main\"},\"build_job_id\":$BUILD_JOB_ID}"
  environment:
    name: draft
    url: https://mude.citg.tudelft.nl/2024/book/draft
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

deploy-production:
  stage: deploy
  needs: ["build-book"]
  script:
    - BUILD_JOB_ID=$(cat build_job_id.txt)
    - |
      curl -X POST https://mude.citg.tudelft.nl/hooks/book-deploy-production \
      -H "Content-Type: application/json" \
      -H "X-Gitlab-Token: glpat-m4CzsDqHnXNn3Pf5Whyd" \
      -d "{\"object_kind\":\"pipeline\",\"object_attributes\":{\"status\":\"success\",\"ref\":\"release\"},\"build_job_id\":$BUILD_JOB_ID}"
  environment:
    name: production
    url: https://mude.citg.tudelft.nl/2024/book
  rules:
    - if: $CI_COMMIT_BRANCH == "release"