Skip to content

Commit 98b9fb4

Browse files
committed
Add documented 3pp version drift
Signed-off-by: Fiachra Corcoran <fiachra.corcoran@est.tech>
1 parent c8dc9c2 commit 98b9fb4

3 files changed

Lines changed: 98 additions & 126 deletions

File tree

.github/workflows/version-check.yaml

Lines changed: 2 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -25,117 +25,6 @@ jobs:
2525
- name: Checkout
2626
uses: actions/checkout@v4
2727

28-
- name: Extract versions from sources
29-
id: extract
30-
run: |
31-
# Extract Go version from go.mod
32-
go_version=$(grep '^go ' go.mod | awk '{print $2}')
33-
echo "go_version=${go_version}" >> $GITHUB_OUTPUT
34-
35-
# Extract kpt version from go.mod (require line)
36-
kpt_version=$(grep 'github.com/kptdev/kpt ' go.mod | grep -oP 'v\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?' | head -1)
37-
echo "kpt_version=${kpt_version}" >> $GITHUB_OUTPUT
38-
39-
# Extract kind version from porch-e2e-ci-jobs.yaml (after kind-action@v1)
40-
kind_version=$(awk '/helm\/kind-action@v1/,/version:/ {if (/version:/) print $2}' .github/workflows/porch-e2e-ci-jobs.yaml | head -1)
41-
echo "kind_version=${kind_version}" >> $GITHUB_OUTPUT
42-
43-
# Extract git and docker versions from ubuntu-latest runner
44-
git_version=$(git --version | awk '{print $3}')
45-
echo "git_version=${git_version}" >> $GITHUB_OUTPUT
46-
47-
docker_version=$(docker --version | grep -oP 'version \K[0-9.]+')
48-
echo "docker_version=${docker_version}" >> $GITHUB_OUTPUT
28+
- name: Check version consistency
29+
run: scripts/check-versions.sh
4930

