From f3097256b7af1e1b8da0f6d3fcfefea9621b03e8 Mon Sep 17 00:00:00 2001 From: taylanisikdemir Date: Tue, 2 Jul 2024 09:46:48 -0700 Subject: [PATCH] Ensure PR description follows a template when potential breaking changes are made (#1351) --- .../workflows/breaking_change_pr_template.md | 18 +++++++ .../workflows/breaking_change_reminder.yml | 54 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 .github/workflows/breaking_change_pr_template.md create mode 100644 .github/workflows/breaking_change_reminder.yml diff --git a/.github/workflows/breaking_change_pr_template.md b/.github/workflows/breaking_change_pr_template.md new file mode 100644 index 000000000..6affbe04e --- /dev/null +++ b/.github/workflows/breaking_change_pr_template.md @@ -0,0 +1,18 @@ +**Detailed Description** +[In-depth description of the changes made to the interfaces, specifying new fields, removed fields, or modified data structures] + +**Impact Analysis** +- **Backward Compatibility**: [Analysis of backward compatibility] +- **Forward Compatibility**: [Analysis of forward compatibility] + +**Testing Plan** +- **Unit Tests**: [Do we have unit test covering the change?] +- **Persistence Tests**: [If the change is related to a data type which is persisted, do we have persistence tests covering the change?] +- **Integration Tests**: [Do we have integration test covering the change?] +- **Compatibility Tests**: [Have we done tests to test the backward and forward compatibility?] + +**Rollout Plan** +- What is the rollout plan? +- Does the order of deployment matter? +- Is it safe to rollback? Does the order of rollback matter? +- Is there a kill switch to mitigate the impact immediately? diff --git a/.github/workflows/breaking_change_reminder.yml b/.github/workflows/breaking_change_reminder.yml new file mode 100644 index 000000000..e5e05e228 --- /dev/null +++ b/.github/workflows/breaking_change_reminder.yml @@ -0,0 +1,54 @@ +name: Workflow for Breaking Change Reminder +on: + pull_request: + paths: + # below files do not cover all the exposed types/funcs, but it's a good start to detect potentially breaking changes + - activity/activity.go + - client/client.go + - encoded/encoded.go + - interceptors/workflow_interceptor.go + - internal/activity.go + - internal/client.go + - internal/encoded.go + - internal/workflow.go + - internal/interceptors.go + - internal/worker.go + - internal/workflow.go + - worker/worker.go + - workflow/*.go + +jobs: + breaking-change-pr-template-reminder: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Fail if PR description is missing breaking change template + if: steps.pr-changes.outputs.changes != '[]' + run: | + PR_NUMBER=${{ github.event.pull_request.number }} + PR_URL="https://api.github.com/repos/${{ github.repository }}/pulls/${PR_NUMBER}" + BODY=$(curl $PR_URL | jq '.body') + CHECKLIST=( + "Detailed Description" + "Impact Analysis" + "Testing Plan" + "Rollout Plan" + ) + TEMPLATE=$(cat .github/workflows/breaking_change_pr_template.md) + + for i in "${CHECKLIST[@]}"; do + if [[ "$BODY" == *"$i"* ]]; then + continue + else + echo "Potential breaking changes detected! Please update the PR description to include following template:" + echo "---" + echo "$TEMPLATE" + echo "---" + exit 1 + fi + done