mirror of
https://github.com/Sea-Haven-Industries/afterhours-shift-manager.git
synced 2026-10-07 04:42:03 +00:00
Reworks the daily version bump workflow to: - Pull merged PR titles via gh CLI instead of raw commit messages - Post a polished, non-technical channel message with a link to the changelog canvas - Prepend the new version entry to the Slack canvas via canvases.edit API so the canvas stays in sync automatically Channel message format: "After-Hours Scheduler has been updated to vXXXX.XX.XX Here's a brief summary of what changed: • ... Click here to read the full changelog"
This commit is contained in:
parent
769b9e5acd
commit
b08a532da3
1 changed files with 76 additions and 21 deletions
97
.github/workflows/deploy-notify.yml
vendored
97
.github/workflows/deploy-notify.yml
vendored
|
|
@ -13,6 +13,8 @@ permissions:
|
||||||
jobs:
|
jobs:
|
||||||
notify:
|
notify:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
|
|
@ -30,53 +32,106 @@ jobs:
|
||||||
echo "skip=false" >> "$GITHUB_OUTPUT"
|
echo "skip=false" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Check for changes since last version tag
|
- name: Collect merged PRs since last version
|
||||||
if: steps.dst.outputs.skip != 'true'
|
if: steps.dst.outputs.skip != 'true'
|
||||||
id: changes
|
id: changes
|
||||||
run: |
|
run: |
|
||||||
LAST_TAG=$(git tag -l 'v*' --sort=-v:refname | head -1)
|
LAST_TAG=$(git tag -l 'v*' --sort=-v:refname | head -1)
|
||||||
|
|
||||||
if [ -z "$LAST_TAG" ]; then
|
if [ -z "$LAST_TAG" ]; then
|
||||||
echo "No previous version tag — using full history"
|
echo "No previous version tag"
|
||||||
COMMITS=$(git log --oneline --pretty=format:"%s")
|
echo "has_changes=false" >> "$GITHUB_OUTPUT"
|
||||||
else
|
exit 0
|
||||||
COMMITS=$(git log "$LAST_TAG"..HEAD --oneline --pretty=format:"%s")
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$COMMITS" ]; then
|
LAST_TAG_DATE=$(git log -1 --format=%aI "$LAST_TAG")
|
||||||
echo "No new commits since $LAST_TAG"
|
PRS=$(gh pr list --state merged --json number,title,mergedAt \
|
||||||
|
--jq "sort_by(.number) | .[] | select(.mergedAt > \"$LAST_TAG_DATE\")")
|
||||||
|
|
||||||
|
if [ -z "$PRS" ]; then
|
||||||
|
echo "No PRs merged since $LAST_TAG"
|
||||||
echo "has_changes=false" >> "$GITHUB_OUTPUT"
|
echo "has_changes=false" >> "$GITHUB_OUTPUT"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "has_changes=true" >> "$GITHUB_OUTPUT"
|
echo "has_changes=true" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Build bullet list from commit messages, skip merge commits
|
VERSION="v$(TZ=America/New_York date +%Y.%m.%d)"
|
||||||
BULLET_LIST=$(echo "$COMMITS" | grep -v "^Merge" | sed 's/^/• /')
|
|
||||||
{
|
|
||||||
echo "bullets<<ENDOFBULLETS"
|
|
||||||
echo "$BULLET_LIST"
|
|
||||||
echo "ENDOFBULLETS"
|
|
||||||
} >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
# Date-based version
|
|
||||||
VERSION="v$(date +%Y.%m.%d)"
|
|
||||||
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
# Build bullet lists from PR titles
|
||||||
|
TITLES=$(gh pr list --state merged --json number,title,mergedAt \
|
||||||
|
--jq "sort_by(.number) | .[] | select(.mergedAt > \"$LAST_TAG_DATE\") | .title")
|
||||||
|
|
||||||
|
{
|
||||||
|
echo "slack_bullets<<ENDSLACK"
|
||||||
|
echo "$TITLES" | sed 's/ *(#[0-9]*)//g; s/^/• /'
|
||||||
|
echo "ENDSLACK"
|
||||||
|
} >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
{
|
||||||
|
echo "canvas_bullets<<ENDCANVAS"
|
||||||
|
gh pr list --state merged --json number,title,mergedAt \
|
||||||
|
--jq "sort_by(.number) | .[] | select(.mergedAt > \"$LAST_TAG_DATE\") | \"* \(.title) (PR #\(.number))\"" \
|
||||||
|
| sed 's/ *(\(#[0-9]*\))\( (PR\)/ \2/; s/) (PR / (PR /'
|
||||||
|
echo "ENDCANVAS"
|
||||||
|
} >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- name: Create version tag
|
- name: Create version tag
|
||||||
if: steps.dst.outputs.skip != 'true' && steps.changes.outputs.has_changes == 'true'
|
if: steps.changes.outputs.has_changes == 'true'
|
||||||
run: |
|
run: |
|
||||||
git tag ${{ steps.changes.outputs.version }}
|
git tag ${{ steps.changes.outputs.version }}
|
||||||
git push origin ${{ steps.changes.outputs.version }}
|
git push origin ${{ steps.changes.outputs.version }}
|
||||||
|
|
||||||
|
- name: Update changelog canvas
|
||||||
|
if: steps.changes.outputs.has_changes == 'true'
|
||||||
|
env:
|
||||||
|
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
|
||||||
|
CANVAS_ID: ${{ secrets.SLACK_CANVAS_ID }}
|
||||||
|
SECTION_ID: ${{ secrets.SLACK_CANVAS_INTRO_SECTION }}
|
||||||
|
VERSION: ${{ steps.changes.outputs.version }}
|
||||||
|
CANVAS_BULLETS: ${{ steps.changes.outputs.canvas_bullets }}
|
||||||
|
run: |
|
||||||
|
TODAY=$(TZ=America/New_York date +%Y-%m-%d)
|
||||||
|
MARKDOWN=$(printf "---\n\n## %s — %s\n\n%s" "$VERSION" "$TODAY" "$CANVAS_BULLETS")
|
||||||
|
|
||||||
|
RESPONSE=$(curl -s -X POST https://slack.com/api/canvases.edit \
|
||||||
|
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "$(jq -n \
|
||||||
|
--arg canvas_id "$CANVAS_ID" \
|
||||||
|
--arg section_id "$SECTION_ID" \
|
||||||
|
--arg markdown "$MARKDOWN" \
|
||||||
|
'{
|
||||||
|
canvas_id: $canvas_id,
|
||||||
|
changes: [{
|
||||||
|
operation: "insert_after",
|
||||||
|
section_id: $section_id,
|
||||||
|
document_content: {
|
||||||
|
type: "markdown",
|
||||||
|
markdown: $markdown
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}')")
|
||||||
|
|
||||||
|
echo "$RESPONSE" | jq .
|
||||||
|
if [ "$(echo "$RESPONSE" | jq -r .ok)" != "true" ]; then
|
||||||
|
echo "::warning::Canvas update failed: $(echo "$RESPONSE" | jq -r .error)"
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Post to Slack
|
- name: Post to Slack
|
||||||
if: steps.dst.outputs.skip != 'true' && steps.changes.outputs.has_changes == 'true'
|
if: steps.changes.outputs.has_changes == 'true'
|
||||||
env:
|
env:
|
||||||
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
|
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
|
||||||
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}
|
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}
|
||||||
|
CANVAS_ID: ${{ secrets.SLACK_CANVAS_ID }}
|
||||||
VERSION: ${{ steps.changes.outputs.version }}
|
VERSION: ${{ steps.changes.outputs.version }}
|
||||||
BULLETS: ${{ steps.changes.outputs.bullets }}
|
SLACK_BULLETS: ${{ steps.changes.outputs.slack_bullets }}
|
||||||
run: |
|
run: |
|
||||||
TEXT=$(printf ":rocket: *%s deployed*\n\n%s" "$VERSION" "$BULLETS")
|
CANVAS_URL="https://app.slack.com/docs/F0B13V3EBUN"
|
||||||
|
TEXT=$(printf "*After-Hours Scheduler has been updated to %s*\n\nHere's a brief summary of what changed:\n%s\n\n<%s|Click here to read the full changelog>" \
|
||||||
|
"$VERSION" "$SLACK_BULLETS" "$CANVAS_URL")
|
||||||
|
|
||||||
curl -s -X POST https://slack.com/api/chat.postMessage \
|
curl -s -X POST https://slack.com/api/chat.postMessage \
|
||||||
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
|
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue