stages:
  - test
  - build
  - deploy
  - pypi-twine

test:
  stage: test
  tags: ["build"]
  except:
    - tags
  script: make test

build:
  stage: build
  tags: ["build"]
  except:
    - tags
  script:
    - make clean
    - make install-source-prod
    # Copy static assets to env/static and create a tarball of the static files.
    - cp -pr make_post_sell/static env/static
    - cp -pr env/static static
    - tar -zcf static.tar.gz static
    # Clean up the directory outside of the gitlab-runner filesystem.
    # rm -rf can race with background processes on build runners — verify removal.
    - rm -rf /opt/make_post_sell/env; for i in 1 2 3; do [ ! -d /opt/make_post_sell/env ] && break; sleep 2; rm -rf /opt/make_post_sell/env; done; [ ! -d /opt/make_post_sell/env ]
    # Ensure bin/python symlink exists (Python 3.12 venv may only create python3).
    - test -f env/bin/python || ln -sf python3 env/bin/python
    # Clone the virtualenv with virtualenv-clone into the desired location.
    - virtualenv-clone -vvv $PWD/env /opt/make_post_sell/env
    # Create a tarball of the virtualenv.
    - tar -zcf env.tar.gz -C /opt/make_post_sell .
    # Create SHA512 hash of env.tar.gz.
    - sha512sum env.tar.gz >> env.tar.gz.hash
    # Create commit-hash.txt to track this build's git commit hash.
    - echo $CI_COMMIT_SHA >> commit-hash.txt

  artifacts:
    paths:
      - env.tar.gz
      - env.tar.gz.hash
      - static.tar.gz
      - commit-hash.txt
    expire_in: 1 month
    when: always

deploy:
  stage: deploy
  needs: [build]
  rules:
    - if: '$CI_COMMIT_BRANCH == "develop" || $CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "main"'
      when: on_success
  trigger:
    include: .gitlab-ci.deploy.yml

pypi-twine:
  stage: pypi-twine
  tags:
    - build
  only:
    - tags
  script:
    - python3 -m venv twine_env
    - source twine_env/bin/activate
    - pip install --upgrade pip
    - pip install twine build
    - python3 -m build
    - twine upload dist/*
