123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- name: Discord Issue Notification
- on:
- issues:
- types: [opened, reopened, closed]
- workflow_dispatch:
- inputs:
- issue_number:
- description: "Issue number"
- required: true
- type: string
- jobs:
- Discord:
- runs-on: ubuntu-latest
- name: Discord Issue Notifier
- steps:
- - uses: actions/checkout@v4
- if: github.event_name == 'workflow_dispatch'
- - name: Get issue info for manual trigger
- id: issue-info
- if: github.event_name == 'workflow_dispatch'
- run: |
- ISSUE_INFO=$(gh issue view ${{ github.event.inputs.issue_number }} --json number,title,url,author,state,labels,createdAt)
- echo "number=$(echo "$ISSUE_INFO" | jq -r '.number')" >> $GITHUB_OUTPUT
- echo "title=$(echo "$ISSUE_INFO" | jq -r '.title')" >> $GITHUB_OUTPUT
- echo "html_url=$(echo "$ISSUE_INFO" | jq -r '.url')" >> $GITHUB_OUTPUT
- echo "author_login=$(echo "$ISSUE_INFO" | jq -r '.author.login')" >> $GITHUB_OUTPUT
- echo "author_html_url=https://github.com/$(echo "$ISSUE_INFO" | jq -r '.author.login')" >> $GITHUB_OUTPUT
- echo "state=$(echo "$ISSUE_INFO" | jq -r '.state')" >> $GITHUB_OUTPUT
- echo "created_at=$(echo "$ISSUE_INFO" | jq -r '.createdAt')" >> $GITHUB_OUTPUT
- echo "labels=$(echo "$ISSUE_INFO" | jq -r '.labels | map(.name) | join(", ") // "None"')" >> $GITHUB_OUTPUT
- env:
- GH_TOKEN: ${{ github.token }}
- - name: Determine action color and emoji
- id: action-info
- run: |
- if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
- # For manual trigger, use the current state
- case "${{ steps.issue-info.outputs.state }}" in
- "OPEN")
- echo "color=15158332" >> $GITHUB_OUTPUT # Red
- echo "emoji=🔴" >> $GITHUB_OUTPUT
- echo "action_text=Open" >> $GITHUB_OUTPUT
- ;;
- "CLOSED")
- echo "color=5763719" >> $GITHUB_OUTPUT # Green
- echo "emoji=🟢" >> $GITHUB_OUTPUT
- echo "action_text=Closed" >> $GITHUB_OUTPUT
- ;;
- esac
- else
- # For automatic trigger, use the action
- case "${{ github.event.action }}" in
- "opened")
- echo "color=15158332" >> $GITHUB_OUTPUT # Red
- echo "emoji=🔴" >> $GITHUB_OUTPUT
- echo "action_text=Opened" >> $GITHUB_OUTPUT
- ;;
- "reopened")
- echo "color=16776960" >> $GITHUB_OUTPUT # Yellow
- echo "emoji=🟡" >> $GITHUB_OUTPUT
- echo "action_text=Reopened" >> $GITHUB_OUTPUT
- ;;
- "closed")
- echo "color=5763719" >> $GITHUB_OUTPUT # Green
- echo "emoji=🟢" >> $GITHUB_OUTPUT
- echo "action_text=Closed" >> $GITHUB_OUTPUT
- ;;
- esac
- fi
- - name: Create Discord webhook payload
- run: |
- # Determine data source based on trigger type
- if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
- ISSUE_NUMBER="${{ steps.issue-info.outputs.number }}"
- ISSUE_TITLE="${{ steps.issue-info.outputs.title }}"
- ISSUE_URL="${{ steps.issue-info.outputs.html_url }}"
- AUTHOR_LOGIN="${{ steps.issue-info.outputs.author_login }}"
- AUTHOR_URL="${{ steps.issue-info.outputs.author_html_url }}"
- ISSUE_STATE="${{ steps.issue-info.outputs.state }}"
- ISSUE_LABELS="${{ steps.issue-info.outputs.labels }}"
- CREATED_AT="${{ steps.issue-info.outputs.created_at }}"
- else
- ISSUE_NUMBER="${{ github.event.issue.number }}"
- ISSUE_TITLE="${{ github.event.issue.title }}"
- ISSUE_URL="${{ github.event.issue.html_url }}"
- AUTHOR_LOGIN="${{ github.event.issue.user.login }}"
- AUTHOR_URL="${{ github.event.issue.user.html_url }}"
- ISSUE_STATE="${{ github.event.issue.state }}"
- ISSUE_LABELS="${{ github.event.issue.labels[0].name && join(github.event.issue.labels.*.name, ', ') || 'None' }}"
- CREATED_AT="${{ github.event.issue.created_at }}"
- fi
- # Create a temporary JSON file
- cat > discord_payload.json << EOF
- {
- "avatar_url": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
- "embeds": [
- {
- "title": "${{ steps.action-info.outputs.emoji }} Issue ${{ steps.action-info.outputs.action_text }}: #${ISSUE_NUMBER}",
- "description": "${ISSUE_TITLE}",
- "url": "${ISSUE_URL}",
- "color": ${{ steps.action-info.outputs.color }},
- "thumbnail": {
- "url": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png"
- },
- "fields": [
- {
- "name": "📋 Issue #",
- "value": "\`#${ISSUE_NUMBER}\`",
- "inline": true
- },
- {
- "name": "👤 Author",
- "value": "[${AUTHOR_LOGIN}](${AUTHOR_URL})",
- "inline": true
- },
- {
- "name": "📁 Repository",
- "value": "[${{ github.event.repository.name }}](${{ github.event.repository.html_url }})",
- "inline": true
- },
- {
- "name": "🏷️ Labels",
- "value": "${ISSUE_LABELS}",
- "inline": true
- },
- {
- "name": "📊 State",
- "value": "\`${ISSUE_STATE}\`",
- "inline": true
- },
- {
- "name": "🔗 View Issue",
- "value": "[Issue Page](${ISSUE_URL})",
- "inline": true
- }
- ],
- "timestamp": "${CREATED_AT}",
- "footer": {
- "text": "Workout Cool • Issue ${{ steps.action-info.outputs.action_text }}",
- "icon_url": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png"
- }
- }
- ]
- }
- EOF
- - name: Send Discord notification
- run: |
- curl -H "Content-Type: application/json" \
- -d @discord_payload.json \
- "${{ secrets.DISCORD_ISSUES_WEBHOOK }}"
|