Skip to content

Commit 26f855e

Browse files
committed
try to fix prow
Signed-off-by: Daniel Grimm <[email protected]> Signed-off-by: Daniel Grimm <[email protected]>
1 parent 6327a74 commit 26f855e

File tree

1 file changed

+72
-39
lines changed

1 file changed

+72
-39
lines changed

tools/crd-schema-checker.sh

Lines changed: 72 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,63 @@ fi
5050

5151
current_branch=$(git rev-parse --abbrev-ref HEAD)
5252

53-
# prow uses shallow-clones
53+
# Store original working directory
54+
original_dir="$(pwd)"
55+
work_dir="$original_dir"
56+
cleanup_clone=false
57+
58+
# Enhanced prow shallow clone handling - use temporary full clone
5459
prow=false
5560
if git rev-parse --is-shallow-repository | grep -q true; then
56-
git fetch --unshallow origin || git fetch origin '+refs/heads/*:refs/remotes/origin/*'
57-
git fetch origin '+refs/heads/release-*:refs/remotes/origin/release-*' || true
58-
prow=true
61+
echo "Detected shallow clone (prow environment). Creating temporary full clone..."
62+
prow=true
63+
64+
# Get the clone URL
65+
clone_url=$(git remote get-url origin)
66+
if [[ -z "$clone_url" ]]; then
67+
echo "ERROR: Could not determine remote URL"
68+
exit 1
69+
fi
70+
71+
# Create temporary directory for full clone
72+
temp_clone_dir=$(mktemp -d)
73+
cleanup_clone=true
74+
75+
echo "Cloning full repository to $temp_clone_dir..."
76+
if ! git clone "$clone_url" "$temp_clone_dir" --quiet; then
77+
echo "ERROR: Failed to clone repository"
78+
rm -rf "$temp_clone_dir"
79+
exit 1
80+
fi
81+
82+
# Get current branch name to checkout the same branch in the clone
83+
current_branch_local=$(git rev-parse --abbrev-ref HEAD)
84+
85+
# Change to the cloned directory
86+
cd "$temp_clone_dir"
87+
work_dir="$temp_clone_dir"
88+
89+
# Checkout the same branch if it exists
90+
if git show-ref --verify --quiet "refs/remotes/origin/$current_branch_local"; then
91+
git checkout "$current_branch_local" --quiet
92+
else
93+
echo "WARNING: Current branch '$current_branch_local' not found in full clone. Using default branch."
94+
fi
95+
96+
# Update current_branch in case we switched
97+
current_branch=$(git rev-parse --abbrev-ref HEAD)
5998
fi
6099

100+
# Setup cleanup trap
101+
cleanup() {
102+
cd "$original_dir"
103+
if [[ "$cleanup_clone" == "true" && -n "${temp_clone_dir:-}" ]]; then
104+
echo "Cleaning up temporary clone..."
105+
rm -rf "$temp_clone_dir"
106+
fi
107+
}
108+
trap cleanup EXIT
109+
61110
# Determine what to compare
62111
if [[ "$current_branch" =~ ^release-[0-9]+\.[0-9]+$ ]]; then
63112
# On release branch: compare against previous release
@@ -78,43 +127,21 @@ fi
78127

79128
# Find previous release branch (only if we're on a release branch)
80129
if [[ "$current_branch" =~ ^release-[0-9]+\.[0-9]+$ ]]; then
81-
echo "Looking for previous release branch before $target_branch..."
82-
83-
# Debug: show available branches
84-
echo "Available local branches:"
85-
git branch -a | grep -E 'release-[0-9]+\.[0-9]+$' | head -5
86-
87130
previous_branch=$(git branch -a | grep -E 'release-[0-9]+\.[0-9]+$' | \
88131
sed 's/.*release-/release-/' | sort -V | uniq | \
89132
awk -v target="$target_branch" '
90133
$0 == target { print prev; exit }
91134
{ prev = $0 }
92135
')
93-
94-
# Fallback: try to find in remote branches if not found locally (prow fix)
95-
if [[ -z "$previous_branch" && "$prow" == "true" ]]; then
96-
echo "Fallback: checking remote branches..."
97-
echo "Available remote branches:"
98-
git branch -r | grep -E 'origin/release-[0-9]+\.[0-9]+$' | head -5
99-
100-
previous_branch=$(git branch -r | grep -E 'origin/release-[0-9]+\.[0-9]+$' | \
101-
sed 's|.*origin/||' | sort -V | uniq | \
102-
awk -v target="$target_branch" '
103-
$0 == target { print prev; exit }
104-
{ prev = $0 }
105-
')
106-
fi
107-
108-
echo "Found previous branch: '$previous_branch'"
109136
fi
110137

111-
[[ -n "$previous_branch" ]] || {
112-
echo "ERROR: No previous release branch found for target: $target_branch"
138+
# Handle case where no previous release branch exists
139+
if [[ -z "$previous_branch" ]]; then
140+
echo "WARNING: No previous release branch found for target: $target_branch"
113141
echo "This might be expected for the first release in a series."
114-
echo "Available branches:"
115-
git branch -a | grep -E 'release-[0-9]+\.[0-9]+' | head -10
116-
exit 1
117-
}
142+
echo "Skipping CRD compatibility check."
143+
exit 0
144+
fi
118145

119146
echo "Checking CRD compatibility: $previous_branch -> $current_branch"
120147

@@ -127,9 +154,7 @@ mkdir -p "$previous_dir" "$current_dir"
127154

128155
extract_crds() {
129156
local branch="$1" output_dir="$2"
130-
if [[ "${prow}" == "true" ]]; then
131-
git fetch origin "${branch}" || true
132-
fi
157+
# No need to fetch branches in full clone
133158
while IFS= read -r file; do
134159
[[ -z "$file" ]] && continue
135160
content=$(git show "$branch:bundle/manifests/$file" 2>/dev/null)
@@ -167,10 +192,18 @@ for previous_crd in "${previous_crds[@]}"; do
167192

168193
if [[ -n "${current_crd_map[$crd_name]:-}" ]]; then
169194
set +e
170-
output=$($CRD_SCHEMA_CHECKER check-manifests \
171-
--disabled-validators=NoBools,NoMaps \
172-
--existing-crd-filename="$previous_crd" \
173-
--new-crd-filename="${current_crd_map[$crd_name]}" 2>&1)
195+
# Use the original directory's crd-schema-checker if we're in a temp clone
196+
if [[ "$cleanup_clone" == "true" ]]; then
197+
output=$("$original_dir/$CRD_SCHEMA_CHECKER" check-manifests \
198+
--disabled-validators=NoBools,NoMaps \
199+
--existing-crd-filename="$previous_crd" \
200+
--new-crd-filename="${current_crd_map[$crd_name]}" 2>&1)
201+
else
202+
output=$($CRD_SCHEMA_CHECKER check-manifests \
203+
--disabled-validators=NoBools,NoMaps \
204+
--existing-crd-filename="$previous_crd" \
205+
--new-crd-filename="${current_crd_map[$crd_name]}" 2>&1)
206+
fi
174207
exit_code=$?
175208
set -e
176209

0 commit comments

Comments
 (0)