upload iso as a release
Build NixOS ISOs / build-iso (buildbox) (push) Failing after 3m1s

This commit is contained in:
2026-06-20 11:23:28 -04:00
parent abf113abe0
commit e48317d60c
+61 -12
View File
@@ -14,8 +14,8 @@ on:
- .gitea/workflows/iso-builder.yml
workflow_dispatch:
inputs:
upload-artifact:
description: "Upload the ISOs as artifacts"
publish-release:
description: "Publish the ISOs as a Gitea release"
type: boolean
default: true
@@ -98,13 +98,62 @@ jobs:
sha256sum "$ISO_NAME"
echo "::endgroup::"
- name: Upload ${{ matrix.host }} ISO artifact
if: ${{ github.event_name != 'workflow_dispatch' || inputs.upload-artifact }}
uses: https://github.com/christopherHX/gitea-upload-artifact@v4
with:
name: ${{ matrix.host }}-installer-iso
# Point directly at the .iso file so the artifact contains a single
# file (not a directory of files that gets zipped together).
path: ${{ matrix.host }}-installer.iso
if-no-files-found: error
compression-level: 0
- name: Publish ${{ matrix.host }} ISO as a Gitea release
if: ${{ github.event_name != 'workflow_dispatch' || inputs.publish-release }}
env:
GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
ISO="${{ matrix.host }}-installer.iso"
if [ ! -f "$ISO" ]; then
echo "::error::$ISO not found in workspace"
ls -la
exit 1
fi
API="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}"
AUTH="Authorization: token ${GITEA_TOKEN}"
# Pick a release tag. Use the pushed tag for tag-triggered runs;
# otherwise generate a unique CI tag so re-runs don't collide.
if [ "${GITHUB_REF:-}" = "refs/tags/${GITHUB_REF_NAME:-}" ] && [ -n "${GITHUB_REF_NAME:-}" ]; then
TAG="$GITHUB_REF_NAME"
PRERELEASE="false"
else
SHORT_SHA="${GITHUB_SHA:0:12}"
TAG="ci-${{ matrix.host }}-${SHORT_SHA}-${GITHUB_RUN_NUMBER}"
PRERELEASE="true"
fi
echo "Release tag: $TAG (prerelease=$PRERELEASE)"
# Create the release. If it already exists (re-run), fall back to lookup.
RELEASE_ID=$(curl -fsS -X POST "$API/releases" \
-H "$AUTH" -H "Content-Type: application/json" \
-d "{\"tag_name\":\"$TAG\",\"name\":\"${{ matrix.host }} ISO $TAG\",\"body\":\"Automated ISO build for ${{ matrix.host }}.\\n\\nCommit: ${GITHUB_SHA}\\nRun: ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}\",\"prerelease\":$PRERELEASE}" \
| jq -r '.id') || RELEASE_ID=""
if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "null" ]; then
RELEASE_ID=$(curl -fsS "$API/releases/tags/$TAG" -H "$AUTH" | jq -r '.id')
fi
if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "null" ]; then
echo "::error::Could not create or find release for tag $TAG"
exit 1
fi
echo "Release ID: $RELEASE_ID"
# Remove any existing asset with the same name so re-runs succeed.
curl -fsS "$API/releases/$RELEASE_ID/assets" -H "$AUTH" \
| jq -r ".[] | select(.name == \"$ISO\") | .id" \
| while read -r aid; do
curl -fsS -X DELETE "$API/releases/$RELEASE_ID/assets/$aid" -H "$AUTH" || true
done
# Attach the ISO as a release asset (multipart form, Gitea-compatible).
curl -fsS -X POST "$API/releases/$RELEASE_ID/assets?name=$ISO" \
-H "$AUTH" \
-F "attachment=@$ISO;type=application/octet-stream" \
-o /dev/null
echo "::notice::Published $ISO to release $TAG"
echo "::notice::Download: ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/releases/download/$TAG/$ISO"