update to 0.0.0 #4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Auto-release on master | |
on: | |
push: | |
#branches: [ master ] | |
permissions: | |
contents: write | |
jobs: | |
release: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # get full history so we can diff | |
- name: Extract version from commit message | |
id: get_version | |
run: | | |
msg='${{ github.event.head_commit.message }}' | |
if [[ "$msg" =~ update[[:space:]]+to[[:space:]]+([0-9]+\.[0-9]+\.[0-9]+) ]]; then | |
ver="${BASH_REMATCH[1]}" | |
echo "version=$ver" >> $GITHUB_OUTPUT | |
else | |
echo "Commit message does not match pattern - skipping release." | |
echo "version=" >> $GITHUB_OUTPUT | |
fi | |
- name: Skip when no version | |
if: ${{ steps.get_version.outputs.version == '' }} | |
run: echo "Nothing to do." | |
- name: Get diff of README endpoint section | |
if: ${{ steps.get_version.outputs.version != '' }} | |
id: get_diff | |
run: | | |
# Get section from old commit | |
git show HEAD^:README.md | awk '/^## Documentation for API endpoints/ {f=1; next} /^## / && f {exit} f' > old.txt || true | |
# Get section from current commit | |
awk '/^## Documentation for API endpoints/ {f=1; next} /^## / && f {exit} f' README.md > new.txt || true | |
# Normalize and diff | |
diff -u old.txt new.txt > endpoints.diff || true | |
echo "diff written" | |
cat endpoints.diff | |
- name: Generate release notes | |
if: ${{ steps.get_version.outputs.version != '' }} | |
id: relnotes | |
run: | | |
ADD=() | |
REMOVE=() | |
CHANGE=() | |
while IFS= read -r line; do | |
case "$line" in | |
+*) ADD+=("${line:1}") ;; | |
-*) REMOVE+=("${line:1}") ;; | |
esac | |
done < <(grep '^[+-]' endpoints.diff | grep -v '^+++' | grep -v '^---') | |
for add in "${ADD[@]}"; do | |
match=false | |
for rem in "${REMOVE[@]}"; do | |
if [[ "$add" == "$rem" ]]; then | |
match=true | |
break | |
fi | |
done | |
if $match; then | |
CHANGE+=("$add") | |
fi | |
done | |
# Remove changed lines from ADD and REMOVE | |
for change in "${CHANGE[@]}"; do | |
ADD=("${ADD[@]/$change}") | |
REMOVE=("${REMOVE[@]/$change}") | |
done | |
{ | |
echo "### Added endpoints" | |
printf -- "- %s\n" "${ADD[@]:-None}" | |
echo "" | |
echo "### Removed endpoints" | |
printf -- "- %s\n" "${REMOVE[@]:-None}" | |
echo "" | |
echo "### Changed endpoints" | |
printf -- "- %s\n" "${CHANGE[@]:-None}" | |
} > release-notes.md | |
echo "notes_file=release-notes.md" >> "$GITHUB_OUTPUT" | |
- name: show output | |
run: | | |
echo version: ${{ steps.get_version.outputs.version }} | |
echo ${{ steps.relnotes.outputs.notes_file }} | |
#- name: Create Git tag | |
# if: ${{ steps.get_version.outputs.version != '' }} | |
# run: | | |
# ver="${{ steps.get_version.outputs.version }}" | |
# git tag -f "$ver" "$GITHUB_SHA" | |
# git push -f origin "refs/tags/$ver" | |
# | |
#- name: Create GitHub release | |
# if: ${{ steps.get_version.outputs.version != '' }} | |
# env: | |
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# run: | | |
# ver="${{ steps.get_version.outputs.version }}" | |
# notes_file="${{ steps.relnotes.outputs.notes_file }}" | |
# | |
# if gh release view "$ver" &>/dev/null; then | |
# gh release delete "$ver" --yes | |
# fi | |
# | |
# gh release create "$ver" \ | |
# --title "$ver" \ | |
# --notes-file "$notes_file" \ | |
# --target "$GITHUB_SHA" | |
# |