diff --git a/.github/workflows/changelog-pr-guard.yml b/.github/workflows/changelog-pr-guard.yml new file mode 100644 index 00000000..ede1c434 --- /dev/null +++ b/.github/workflows/changelog-pr-guard.yml @@ -0,0 +1,60 @@ +name: Changelog PR Guard + +on: + pull_request_target: + branches: [ "main" ] + types: [ opened, synchronize, reopened, ready_for_review ] + +permissions: + contents: read + issues: write + pull-requests: read + +jobs: + check-changelog: + if: github.event.pull_request.user.login != 'release-please-token-provider[bot]' + runs-on: ubuntu-latest + steps: + - name: Check for changelog changes + env: + GH_TOKEN: ${{ github.token }} + PR_NUMBER: ${{ github.event.pull_request.number }} + REPOSITORY: ${{ github.repository }} + run: | + changed_changelog_files="$( + gh api --paginate "repos/${REPOSITORY}/pulls/${PR_NUMBER}/files" \ + --jq '.[] | select(.filename | test("(^|/)CHANGELOG\\.md$"; "i")) | .filename' + )" + + if [ -z "${changed_changelog_files}" ]; then + echo "No changelog changes found." + exit 0 + fi + + comment_body="$(cat <<'EOF' + + The changelog is automatically generated through conventional commits, so this change must be reverted. + EOF + )" + + existing_comment_id="$( + gh api --paginate "repos/${REPOSITORY}/issues/${PR_NUMBER}/comments" \ + --jq '.[] | select(.user.login == "github-actions[bot]" and (.body | contains(""))) | .id' \ + | head -n 1 + )" + + if [ -n "${existing_comment_id}" ]; then + gh api \ + --method PATCH \ + "repos/${REPOSITORY}/issues/comments/${existing_comment_id}" \ + --field body="${comment_body}" > /dev/null + else + gh api \ + --method POST \ + "repos/${REPOSITORY}/issues/${PR_NUMBER}/comments" \ + --field body="${comment_body}" > /dev/null + fi + + echo "Changelog changes must be reverted:" + echo "${changed_changelog_files}" + exit 1 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8f28a928..19cc9f45 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,6 +23,8 @@ The best way to get started with a contribution is to start a dialog with the ow Feel free to submit a pull request with a linked issue against the __main__ branch. The main branch will be updated frequently. +The changelog is generated automatically as part of the release process and should not be updated in pull requests. + ## Commit message format To support our automated release process, pull requests are required to follow the [Conventional Commit](https://www.conventionalcommits.org/en/v1.0.0/) @@ -180,4 +182,3 @@ Or run the following command in the terminal: pwsh -File ./kiota-python.ps1 format pwsh -File ./kiota-python.ps1 check-all ``` -