Skip to content

Commit 754bbbc

Browse files
committed
added autorelease workflow
1 parent 555cac8 commit 754bbbc

File tree

1 file changed

+128
-0
lines changed

1 file changed

+128
-0
lines changed

.github/workflows/autorelease.yml

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
name: Auto-release on master
2+
3+
on:
4+
push:
5+
#branches: [ master ]
6+
7+
permissions:
8+
contents: write
9+
10+
jobs:
11+
release:
12+
runs-on: ubuntu-latest
13+
14+
steps:
15+
- uses: actions/checkout@v4
16+
with:
17+
fetch-depth: 0 # get full history so we can diff
18+
19+
- name: Extract version from commit message
20+
id: get_version
21+
run: |
22+
msg='${{ github.event.head_commit.message }}'
23+
if [[ "$msg" =~ update[[:space:]]+to[[:space:]]+([0-9]+\.[0-9]+\.[0-9]+) ]]; then
24+
ver="${BASH_REMATCH[1]}"
25+
echo "version=$ver" >> "$GITHUB_OUTPUT"
26+
else
27+
echo "Commit message does not match pattern – skipping release."
28+
echo "version=" >> "$GITHUB_OUTPUT"
29+
fi
30+
31+
- name: Skip when no version
32+
if: ${{ steps.get_version.outputs.version == '' }}
33+
run: echo "Nothing to do."
34+
35+
- name: Get diff of README endpoint section
36+
if: ${{ steps.get_version.outputs.version != '' }}
37+
id: get_diff
38+
run: |
39+
# Get section from old commit
40+
git show HEAD^:README.md | awk '/^## Documentation for API endpoints/ {f=1; next} /^## / && f {exit} f' > old.txt || true
41+
42+
# Get section from current commit
43+
awk '/^## Documentation for API endpoints/ {f=1; next} /^## / && f {exit} f' README.md > new.txt || true
44+
45+
# Normalize and diff
46+
diff -u old.txt new.txt > endpoints.diff || true
47+
48+
echo "diff written"
49+
cat endpoints.diff
50+
51+
- name: Generate release notes
52+
if: ${{ steps.get_version.outputs.version != '' }}
53+
id: relnotes
54+
run: |
55+
ADD=()
56+
REMOVE=()
57+
CHANGE=()
58+
59+
while IFS= read -r line; do
60+
case "$line" in
61+
+*) ADD+=("${line:1}") ;;
62+
-*) REMOVE+=("${line:1}") ;;
63+
esac
64+
done < <(grep '^[+-]' endpoints.diff | grep -v '^+++' | grep -v '^---')
65+
66+
for add in "${ADD[@]}"; do
67+
match=false
68+
for rem in "${REMOVE[@]}"; do
69+
if [[ "$add" == "$rem" ]]; then
70+
match=true
71+
break
72+
fi
73+
done
74+
if $match; then
75+
CHANGE+=("$add")
76+
fi
77+
done
78+
79+
# Remove changed lines from ADD and REMOVE
80+
for change in "${CHANGE[@]}"; do
81+
ADD=("${ADD[@]/$change}")
82+
REMOVE=("${REMOVE[@]/$change}")
83+
done
84+
85+
{
86+
echo "### Added endpoints"
87+
printf -- "- %s\n" "${ADD[@]:-None}"
88+
89+
echo ""
90+
echo "### Removed endpoints"
91+
printf -- "- %s\n" "${REMOVE[@]:-None}"
92+
93+
echo ""
94+
echo "### Changed endpoints"
95+
printf -- "- %s\n" "${CHANGE[@]:-None}"
96+
} > release-notes.md
97+
98+
echo "notes_file=release-notes.md" >> "$GITHUB_OUTPUT"
99+
100+
- name: show output
101+
run: |
102+
echo version: ${{ steps.get_version.outputs.version }}
103+
echo ${{ steps.relnotes.outputs.notes_file }}
104+
105+
#- name: Create Git tag
106+
# if: ${{ steps.get_version.outputs.version != '' }}
107+
# run: |
108+
# ver="${{ steps.get_version.outputs.version }}"
109+
# git tag -f "$ver" "$GITHUB_SHA"
110+
# git push -f origin "refs/tags/$ver"
111+
#
112+
#- name: Create GitHub release
113+
# if: ${{ steps.get_version.outputs.version != '' }}
114+
# env:
115+
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
116+
# run: |
117+
# ver="${{ steps.get_version.outputs.version }}"
118+
# notes_file="${{ steps.relnotes.outputs.notes_file }}"
119+
#
120+
# if gh release view "$ver" &>/dev/null; then
121+
# gh release delete "$ver" --yes
122+
# fi
123+
#
124+
# gh release create "$ver" \
125+
# --title "$ver" \
126+
# --notes-file "$notes_file" \
127+
# --target "$GITHUB_SHA"
128+
#

0 commit comments

Comments
 (0)