Skip to content

Commit 085d47c

Browse files
committed
#135 reusable dockerfile verification
1 parent 8fe4859 commit 085d47c

File tree

1 file changed

+3
-179
lines changed

1 file changed

+3
-179
lines changed

.github/workflows/verify-dockerfile-refreshed-at-updated.yaml

Lines changed: 3 additions & 179 deletions
Original file line numberDiff line numberDiff line change
@@ -6,184 +6,8 @@ on:
66
permissions: {}
77

88
jobs:
9-
detect-changes:
10-
name: Detect Dockerfile Changes
11-
outputs:
12-
dockerfiles: ${{ steps.filter.outputs.dockerfiles }}
9+
verify-dockerfiles:
10+
name: Verify Dockerfiles REFRESHED_AT Updated
1311
permissions:
1412
contents: read
15-
runs-on: ubuntu-latest
16-
17-
steps:
18-
- uses: actions/checkout@v5
19-
with:
20-
persist-credentials: false
21-
22-
- uses: dorny/paths-filter@v3
23-
id: filter
24-
with:
25-
filters: |
26-
dockerfiles:
27-
- '**/Dockerfile*'
28-
- '**/package.Dockerfile'
29-
30-
check-refreshed-at:
31-
name: Check REFRESHED_AT in Dockerfiles
32-
permissions:
33-
contents: read
34-
runs-on: ubuntu-latest
35-
needs: detect-changes
36-
37-
# Only skip if Renovate AND Dockerfiles changed
38-
if: |
39-
needs.detect-changes.outputs.dockerfiles != 'true' || (github.actor != 'renovate[bot]' && github.actor != 'renovate')
40-
41-
steps:
42-
- uses: actions/checkout@v5
43-
with:
44-
fetch-depth: 0
45-
persist-credentials: false
46-
47-
- name: Get base commit
48-
id: base
49-
run: |
50-
echo "base=${{ github.event.pull_request.base.sha }}" >> "$GITHUB_OUTPUT"
51-
52-
- name: Find modified Dockerfiles
53-
id: find-dockerfiles
54-
run: |
55-
BASE_SHA="${{ github.event.pull_request.base.sha }}"
56-
HEAD_SHA="${{ github.event.pull_request.head.sha }}"
57-
58-
# Find all modified Dockerfiles and package.Dockerfile files
59-
MODIFIED_DOCKERFILES=$(git diff --name-only "$BASE_SHA" "$HEAD_SHA" | grep -E '(Dockerfile.*|package\.Dockerfile)$' || true)
60-
61-
if [ -z "$MODIFIED_DOCKERFILES" ]; then
62-
echo "[INFO] No Dockerfiles modified"
63-
echo "dockerfiles=" >> "$GITHUB_OUTPUT"
64-
else
65-
echo "[INFO] Modified Dockerfiles:"
66-
echo "[INFO] $MODIFIED_DOCKERFILES"
67-
# Convert to JSON array
68-
DOCKERFILES_JSON=$(echo "$MODIFIED_DOCKERFILES" | jq -R -s -c 'split("\n") | map(select(length > 0))')
69-
echo "dockerfiles=$DOCKERFILES_JSON" >> "$GITHUB_OUTPUT"
70-
fi
71-
72-
- name: Check REFRESHED_AT updates
73-
env:
74-
BASE_SHA: ${{ steps.base.outputs.base }}
75-
DOCKERFILES: ${{ steps.find-dockerfiles.outputs.dockerfiles }}
76-
if: steps.find-dockerfiles.outputs.dockerfiles != ''
77-
run: |
78-
# Parse JSON array
79-
echo "$DOCKERFILES" | jq -r '.[]' | while read -r dockerfile; do
80-
echo "================================================"
81-
echo "Checking: $dockerfile"
82-
echo "================================================"
83-
84-
# Check if file has REFRESHED_AT lines
85-
if ! grep -q "REFRESHED_AT=" "$dockerfile" 2>/dev/null; then
86-
echo "[INFO] No REFRESHED_AT lines found in $dockerfile (skipping)"
87-
continue
88-
fi
89-
90-
# Get all REFRESHED_AT lines from current version
91-
CURRENT_LINES=$(grep -n "REFRESHED_AT=" "$dockerfile" | sort)
92-
93-
if [ -z "$CURRENT_LINES" ]; then
94-
echo "[INFO] No REFRESHED_AT lines in current version"
95-
continue
96-
fi
97-
98-
echo "[INFO] Found REFRESHED_AT lines in current version:"
99-
echo "[INFO] $CURRENT_LINES"
100-
echo "[INFO] "
101-
102-
# Get the old version of the file
103-
OLD_CONTENT=$(git show "$BASE_SHA:$dockerfile" 2>/dev/null || echo "")
104-
105-
if [ -z "$OLD_CONTENT" ]; then
106-
echo "[INFO] New Dockerfile (no previous version to compare)"
107-
continue
108-
fi
109-
110-
# Get all REFRESHED_AT lines from old version
111-
OLD_LINES=$(echo "$OLD_CONTENT" | grep -n "REFRESHED_AT=" | sort || true)
112-
113-
if [ -z "$OLD_LINES" ]; then
114-
echo "[INFO] REFRESHED_AT lines are new additions"
115-
continue
116-
fi
117-
118-
echo "[INFO] REFRESHED_AT lines in previous version:"
119-
echo "[INFO] $OLD_LINES"
120-
echo "[INFO] "
121-
122-
# Check if any REFRESHED_AT line was modified
123-
ALL_MODIFIED=true
124-
UNCHANGED_LINES=""
125-
126-
# Compare each REFRESHED_AT line
127-
while IFS= read -r current_line; do
128-
LINE_NUM=$(echo "$current_line" | cut -d: -f1)
129-
CURRENT_VALUE=$(echo "$current_line" | cut -d: -f2-)
130-
131-
# Get corresponding old line (same line number)
132-
OLD_VALUE=$(echo "$OLD_CONTENT" | sed -n "${LINE_NUM}p")
133-
134-
if [ "$CURRENT_VALUE" == "$OLD_VALUE" ]; then
135-
ALL_MODIFIED=false
136-
UNCHANGED_LINES="${UNCHANGED_LINES}Line ${LINE_NUM}: ${CURRENT_VALUE}\n"
137-
fi
138-
done <<< "$CURRENT_LINES"
139-
140-
if [ "$ALL_MODIFIED" = false ]; then
141-
echo "::error::[ERROR] Not all REFRESHED_AT lines were updated in $dockerfile"
142-
echo "[ERROR] "
143-
echo "[ERROR] Unchanged lines:"
144-
echo -e "::error::[ERROR] $UNCHANGED_LINES"
145-
echo "[ERROR] "
146-
echo "[ERROR] Please update all REFRESHED_AT values when modifying this Dockerfile."
147-
# Write to a file to persist across loop iterations
148-
echo "1" > /tmp/check_failed
149-
else
150-
echo "[INFO] All REFRESHED_AT lines were updated in $dockerfile"
151-
fi
152-
153-
echo ""
154-
done
155-
156-
# Check if any file failed
157-
if [ -f /tmp/check_failed ]; then
158-
echo "::error::[ERROR] One or more Dockerfiles have unchanged REFRESHED_AT lines"
159-
exit 1
160-
fi
161-
162-
echo "::notice::[INFO] All checks passed!"
163-
164-
- name: Success message
165-
if: success()
166-
run: |
167-
echo "[INFO] All REFRESHED_AT lines have been properly updated"
168-
169-
dockerfile-check-complete:
170-
env:
171-
RESULT: ${{ needs.check-refreshed-at.result }}
172-
if: always()
173-
name: Dockerfile Check Status
174-
needs: [check-refreshed-at]
175-
runs-on: ubuntu-latest
176-
177-
steps:
178-
- name: Check status
179-
run: |
180-
if [[ "${RESULT}" == "failure" ]]; then
181-
echo "::error::[ERROR] REFRESHED_AT check failed"
182-
exit 1
183-
elif [[ "${RESULT}" == "skipped" ]]; then
184-
echo "[INFO] No Dockerfiles modified or Renovate bot PR - check skipped (OK)"
185-
exit 0
186-
else
187-
echo "[INFO] REFRESHED_AT check passed"
188-
exit 0
189-
fi
13+
uses: senzing-factory/build-resources/.github/workflows/verify-dockerfile-refreshed-at-updated.yaml@v3

0 commit comments

Comments
 (0)