2 changed files with 82 additions and 1 deletions
@ -0,0 +1,82 @@ |
|||||
|
name: Publish to (Test)PyPI via Poetry |
||||
|
|
||||
|
on: |
||||
|
push: |
||||
|
tags: |
||||
|
- "test/*.*.*" |
||||
|
- "test/v*.*.*" |
||||
|
- "*.*.*" |
||||
|
- "v*.*.*" |
||||
|
|
||||
|
jobs: |
||||
|
build-and-publish: |
||||
|
runs-on: ubuntu-latest |
||||
|
|
||||
|
env: |
||||
|
PYTHON_VERSION: "3.12" |
||||
|
|
||||
|
steps: |
||||
|
- name: Checkout |
||||
|
uses: actions/checkout@v4 |
||||
|
|
||||
|
- name: Set release variables from tag |
||||
|
id: tag |
||||
|
run: | |
||||
|
RAW_TAG="${GITHUB_REF_NAME}" # examples: 0.1.0, v0.1.0, test/0.1.0, test/v0.1.0 |
||||
|
# detect target (testpypi or pypi) |
||||
|
if [[ "$RAW_TAG" == test/* ]]; then |
||||
|
echo "target_repo=testpypi" >> "$GITHUB_OUTPUT" |
||||
|
else |
||||
|
echo "target_repo=pypi" >> "$GITHUB_OUTPUT" |
||||
|
fi |
||||
|
# strip possible prefixes 'test/' and optional leading 'v' |
||||
|
STRIPPED="${RAW_TAG#test/}" |
||||
|
STRIPPED="${STRIPPED#v}" |
||||
|
echo "version=$STRIPPED" >> "$GITHUB_OUTPUT" |
||||
|
echo "Resolved version: $STRIPPED, target: $(cat $GITHUB_OUTPUT | grep target_repo | cut -d= -f2)" |
||||
|
|
||||
|
- name: Set up Python |
||||
|
uses: actions/setup-python@v5 |
||||
|
with: |
||||
|
python-version: ${{ env.PYTHON_VERSION }} |
||||
|
|
||||
|
- name: Install Poetry |
||||
|
run: pipx install poetry |
||||
|
|
||||
|
- name: Cache Poetry and pip |
||||
|
uses: actions/cache@v4 |
||||
|
with: |
||||
|
path: | |
||||
|
~/.cache/pypoetry |
||||
|
~/.cache/pip |
||||
|
key: poetry-${{ runner.os }}-${{ env.PYTHON_VERSION }}-${{ hashFiles('**/poetry.lock') }} |
||||
|
restore-keys: | |
||||
|
poetry-${{ runner.os }}-${{ env.PYTHON_VERSION }}- |
||||
|
|
||||
|
- name: Install project deps (no dev) |
||||
|
run: poetry install --no-interaction --no-root --only main |
||||
|
|
||||
|
- name: Sync version from tag into pyproject.toml |
||||
|
run: poetry version ${{ steps.tag.outputs.version }} |
||||
|
|
||||
|
- name: Build distributions |
||||
|
run: poetry build --no-interaction |
||||
|
|
||||
|
- name: Configure Poetry repositories and tokens |
||||
|
if: ${{ steps.tag.outputs.target_repo == 'testpypi' }} |
||||
|
run: | |
||||
|
poetry config repositories.testpypi https://test.pypi.org/legacy/ |
||||
|
poetry config pypi-token.testpypi ${{ secrets.TEST_PYPI_API_TOKEN }} |
||||
|
|
||||
|
- name: Configure Poetry token for PyPI |
||||
|
if: ${{ steps.tag.outputs.target_repo == 'pypi' }} |
||||
|
run: | |
||||
|
poetry config pypi-token.pypi ${{ secrets.PYPI_API_TOKEN }} |
||||
|
|
||||
|
- name: Publish to TestPyPI |
||||
|
if: ${{ steps.tag.outputs.target_repo == 'testpypi' }} |
||||
|
run: poetry publish -r testpypi --no-interaction |
||||
|
|
||||
|
- name: Publish to PyPI |
||||
|
if: ${{ steps.tag.outputs.target_repo == 'pypi' }} |
||||
|
run: poetry publish --no-interaction |
Loading…
Reference in new issue