Skip to content

Commit 1cc5be7

Browse files
author
Ivan
committed
Add rngit release management scripts and update Makefile for dual-push support
1 parent d33379c commit 1cc5be7

4 files changed

Lines changed: 160 additions & 1 deletion

File tree

Makefile

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,16 @@ DIST := dist
1010
LIB_NAME := libmicron
1111
UNAME_S := $(shell uname -s 2>/dev/null || echo unknown)
1212

13+
# Reticulum / rngit dual-push origin (GitHub fetch, GitHub+RNS push).
14+
RNS_DEST ?= 06a54b505bb67b25ef3f8097e8001edc
15+
RNS_GROUP ?= public
16+
RNS_REPO ?= micron-parser-go
17+
RNS_REMOTE ?= rns://$(RNS_DEST)/$(RNS_GROUP)/$(RNS_REPO)
18+
GH_REPO ?= Quad4-Software/Micron-Parser-Go
19+
CHANGELOG ?= CHANGELOG.md
20+
# TAG required for rngit-release / rngit-notes / rngit-push-tag (e.g. TAG=v1.1.0).
21+
TAG ?=
22+
1323
ifeq ($(OS),Windows_NT)
1424
LIB_FILE := $(LIB_NAME).dll
1525
else ifneq (,$(findstring MINGW,$(UNAME_S)))
@@ -24,7 +34,7 @@ else
2434
LIB_FILE := $(LIB_NAME).so
2535
endif
2636

27-
.PHONY: all test test-race test-smoke test-interop test-interop-python test-wasm fuzz wasm serve-web lib lib-install bindings-test clean cover bench bench-go bench-js bench-wasm sync-vendor-js check-vendor-js verify fmt fix lint lint-gosec vet
37+
.PHONY: all test test-race test-smoke test-interop test-interop-python test-wasm fuzz wasm serve-web lib lib-install bindings-test clean cover bench bench-go bench-js bench-wasm sync-vendor-js check-vendor-js verify fmt fix lint lint-gosec vet rngit-notes rngit-push rngit-push-tag rngit-release rngit-release-local rngit-list
2838

2939
all: check-vendor-js test wasm
3040

@@ -190,3 +200,35 @@ bindings-test: lib
190200
clean:
191201
rm -f $(WASM_OUT) $(WASM_JS) coverage.out coverage.html
192202
rm -rf $(DIST)
203+
204+
# Print CHANGELOG section for TAG (strips leading v).
205+
rngit-notes:
206+
@test -n "$(TAG)" || (echo "set TAG=vX.Y.Z" >&2; exit 2)
207+
@./scripts/changelog-entry.sh "$(TAG)" "$(CHANGELOG)"
208+
209+
# Push current branch to dual-push origin (GitHub + RNS).
210+
rngit-push:
211+
git push origin HEAD
212+
213+
# Push TAG to dual-push origin. Example: make rngit-push-tag TAG=v1.1.0
214+
rngit-push-tag:
215+
@test -n "$(TAG)" || (echo "set TAG=vX.Y.Z" >&2; exit 2)
216+
git push origin "refs/tags/$(TAG)"
217+
218+
# Publish rngit release for TAG using GitHub release assets + CHANGELOG notes.
219+
# Example: make rngit-release TAG=v1.1.0
220+
rngit-release:
221+
@test -n "$(TAG)" || (echo "set TAG=vX.Y.Z" >&2; exit 2)
222+
RNS_REMOTE="$(RNS_REMOTE)" GH_REPO="$(GH_REPO)" CHANGELOG="$(CHANGELOG)" \
223+
./scripts/rngit-release.sh "$(TAG)"
224+
225+
# Same as rngit-release but upload from a local directory (default: dist).
226+
# Example: make rngit-release-local TAG=v1.1.0 ARTIFACTS=./dist
227+
ARTIFACTS ?= $(DIST)
228+
rngit-release-local:
229+
@test -n "$(TAG)" || (echo "set TAG=vX.Y.Z" >&2; exit 2)
230+
RNS_REMOTE="$(RNS_REMOTE)" CHANGELOG="$(CHANGELOG)" \
231+
./scripts/rngit-release.sh "$(TAG)" "$(ARTIFACTS)"
232+
233+
rngit-list:
234+
rngit release "$(RNS_REMOTE)" list

