diff --git a/.forgejo/workflows/build-libostree-backport.yml b/.forgejo/workflows/build-libostree-backport.yml index ff81762..4272f5f 100644 --- a/.forgejo/workflows/build-libostree-backport.yml +++ b/.forgejo/workflows/build-libostree-backport.yml @@ -249,36 +249,57 @@ jobs: - name: Upload to Debian Package Registry (Primary) + id: debian_upload run: | echo "=== Attempting Debian Package Registry upload with ACCESS_TOKEN ===" + # Initialize array to store uploaded package IDs + uploaded_debian_ids=() + for deb_file in release-assets/*.deb; do if [ -f "$deb_file" ]; then echo "Uploading $deb_file to Debian Package Registry..." filename=$(basename "$deb_file") echo "File: $filename" - # Use the confirmed working Basic Auth method - response=$(curl -s -w "%{http_code}" \ - --user "robojerk:${{ secrets.ACCESS_TOKEN }}" \ - --upload-file "$deb_file" \ - "https://git.raines.xyz/api/packages/robojerk/debian/pool/noble/main/upload") + # Capture full response (headers + body) to parse HTTP code AND package ID + response_and_code=$(curl -s -i --user "robojerk:${{ secrets.ACCESS_TOKEN }}" \ + --upload-file "$deb_file" \ + "https://git.raines.xyz/api/packages/robojerk/debian/pool/noble/main/upload") + + # Extract HTTP code (from headers) + http_code=$(echo "$response_and_code" | head -n 1 | grep -oP 'HTTP/\d.\d \K\d{3}') + # Extract JSON body (after headers) + response_body=$(echo "$response_and_code" | awk '/^\r?$/{p=1;next}p') - http_code=$(echo "$response" | tail -c 4) echo "HTTP Response Code: $http_code" if [ "$http_code" = "201" ]; then echo "✅ Debian Package Registry upload SUCCESS for $deb_file" + # Parse JSON body to get the 'id' + package_id=$(echo "$response_body" | jq -r '.id' 2>/dev/null) + if [ -n "$package_id" ] && [ "$package_id" != "null" ]; then + 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 echo "❌ Debian Package Registry upload FAILED for $deb_file (HTTP $http_code)" + echo "Response body: $response_body" fi fi done + # Set output for this step + echo "debian_package_ids=${uploaded_debian_ids[*]}" >> $GITHUB_OUTPUT - name: Upload to Generic Package Registry (Fallback) + id: generic_upload run: | echo "=== Attempting Generic Package Registry upload (fallback) with ACCESS_TOKEN ===" + uploaded_generic_ids=() + for deb_file in release-assets/*.deb; do if [ -f "$deb_file" ]; then echo "Uploading $deb_file to Generic Package Registry..." @@ -290,22 +311,32 @@ jobs: echo "Version: $version" echo "File: $filename" - # Use the confirmed working Basic Auth method - response=$(curl -s -w "%{http_code}" \ - --user "robojerk:${{ secrets.ACCESS_TOKEN }}" \ - --upload-file "$deb_file" \ - "https://git.raines.xyz/api/packages/robojerk/generic/$package_name/$version/$filename") + # Capture full response (headers + body) to parse HTTP code AND package ID + response_and_code=$(curl -s -i --user "robojerk:${{ secrets.ACCESS_TOKEN }}" \ + --upload-file "$deb_file" \ + "https://git.raines.xyz/api/packages/robojerk/generic/$package_name/$version/$filename") + + http_code=$(echo "$response_and_code" | head -n 1 | grep -oP 'HTTP/\d.\d \K\d{3}') + response_body=$(echo "$response_and_code" | awk '/^\r?$/{p=1;next}p') - http_code=$(echo "$response" | tail -c 4) echo "HTTP Response Code: $http_code" if [ "$http_code" = "201" ]; then echo "✅ Generic Package Registry upload SUCCESS for $deb_file" + package_id=$(echo "$response_body" | jq -r '.id' 2>/dev/null) + if [ -n "$package_id" ] && [ "$package_id" != "null" ]; then + echo "Captured Package ID: $package_id" + uploaded_generic_ids+=("$package_id") + else + echo "Could not extract Package ID from response for $deb_file." + fi else echo "❌ Generic Package Registry upload FAILED for $deb_file (HTTP $http_code)" + echo "Response body: $response_body" fi fi done + echo "generic_package_ids=${uploaded_generic_ids[*]}" >> $GITHUB_OUTPUT - name: Check uploaded packages and provide assignment instructions run: | @@ -334,4 +365,84 @@ jobs: echo "🎯 Next steps:" echo " - Check HTTP response codes above" echo " - If HTTP 201, manually assign packages to repository via web UI" - echo " - If HTTP 401/403, check token permissions" \ No newline at end of file + echo " - If HTTP 401/403, check token permissions" + + - name: Get Repository ID + id: get_repo_id + run: | + echo "Fetching repository ID for robojerk/libostree-dev..." + REPO_INFO=$(curl -s -H "Authorization: Bearer ${{ secrets.ACCESS_TOKEN }}" \ + "https://git.raines.xyz/api/v1/repos/robojerk/libostree-dev") + REPO_ID=$(echo "$REPO_INFO" | jq -r '.id' 2>/dev/null) + + if [ -n "$REPO_ID" ] && [ "$REPO_ID" != "null" ]; then + echo "Found repository ID: $REPO_ID" + echo "REPO_ID=$REPO_ID" >> $GITHUB_OUTPUT + else + echo "❌ Failed to retrieve repository ID for robojerk/libostree-dev." + echo "Repository info: $REPO_INFO" + exit 1 + fi + + - name: Assign Uploaded Packages to Repository + run: | + echo "=== Assigning uploaded packages to repository ===" + + REPO_ID="${{ steps.get_repo_id.outputs.REPO_ID }}" + DEBIAN_PACKAGE_IDS="${{ steps.debian_upload.outputs.debian_package_ids }}" + GENERIC_PACKAGE_IDS="${{ steps.generic_upload.outputs.generic_package_ids }}" + + if [ -z "$REPO_ID" ]; then + echo "Repository ID not found. Cannot assign packages." + exit 1 + fi + + echo "Repository ID: $REPO_ID" + echo "Debian Package IDs: $DEBIAN_PACKAGE_IDS" + echo "Generic Package IDs: $GENERIC_PACKAGE_IDS" + + # Process Debian packages + if [ -n "$DEBIAN_PACKAGE_IDS" ]; then + for package_id in $DEBIAN_PACKAGE_IDS; do + echo "Assigning Debian package ID $package_id to repo $REPO_ID..." + 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 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 + + # Process Generic packages + if [ -n "$GENERIC_PACKAGE_IDS" ]; then + for package_id in $GENERIC_PACKAGE_IDS; do + echo "Assigning Generic package ID $package_id to repo $REPO_ID..." + 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 Generic package $package_id: $http_code" + if [ "$http_code" = "200" ] || [ "$http_code" = "204" ]; then + echo "✅ Successfully assigned Generic package ID $package_id" + else + echo "❌ Failed to assign Generic package ID $package_id (HTTP $http_code)" + echo "Response: $response" + fi + done + else + echo "No Generic package IDs captured for assignment." + fi \ No newline at end of file