50-
- name: Extract versions from config.toml
51-
id: config
52-
run: |
53-
# Extract versions from config.toml (stored without 'v' prefix)
54-
go_version=$(grep '^version_go = ' docs/config.toml | cut -d'"' -f2)
55-
echo "go_version=${go_version}" >> $GITHUB_OUTPUT
56-
57-
kpt_version=$(grep '^version_kpt = ' docs/config.toml | cut -d'"' -f2)
58-
echo "kpt_version=v${kpt_version}" >> $GITHUB_OUTPUT
59-
60-
kind_version=$(grep '^version_kind = ' docs/config.toml | cut -d'"' -f2)
61-
echo "kind_version=v${kind_version}" >> $GITHUB_OUTPUT
62-
63-
kube_version=$(grep '^version_kube = ' docs/config.toml | cut -d'"' -f2)
64-
echo "kube_version=${kube_version}" >> $GITHUB_OUTPUT
65-
66-
git_version=$(grep '^version_git = ' docs/config.toml | cut -d'"' -f2)
67-
echo "git_version=${git_version}" >> $GITHUB_OUTPUT
68-
69-
docker_version=$(grep '^version_docker = ' docs/config.toml | cut -d'"' -f2)
70-
echo "docker_version=${docker_version}" >> $GITHUB_OUTPUT
71-
72-
- name: Compare versions
73-
id: compare
74-
run: |
75-
echo "=== Version Consistency Check ===" >> $GITHUB_STEP_SUMMARY
76-
echo "" >> $GITHUB_STEP_SUMMARY
77-
78-
errors=0
79-
warnings=0
80-
81-
# Go version check (CRITICAL - controls build environment)
82-
if [ "${{ steps.extract.outputs.go_version }}" != "${{ steps.config.outputs.go_version }}" ]; then
83-
echo "### FAIL: Go version mismatch" >> $GITHUB_STEP_SUMMARY
84-
echo "- Source (go.mod): ${{ steps.extract.outputs.go_version }}" >> $GITHUB_STEP_SUMMARY
85-
echo "- Docs (config.toml): ${{ steps.config.outputs.go_version }}" >> $GITHUB_STEP_SUMMARY
86-
errors=$((errors + 1))
87-
else
88-
echo "✓ Go: ${{ steps.extract.outputs.go_version }}" >> $GITHUB_STEP_SUMMARY
89-
fi
90-
91-
# kpt version check (CRITICAL - core dependency)
92-
if [ "${{ steps.extract.outputs.kpt_version }}" != "${{ steps.config.outputs.kpt_version }}" ]; then
93-
echo "### FAIL: kpt version mismatch" >> $GITHUB_STEP_SUMMARY
94-
echo "- Source (go.mod): ${{ steps.extract.outputs.kpt_version }}" >> $GITHUB_STEP_SUMMARY
95-
echo "- Docs (config.toml): ${{ steps.config.outputs.kpt_version }}" >> $GITHUB_STEP_SUMMARY
96-
errors=$((errors + 1))
97-
else
98-
echo "✓ kpt: ${{ steps.extract.outputs.kpt_version }}" >> $GITHUB_STEP_SUMMARY
99-
fi
100-
101-
# kind version check (WARNING - test environment)
102-
if [ "${{ steps.extract.outputs.kind_version }}" != "${{ steps.config.outputs.kind_version }}" ]; then
103-
echo "### WARN: kind version mismatch" >> $GITHUB_STEP_SUMMARY
104-
echo "- Source (.github/workflows): ${{ steps.extract.outputs.kind_version }}" >> $GITHUB_STEP_SUMMARY
105-
echo "- Docs (config.toml): ${{ steps.config.outputs.kind_version }}" >> $GITHUB_STEP_SUMMARY
106-
echo "Consider updating docs/config.toml to match the test environment." >> $GITHUB_STEP_SUMMARY
107-
warnings=$((warnings + 1))
108-
else
109-
echo "✓ kind: ${{ steps.extract.outputs.kind_version }}" >> $GITHUB_STEP_SUMMARY
110-
fi
111-
112-
# Kubernetes version (INFORMATIONAL - derived from kind)
113-
echo "ℹ Kubernetes (derived from kind): ${{ steps.extract.outputs.kind_version }} uses k8s ${{ steps.config.outputs.kube_version }}" >> $GITHUB_STEP_SUMMARY
114-
115-
# Git version (INFORMATIONAL - runner-provided)
116-
if [ "${{ steps.extract.outputs.git_version }}" != "${{ steps.config.outputs.git_version }}" ]; then
117-
echo "ℹ Git: runner has ${{ steps.extract.outputs.git_version }}, docs list ${{ steps.config.outputs.git_version }} (advisory - updated by GitHub)" >> $GITHUB_STEP_SUMMARY
118-
else
119-
echo "✓ Git: ${{ steps.extract.outputs.git_version }}" >> $GITHUB_STEP_SUMMARY
120-
fi
121-
122-
# Docker version (INFORMATIONAL - runner-provided)
123-
if [ "${{ steps.extract.outputs.docker_version }}" != "${{ steps.config.outputs.docker_version }}" ]; then
124-
echo "ℹ Docker: runner has ${{ steps.extract.outputs.docker_version }}, docs list ${{ steps.config.outputs.docker_version }} (advisory - updated by GitHub)" >> $GITHUB_STEP_SUMMARY
125-
else
126-
echo "✓ Docker: ${{ steps.extract.outputs.docker_version }}" >> $GITHUB_STEP_SUMMARY
127-
fi
128-
129-
echo "" >> $GITHUB_STEP_SUMMARY
130-
echo "errors=${errors}" >> $GITHUB_OUTPUT
131-
echo "warnings=${warnings}" >> $GITHUB_OUTPUT
132-
133-
if [ "$warnings" -gt 0 ]; then
134-
echo "**Note:** Review warnings above and update docs/config.toml if needed." >> $GITHUB_STEP_SUMMARY
135-
fi
136-
137-
- name: Fail if critical mismatches
138-
if: steps.compare.outputs.errors > 0
139-
run: |
140-
echo "Critical version mismatches detected. Please update docs/config.toml to match the source files."
141-
exit 1

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,7 @@ quick-test: fmt vet test ## Quick development test cycle
9494
.PHONY: check-versions
9595
check-versions: ## Check version consistency between source files and docs/config.toml
9696
@$(CURDIR)/scripts/check-versions.sh
97+
98+
.PHONY: check-versions-fix
99+
check-versions-fix: ## Auto-fix critical version mismatches (Go, kpt) in docs/config.toml
100+
@$(CURDIR)/scripts/check-versions.sh --fix

