Repository navigation
79 lines (70 loc) · 2.9 KB
/
Copy pathrelease.yml
File metadata and controls
79 lines (70 loc) · 2.9 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
name: Release
on:
push:
tags:
- 'v*'
# Handstart, wenn kein Tag gepusht werden kann oder ein Release wiederholt
# werden muss. Die Version kommt auch dann aus VERSION und nicht aus einer
# Eingabe: es gibt eine Quelle, und das bleibt so.
workflow_dispatch:
permissions:
contents: write
defaults:
run:
shell: bash
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with:
python-version: '3.11'
# Beim Tag-Lauf muss der Tagname zu VERSION passen, sonst haengt am
# Release ein Artefakt mit einer anderen Versionsangabe als der Tagname
# verspricht. Beim Handstart gibt es keinen Tagnamen; dann gilt VERSION,
# und der Tag wird daraus gesetzt.
- name: Version bestimmen und pruefen
id: version
run: |
version="$(cat VERSION)"
if [ "$GITHUB_REF_TYPE" = "tag" ]; then
version="${GITHUB_REF_NAME#v}"
fi
python scripts/check_versions.py --expect "$version"
echo "tag=v$version" >> "$GITHUB_OUTPUT"
echo "nummer=$version" >> "$GITHUB_OUTPUT"
# Die gesamte Packaging-Logik steht in scripts/build_skill_package.py.
# Hier wird sie nur aufgerufen, damit sie lokal genauso laeuft wie hier.
- name: Artefakt bauen
id: paket
run: |
name="$(python scripts/build_skill_package.py --print-name)"
python scripts/build_skill_package.py "dist/$name"
echo "pfad=dist/$name" >> "$GITHUB_OUTPUT"
# Ein Release ohne Text ist ein Name und ein Anhang. Der Text steht schon
# in CHANGELOG.md; er wird hier ausgeschnitten, statt ihn ein zweites Mal
# zu schreiben. Fehlt der Block, bricht der Lauf ab: eine Version ohne
# Changelog-Eintrag soll gar nicht erst als Release erscheinen.
- name: Release-Text aus CHANGELOG.md schneiden
run: |
python - "${{ steps.version.outputs.nummer }}" <<'PY' > release-notes.md
import re, sys
version = sys.argv[1]
text = open("CHANGELOG.md", encoding="utf-8").read()
treffer = re.search(r"^```\s*\n(v%s \(.*?)^```" % re.escape(version),
text, re.S | re.M)
if not treffer:
sys.exit("FEHLER: CHANGELOG.md hat keinen Block fuer v%s" % version)
print("```")
print(treffer.group(1).rstrip())
print("```")
PY
cat release-notes.md
- name: Release anlegen und Artefakt anhaengen
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
with:
tag_name: ${{ steps.version.outputs.tag }}
body_path: release-notes.md
files: ${{ steps.paket.outputs.pfad }}
fail_on_unmatched_files: true