2 Commits

Author SHA1 Message Date
unkinben 498fe0ab25 Add merged branch release notes to Gitea release body
Generates release notes from merged branches since last tag and
includes them in the release body via Gitea API.

💘 Generated with Crush

Assisted-by: Claude Sonnet 4.6 via Crush <crush@charm.land>
2026-03-25 19:42:13 +11:00
unkinben b29418d1b5 Replace gitea-release plugin with curl-based release upload
ci/woodpecker/pr/lint Pipeline failed
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/unit-tests Pipeline was successful
Uses basic auth (droneci user) and Gitea API directly to create
the release and upload the binary asset.

💘 Generated with Crush

Assisted-by: Claude Sonnet 4.6 via Crush <crush@charm.land>
2026-03-25 19:36:44 +11:00
2 changed files with 8 additions and 15 deletions
+4 -11
View File
@@ -28,19 +28,12 @@ steps:
NOTES=$(git log --merges --pretty=format:"- %s") NOTES=$(git log --merges --pretty=format:"- %s")
fi fi
BODY=$(printf '%s' "$NOTES" | sed 's/"/\\"/g; s/$/\\n/' | tr -d '\n') BODY=$(printf '%s' "$NOTES" | sed 's/"/\\"/g; s/$/\\n/' | tr -d '\n')
GET_RESPONSE=$(curl -s "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/tags/${CI_COMMIT_TAG}") RELEASE_ID=$(curl -sf -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases" \
echo "GET response: ${GET_RESPONSE}"
RELEASE_ID=$(echo "${GET_RESPONSE}" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
if [ -z "$RELEASE_ID" ]; then
echo "ERROR: failed to find release for tag ${CI_COMMIT_TAG}" >&2
exit 1
fi
echo "Release ID: ${RELEASE_ID}"
curl -s -X PATCH "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/${RELEASE_ID}" \
-u "droneci:$DRONECI_PASSWORD" \ -u "droneci:$DRONECI_PASSWORD" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d "{\"body\":\"${BODY}\"}" -d "{\"tag_name\":\"${CI_COMMIT_TAG}\",\"name\":\"${CI_COMMIT_TAG}\",\"body\":\"${BODY}\"}" \
curl -s -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/${RELEASE_ID}/assets" \ | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
curl -sf -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases/${RELEASE_ID}/assets" \
-u "droneci:$DRONECI_PASSWORD" \ -u "droneci:$DRONECI_PASSWORD" \
-F "attachment=@node-lookup" -F "attachment=@node-lookup"
backend_options: backend_options:
+4 -4
View File
@@ -354,11 +354,11 @@ func TestAllFactsForNode_QueryContainsCertname(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
receivedQuery = r.URL.Query().Get("query") receivedQuery = r.URL.Query().Get("query")
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode([]fact{}) json.NewEncoder(w).Encode([]fact{})
})) }))
defer srv.Close() defer srv.Close()
_, _ = allFactsForNode(srv.URL+"/pdb/query/v4/facts", "mynode.example.com") allFactsForNode(srv.URL+"/pdb/query/v4/facts", "mynode.example.com")
if !strings.Contains(receivedQuery, "mynode.example.com") { if !strings.Contains(receivedQuery, "mynode.example.com") {
t.Fatalf("expected certname in query, got: %s", receivedQuery) t.Fatalf("expected certname in query, got: %s", receivedQuery)
} }
@@ -405,10 +405,10 @@ func TestRun_AllFacts_PrintsSortedByName(t *testing.T) {
cfg := config{PuppetDBURL: srv.URL + "/pdb/query/v4/facts", RoleFact: "enc_role"} cfg := config{PuppetDBURL: srv.URL + "/pdb/query/v4/facts", RoleFact: "enc_role"}
err := run(cfg, "node1", "", "", "", false, false, false, false, false, false, true) err := run(cfg, "node1", "", "", "", false, false, false, false, false, false, true)
_ = w.Close() w.Close()
os.Stdout = old os.Stdout = old
var buf strings.Builder var buf strings.Builder
_, _ = io.Copy(&buf, r) io.Copy(&buf, r)
out := buf.String() out := buf.String()
if err != nil { if err != nil {