Skip to content

Commit c62af1c

Browse files
committed
added autorelease workflow
1 parent 9e2ea9b commit c62af1c

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

.github/workflows/autorelease.yml

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
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+
58+
# Extract only meaningful +/- lines (skip diff headers)
59+
while IFS= read -r line; do
60+
clean="${line:1}" # strip leading + or -
61+
clean="${clean#*ManagementApi* | }" # strip the prefix
62+
if [[ "$line" == +* ]]; then
63+
ADD+=("$clean")
64+
elif [[ "$line" == -* ]]; then
65+
REMOVE+=("$clean")
66+
fi
67+
done < <(grep '^[+-]' endpoints.diff | grep -v '^+++' | grep -v '^---')
68+
69+
{
70+
echo "## Summary"
71+
echo "### Added endpoints"
72+
if [ ${#ADD[@]} -eq 0 ]; then
73+
echo "- None"
74+
else
75+
printf -- "- %s\n" "${ADD[@]}"
76+
fi
77+
78+
echo ""
79+
echo "### Removed endpoints"
80+
if [ ${#REMOVE[@]} -eq 0 ]; then
81+
echo "- None"
82+
else
83+
printf -- "- %s\n" "${REMOVE[@]}"
84+
fi
85+
} > release-notes.md
86+
87+
echo "notes_file=release-notes.md" >> "$GITHUB_OUTPUT"
88+
89+
- name: show output
90+
run: |
91+
echo version: ${{ steps.get_version.outputs.version }}
92+
cat ${{ steps.relnotes.outputs.notes_file }}
93+
94+
#- name: Create Git tag
95+
# if: ${{ steps.get_version.outputs.version != '' }}
96+
# run: |
97+
# ver="${{ steps.get_version.outputs.version }}"
98+
# git tag -f "$ver" "$GITHUB_SHA"
99+
# git push -f origin "refs/tags/$ver"
100+
#
101+
#- name: Create GitHub release
102+
# if: ${{ steps.get_version.outputs.version != '' }}
103+
# env:
104+
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
105+
# run: |
106+
# ver="${{ steps.get_version.outputs.version }}"
107+
# notes_file="${{ steps.relnotes.outputs.notes_file }}"
108+
#
109+
# if gh release view "$ver" &>/dev/null; then
110+
# gh release delete "$ver" --yes
111+
# fi
112+
#
113+
# gh release create "$ver" \
114+
# --title "$ver" \
115+
# --notes-file "$notes_file" \
116+
# --target "$GITHUB_SHA"
117+
#

0 commit comments

Comments
 (0)