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.
102 lines
3.4 KiB
102 lines
3.4 KiB
name: Release → (Test)PyPI + GitHub Assets
|
|
|
|
on:
|
|
release:
|
|
types: [released, prereleased] # published normal release и pre-release
|
|
|
|
jobs:
|
|
build-and-publish:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
PYTHON_VERSION: "3.12"
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set variables from Release tag
|
|
id: meta
|
|
run: |
|
|
TAG="${{ github.event.release.tag_name }}" # e.g. v0.1.0 or 0.1.0
|
|
VERSION="${TAG#v}" # strip leading 'v' if present
|
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
if [[ "${{ github.event.release.prerelease }}" == "true" ]]; then
|
|
echo "repo=testpypi" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "repo=pypi" >> $GITHUB_OUTPUT
|
|
fi
|
|
echo "Resolved: version=$VERSION repo=$(cat $GITHUB_OUTPUT | grep 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==1.8.3"
|
|
|
|
- name: Show Poetry version
|
|
run: poetry --version
|
|
|
|
- name: Cache Poetry & pip
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.cache/pypoetry
|
|
~/.cache/pip
|
|
key: poetry-${{ runner.os }}-${{ env.PYTHON_VERSION }}-**1.8.3**-${{ hashFiles('**/poetry.lock') }}
|
|
restore-keys: |
|
|
poetry-${{ runner.os }}-${{ env.PYTHON_VERSION }}-**1.8.3**-
|
|
|
|
- name: Install deps (no dev)
|
|
run: poetry install --no-interaction --no-root --only main
|
|
|
|
- name: Sync version into pyproject.toml
|
|
run: poetry version ${{ steps.meta.outputs.version }}
|
|
|
|
- name: Build sdist + wheel
|
|
run: poetry build --no-interaction
|
|
|
|
# (опционально) Быстрая проверка метаданных пакета перед публикацией
|
|
- name: Twine check
|
|
run: |
|
|
python -m pip install --upgrade twine
|
|
twine check dist/*
|
|
|
|
# Настройка репозиториев/токенов Poetry
|
|
- name: Configure TestPyPI
|
|
if: ${{ steps.meta.outputs.repo == 'testpypi' }}
|
|
run: |
|
|
poetry config repositories.testpypi https://test.pypi.org/legacy/
|
|
poetry config pypi-token.testpypi ${{ secrets.TEST_PYPI_API_TOKEN }}
|
|
|
|
- name: Configure PyPI
|
|
if: ${{ steps.meta.outputs.repo == 'pypi' }}
|
|
run: |
|
|
poetry config pypi-token.pypi ${{ secrets.PYPI_API_TOKEN }}
|
|
|
|
# Публикация
|
|
- name: Publish to TestPyPI
|
|
if: ${{ steps.meta.outputs.repo == 'testpypi' }}
|
|
run: poetry publish -r testpypi --no-interaction
|
|
|
|
- name: Publish to PyPI
|
|
if: ${{ steps.meta.outputs.repo == 'pypi' }}
|
|
run: poetry publish --no-interaction
|
|
|
|
# Прикрепляем артефакты к странице GitHub Release
|
|
- name: Upload artifacts to GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: ${{ github.event.release.tag_name }}
|
|
files: |
|
|
dist/*.whl
|
|
dist/*.tar.gz
|
|
|
|
# (опционально) также сохраняем артефакты в job artifacts
|
|
- name: Upload build artifacts (job)
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: dist-${{ steps.meta.outputs.version }}
|
|
path: dist/
|
|
if-no-files-found: error
|