pythonasyncioeventletgeventlong-pollinglow-latencysocket-iosocketiosocketio-serverweb-serverwebsocket
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.6 KiB
82 lines
2.6 KiB
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
|