docs: add CI/release documentation and ignore dist directory
Tests / Go and GTK tests (push) Failing after 1m8s
Tests / Go and GTK tests (push) Failing after 1m8s
Add `/dist/` to `.gitignore` to exclude locally built distribution artifacts. Document the Gitea Actions workflow, release tagging, and branch protection setup in the README.
This commit is contained in:
Executable
+80
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
: "${GITEA_API_URL:?GITEA_API_URL is required}"
|
||||
: "${GITEA_REPOSITORY:?GITEA_REPOSITORY is required}"
|
||||
: "${GITEA_TOKEN:?GITEA_TOKEN is required}"
|
||||
: "${RELEASE_TAG:?RELEASE_TAG is required}"
|
||||
: "${RELEASE_NOTES:?RELEASE_NOTES is required}"
|
||||
|
||||
if [[ ! "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
printf 'captioneer: release tag must match vMAJOR.MINOR.BUG, got %q\n' "$RELEASE_TAG" >&2
|
||||
exit 1
|
||||
fi
|
||||
if (( $# == 0 )); then
|
||||
printf 'captioneer: at least one release asset is required\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for asset in "$@"; do
|
||||
[[ -f "$asset" ]] || { printf 'captioneer: release asset not found: %s\n' "$asset" >&2; exit 1; }
|
||||
done
|
||||
|
||||
api_base="${GITEA_API_URL%/}/repos/$GITEA_REPOSITORY"
|
||||
authorization="Authorization: token $GITEA_TOKEN"
|
||||
release_response="$(mktemp)"
|
||||
trap 'rm -f -- "$release_response"' EXIT
|
||||
|
||||
status="$(curl --silent --show-error --output "$release_response" --write-out '%{http_code}' \
|
||||
--header "$authorization" \
|
||||
"$api_base/releases/tags/$RELEASE_TAG")"
|
||||
|
||||
release_payload="$(jq -n \
|
||||
--arg tag "$RELEASE_TAG" \
|
||||
--arg name "Captioneer $RELEASE_TAG" \
|
||||
--rawfile body "$RELEASE_NOTES" \
|
||||
'{tag_name: $tag, name: $name, body: $body, draft: false, prerelease: false}')"
|
||||
|
||||
case "$status" in
|
||||
200)
|
||||
release_id="$(jq -er '.id' "$release_response")"
|
||||
curl --fail-with-body --silent --show-error \
|
||||
--request PATCH \
|
||||
--header "$authorization" \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data "$release_payload" \
|
||||
"$api_base/releases/$release_id" > "$release_response"
|
||||
;;
|
||||
404)
|
||||
curl --fail-with-body --silent --show-error \
|
||||
--request POST \
|
||||
--header "$authorization" \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data "$release_payload" \
|
||||
"$api_base/releases" > "$release_response"
|
||||
release_id="$(jq -er '.id' "$release_response")"
|
||||
;;
|
||||
*)
|
||||
printf 'captioneer: Gitea release lookup failed with HTTP %s\n' "$status" >&2
|
||||
cat "$release_response" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
for asset in "$@"; do
|
||||
asset_name="$(basename -- "$asset")"
|
||||
while IFS= read -r attachment_id; do
|
||||
[[ -n "$attachment_id" ]] || continue
|
||||
curl --fail-with-body --silent --show-error \
|
||||
--request DELETE \
|
||||
--header "$authorization" \
|
||||
"$api_base/releases/$release_id/assets/$attachment_id" >/dev/null
|
||||
done < <(jq -r --arg name "$asset_name" '.assets[]? | select(.name == $name) | .id' "$release_response")
|
||||
|
||||
curl --fail-with-body --silent --show-error \
|
||||
--request POST \
|
||||
--header "$authorization" \
|
||||
--form "attachment=@$asset" \
|
||||
"$api_base/releases/$release_id/assets?name=$asset_name" >/dev/null
|
||||
printf 'Uploaded %s\n' "$asset_name"
|
||||
done
|
||||
Reference in New Issue
Block a user