| @ -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" | |||