Add Forgejo namespace release workflow
This commit is contained in:
parent
9e3e8fa783
commit
b15b6624cb
4 changed files with 302 additions and 0 deletions
65
Scripts/ci/publish-forgejo-release.sh
Executable file
65
Scripts/ci/publish-forgejo-release.sh
Executable file
|
|
@ -0,0 +1,65 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
: "${API_URL:?API_URL is required}"
|
||||
: "${REPOSITORY:?REPOSITORY is required}"
|
||||
: "${RELEASE_TAG:?RELEASE_TAG is required}"
|
||||
: "${TOKEN:?TOKEN is required}"
|
||||
|
||||
release_api="${API_URL}/repos/${REPOSITORY}/releases"
|
||||
tag_api="${release_api}/tags/${RELEASE_TAG}"
|
||||
release_json="$(mktemp)"
|
||||
create_json="$(mktemp)"
|
||||
trap 'rm -f "${release_json}" "${create_json}"' EXIT
|
||||
|
||||
status="$(
|
||||
curl -sS -o "${release_json}" -w '%{http_code}' \
|
||||
-H "Authorization: token ${TOKEN}" \
|
||||
"${tag_api}"
|
||||
)"
|
||||
|
||||
if [[ "${status}" == "404" ]]; then
|
||||
jq -n \
|
||||
--arg tag "${RELEASE_TAG}" \
|
||||
--arg name "Burrow ${RELEASE_TAG}" \
|
||||
'{
|
||||
tag_name: $tag,
|
||||
target_commitish: $tag,
|
||||
name: $name,
|
||||
body: "Automated prerelease built on Forgejo Namespace runners.",
|
||||
draft: false,
|
||||
prerelease: true
|
||||
}' > "${create_json}"
|
||||
|
||||
curl -fsS \
|
||||
-H "Authorization: token ${TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d @"${create_json}" \
|
||||
"${release_api}" > "${release_json}"
|
||||
elif [[ "${status}" != "200" ]]; then
|
||||
echo "failed to query Forgejo release for ${RELEASE_TAG} (HTTP ${status})" >&2
|
||||
cat "${release_json}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
release_id="$(jq -r '.id' "${release_json}")"
|
||||
if [[ -z "${release_id}" || "${release_id}" == "null" ]]; then
|
||||
echo "Forgejo release payload is missing an id" >&2
|
||||
cat "${release_json}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for file in dist/*; do
|
||||
name="$(basename "${file}")"
|
||||
asset_id="$(jq -r --arg name "${name}" '.assets[]? | select(.name == $name) | .id' "${release_json}" | head -n1)"
|
||||
if [[ -n "${asset_id}" ]]; then
|
||||
curl -fsS -X DELETE \
|
||||
-H "Authorization: token ${TOKEN}" \
|
||||
"${release_api}/${release_id}/assets/${asset_id}" >/dev/null
|
||||
fi
|
||||
|
||||
curl -fsS \
|
||||
-H "Authorization: token ${TOKEN}" \
|
||||
-F "attachment=@${file}" \
|
||||
"${release_api}/${release_id}/assets?name=${name}" >/dev/null
|
||||
done
|
||||
Loading…
Add table
Add a link
Reference in a new issue