refactor: update CI for native per-OS runners
- Replace generic "linux" runner label with dedicated per-OS labels (ubuntu-24.04, fedora, alpine, arch) - Remove all container declarations (native runner execution) - Add build gate dependencies: build jobs need fmt+clippy+test - Extract release upload logic into reusable scripts/upload-release.sh - Fix build-alpine.sh: remove hardcoded container paths, add SKIP_CARGO_BUILD support - Fix build-arch.sh: remove hardcoded container paths, add SKIP_CARGO_BUILD support - Fix build-rpm.sh: remove sudo, native runner compatible - Remove Dockerfile.rpm and Dockerfile.arch (no longer needed) - Add sudo to Ubuntu/Fedora/Arch package installs for safety - Add nodejs to Alpine deps for Gitea Actions compatibility - Make upload-release.sh POSIX sh compatible (Alpine) - Fix curl -sf to curl -s in upload-release.sh (404 on new releases)
This commit is contained in:
63
scripts/upload-release.sh
Executable file
63
scripts/upload-release.sh
Executable file
@ -0,0 +1,63 @@
|
||||
#!/bin/sh
|
||||
# Upload build artifacts to Gitea Release
|
||||
# Usage: upload-release.sh <tag_name> <file_path>
|
||||
# Example: upload-release.sh v1.0.0 "../linux-patch-api_1.0.0-1_amd64.deb"
|
||||
#
|
||||
# Required environment variables:
|
||||
# GITEA_TOKEN - API token with repo access
|
||||
# GITEA_API - Gitea API base URL (default: https://gitea.moon-dragon.us/api/v1)
|
||||
|
||||
set -e
|
||||
|
||||
TAG_NAME="${1:?Usage: upload-release.sh <tag_name> <file_path>}"
|
||||
FILE_PATH="${2}"
|
||||
|
||||
GITEA_API="${GITEA_API:-https://gitea.moon-dragon.us/api/v1}"
|
||||
REPO="echo/linux_patch_api"
|
||||
|
||||
if [ -z "$GITEA_TOKEN" ]; then
|
||||
echo "Error: GITEA_TOKEN environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$FILE_PATH" ] || [ ! -f "$FILE_PATH" ]; then
|
||||
echo "No file found at '$FILE_PATH'"
|
||||
echo "Skipping upload."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Uploading $(basename "$FILE_PATH") for release $TAG_NAME..."
|
||||
|
||||
# Try to find existing release (do not use -f flag since 404 is expected for new releases)
|
||||
RELEASE_ID=$(curl -s -H "Authorization: token $GITEA_TOKEN" "$GITEA_API/repos/$REPO/releases/tags/$TAG_NAME" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
|
||||
|
||||
# Create release if it doesn't exist
|
||||
if [ -z "$RELEASE_ID" ]; then
|
||||
echo "Creating new release for tag $TAG_NAME..."
|
||||
RESPONSE=$(curl -s -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"tag_name\": \"$TAG_NAME\", \"name\": \"$TAG_NAME\"}" \
|
||||
"$GITEA_API/repos/$REPO/releases")
|
||||
RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
|
||||
fi
|
||||
|
||||
if [ -z "$RELEASE_ID" ]; then
|
||||
echo "Error: Could not create or find release for tag $TAG_NAME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Upload the asset
|
||||
UPLOAD_RESPONSE=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-F "attachment=@$FILE_PATH" \
|
||||
"$GITEA_API/repos/$REPO/releases/$RELEASE_ID/assets?name=$(basename "$FILE_PATH")")
|
||||
|
||||
HTTP_CODE=$(echo "$UPLOAD_RESPONSE" | grep "HTTP_CODE:" | cut -d: -f2)
|
||||
if [ "$HTTP_CODE" != "201" ] && [ "$HTTP_CODE" != "200" ]; then
|
||||
echo "Upload failed with HTTP code $HTTP_CODE"
|
||||
echo "$UPLOAD_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Successfully uploaded $(basename "$FILE_PATH") to release $TAG_NAME"
|
||||
Reference in New Issue
Block a user