scripts/check-versions.sh

Lines changed: 92 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env bash
22

3-
# Copyright 2026 The kpt Authors
3+
# Copyright 2025-2026 The kpt Authors
44
#
55
# Licensed under the Apache License, Version 2.0 (the "License");
66
# you may not use this file except in compliance with the License.
@@ -18,6 +18,15 @@ set -e
1818

1919
# Script to check version consistency between source files and docs/config.toml
2020
# Ensures public docs align with the code being built and tested.
21+
#
22+
# Usage:
23+
# scripts/check-versions.sh - Check only, fail on mismatches
24+
# scripts/check-versions.sh --fix - Check and auto-fix critical mismatches (Go, kpt)
25+
26+
FIX_MODE=""
27+
if [ "$1" = "--fix" ]; then
28+
FIX_MODE="true"
29+
fi
2130

2231
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
2332
cd "$REPO_ROOT"
@@ -36,6 +45,9 @@ echo "kpt version (go.mod): $kpt_version"
3645
kind_version=$(awk '/helm\/kind-action@v1/,/version:/ {if (/version:/) print $2}' .github/workflows/porch-e2e-ci-jobs.yaml | head -1)
3746
echo "kind version (.github/workflows): $kind_version"
3847

48+
kube_node_image=$(grep "kindest/node:" deployments/local/kind_porch_test_cluster.yaml | grep -oP 'v\d+\.\d+\.\d+' | head -1)
49+
echo "Kubernetes node image (local dev): $kube_node_image"
50+
3951
echo ""
4052
echo "=== Versions in docs/config.toml ==="
4153

@@ -51,48 +63,115 @@ echo "kind version (config): $config_kind"
5163
config_kube=$(grep '^version_kube = ' docs/config.toml | cut -d'"' -f2)
5264
echo "Kubernetes version (config): $config_kube"
5365

66+
config_git=$(grep '^version_git = ' docs/config.toml | cut -d'"' -f2)
67+
config_docker=$(grep '^version_docker = ' docs/config.toml | cut -d'"' -f2)
68+
5469
echo ""
5570
echo "=== Consistency Check ==="
5671

5772
errors=0
73+
warnings=0
74+
declare -a fixes_needed
5875

5976
# Go version check (CRITICAL - we control this in go.mod)
6077
if [ "$go_version" != "$config_go" ]; then
6178
echo "FAIL: Go version mismatch - source: $go_version, config: $config_go"
6279
errors=$((errors + 1))
80+
if [ "$FIX_MODE" = "true" ]; then
81+
fixes_needed+=("version_go|$go_version")
82+
fi
6383
else
6484
echo "✓ Go version matches: $go_version"
6585
fi
6686

6787
# kpt version check (CRITICAL - core dependency in go.mod)
68-
if [ "$kpt_version" != "v$config_kpt" ]; then
69-
echo "FAIL: kpt version mismatch - source: $kpt_version, config: v$config_kpt"
88+
if [ "$kpt_version" != "$config_kpt" ]; then
89+
echo "FAIL: kpt version mismatch - source: $kpt_version, config: $config_kpt"
7090
errors=$((errors + 1))
91+
if [ "$FIX_MODE" = "true" ]; then
92+
fixes_needed+=("version_kpt|$kpt_version")
93+
fi
7194
else
7295
echo "✓ kpt version matches: $kpt_version"
7396
fi
7497

