111 lines
4.5 KiB
YAML
111 lines
4.5 KiB
YAML
name: Changelog Notification
|
|
|
|
on:
|
|
push:
|
|
branches: [next]
|
|
paths:
|
|
- 'docs/content/changelog/**.mdx'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
notify-changelog:
|
|
name: Send Changelog Notification
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
with:
|
|
fetch-depth: 0 # Fetch full history to detect changes across all commits in push
|
|
|
|
- name: Get Changed Changelog Files
|
|
id: changed-files
|
|
run: |
|
|
# Get the commit range for this push
|
|
BEFORE="${{ github.event.before }}"
|
|
AFTER="${{ github.event.after }}"
|
|
|
|
echo "Push event details:"
|
|
echo " Before: $BEFORE"
|
|
echo " After: $AFTER"
|
|
echo " Commits in push: $(git rev-list --count "$BEFORE".."$AFTER" 2>/dev/null || echo "N/A")"
|
|
|
|
# Handle first push to branch (before SHA is all zeros)
|
|
if [[ "$BEFORE" =~ ^0+$ ]]; then
|
|
echo "First push to branch detected, checking only the latest commit"
|
|
CHANGED_FILES=$(git diff --name-only --diff-filter=AM HEAD^..HEAD | grep '^docs/content/changelog/.*\.mdx$' || echo "")
|
|
else
|
|
echo "Checking all commits in push range: $BEFORE..$AFTER"
|
|
# Get the list of added/modified changelog files across all commits in this push
|
|
CHANGED_FILES=$(git diff --name-only --diff-filter=AM "$BEFORE".."$AFTER" | grep '^docs/content/changelog/.*\.mdx$' || echo "")
|
|
fi
|
|
|
|
if [ -z "$CHANGED_FILES" ]; then
|
|
echo "No changelog files changed in this push"
|
|
echo "has_changelog=false" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "Changelog files found:"
|
|
echo "$CHANGED_FILES"
|
|
# Get the first changelog file (in case multiple were added)
|
|
CHANGELOG_FILE=$(echo "$CHANGED_FILES" | head -n 1)
|
|
echo ""
|
|
echo "Processing changelog: $CHANGELOG_FILE"
|
|
echo "changelog_file=$CHANGELOG_FILE" >> $GITHUB_OUTPUT
|
|
echo "has_changelog=true" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Extract Changelog Metadata
|
|
if: steps.changed-files.outputs.has_changelog == 'true'
|
|
id: extract-metadata
|
|
run: |
|
|
CHANGELOG_FILE="${{ steps.changed-files.outputs.changelog_file }}"
|
|
|
|
# Extract title from frontmatter
|
|
TITLE=$(grep "^title:" "$CHANGELOG_FILE" | sed "s/^title: *['\"]*//" | sed "s/['\"]* *$//")
|
|
|
|
# Extract date from frontmatter
|
|
DATE=$(grep "^date:" "$CHANGELOG_FILE" | sed "s/^date: *['\"]*//" | sed "s/['\"]* *$//")
|
|
|
|
# Format date for URL (YYYY-MM-DD to YYYY/MM/DD)
|
|
URL_DATE=$(echo "$DATE" | sed 's/-/\//g')
|
|
|
|
# Build the changelog URL
|
|
CHANGELOG_URL="https://docs.composio.dev/docs/changelog/${URL_DATE}"
|
|
|
|
# Get the commit author who added/modified this changelog
|
|
AUTHOR=$(git log -1 --format='%an' -- "$CHANGELOG_FILE")
|
|
AUTHOR_EMAIL=$(git log -1 --format='%ae' -- "$CHANGELOG_FILE")
|
|
|
|
# Build properly escaped JSON payload using jq
|
|
SLACK_PAYLOAD=$(jq -n \
|
|
--arg title "$TITLE" \
|
|
--arg date "$DATE" \
|
|
--arg url "$CHANGELOG_URL" \
|
|
--arg author "$AUTHOR" \
|
|
'{text: "*New Changelog Published*\n\n*\($title)*\n\nDate: \($date)\n<\($url)|View Changelog>\nAuthor: \($author)"}')
|
|
|
|
echo "title=$TITLE" >> $GITHUB_OUTPUT
|
|
echo "date=$DATE" >> $GITHUB_OUTPUT
|
|
echo "url=$CHANGELOG_URL" >> $GITHUB_OUTPUT
|
|
echo "author=$AUTHOR" >> $GITHUB_OUTPUT
|
|
echo "author_email=$AUTHOR_EMAIL" >> $GITHUB_OUTPUT
|
|
|
|
# Save the JSON payload for the next step
|
|
echo "slack_payload<<EOF" >> $GITHUB_OUTPUT
|
|
echo "$SLACK_PAYLOAD" >> $GITHUB_OUTPUT
|
|
echo "EOF" >> $GITHUB_OUTPUT
|
|
|
|
echo "📝 Changelog Title: $TITLE"
|
|
echo "📅 Date: $DATE"
|
|
echo "🔗 URL: $CHANGELOG_URL"
|
|
echo "👤 Author: $AUTHOR ($AUTHOR_EMAIL)"
|
|
|
|
- name: Send Slack Notification
|
|
if: steps.changed-files.outputs.has_changelog == 'true'
|
|
uses: slackapi/slack-github-action@45a88b9581bfab2566dc881e2cd66d334e621e2c # v3.0.3
|
|
with:
|
|
webhook: ${{ secrets.SLACK_CUSTOMER_COMMS_WEBHOOK_URL }}
|
|
webhook-type: incoming-webhook
|
|
payload: ${{ steps.extract-metadata.outputs.slack_payload }}
|