Skip to content

Commit 08d0024

Browse files
author
Frederic Spiers
committed
Merge commit '2f87d0e' into fspiers/ENT-3334/incremental-sync-batch-1
2 parents 58de2b2 + 2f87d0e commit 08d0024

File tree

108 files changed

+790
-709
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+790
-709
lines changed

.github/workflows/post-merge.yaml

Lines changed: 158 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,25 @@ on:
66
- main
77
paths:
88
- 'charts/**'
9+
workflow_dispatch: # Manual trigger
10+
inputs:
11+
update_all_charts:
12+
description: 'Update all charts (not just changed ones)'
13+
required: false
14+
type: boolean
15+
default: false
16+
clean_start:
17+
description: 'Delete existing CHANGELOG.md files and start fresh'
18+
required: false
19+
type: boolean
20+
default: false
21+
custom_message:
22+
description: 'Custom changelog message (optional)'
23+
required: false
24+
type: string
925

1026
concurrency:
11-
group: ${{ github.workflow }}
27+
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
1228
cancel-in-progress: false
1329

1430
jobs:
@@ -40,36 +56,100 @@ jobs:
4056
sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64
4157
sudo chmod +x /usr/local/bin/yq
4258
43-
- name: Get changed charts from last commit
44-
id: list-changed
59+
- name: Determine charts to update
60+
id: charts-to-update
4561
run: |
46-
# Get the commit SHA before the merge
47-
BEFORE_SHA="${{ github.event.before }}"
48-
49-
# Find changed charts directories using git diff
50-
changed_files=$(git diff --name-only "${BEFORE_SHA}" HEAD -- 'charts/**')
51-
52-
if [[ -n "$changed_files" ]]; then
53-
# Extract unique chart directories
54-
changed_charts=$(echo "$changed_files" | grep '^charts/' | cut -d/ -f1-2 | sort -u | tr '\n' ' ')
62+
# For manual trigger with update_all_charts enabled
63+
if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "${{ github.event.inputs.update_all_charts }}" = "true" ]; then
64+
echo "Manual trigger: updating all charts"
65+
all_charts=$(find charts -mindepth 1 -maxdepth 1 -type d | sed 's|^charts/||' | tr '\n' ' ')
66+
echo "All charts: $all_charts"
67+
echo "changed=true" >> $GITHUB_OUTPUT
68+
echo "changedCharts=$all_charts" >> $GITHUB_OUTPUT
69+
echo "update_mode=all" >> $GITHUB_OUTPUT
70+
# For manual trigger without update_all_charts (default behavior - changed charts only)
71+
elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
72+
echo "Manual trigger: finding changed charts from last commit"
73+
# Use the same logic as push event to find changed charts
74+
BEFORE_SHA=$(git rev-parse HEAD~1)
75+
changed_files=$(git diff --name-only "${BEFORE_SHA}" HEAD -- 'charts/**')
76+
77+
if [[ -n "$changed_files" ]]; then
78+
changed_charts=$(echo "$changed_files" | grep '^charts/' | cut -d/ -f1-2 | sort -u | tr '\n' ' ')
79+
if [[ -n "$changed_charts" ]]; then
80+
echo "Changed charts: $changed_charts"
81+
echo "changed=true" >> $GITHUB_OUTPUT
82+
echo "changedCharts=${changed_charts}" >> $GITHUB_OUTPUT
83+
echo "update_mode=changed" >> $GITHUB_OUTPUT
84+
else
85+
echo "No chart changes detected in last commit"
86+
echo "changed=false" >> $GITHUB_OUTPUT
87+
fi
88+
else
89+
echo "No chart changes detected in last commit"
90+
echo "changed=false" >> $GITHUB_OUTPUT
91+
fi
92+
# For push event (original behavior)
93+
else
94+
echo "Push event: finding changed charts from merge commit"
95+
BEFORE_SHA="${{ github.event.before }}"
96+
changed_files=$(git diff --name-only "${BEFORE_SHA}" HEAD -- 'charts/**')
5597
56-
if [[ -n "$changed_charts" ]]; then
57-
echo "Changed charts:"
58-
echo "$changed_charts"
59-
echo "changed=true" >> $GITHUB_OUTPUT
60-
echo "changedCharts=${changed_charts}" >> $GITHUB_OUTPUT
98+
if [[ -n "$changed_files" ]]; then
99+
changed_charts=$(echo "$changed_files" | grep '^charts/' | cut -d/ -f1-2 | sort -u | tr '\n' ' ')
100+
if [[ -n "$changed_charts" ]]; then
101+
echo "Changed charts: $changed_charts"
102+
echo "changed=true" >> $GITHUB_OUTPUT
103+
echo "changedCharts=${changed_charts}" >> $GITHUB_OUTPUT
104+
echo "update_mode=changed" >> $GITHUB_OUTPUT
105+
else
106+
echo "No chart changes detected"
107+
echo "changed=false" >> $GITHUB_OUTPUT
108+
fi
61109
else
62110
echo "No chart changes detected"
63111
echo "changed=false" >> $GITHUB_OUTPUT
64112
fi
113+
fi
114+
115+
- name: Clean start - Delete existing CHANGELOG.md files
116+
if: github.event_name == 'workflow_dispatch' && github.event.inputs.clean_start == 'true' && steps.charts-to-update.outputs.changed == 'true'
117+
run: |
118+
echo "Clean start enabled - deleting existing CHANGELOG.md files"
119+
CHANGED_CHARTS="${{ steps.charts-to-update.outputs.changedCharts }}"
120+
121+
for chart_directory in $CHANGED_CHARTS; do
122+
CHART_NAME=${chart_directory#charts/}
123+
CHANGELOG_FILE="charts/${CHART_NAME}/CHANGELOG.md"
124+
125+
if [ -f "$CHANGELOG_FILE" ]; then
126+
echo "Deleting $CHANGELOG_FILE"
127+
rm "$CHANGELOG_FILE"
128+
129+
# Check if directory is empty except for ignored files
130+
if [ -z "$(ls -A "charts/${CHART_NAME}" | grep -vE '^(Chart\.yaml|values\.yaml|\.helmignore|templates|crds|\.gitkeep)$')" ]; then
131+
echo "Directory charts/${CHART_NAME} would be empty after deletion, but keeping it"
132+
fi
133+
else
134+
echo "No CHANGELOG.md found at $CHANGELOG_FILE"
135+
fi
136+
done
137+
138+
# Commit the deletions if any files were removed
139+
if git status --porcelain | grep -q 'CHANGELOG.md'; then
140+
echo "CHANGELOG.md files deleted successfully"
141+
git add charts/*/CHANGELOG.md
142+
git commit -m "chore: remove existing CHANGELOG.md files for clean start" \
143+
-m "Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
144+
echo "clean_start_completed=true" >> $GITHUB_ENV
65145
else
66-
echo "No chart changes detected"
67-
echo "changed=false" >> $GITHUB_OUTPUT
146+
echo "No CHANGELOG.md files to delete"
147+
echo "clean_start_completed=false" >> $GITHUB_ENV
68148
fi
69149
70-
- name: Get PR information
71-
id: pr-info
72-
if: steps.list-changed.outputs.changed == 'true'
150+
- name: Get PR information for push events
151+
id: pr-info-push
152+
if: github.event_name == 'push' && steps.charts-to-update.outputs.changed == 'true'
73153
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
74154
with:
75155
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -98,59 +178,86 @@ jobs:
98178
core.setOutput('pr_url', '');
99179
}
100180
181+
- name: Set manual trigger info
182+
id: manual-info
183+
if: github.event_name == 'workflow_dispatch' && steps.charts-to-update.outputs.changed == 'true'
184+
run: |
185+
if [ -n "${{ github.event.inputs.custom_message }}" ]; then
186+
PR_TITLE="${{ github.event.inputs.custom_message }}"
187+
else
188+
if [ "${{ github.event.inputs.clean_start }}" = "true" ]; then
189+
PR_TITLE="Manual changelog update with clean start"
190+
else
191+
PR_TITLE="Manual changelog update triggered via workflow_dispatch"
192+
fi
193+
fi
194+
195+
echo "pr_number=manual" >> $GITHUB_OUTPUT
196+
echo "pr_title=${PR_TITLE}" >> $GITHUB_OUTPUT
197+
echo "pr_url=https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> $GITHUB_OUTPUT
198+
101199
- name: Generate changelog
102200
id: generate-changelog
103-
if: steps.list-changed.outputs.changed == 'true'
201+
if: steps.charts-to-update.outputs.changed == 'true'
104202
env:
105203
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
106204
GITHUB_REPOSITORY: "${{ github.repository }}"
107205
GITHUB_REPOSITORY_URL: "${{ github.server_url }}/${{ github.repository }}"
108-
CHANGED_CHARTS: ${{ steps.list-changed.outputs.changedCharts }}
109-
PR_NUMBER: ${{ steps.pr-info.outputs.pr_number }}
110-
PR_TITLE: ${{ steps.pr-info.outputs.pr_title }}
111-
PR_URL: ${{ steps.pr-info.outputs.pr_url }}
206+
PR_NUMBER: ${{ github.event_name == 'push' && steps.pr-info-push.outputs.pr_number || steps.manual-info.outputs.pr_number }}
207+
PR_TITLE: ${{ github.event_name == 'push' && steps.pr-info-push.outputs.pr_title || steps.manual-info.outputs.pr_title }}
208+
PR_URL: ${{ github.event_name == 'push' && steps.pr-info-push.outputs.pr_url || steps.manual-info.outputs.pr_url }}
209+
UPDATE_MODE: ${{ steps.charts-to-update.outputs.update_mode }}
210+
CLEAN_START: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.clean_start || 'false' }}
112211
run: |
113212
set -e
114213
115-
# Extract chart names from changed chart directories
116-
CHART_NAMES=()
117-
for chart_directory in ${CHANGED_CHARTS}; do
214+
CHANGED_CHARTS="${{ steps.charts-to-update.outputs.changedCharts }}"
215+
216+
echo "Update mode: $UPDATE_MODE"
217+
echo "Clean start: $CLEAN_START"
218+
echo "Processing charts: $CHANGED_CHARTS"
219+
220+
# Process each chart individually
221+
for chart_directory in $CHANGED_CHARTS; do
118222
CHART_NAME=${chart_directory#charts/}
119-
CHART_NAMES+=("--chart" "$CHART_NAME")
223+
echo "Processing chart: $CHART_NAME"
224+
225+
# Run the changelog script for this specific chart
226+
./generate-changelog.sh \
227+
--chart "$CHART_NAME" \
228+
--pr-title "${PR_TITLE}" \
229+
--pr-number "${PR_NUMBER}" \
230+
--pr-url "${PR_URL}"
120231
done
121232
122-
# Build arguments for the changelog script
123-
CHANGELOG_ARGS=("${CHART_NAMES[@]}")
124-
125-
if [[ -n "$PR_TITLE" ]]; then
126-
CHANGELOG_ARGS+=("--pr-title" "${PR_TITLE}")
127-
fi
128-
129-
if [[ -n "$PR_NUMBER" ]]; then
130-
CHANGELOG_ARGS+=("--pr-number" "${PR_NUMBER}")
131-
fi
132-
133-
if [[ -n "$PR_URL" ]]; then
134-
CHANGELOG_ARGS+=("--pr-url" "${PR_URL}")
135-
fi
136-
137-
# Run the changelog generation script
138-
./generate-changelog.sh "${CHANGELOG_ARGS[@]}"
139-
140233
# Check if there are changes
141234
if git status --porcelain | grep -q 'CHANGELOG.md'; then
142235
echo "has_changes=true" >> $GITHUB_OUTPUT
143236
echo "Changelog changes detected"
237+
git status --porcelain
144238
else
145239
echo "No CHANGELOG changes"
146240
echo "has_changes=false" >> $GITHUB_OUTPUT
147241
fi
148242
149243
- name: Commit and push changelog updates
150-
if: steps.generate-changelog.outputs.has_changes == 'true'
244+
if: steps.generate-changelog.outputs.has_changes == 'true' && env.clean_start_completed != 'true'
151245
run: |
152246
git add charts/*/CHANGELOG.md
153-
git commit -m "chore: update CHANGELOG.md for merged changes" \
247+
248+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
249+
COMMIT_MSG="chore: update CHANGELOG.md via manual trigger"
250+
if [ "${{ github.event.inputs.update_all_charts }}" = "true" ]; then
251+
COMMIT_MSG="chore: update CHANGELOG.md for all charts via manual trigger"
252+
fi
253+
if [ "${{ github.event.inputs.clean_start }}" = "true" ]; then
254+
COMMIT_MSG="chore: regenerate CHANGELOG.md with clean start"
255+
fi
256+
else
257+
COMMIT_MSG="chore: update CHANGELOG.md for merged changes"
258+
fi
259+
260+
git commit -m "$COMMIT_MSG" \
154261
-m "Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
155262
156263
# Pull latest changes and rebase our commit on top

.github/workflows/pull-request.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ jobs:
110110
- name: Setup kubectl
111111
uses: azure/setup-kubectl@776406bce94f63e41d621b960d78ee25c8b76ede # v4.0.1
112112

113+
- name: Login to Docker Hub to avoid rate limits
114+
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
115+
with:
116+
username: ${{ secrets.REGISTRY_USER }}
117+
password: ${{ secrets.REGISTRY_PASSWORD }}
118+
113119
- name: Create kind cluster
114120
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 # v1.12.0
115121
with:

0 commit comments

Comments
 (0)