blob: 260efbaa7b2c51c622757522234d0d3abcbfcfa5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#!/bin/sh
# Publish a signed release APK to a Codeberg (Forgejo) release. Run on a tag,
# after ci/build.sh has produced a signed app-release.apk (signing happens when
# keystore.properties is present).
#
# Environment:
# CODEBERG_TOKEN Forgejo API token (secret)
# CODEBERG_REPO owner/name, e.g. lena/rsend
# TAG release tag (defaults to CI_COMMIT_TAG)
# CODEBERG_URL base URL (defaults to https://codeberg.org)
set -eu
: "${CODEBERG_TOKEN:?set CODEBERG_TOKEN}"
: "${CODEBERG_REPO:?set CODEBERG_REPO as owner/name}"
tag=${TAG:-${CI_COMMIT_TAG:?set TAG or CI_COMMIT_TAG}}
base=${CODEBERG_URL:-https://codeberg.org}
apk=app/build/outputs/apk/release/app-release.apk
[ -f "$apk" ] || { echo "release: $apk not found; run ci/build.sh first" >&2; exit 1; }
api="$base/api/v1/repos/$CODEBERG_REPO"
auth="Authorization: token $CODEBERG_TOKEN"
name="rsend-$tag.apk"
# Reuse the tag's release if it exists, else create it. Re-runs are idempotent:
# same release, and a stale asset from an earlier run is replaced below.
id=$(curl -fsS -H "$auth" "$api/releases/tags/$tag" 2>/dev/null \
| python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])' 2>/dev/null) || id=
if [ -n "$id" ]; then
curl -fsS -H "$auth" "$api/releases/$id/assets" \
| python3 -c 'import json,sys
for a in json.load(sys.stdin):
if a["name"] == sys.argv[1]:
print(a["id"])' "$name" \
| while read -r aid; do
curl -fsS -X DELETE -H "$auth" "$api/releases/$id/assets/$aid"
done
else
id=$(curl -fsS -X POST "$api/releases" \
-H "$auth" -H "Content-Type: application/json" \
-d "{\"tag_name\":\"$tag\",\"name\":\"$tag\"}" \
| python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])')
fi
[ -n "$id" ] || { echo "release: could not create release for $tag" >&2; exit 1; }
# Upload the APK as a release asset.
curl -fsS -X POST "$api/releases/$id/assets?name=$name" \
-H "$auth" \
-F "attachment=@$apk" >/dev/null
echo "release: uploaded $name to $CODEBERG_REPO ($tag)"
|