Automate Gitea release publishing
ci / test (push) Has been cancelled
ci / fuzz-smoke (push) Has been cancelled
ci / windows-client (push) Has been cancelled
ci / package-release (linux-x86_64, ubuntu-latest) (push) Has been cancelled
ci / package-release (macos-aarch64, macos-14) (push) Has been cancelled
ci / package-release (macos-x86_64, macos-13) (push) Has been cancelled
ci / package-release (windows-x86_64, windows-latest) (push) Has been cancelled
ci / remote-bench (push) Has been cancelled
ci / test (push) Has been cancelled
ci / fuzz-smoke (push) Has been cancelled
ci / windows-client (push) Has been cancelled
ci / package-release (linux-x86_64, ubuntu-latest) (push) Has been cancelled
ci / package-release (macos-aarch64, macos-14) (push) Has been cancelled
ci / package-release (macos-x86_64, macos-13) (push) Has been cancelled
ci / package-release (windows-x86_64, windows-latest) (push) Has been cancelled
ci / remote-bench (push) Has been cancelled
This commit is contained in:
+1
-1
@@ -38,4 +38,4 @@ opt-level = 2
|
|||||||
codegen-units = 16
|
codegen-units = 16
|
||||||
incremental = true
|
incremental = true
|
||||||
lto = false
|
lto = false
|
||||||
strip = false
|
strip = "debuginfo"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.PHONY: build test fmt install package-release bench-report bench-local bench-local-json bench-docker-ssh bench-docker-mosh fuzz-smoke fuzz-deep soak-local tui-harness
|
.PHONY: build test fmt install package-release publish-release bench-report bench-local bench-local-json bench-docker-ssh bench-docker-mosh fuzz-smoke fuzz-deep soak-local tui-harness
|
||||||
|
|
||||||
build:
|
build:
|
||||||
cargo build --release
|
cargo build --release
|
||||||
@@ -15,6 +15,9 @@ install:
|
|||||||
package-release:
|
package-release:
|
||||||
sh scripts/package-release.sh
|
sh scripts/package-release.sh
|
||||||
|
|
||||||
|
publish-release:
|
||||||
|
sh scripts/publish-gitea-release.sh
|
||||||
|
|
||||||
bench-report:
|
bench-report:
|
||||||
sh scripts/bench-report.sh
|
sh scripts/bench-report.sh
|
||||||
|
|
||||||
|
|||||||
Executable
+125
@@ -0,0 +1,125 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
Usage:
|
||||||
|
scripts/publish-gitea-release.sh [TAG]
|
||||||
|
|
||||||
|
Publishes the current Dosh release to Gitea.
|
||||||
|
|
||||||
|
Defaults:
|
||||||
|
TAG v<Cargo.toml version>
|
||||||
|
DOSH_PUBLISH_BUILD 1: run scripts/package-release.sh first
|
||||||
|
DOSH_PUBLISH_PUSH 1: push TAG to origin
|
||||||
|
DOSH_PUBLISH_PRUNE 1: remove stale dosh-<version>-* duplicate assets
|
||||||
|
|
||||||
|
Environment:
|
||||||
|
GITEA_URL, GITEA_REPO, GITEA_TOKEN: same as upload-gitea-release.sh
|
||||||
|
DOSH_PUBLISH_ALLOW_DIRTY=1 allow uncommitted changes
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ]; then
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
repo_root="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
||||||
|
cd "$repo_root"
|
||||||
|
|
||||||
|
version="$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | sed -n '1p')"
|
||||||
|
tag="${1:-v$version}"
|
||||||
|
base="${GITEA_URL:-https://git.palav.dev}"
|
||||||
|
repo="${GITEA_REPO:-Palav/dosh}"
|
||||||
|
token="${GITEA_TOKEN:-}"
|
||||||
|
build="${DOSH_PUBLISH_BUILD:-1}"
|
||||||
|
push_tag="${DOSH_PUBLISH_PUSH:-1}"
|
||||||
|
prune="${DOSH_PUBLISH_PRUNE:-1}"
|
||||||
|
|
||||||
|
if [ -z "$token" ] && [ -f "$HOME/.config/dosh/gitea-token" ]; then
|
||||||
|
token="$(tr -d '\r\n' <"$HOME/.config/dosh/gitea-token")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
need() {
|
||||||
|
if ! command -v "$1" >/dev/null 2>&1; then
|
||||||
|
echo "missing required command: $1" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
need git
|
||||||
|
need curl
|
||||||
|
|
||||||
|
if [ "${DOSH_PUBLISH_ALLOW_DIRTY:-0}" != "1" ] && [ -n "$(git status --porcelain)" ]; then
|
||||||
|
echo "refusing to publish with uncommitted changes" >&2
|
||||||
|
echo "commit first, or set DOSH_PUBLISH_ALLOW_DIRTY=1" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
head="$(git rev-parse HEAD)"
|
||||||
|
if git rev-parse -q --verify "refs/tags/$tag" >/dev/null; then
|
||||||
|
tagged="$(git rev-list -n 1 "$tag")"
|
||||||
|
if [ "$tagged" != "$head" ]; then
|
||||||
|
echo "tag $tag points at $tagged, not HEAD $head" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
git tag "$tag" "$head"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$push_tag" = "1" ]; then
|
||||||
|
git push origin "$tag"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$build" = "1" ]; then
|
||||||
|
sh scripts/package-release.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
scripts/upload-gitea-release.sh "$tag"
|
||||||
|
|
||||||
|
api="$base/api/v1/repos/$repo"
|
||||||
|
auth_header="Authorization: token $token"
|
||||||
|
release_json="$(curl -fsS -H "$auth_header" "$api/releases/tags/$tag")"
|
||||||
|
release_id=""
|
||||||
|
if command -v jq >/dev/null 2>&1; then
|
||||||
|
release_id="$(printf '%s\n' "$release_json" | jq -r '.id // empty')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$prune" = "1" ] && [ -n "$release_id" ] && command -v jq >/dev/null 2>&1; then
|
||||||
|
printf '%s\n' "$release_json" \
|
||||||
|
| jq -r '.assets[]? | select(.name | test("^dosh-[0-9]")) | [.id, .name] | @tsv' \
|
||||||
|
| while IFS="$(printf '\t')" read -r asset_id name; do
|
||||||
|
[ -n "$asset_id" ] || continue
|
||||||
|
echo "deleting duplicate $name"
|
||||||
|
curl -fsS -H "$auth_header" -X DELETE "$api/releases/$release_id/assets/$asset_id" >/dev/null
|
||||||
|
done
|
||||||
|
release_json="$(curl -fsS -H "$auth_header" "$api/releases/tags/$tag")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
web_repo="${base%/}/${repo}"
|
||||||
|
failed=0
|
||||||
|
for artifact in target/dosh-release/dosh-linux-*.tar.gz target/dosh-release/dosh-macos-*.tar.gz target/dosh-release/dosh-windows-*.zip; do
|
||||||
|
[ -f "$artifact" ] || continue
|
||||||
|
name="$(basename "$artifact")"
|
||||||
|
case "$name" in
|
||||||
|
dosh-[0-9]*)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
url="$web_repo/releases/download/$tag/$name"
|
||||||
|
if curl -fsSI "$url" >/dev/null; then
|
||||||
|
echo "verified $url"
|
||||||
|
else
|
||||||
|
echo "missing release asset: $url" >&2
|
||||||
|
failed=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$failed" != "0" ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v jq >/dev/null 2>&1; then
|
||||||
|
printf '%s\n' "$release_json" | jq -r '"assets=\(.assets|length)", (.assets[] | "\(.name) \(.size)")'
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user