scripts/changelog-entry.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/usr/bin/env bash
2+
# Extract one CHANGELOG.md section for a version tag.
3+
# Accepts v1.2.3 or 1.2.3. Prints the matching ## [ver] section.
4+
5+
set -euo pipefail
6+
7+
if [[ $# -lt 1 ]]; then
8+
echo "usage: $0 <version|tag> [changelog]" >&2
9+
exit 2
10+
fi
11+
12+
raw="$1"
13+
changelog="${2:-CHANGELOG.md}"
14+
ver="${raw#v}"
15+
16+
if [[ ! -f "$changelog" ]]; then
17+
echo "changelog not found: $changelog" >&2
18+
exit 1
19+
fi
20+
21+
out="$(awk -v ver="$ver" '
22+
BEGIN { pat = "^## \\[" ver "\\]" }
23+
$0 ~ pat { printing = 1; found = 1; print; next }
24+
printing && $0 ~ /^## \[/ { exit }
25+
printing { print }
26+
END { if (!found) exit 1 }
27+
' "$changelog")" || {
28+
echo "no changelog entry for [$ver] in $changelog" >&2
29+
exit 1
30+
}
31+
32+
printf '%s\n' "$out"

scripts/rngit-release-notes.sh

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env bash
2+
# EDITOR wrapper for rngit release create.
3+
# Overwrites the notes tempfile with the CHANGELOG section for RNGIT_RELEASE_TAG.
4+
5+
set -euo pipefail
6+
7+
notes_file="${1:-}"
8+
if [[ -z "$notes_file" ]]; then
9+
echo "usage: $0 <notes-file>" >&2
10+
exit 2
11+
fi
12+
13+
tag="${RNGIT_RELEASE_TAG:-}"
14+
changelog="${RNGIT_CHANGELOG:-CHANGELOG.md}"
15+
root="${RNGIT_REPO_ROOT:-.}"
16+
17+
if [[ -z "$tag" ]]; then
18+
echo "RNGIT_RELEASE_TAG is required" >&2
19+
exit 1
20+
fi
21+
22+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
23+
"$script_dir/changelog-entry.sh" "$tag" "$root/$changelog" >"$notes_file"

scripts/rngit-release.sh

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/env bash
2+
# Stage release artifacts then create an rngit release with CHANGELOG notes.
3+
#
4+
# Usage:
5+
# scripts/rngit-release.sh v1.1.0
6+
# scripts/rngit-release.sh v1.1.0 ./dist
7+
#
8+
# If ARTIFACTS is omitted, downloads GitHub release assets for the tag.
9+
# Env:
10+
# RNS_REMOTE default rns://06a54b505bb67b25ef3f8097e8001edc/public/micron-parser-go
11+
# GH_REPO default Quad4-Software/Micron-Parser-Go
12+
# CHANGELOG default CHANGELOG.md
13+
14+
set -euo pipefail
15+
16+
tag="${1:-}"
17+
artifacts_in="${2:-}"
18+
19+
if [[ -z "$tag" ]]; then
20+
echo "usage: $0 <tag> [artifacts-dir]" >&2
21+
exit 2
22+
fi
23+
24+
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
25+
cd "$root"
26+
27+
RNS_REMOTE="${RNS_REMOTE:-rns://06a54b505bb67b25ef3f8097e8001edc/public/micron-parser-go}"
28+
GH_REPO="${GH_REPO:-Quad4-Software/Micron-Parser-Go}"
29+
CHANGELOG="${CHANGELOG:-CHANGELOG.md}"
30+
ver="${tag#v}"
31+
32+
if ! git rev-parse -q --verify "refs/tags/$tag" >/dev/null; then
33+
echo "local tag not found: $tag" >&2
34+
exit 1
35+
fi
36+
37+
scripts/changelog-entry.sh "$tag" "$CHANGELOG" >/dev/null
38+
39+
stage=""
40+
cleanup=0
41+
if [[ -n "$artifacts_in" ]]; then
42+
stage="$(cd "$artifacts_in" && pwd)"
43+
if [[ -z "$(find "$stage" -maxdepth 1 -type f ! -name '*.rsg' ! -name '*.rsm' | head -1)" ]]; then
44+
echo "no artifact files in $stage" >&2
45+
exit 1
46+
fi
47+
else
48+
stage="$(mktemp -d "${TMPDIR:-/tmp}/micron-rngit-${ver}.XXXXXX")"
49+
cleanup=1
50+
trap '[[ $cleanup -eq 1 ]] && rm -rf "$stage"' EXIT
51+
echo "Downloading GitHub release assets for $tag..."
52+
gh release download "$tag" -R "$GH_REPO" -D "$stage"
53+
fi
54+
55+
export RNGIT_RELEASE_TAG="$tag"
56+
export RNGIT_CHANGELOG="$CHANGELOG"
57+
export RNGIT_REPO_ROOT="$root"
58+
export EDITOR="$root/scripts/rngit-release-notes.sh"
59+
60+
echo "Creating rngit release $tag -> $RNS_REMOTE"
61+
echo "Artifacts: $stage"
62+
rngit release "$RNS_REMOTE" create "${tag}:${stage}"

0 commit comments

Comments
 (0)