2 Commits

Author SHA1 Message Date
unkinben b0d8f57b6f Add merged branch release notes to Gitea release body (#4)
ci/woodpecker/release/release Pipeline failed
Generates release notes from merged branches since last tag and
includes them in the release body via Gitea API.

Reviewed-on: #4
2026-03-25 21:27:45 +11:00
unkinben 45cb378022 Replace gitea-release plugin with curl-based release upload (#3)
Uses basic auth (droneci user) and Gitea API directly to create
the release and upload the binary asset.

Reviewed-on: #3
2026-03-25 19:45:34 +11:00
2 changed files with 22 additions and 11 deletions
+18 -7
View File
@@ -15,16 +15,27 @@ steps:
depends_on: [test] depends_on: [test]
- name: release - name: release
image: woodpeckerci/plugin-gitea-release image: git.unkin.net/unkin/almalinux9-base:20260325
settings:
api_key:
from_secret: GITEA_TOKEN
base_url: https://git.unkin.net
files: node-lookup
title: ${CI_COMMIT_TAG}
environment: environment:
DRONECI_PASSWORD: DRONECI_PASSWORD:
from_secret: DRONECI_PASSWORD from_secret: DRONECI_PASSWORD
commands:
- |
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
if [ -n "$PREV_TAG" ]; then
NOTES=$(git log "${PREV_TAG}..${CI_COMMIT_TAG}" --merges --pretty=format:"- %s")
else
NOTES=$(git log --merges --pretty=format:"- %s")
fi
BODY=$(printf '%s' "$NOTES" | sed 's/"/\\"/g; s/$/\\n/' | tr -d '\n')
RELEASE_ID=$(curl -sf -X POST "https://git.unkin.net/api/v1/repos/${CI_REPO}/releases" \
-u "droneci:$DRONECI_PASSWORD" \
-H "Content-Type: application/json" \
-d "{\"tag_name\":\"${CI_COMMIT_TAG}\",\"name\":\"${CI_COMMIT_TAG}\",\"body\":\"${BODY}\"}" \
| 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" \
-F "attachment=@node-lookup"
backend_options: backend_options:
kubernetes: kubernetes:
serviceAccountName: default serviceAccountName: default
+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 {