Skip to content

Commit

Permalink
feat: Trigger warning for PRs likely requiring updates to management-…
Browse files Browse the repository at this point in the history
…plane-charts (#2219)

* Add GH workflow for detecting changes under config directory

* Enhance the workflow for checking manifests changes as well.

* Splitted jobs and added the possibility to remove label if the manifests is fixed.

* rename workflow name

* changed into $GITHUB_OUTPUT instead of using env vars: $GITHUB_ENV

* Refactoring

* chenged Implementation

* Include others in .github/

* Cosmetic changes
  • Loading branch information
medmes authored Feb 12, 2025
1 parent 48f17ae commit 01f2998
Show file tree
Hide file tree
Showing 2 changed files with 210 additions and 0 deletions.
123 changes: 123 additions & 0 deletions .github/workflows/check-manifests-changes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
name: "Check If Manifests Change"

env:
PR_CACHE_KEY: pr-manifests-${{ github.run_id }}-${{ github.run_attempt }}
MAIN_CACHE_KEY: main-manifests-${{ github.run_id }}-${{ github.run_attempt }}

on:
pull_request:

jobs:
create-pr-manifests:
runs-on: ubuntu-latest
steps:
- name: Checkout PR branch
uses: actions/checkout@v4

- name: Create manifests on PR branch
run: |
make dry-run-control-plane
mkdir -p ./cache/pr
mv ./dry-run/manifests.yaml ./cache/pr/manifests.yaml
- name: Save PR manifests in cache
uses: actions/cache@v3
with:
path: ./cache/pr/
key: ${{ env.PR_CACHE_KEY }}

create-main-manifests:
runs-on: ubuntu-latest
steps:
- name: Checkout main branch
uses: actions/checkout@v4
with:
ref: main

- name: Create manifests on main branch
run: |
make dry-run-control-plane
mkdir -p ./cache/main
mv ./dry-run/manifests.yaml ./cache/main/manifests.yaml
- name: Save main manifests in cache
uses: actions/cache@v3
with:
path: ./cache/main/
key: ${{ env.MAIN_CACHE_KEY }}

diff-manifests:
needs:
- create-pr-manifests
- create-main-manifests
runs-on: ubuntu-latest
steps:
- name: Restore PR manifests from cache
uses: actions/cache@v3
with:
path: ./cache/pr/
key: ${{ env.PR_CACHE_KEY }}

- name: Restore main manifests from cache
uses: actions/cache@v3
with:
path: ./cache/main/
key: ${{ env.MAIN_CACHE_KEY }}

- name: Compare Manifests
id: compare-manifests
run: |
set +e
DIFF_OUTPUT=$(diff ./cache/pr/manifests.yaml ./cache/main/manifests.yaml)
EXIT_CODE=$?
if [[ $EXIT_CODE != 0 ]]; then
echo "❌ Detected differences in manifest outputs!"
echo "$DIFF_OUTPUT"
echo "manifests_diff_detected=true" >> $GITHUB_OUTPUT
else
echo "✅ No differences in manifest outputs detected."
echo "manifests_diff_detected=false" >> $GITHUB_OUTPUT
fi
exit 0
- name: Add PR Comment if Manifest Differences Detected
if: steps.compare-manifests.outputs.manifests_diff_detected == 'true'
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: "❌ **Manifests created with 'make dry-run-control-plane' changed!** Please make sure to check if changes are needed in related repositories like management-plane-charts, runtime-watchter, etc.."
});
github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
labels: ["manifests-diff"]
});
- name: Remove 'manifests-diff' Label if No Differences
if: steps.compare-manifests.outputs.manifests_diff_detected == 'false'
uses: actions/github-script@v7
with:
script: |
const labelName = 'manifests-diff';
const { data: labels } = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
});
if (labels.some(label => label.name === labelName)) {
console.log(`Label "${labelName}" found, removing it.`);
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
name: labelName,
});
} else {
console.log(`Label "${labelName}" not found, skipping removal.`);
}
87 changes: 87 additions & 0 deletions .github/workflows/check-pipeline-changes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: "Check Pipeline Changes"

on:
pull_request:

jobs:
check-pipeline-changes:
runs-on: ubuntu-latest
steps:
- name: Get list of changed files
id: changed-files
uses: actions/github-script@v7
with:
script: |
const { data: files } = await github.rest.pulls.listFiles({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
});
// Define the pipeline-related paths to watch
const pathsToCheck = [
".github/actions",
".github/workflows/test-e2e.yml",
".github/workflows/test-e2e-with-modulereleasemeta.yml",
".github/scripts",
"scripts/tests",
"versions.yaml"
];
const pipelineFiles = files.filter(file =>
pathsToCheck.some(path => file.filename === path || file.filename.startsWith(path + '/'))
);
core.setOutput('pipelineFiles', pipelineFiles.map(file => file.filename).join(','));
- name: Evaluate Pipeline Changes
id: eval-changes
run: |
echo "Changed pipeline-related files:"
echo "${{ steps.changed-files.outputs.pipelineFiles }}" | tr ',' '\n'
if [ -n "${{ steps.changed-files.outputs.pipelineFiles }}" ]; then
echo "⚠️ Pipeline-related changes detected!"
echo "pipeline_changed=true" >> $GITHUB_OUTPUT
else
echo "✅ No pipeline-related changes detected."
echo "pipeline_changed=false" >> $GITHUB_OUTPUT
fi
- name: Add PR Comment & Label if Pipeline Changes Detected
if: steps.eval-changes.outputs.pipeline_changed == 'true'
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: "⚠️ **Pipeline-related file changes detected!** Please review if related updates (e.g. manifest generation or workflow adjustments) are required."
});
github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
labels: ["pipeline-changed"]
});
- name: Remove 'pipeline-changed' Label if No Changes Detected
if: steps.eval-changes.outputs.pipeline_changed == 'false'
uses: actions/github-script@v7
with:
script: |
const labelName = 'pipeline-changed';
const { data: labels } = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
});
if (labels.some(label => label.name === labelName)) {
console.log(`Label "${labelName}" found, removing it.`);
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
name: labelName,
});
} else {
console.log(`Label "${labelName}" not found, skipping removal.`);
}

0 comments on commit 01f2998

Please sign in to comment.