7598
# kind version check (WARNING - test environment, controls k8s version)
76-
if [ "$kind_version" != "v$config_kind" ]; then
77-
echo "WARN: kind version mismatch - source: $kind_version, config: v$config_kind"
99+
if [ "$kind_version" != "$config_kind" ]; then
100+
echo "WARN: kind version mismatch - source: $kind_version, config: $config_kind"
78101
echo " Consider updating docs/config.toml to match the test environment"
102+
warnings=$((warnings + 1))
103+
if [ "$FIX_MODE" = "true" ]; then
104+
fixes_needed+=("version_kind|$kind_version")
105+
fi
79106
else
80107
echo "✓ kind version matches: $kind_version"
81108
fi
82109

83-
echo "ℹ Kubernetes version (from config): v$config_kube (derived from kind)"
110+
# Kubernetes version check (compare dev config with config.toml)
111+
if [ "$kube_node_image" != "$config_kube" ]; then
112+
echo "WARN: Kubernetes version mismatch - dev config: $kube_node_image, docs config: $config_kube"
113+
warnings=$((warnings + 1))
114+
if [ "$FIX_MODE" = "true" ]; then
115+
fixes_needed+=("version_kube|$kube_node_image")
116+
fi
117+
else
118+
echo "✓ Kubernetes version matches: $kube_node_image"
119+
fi
120+
121+
echo "(info) Kubernetes version (from config): $config_kube (derived from kind)"
122+
123+
# Only check runner versions if in CI
124+
if [ -n "$GITHUB_ACTIONS" ]; then
125+
echo ""
126+
echo "=== Runner Environment Checks (CI only) ==="
127+
128+
git_version=$(git --version | awk '{print $3}')
129+
echo "Git version (runner): $git_version"
130+
131+
docker_version=$(docker --version | grep -oP 'version \K[0-9.]+')
132+
echo "Docker version (runner): $docker_version"
133+
134+
# Compare with config
135+
if [ "$git_version" != "$config_git" ]; then
136+
echo " (info) Git mismatch: runner has $git_version, config has $config_git"
137+
else
138+
echo " ✓ Git matches config: $git_version"
139+
fi
140+
141+
if [ "$docker_version" != "$config_docker" ]; then
142+
echo " (info) Docker mismatch: runner has $docker_version, config has $config_docker"
143+
else
144+
echo " ✓ Docker matches config: $docker_version"
145+
fi
146+
fi
147+
148+
echo ""
149+
150+
# Handle auto-fix if requested
151+
if [ "$FIX_MODE" != "" ] && [ ${#fixes_needed[@]} -gt 0 ]; then
152+
echo "=== Auto-Fixing Versions ==="
153+
for fix in "${fixes_needed[@]}"; do
154+
key="${fix%|*}"
155+
value="${fix#*|}"
156+
echo "Updating $key = \"$value\""
157+
sed -i "s/^$key = \"[^\"]*\"/$key = \"$value\"/" docs/config.toml
158+
done
159+
echo "✓ Updated docs/config.toml"
160+
echo ""
161+
echo "Please review the changes and commit them:"
162+
echo " git diff docs/config.toml"
163+
echo " git add docs/config.toml"
164+
echo " git commit -s -m 'chore: update version pinning in docs'"
165+
exit 0
166+
fi
84167

85168
echo ""
86169
if [ "$errors" -gt 0 ]; then
87170
echo "FAILED: $errors critical version mismatch(es) detected."
88171
echo ""
89-
echo "To fix, update docs/config.toml:"
90-
if [ "$go_version" != "$config_go" ]; then
91-
echo " version_go = \"$go_version\""
92-
fi
93-
if [ "$kpt_version" != "v$config_kpt" ]; then
94-
echo " version_kpt = \"${kpt_version#v}\""
95-
fi
172+
echo "To auto-fix critical mismatches, run:"
173+
echo " scripts/check-versions.sh --fix"
174+
echo " or: make check-versions-fix"
96175
exit 1
97176
fi
98177

0 commit comments

Comments
 (0)