twine 6 (Sep 2025) auto-detects GitLab CI and refuses to fall back to ~/.pypirc, requiring PYPI_ID_TOKEN (Trusted Publishing OIDC). Pin <6 to keep the runner's ~/.pypirc fallback working until we migrate all python/* repos to Trusted Publishing as a coordinated change.
75 lines
2.3 KiB
YAML
75 lines
2.3 KiB
YAML
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
|
|
# Pin twine <6 — newer twine auto-detects GitLab CI and refuses to
|
|
# fall back to ~/.pypirc on the runner, requiring PYPI_ID_TOKEN
|
|
# (Trusted Publishing OIDC). Until we migrate to Trusted Publishing,
|
|
# stick with the classic ~/.pypirc auth on the build runner.
|
|
- pip install "twine<6" build
|
|
- python3 -m build
|
|
- twine check dist/*
|
|
- twine upload --non-interactive dist/*
|