first commit
This commit is contained in:
+198
@@ -0,0 +1,198 @@
|
||||
name: Create Gitea Release
|
||||
description: Create git tag, create Gitea release and upload zip assets from dist
|
||||
|
||||
inputs:
|
||||
gitea_url:
|
||||
description: Gitea instance URL
|
||||
required: false
|
||||
default: https://git.scuroneko.dev
|
||||
|
||||
repo_owner:
|
||||
description: Repository owner or organization
|
||||
required: true
|
||||
|
||||
repo_name:
|
||||
description: Repository name
|
||||
required: true
|
||||
|
||||
token:
|
||||
description: Gitea API token
|
||||
required: true
|
||||
|
||||
tag_name:
|
||||
description: Git tag name
|
||||
required: true
|
||||
|
||||
release_name:
|
||||
description: Release display name
|
||||
required: true
|
||||
|
||||
target_commitish:
|
||||
description: Target branch or commit
|
||||
required: false
|
||||
default: main
|
||||
|
||||
assets_glob:
|
||||
description: Release assets glob
|
||||
required: false
|
||||
default: dist/*.zip
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Create git tag
|
||||
shell: bash
|
||||
env:
|
||||
GITEA_TOKEN: ${{ inputs.token }}
|
||||
GITEA_URL: ${{ inputs.gitea_url }}
|
||||
REPO_OWNER: ${{ inputs.repo_owner }}
|
||||
REPO_NAME: ${{ inputs.repo_name }}
|
||||
TAG_NAME: ${{ inputs.tag_name }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
[ -n "$TAG_NAME" ] || { echo "TAG_NAME is empty"; exit 1; }
|
||||
|
||||
git config user.name "Gitea Actions"
|
||||
git config user.email "actions@gitea.local"
|
||||
|
||||
git remote set-url origin \
|
||||
"https://x-access-token:${GITEA_TOKEN}@${GITEA_URL#https://}/${REPO_OWNER}/${REPO_NAME}.git"
|
||||
|
||||
if git ls-remote --tags origin "refs/tags/$TAG_NAME" | grep -q "$TAG_NAME"; then
|
||||
echo "Remote tag $TAG_NAME already exists"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if git rev-parse "$TAG_NAME" >/dev/null 2>&1; then
|
||||
echo "Local tag $TAG_NAME already exists"
|
||||
else
|
||||
git tag "$TAG_NAME"
|
||||
fi
|
||||
|
||||
git push origin "$TAG_NAME"
|
||||
|
||||
for _ in 1 2 3 4 5; do
|
||||
if git ls-remote --tags origin "refs/tags/$TAG_NAME" | grep -q "$TAG_NAME"; then
|
||||
echo "Remote tag $TAG_NAME is visible"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Waiting for remote tag $TAG_NAME to become visible..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "Remote tag $TAG_NAME is still not visible after push"
|
||||
exit 1
|
||||
|
||||
- name: Create Gitea release
|
||||
id: create_release
|
||||
shell: bash
|
||||
env:
|
||||
GITEA_TOKEN: ${{ inputs.token }}
|
||||
GITEA_URL: ${{ inputs.gitea_url }}
|
||||
REPO_OWNER: ${{ inputs.repo_owner }}
|
||||
REPO_NAME: ${{ inputs.repo_name }}
|
||||
TAG_NAME: ${{ inputs.tag_name }}
|
||||
RELEASE_NAME: ${{ inputs.release_name }}
|
||||
TARGET_COMMITISH: ${{ inputs.target_commitish }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
body=$(jq -n \
|
||||
--arg tag "$TAG_NAME" \
|
||||
--arg target "$TARGET_COMMITISH" \
|
||||
--arg name "$RELEASE_NAME" \
|
||||
--arg body "Release $RELEASE_NAME" \
|
||||
'{
|
||||
tag_name: $tag,
|
||||
target_commitish: $target,
|
||||
name: $name,
|
||||
body: $body,
|
||||
draft: false,
|
||||
prerelease: false
|
||||
}')
|
||||
|
||||
http_code=$(curl -sS -o response.json -w "%{http_code}" \
|
||||
-X POST "$GITEA_URL/api/v1/repos/$REPO_OWNER/$REPO_NAME/releases" \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Accept: application/json" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$body")
|
||||
|
||||
echo "HTTP code: $http_code"
|
||||
cat response.json
|
||||
echo
|
||||
|
||||
if [ "$http_code" = "409" ]; then
|
||||
echo "Release already exists, trying to find it..."
|
||||
|
||||
http_code=$(curl -sS -o response.json -w "%{http_code}" \
|
||||
"$GITEA_URL/api/v1/repos/$REPO_OWNER/$REPO_NAME/releases/tags/$TAG_NAME" \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Accept: application/json")
|
||||
|
||||
echo "HTTP code: $http_code"
|
||||
cat response.json
|
||||
echo
|
||||
fi
|
||||
|
||||
if [ "$http_code" -lt 200 ] || [ "$http_code" -ge 300 ]; then
|
||||
echo "Failed to create or read release"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
release_id=$(jq -r '.id' response.json)
|
||||
|
||||
if [ "$release_id" = "null" ] || [ -z "$release_id" ]; then
|
||||
echo "Failed to get release id"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "release_id=$release_id" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Upload release assets
|
||||
shell: bash
|
||||
env:
|
||||
GITEA_TOKEN: ${{ inputs.token }}
|
||||
GITEA_URL: ${{ inputs.gitea_url }}
|
||||
REPO_OWNER: ${{ inputs.repo_owner }}
|
||||
REPO_NAME: ${{ inputs.repo_name }}
|
||||
RELEASE_ID: ${{ steps.create_release.outputs.release_id }}
|
||||
ASSETS_GLOB: ${{ inputs.assets_glob }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
found=0
|
||||
|
||||
for file in $ASSETS_GLOB; do
|
||||
[ -f "$file" ] || continue
|
||||
found=1
|
||||
|
||||
filename="$(basename "$file")"
|
||||
encoded_name="$(jq -rn --arg v "$filename" '$v|@uri')"
|
||||
|
||||
echo "Uploading $filename"
|
||||
|
||||
http_code=$(curl -sS -o upload-response.json -w "%{http_code}" \
|
||||
-X POST \
|
||||
"$GITEA_URL/api/v1/repos/$REPO_OWNER/$REPO_NAME/releases/$RELEASE_ID/assets?name=$encoded_name" \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Accept: application/json" \
|
||||
-H "Content-Type: multipart/form-data" \
|
||||
-F "attachment=@$file")
|
||||
|
||||
echo "HTTP code: $http_code"
|
||||
cat upload-response.json
|
||||
echo
|
||||
|
||||
if [ "$http_code" -lt 200 ] || [ "$http_code" -ge 300 ]; then
|
||||
echo "Failed to upload $filename"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$found" = "0" ]; then
|
||||
echo "No assets found by glob: $ASSETS_GLOB"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user