From f486b95d02eeff55fd43da4ce0f0d6bfb7d69cd5 Mon Sep 17 00:00:00 2001 From: "Marcel S. Henselin" Date: Thu, 16 Apr 2026 09:52:54 +0200 Subject: [PATCH] chore: new template --- .github/workflows/example.yml | 5 +- main.go | 239 ++++++++++++++++++++++++++++------ 2 files changed, 205 insertions(+), 39 deletions(-) diff --git a/.github/workflows/example.yml b/.github/workflows/example.yml index 5d38120..3b47a25 100644 --- a/.github/workflows/example.yml +++ b/.github/workflows/example.yml @@ -18,9 +18,12 @@ jobs: if: ${{ always() }} uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v0.1.0 with: + author: ${{ forgejo.actor }} + giturl: ${{ forgejo.server_url }} project: ${{ forgejo.repository }} commit: ${{ steps.slug.outputs.sha8 }} branch: ${{ forgejo.ref }} status: ${{ job.status }} - actionid: ${{ forgejo.repository }}/actions/runs/${{ forgejo.run_id }} + actionid: ${{ forgejo.run_id }} webhook: "${{ secrets.WEBHOOK_URL }}" + event_body: "" diff --git a/main.go b/main.go index 0989c3a..e107dce 100644 --- a/main.go +++ b/main.go @@ -4,77 +4,104 @@ import ( "bytes" "fmt" "net/http" + "text/template" "github.com/sethvargo/go-githubactions" ) +const ( + defaultColor = "483d8b/6495ed" + successColor = "006400/228b22" + failedColor = "8b0000/dc143c" +) + +type templateData struct { + Title string + SubTitle string + Author string + IconUrl string + Project string + Commit string + Branch string + Status string + ActionID string + GitURL string + Color string + Add string + EventBody string +} + func main() { + data := templateData{} + data.Add = "" + + author := githubactions.GetInput("author") + if author == "" { + githubactions.Infof("Missing input 'author'") + author = "STACKIT git action" + } + data.Author = author + + title := githubactions.GetInput("title") + if title == "" { + githubactions.Infof("Missing input 'title'") + title = "STACKIT git action" + } + data.Title = title + project := githubactions.GetInput("project") if project == "" { githubactions.Fatalf("Missing input 'project'") } + data.Project = project + commit := githubactions.GetInput("commit") if commit == "" { githubactions.Fatalf("Missing input 'commit'") } + data.Commit = commit + branch := githubactions.GetInput("branch") if branch == "" { githubactions.Fatalf("Missing input 'branch'") } + data.Branch = branch + status := githubactions.GetInput("status") if status == "" { githubactions.Fatalf("Missing input 'status'") } + data.Status = status + actionid := githubactions.GetInput("actionid") if actionid == "" { githubactions.Fatalf("Missing input 'actionid'") } + data.ActionID = actionid + webhook := githubactions.GetInput("webhook") if webhook == "" { githubactions.Fatalf("Missing input 'webshook'") } - joburl := githubactions.GetInput("joburl") + + giturl := githubactions.GetInput("giturl") if webhook == "" { - githubactions.Fatalf("Missing input 'joburl'") + githubactions.Fatalf("Missing input 'giturl'") } + data.GitURL = giturl + + body := githubactions.GetInput("event_body") + data.EventBody = body fmt.Println("URL:> ", webhook) - data := `{ - "cards": [ - { - "header": { - "title": "GitHub Action", - "subtitle": "Build Job", - "imageUrl": "https://github.githubassets.com/images/modules/logos_page/Octocat.png", - "imageStyle": "IMAGE" - }, - "sections": [ - { - "widgets": [ - { - "textParagraph": { - "text": "Project: %s
Commit-id: %s
Branch: %s
Build Status: %s" - }, - "buttons": [ - { - "textButton": { - "text": "Job Details", - "onClick": { - "openLink": { - "url": "https://github.com/%s" - } - } - } - } - ] - } - ] - } - ] - } - ] -}` - var jsonStr = []byte(fmt.Sprintf(data, project, commit, branch, status, actionid)) + + // var jsonStr = []byte(fmt.Sprintf(data, project, commit, branch, status, actionid)) + + jsonStr, err := card(data) + if err != nil { + githubactions.Fatalf(err.Error()) + } + req, err := http.NewRequest("POST", webhook, bytes.NewBuffer(jsonStr)) if err != nil { panic(err) @@ -88,3 +115,139 @@ func main() { defer resp.Body.Close() fmt.Println("response Status:", resp.Status) } + +func card(d templateData) ([]byte, error) { + switch d.Status { + case "success": + d.Color = successColor + case "failure": + d.Color = failedColor + default: + d.Color = defaultColor + } + + if d.IconUrl == "" { + d.IconUrl = "https://github.githubassets.com/images/modules/logos_page/Octocat.png" + } + + if d.EventBody == "" { + d.EventBody = "Project: {{ .Project }}
Commit-id: {{ .Commit }}
Branch: {{ .Branch }}
Build Status: {{ .Status }}" + } + + // data := `{ + // "cards": [ + // { + // "header": { + // "title": "{{ .Title }}", + // "subtitle": "{{ .SubTitle }}", + // "imageUrl": "{{ .IconUrl }}", + // "imageStyle": "IMAGE" + // }, + // "sections": [ + // { + // "widgets": [ + // { + // "textParagraph": { + // "text": "Project: {{ .Project }}
Commit-id: {{ .Commit }}
Branch: {{ .Branch }}
Build Status: {{ .Status }}" + // }, + // "buttons": [ + // { + // "textButton": { + // "text": "Job Details", + // "onClick": { + // "openLink": { + // "url": "{{ .GitURL }}/{{ .Project }}/actions/runs/{{ .ActionID }}" + // } + // } + // } + // } + // ] + // } + // ] + // } + // ] + // } + // ] + //}` + + if d.Status == "success" { + d.Add = "{\"decoratedText\": {\"startIcon\": {\"materialIcon\": {\"name\": \"check_circle\"}},\"text\": \"SUCCESS\"}}," + } + + if d.Status == "failure" { + d.Add = "{\"decoratedText\": {\"startIcon\": {\"materialIcon\": {\"name\": \"stop_circle\"}},\"text\": \"FAILURE\"}}," + } + + tpl := ` +{ + "cardsV2": [ + { + "cardId": "notify-${{ github.run_id }}", + "card": { + "header": { + "title": "{{ .Title }}", + "subtitle": "{{ .SubTitle }}", + "imageUrl": "{{ .IconUrl }}", + "imageStyle": "IMAGE" + "imageType": "SQUARE" + }, + "sections": [ + { + "header": "{{ .Title }}", + "collapsible": false, + "widgets": [ + {{ .Add }} + { + "decoratedText": { + "startIcon": { + "knownIcon": "PERSON" + }, + "text": "{{ .Author }}" + } + }, + { + "textParagraph": { + "text": "{{ .EventBody }}", + "maxLines": 2 + } + } + ] + }, + { + "widgets": [ + { + "buttonList": { + "buttons": [ + { + "text": "View Source Event", + "type": "FILLED", + "onClick": { + "openLink": { + "url": "{{ .GitURL }}/{{ .Project }}/actions/runs/{{ .ActionID }}" + } + } + } + ] + } + } + ] + } + ] + } + } + ] +} +` + tmpl, err := template.New("").Parse(tpl) + if err != nil { + return nil, err + } + + buf := new(bytes.Buffer) + err = tmpl.Execute(buf, d) + if err != nil { + return nil, err + } + + return buf.Bytes(), nil +}