Skip to content

Commit b40c9bd

Browse files
authored
feat: automate publishing to pypi (#58)
* feat: automate publishing to pypi * feat: ensure version is in package and changelog * feat: sync up master after release Signed-off-by: heitorlessa <[email protected]> * chore: document release process in action Signed-off-by: heitorlessa <[email protected]> * improv: use exact match for release tag version Signed-off-by: heitorlessa <[email protected]> * fix: PYPI_USERNAME typo Signed-off-by: heitorlessa <[email protected]>
1 parent b010833 commit b40c9bd

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

Diff for: .github/workflows/publish.yml

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
name: Publish to PyPi
2+
3+
# RELEASE PROCESS
4+
#
5+
# === Manual activities ===
6+
#
7+
# 1. Document human readable changes in CHANGELOG
8+
# 2. Bump package version using poetry version <major|minor|patch|specific version>
9+
# 3. Create a PR to develop branch, and merge if all tests pass
10+
# 4. Edit the current draft release notes
11+
# 5. If not already set, use `v<new version>` as a tag, and select develop as target branch
12+
#
13+
# === Automated activities ===
14+
#
15+
# 1. Extract release notes tag that was published
16+
# 2. Ensure release notes tag match what's in CHANGELOG and pyproject
17+
# 3. Run tests, linting, security and complexity base line
18+
# 4. Publish package to PyPi test repository
19+
# 5. Publish package to PyPi prod repository
20+
# 6. Push latest release source code to master using release title as the commit message
21+
22+
on:
23+
release:
24+
types: [published]
25+
26+
jobs:
27+
upload:
28+
runs-on: ubuntu-latest
29+
steps:
30+
- uses: actions/checkout@v2
31+
- name: Set up Python
32+
uses: actions/setup-python@v1
33+
with:
34+
python-version: "3.8"
35+
- name: Set release notes tag
36+
run: |
37+
export RELEASE_TAG_VERSION=${{ github.event.release.tag_name }}
38+
echo ::set-env name=RELEASE_TAG_VERSION::${RELEASE_TAG_VERSION:1}
39+
- name: Ensure new version is also set in pyproject and CHANGELOG
40+
run: |
41+
grep --regexp "\[${RELEASE_TAG_VERSION}\]" CHANGELOG.md
42+
grep --regexp "version \= \"${RELEASE_TAG_VERSION}\"" pyproject.toml
43+
- name: Install dependencies
44+
run: make dev
45+
- name: Run all tests, linting and baselines
46+
run: make pr
47+
- name: Build python package and wheel
48+
run: poetry build
49+
- name: Upload to PyPi test
50+
run: make release-test
51+
env:
52+
PYPI_USERNAME: __token__
53+
PYPI_TOKEN: ${{ secrets.PYPI_TEST_TOKEN }}
54+
- name: Upload to PyPi prod
55+
run: make release-prod
56+
env:
57+
PYPI_USERNAME: __token__
58+
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
59+
60+
sync_master:
61+
needs: upload
62+
runs-on: ubuntu-latest
63+
steps:
64+
- uses: actions/checkout@v2
65+
- name: Sync master from detached head
66+
# If version matches CHANGELOG and pyproject.toml
67+
# If it passes all checks, successfully releases to test and prod
68+
# Then sync up master with latest source code release
69+
# where commit message will be Release notes title
70+
run: git push origin HEAD:refs/heads/master --force

0 commit comments

Comments
 (0)