We used to run the publication on each PR, which could cause conflicts due to the naming convention being based on the commit history length, and multiple PRs potentially hitting the same name. Adding a `workflow_dispatch` trigger allows us to still test the workflow in PRs but only do so manually (when we're watching anyway). Changelog-None
90 lines
2.9 KiB
YAML
90 lines
2.9 KiB
YAML
---
|
|
name: Publish Python 🐍 distributions 📦 to PyPI and TestPyPI
|
|
on:
|
|
# Only deploy if we're the result of a PR being merged
|
|
push:
|
|
workflow_dispatch:
|
|
branches:
|
|
- master
|
|
tags:
|
|
# Semantic versioning tags
|
|
- 'v[0-9]+.[0-9]+.[0-9]+'
|
|
# Date style tags
|
|
- 'v[0-9]{2}.[0-9]{2}'
|
|
jobs:
|
|
deploy:
|
|
name: Build and publish ${{ matrix.package }} 🐍
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 120
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
include:
|
|
- PACKAGE: pyln-client
|
|
WORKDIR: contrib/pyln-client
|
|
- PACKAGE: pyln-testing
|
|
WORKDIR: contrib/pyln-testing
|
|
- PACKAGE: pyln-proto
|
|
WORKDIR: contrib/pyln-proto
|
|
- PACKAGE: pyln-grpc-proto
|
|
WORKDIR: contrib/pyln-grpc-proto
|
|
# Bolt packages are handled differently
|
|
#- PACKAGE: pyn-bolt1
|
|
# WORKDIR: contrib/pyln-spec/bolt1/
|
|
#- PACKAGE: pyn-bolt2
|
|
# WORKDIR: contrib/pyln-spec/bolt2/
|
|
#- PACKAGE: pyn-bolt4
|
|
# WORKDIR: contrib/pyln-spec/bolt4/
|
|
#- PACKAGE: pyn-bolt7
|
|
# WORKDIR: contrib/pyln-spec/bolt7/
|
|
steps:
|
|
- uses: actions/checkout@master
|
|
with:
|
|
# Need to fetch entire history in order to locate the version tag
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Python 3.8
|
|
uses: actions/setup-python@v1
|
|
with:
|
|
python-version: 3.8
|
|
|
|
- name: Install pypa/build and poetry
|
|
run: >-
|
|
python -m pip install build poetry --user
|
|
|
|
- name: Check version tag
|
|
run: >-
|
|
git describe --always --dirty=-modded --abbrev=7
|
|
|
|
- name: Build a binary wheel and a source tarball
|
|
env:
|
|
WORKDIR: ${{ matrix.WORKDIR }}
|
|
run: |
|
|
export VERSION=$(git describe --abbrev=0).post$(git describe --abbrev=1 | awk -F "-" '{print $2}')
|
|
cd ${{ env.WORKDIR}}
|
|
make upgrade-version NEW_VERSION=$VERSION
|
|
poetry build
|
|
|
|
- name: Publish distribution 📦 to Test PyPI
|
|
if: github.repository == 'ElementsProject/lightning'
|
|
env:
|
|
POETRY_PYPI_TOKEN_TESTPYPI: ${{ secrets.TEST_PYPI_API_TOKEN }}
|
|
WORKDIR: ${{ matrix.WORKDIR }}
|
|
run: |
|
|
cd ${{ env.WORKDIR}}
|
|
python3 -m pip config set global.timeout 150
|
|
poetry config repositories.testpypi https://test.pypi.org/legacy/
|
|
poetry publish --repository testpypi --no-interaction
|
|
|
|
- name: Publish distribution 📦 to PyPI
|
|
if: startsWith(github.ref, 'refs/tags') && github.repository == 'ElementsProject/lightning'
|
|
env:
|
|
POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_API_TOKEN }}
|
|
WORKDIR: ${{ matrix.WORKDIR }}
|
|
run: |
|
|
cd ${{ env.WORKDIR}}
|
|
export VERSION=$(git describe --abbrev=0)
|
|
make upgrade-version NEW_VERSION=$VERSION
|
|
python3 -m pip config set global.timeout 150
|
|
poetry publish --no-interaction
|