Skip to content

Commit 63a3bf2

Browse files
committed
Add GitHub action for automated releases.
1 parent a3dc83c commit 63a3bf2

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
on:
2+
push:
3+
tags:
4+
- '*.*.*'
5+
6+
name: Create Release
7+
8+
jobs:
9+
build:
10+
name: Create Release
11+
runs-on: ubuntu-latest
12+
steps:
13+
- name: Checkout code
14+
uses: actions/checkout@v2
15+
- name: Generate body
16+
run: |
17+
scripts/get_release_description.py | tee release_body.md
18+
- name: Create Release
19+
id: create_release
20+
uses: actions/create-release@v1
21+
env:
22+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
23+
with:
24+
tag_name: ${{ github.ref }}
25+
release_name: Release ${{ github.ref }}
26+
body_path: release_body.md
27+
draft: true
28+
prerelease: false

scripts/get_release_description.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/usr/bin/env python3
2+
"""Print the description used for GitHub Releases."""
3+
import re
4+
5+
TAG_BANNER = r"\d+\.\d+\.\d+\S* - \d+-\d+-\d+\n--------------------\n"
6+
7+
RE_BODY = re.compile(fr".*?{TAG_BANNER}(.*?){TAG_BANNER}", re.DOTALL)
8+
RE_SECTION = re.compile(r"^(\w+)$", re.MULTILINE)
9+
10+
11+
def main() -> None:
12+
# Get the most recent tag.
13+
with open("CHANGELOG.rst", "r") as f:
14+
match = RE_BODY.match(f.read())
15+
assert match
16+
body = match.groups()[0].strip()
17+
18+
# Add Markdown formatting to sections.
19+
body = RE_SECTION.sub(r"### \1", body)
20+
print(body)
21+
22+
23+
if __name__ == "__main__":
24+
main()

0 commit comments

Comments
 (0)