Fix HTTP code extraction and implement dynamic package ID lookup for assignment
Some checks failed
Build libostree Backport / Build libostree Backport (push) Failing after 10m3s
Some checks failed
Build libostree Backport / Build libostree Backport (push) Failing after 10m3s
This commit is contained in:
parent
5e5540c964
commit
2dd88a7b89
1 changed files with 61 additions and 36 deletions
|
|
@ -304,26 +304,22 @@ jobs:
|
||||||
echo "$response_and_code"
|
echo "$response_and_code"
|
||||||
echo "=== End curl output ==="
|
echo "=== End curl output ==="
|
||||||
|
|
||||||
# Extract HTTP code (from headers)
|
# Extract HTTP code from verbose output (look for the actual HTTP response line)
|
||||||
http_code=$(echo "$response_and_code" | head -n 1 | grep -oP 'HTTP/\d.\d \K\d{3}')
|
http_code=$(echo "$response_and_code" | grep -oP '^< HTTP/\d.\d \K\d{3}' | tail -1 || echo "N/A")
|
||||||
# Extract JSON body (after headers)
|
# Extract JSON body (after headers) - but 201 responses typically have no body
|
||||||
response_body=$(echo "$response_and_code" | awk '/^\r?$/{p=1;next}p')
|
response_body=$(echo "$response_and_code" | awk '/^\r?$/{p=1;next}p')
|
||||||
|
|
||||||
echo "HTTP Response Code: $http_code"
|
echo "HTTP Response Code: $http_code"
|
||||||
|
|
||||||
if [ "$http_code" = "201" ]; then
|
if [ "$http_code" = "201" ]; then
|
||||||
echo "✅ Debian Package Registry upload SUCCESS for $deb_file"
|
echo "✅ Debian Package Registry upload SUCCESS for $deb_file"
|
||||||
# Parse JSON body to get the 'id'
|
# Note: 201 responses typically have no body, so no package ID to extract
|
||||||
package_id=$(echo "$response_body" | jq -r '.id' 2>/dev/null)
|
# We'll need to find the package ID later by listing packages
|
||||||
if [ -n "$package_id" ] && [ "$package_id" != "null" ]; then
|
echo "Package uploaded successfully (no ID returned in response)"
|
||||||
echo "Captured Package ID: $package_id"
|
|
||||||
uploaded_debian_ids+=("$package_id")
|
|
||||||
else
|
|
||||||
echo "Could not extract Package ID from response for $deb_file."
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
echo "❌ Debian Package Registry upload FAILED for $deb_file (HTTP $http_code)"
|
echo "❌ Debian Package Registry upload FAILED for $deb_file (HTTP $http_code)"
|
||||||
echo "Response body: $response_body"
|
echo "Response body: $response_body"
|
||||||
|
exit 1 # Fail the step if upload fails
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
@ -429,8 +425,6 @@ jobs:
|
||||||
echo "=== Assigning uploaded packages to repository ==="
|
echo "=== Assigning uploaded packages to repository ==="
|
||||||
|
|
||||||
REPO_ID="${{ steps.get_repo_id.outputs.REPO_ID }}"
|
REPO_ID="${{ steps.get_repo_id.outputs.REPO_ID }}"
|
||||||
# Convert space-separated strings back to arrays
|
|
||||||
read -ra DEBIAN_PACKAGE_IDS <<< "${{ steps.debian_upload.outputs.debian_package_ids }}"
|
|
||||||
|
|
||||||
if [ -z "$REPO_ID" ]; then
|
if [ -z "$REPO_ID" ]; then
|
||||||
echo "Repository ID not found. Cannot assign packages."
|
echo "Repository ID not found. Cannot assign packages."
|
||||||
|
|
@ -438,29 +432,60 @@ jobs:
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Repository ID: $REPO_ID"
|
echo "Repository ID: $REPO_ID"
|
||||||
echo "Debian Package IDs: ${DEBIAN_PACKAGE_IDS[*]}"
|
|
||||||
|
|
||||||
# Process Debian packages
|
# Since we can't get package IDs from upload responses, we need to find them dynamically
|
||||||
if [ ${#DEBIAN_PACKAGE_IDS[@]} -gt 0 ]; then
|
echo "Listing all packages to find recently uploaded ones..."
|
||||||
for package_id in "${DEBIAN_PACKAGE_IDS[@]}"; do
|
all_packages_json=$(curl -s -H "Authorization: Bearer ${{ secrets.ACCESS_TOKEN }}" \
|
||||||
echo "Assigning Debian package ID $package_id to repo $REPO_ID..."
|
"https://git.raines.xyz/api/v1/user/packages")
|
||||||
response=$(curl -s -w "%{http_code}" -X POST \
|
|
||||||
-H "Authorization: Bearer ${{ secrets.ACCESS_TOKEN }}" \
|
if [ -z "$all_packages_json" ]; then
|
||||||
-H "Content-Type: application/json" \
|
echo "❌ Failed to retrieve user packages. Cannot assign."
|
||||||
-d "{\"id\": $package_id}" \
|
exit 1
|
||||||
"https://git.raines.xyz/api/v1/packages/robojerk/libostree-dev/attach")
|
|
||||||
|
|
||||||
http_code=$(echo "$response" | tail -c 4)
|
|
||||||
echo "Assignment HTTP Response Code for Debian package $package_id: $http_code"
|
|
||||||
if [ "$http_code" = "200" ] || [ "$http_code" = "204" ]; then
|
|
||||||
echo "✅ Successfully assigned Debian package ID $package_id"
|
|
||||||
else
|
|
||||||
echo "❌ Failed to assign Debian package ID $package_id (HTTP $http_code)"
|
|
||||||
echo "Response: $response"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
echo "No Debian package IDs captured for assignment."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Generic package processing removed - focusing only on Debian Package Registry
|
echo "Found packages:"
|
||||||
|
echo "$all_packages_json" | jq -r '.[] | "\(.id): \(.name) \(.version) (\(.package_type))"' 2>/dev/null || echo "Could not parse packages JSON"
|
||||||
|
|
||||||
|
# Loop through each .deb file we attempted to upload
|
||||||
|
for deb_file in release-assets/*.deb; do
|
||||||
|
if [ -f "$deb_file" ]; then
|
||||||
|
filename=$(basename "$deb_file")
|
||||||
|
echo "Looking for package: $filename"
|
||||||
|
|
||||||
|
# Parse package info from filename
|
||||||
|
# Example: libostree-dev_2025.2-1~noble1_amd64.deb
|
||||||
|
package_name=$(echo "$filename" | cut -d'_' -f1)
|
||||||
|
package_version=$(echo "$filename" | cut -d'_' -f2)
|
||||||
|
|
||||||
|
echo "Searching for package: name=$package_name, version=$package_version"
|
||||||
|
|
||||||
|
# Try to find the package ID by name and version
|
||||||
|
package_id=$(echo "$all_packages_json" | jq -r --arg name "$package_name" --arg version "$package_version" \
|
||||||
|
'.[] | select(.name == $name and .version == $version and .package_type == "debian") | .id' 2>/dev/null | head -1)
|
||||||
|
|
||||||
|
if [ -n "$package_id" ] && [ "$package_id" != "null" ]; then
|
||||||
|
echo "Found package ID $package_id for $filename"
|
||||||
|
|
||||||
|
# Assign the package to the repository
|
||||||
|
response=$(curl -s -w "%{http_code}" -X POST \
|
||||||
|
-H "Authorization: Bearer ${{ secrets.ACCESS_TOKEN }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"id\": $package_id}" \
|
||||||
|
"https://git.raines.xyz/api/v1/packages/robojerk/libostree-dev/attach")
|
||||||
|
|
||||||
|
http_code=$(echo "$response" | tail -c 4)
|
||||||
|
echo "Assignment HTTP Response Code for $filename (ID $package_id): $http_code"
|
||||||
|
|
||||||
|
if [ "$http_code" = "200" ] || [ "$http_code" = "204" ]; then
|
||||||
|
echo "✅ Successfully assigned $filename (ID $package_id)"
|
||||||
|
else
|
||||||
|
echo "❌ Failed to assign $filename (ID $package_id) (HTTP $http_code)"
|
||||||
|
echo "Response: $(echo "$response" | head -c -4)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "⚠️ Could not find package ID for $filename in user packages"
|
||||||
|
echo "Available packages:"
|
||||||
|
echo "$all_packages_json" | jq -r '.[] | " \(.name) \(.version) (\(.package_type))"' 2>/dev/null || echo "Could not parse packages"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
Loading…
Add table
Add a link
Reference in a new issue