-
Notifications
You must be signed in to change notification settings - Fork 0
141 lines (128 loc) · 4.21 KB
/
Copy pathpublish.yml
File metadata and controls
141 lines (128 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
name: Publish package
# based on https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/
on:
push:
tags:
- '*'
- "!latest"
jobs:
test-and-build:
uses: ./.github/workflows/test.yml
check_version:
name: Check version
if: startsWith(github.ref, 'refs/tags/') # only publish on tag pushes
needs: test-and-build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Read version from pyproject.toml
run: echo VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])") >> "$GITHUB_ENV"
- run: echo $GITHUB_REF_NAME
- run: echo $VERSION
- name: Check that version and tag are identical
run: test $GITHUB_REF_NAME = $VERSION
check_changelog:
name: Check changelog is up-to-date
needs: check_version
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check that changes/ is empty
shell: bash
run: |
set -euo pipefail
# Count every *.md file except README.md in changes/
count=$(find changes -type f -name '*.md' ! -name 'README.md' | wc -l)
if [ "$count" -ne 0 ]; then
echo "::error::There are still $count news fragment(s) in 'changes/'."
echo "Run 'towncrier build' and commit the updated CHANGELOG.md."
exit 1
fi
echo "No news fragments left in changes/"
- name: Check CHANGELOG.md heading
shell: bash
run: |
set -euo pipefail
# Extract the first level 2 heading
first_h2=$(grep -o -m1 -E "^## \[blaupause .*\]" CHANGELOG.md || true)
if [ -z "$first_h2" ]; then
echo "::error::No level-2 (##) heading found in CHANGELOG.md."
exit 1
fi
echo "First heading in CHANGELOG.md: '$first_h2'"
expected="## [blaupause $GITHUB_REF_NAME]"
if [ "$first_h2" != "$expected" ]; then
echo "::error::First heading must be '$expected'"
exit 1
fi
echo "✔ CHANGELOG heading matches the pushed tag ($GITHUB_REF_NAME)"
publish-to-pypi:
name: Publish to PyPI
if: startsWith(github.ref, 'refs/tags/') # only publish on tag pushes
needs:
- check_changelog
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/blaupause
permissions:
id-token: write
steps:
- name: Download all the dists
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
github-release:
name: GitHub Release
needs:
- publish-to-pypi
runs-on: ubuntu-latest
permissions:
contents: write # IMPORTANT: mandatory for making GitHub Releases
id-token: write # IMPORTANT: mandatory for sigstore
steps:
- name: Download all the dists
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: Sign the dists with Sigstore
uses: sigstore/gh-action-sigstore-python@v3.0.0
with:
inputs: >-
./dist/*.tar.gz
./dist/*.whl
- name: Create GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
run: >-
gh release create
"$GITHUB_REF_NAME"
--repo "$GITHUB_REPOSITORY"
--notes ""
- name: Upload artifact signatures to GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
# Upload to GitHub Release using the `gh` CLI.
# `dist/` contains the built packages, and the
# sigstore-produced signatures and certificates.
run: >-
gh release upload
"$GITHUB_REF_NAME" dist/**
--repo "$GITHUB_REPOSITORY"
latest-tag:
needs:
- publish-to-pypi
name: Update latest tag
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Run latest-tag
uses: EndBug/latest-tag@latest