|
|
|
@ -0,0 +1,68 @@ |
|
|
|
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 -r requirements-dev.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" |