name: Slash Command Action
|
|
|
|
on:
|
|
issue_comment:
|
|
types: [created]
|
|
|
|
jobs:
|
|
changelog:
|
|
if: |
|
|
github.event.issue.pull_request
|
|
&& contains(github.event.comment.body, '/changelog create')
|
|
&& (github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER' || github.event.comment.author_association == 'COLLABORATOR')
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
- name: Parse changelog command
|
|
id: parse_command
|
|
run: |
|
|
# Extract the full command body
|
|
command_body="${{ github.event.comment.body }}"
|
|
|
|
# Remove the command prefix to get the arguments
|
|
# The regex 's' modifier allows the dot to match newlines
|
|
# and the 'm' modifier allows '^' to match at the beginning of each line
|
|
# This handles commands spanning multiple lines
|
|
parsed_body=$(echo "$command_body" | sed -E 's/\/changelog create -t ([a-z]+) (.*)$/\1|\2/')
|
|
|
|
# The parsed output will be 'type|message'
|
|
changelog_type=$(echo "$parsed_body" | cut -d'|' -f1)
|
|
message=$(echo "$parsed_body" | cut -d'|' -f2)
|
|
|
|
# Set outputs for use in later steps
|
|
echo "changelog_type=$changelog_type" >> $GITHUB_OUTPUT
|
|
echo "message=$message" >> $GITHUB_OUTPUT
|
|
|
|
# check out our repo and install our requirements
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
# issue_comment event runs on main, we need to checkout the PR
|
|
ref: refs/pull/${{ github.event.issue.number }}/head
|
|
fetch-depth: 0
|
|
- name: Setup python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: 3.13
|
|
architecture: x64
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -r requirements.txt
|
|
|
|
# add the changelog entry
|
|
- name: Changelog Create
|
|
id: changelog
|
|
run: |
|
|
git config --global user.name "github-actions[bot]"
|
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
|
|
sha=$(git rev-parse HEAD)
|
|
echo "sha=$sha"
|
|
# the origin one is where we need to push to, other two aren't useful
|
|
branch=$(git branch --all --contains $SHA | grep origin | sed 's#^.*origin/##;s/[[:space:]]*$//')
|
|
echo "branch=$branch"
|
|
|
|
./script/changelog create -c -t "${{ steps.parse_command.outputs.changelog_type }}" "${{ steps.parse_command.outputs.message }}"
|
|
|
|
git push origin HEAD:"$branch"
|