diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 0f4cd25..0000000 --- a/.dockerignore +++ /dev/null @@ -1,5 +0,0 @@ -.github -.gitignore -action.yml -docker-slimbuild -main_test.go diff --git a/.github/workflows/example.yml b/.github/workflows/example.yml index 0e5d3be..c50bc49 100644 --- a/.github/workflows/example.yml +++ b/.github/workflows/example.yml @@ -1,41 +1,26 @@ name: Sample Testing -on: [workflow_dispatch] - -env: - VER: 0.3.1 +on: [push] jobs: my_job: runs-on: stackit-docker steps: - - name: First Chat Message - if: ${{ always() }} - uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v${{ env.VER }} - with: - title: "[START] sample test (${{ forgejo.run_number }})" - author: ${{ forgejo.actor }} - giturl: ${{ forgejo.server_url }} - iconslug: instacart - # status: ${{ job.status }} # optional - actionid: ${{ forgejo.run_number }} - webhook: "${{ secrets.WEBHOOK_URL }}" - # event_body: "" # optional + - name: Checkout + uses: actions/checkout@v6 -# - name: Force failure -# run: | -# echo "This is a force failure" -# exit 1 - - - name: Second Chat Message as ThreadResponse + - name: Get commit hash if: ${{ always() }} - uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v0.1.2 + run: echo "::set-output name=sha8::$(echo ${FORGEJO_SHA} | cut -c1-8)" + id: slug + + - name: Chat Setup + if: ${{ always() }} + uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v0 with: - title: "[END] sample test (${{ forgejo.run_number }})" - iconslug: bun - author: ${{ forgejo.actor }} - giturl: ${{ forgejo.server_url }} + project: ${{ forgejo.repository }} + commit: ${{ steps.slug.outputs.sha8 }} + branch: ${{ forgejo.ref }} status: ${{ job.status }} - actionid: ${{ forgejo.run_number }} - webhook: "${{ secrets.WEBHOOK_URL }}" - event_body: "this time I provided a body" + actionid: ${{ forgejo.repository }}/actions/runs/${{ forgejo.run_id }} + webhook: "https://chat.googleapis.com/v1/spaces/AAAAYTX-Vqs/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=Iwtvo1dwg36dZgUyrUCREQGGMrO71PkIoQGafOf17Yg%3D&threadKey=git-commit" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 581badf..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,143 +0,0 @@ -name: CI -on: - push: - branches: - - '**' - pull_request: - branches: - - '**' - -env: - VER: 0.3.1 - -# If a 403 error occurs, make sure to set content permission to write -# see: https://github.com/go-semantic-release/action/issues/27 -permissions: - contents: write - -jobs: - lint: - runs-on: stackit-docker - steps: - - name: CI checkout - uses: actions/checkout@v6 - - - name: Setup GO - uses: actions/setup-go@v6 - with: - # go-version: 1.26 - go-version-file: 'go.mod' - cache-dependency-path: 'go.sum' - - - name: GO Linting - uses: golangci/golangci-lint-action@v9 - with: - version: v2.11 - -# build: -# runs-on: stackit-docker -## strategy: -## fail-fast: true -## matrix: -## node: [10, 12] -# steps: -# - uses: actions/checkout@v6 -# -# - uses: actions/setup-node@v1 -# with: -# node-version: ${{ matrix.node }} -# - run: npm ci -# - run: npm test - release: - runs-on: stackit-docker -# needs: build - outputs: - tag: ${{ steps.create_release.outputs.tag }} - steps: - - name: "🖅 [START] release workflow" - if: ${{ always() }} - uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v${{ env.VER }} - with: - title: "[START] release workflow (${{ forgejo.run_number }})" - subtitle: "${{ forgejo.repostitory }}" - author: ${{ forgejo.actor }} - giturl: ${{ forgejo.server_url }} - iconslug: instacart - actionid: ${{ forgejo.run_number }} - webhook: "${{ secrets.WEBHOOK_URL }}" - - - name: Checkout code - uses: actions/checkout@v6 - -# - name: Semantic Release -# uses: go-semantic-release/action@v1 -# id: semrel -# with: -# github-token: ${{ env.FORGEJO_TOKEN }} -# allow-initial-development-versions: true -# # update-file: package.json -# changelog-file: CHANGELOG.md -# changelog-generator-opt: "emojis=true" - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Create Release - env: - FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} - id: create_release - run: | - npx \ - -p semantic-release \ - -p semantic-release-replace-plugin \ - -p @semantic-release/commit-analyzer \ - -p @semantic-release/release-notes-generator \ - -p @semantic-release/changelog \ - -p @semantic-release/git \ - semantic-release - echo "tag=$(git describe --tags --abbrev=0)" >> $FORGEJO_OUTPUT - - - name: Login to Docker Hub - if: steps.create_release.outputs.tag != '' - uses: docker/login-action@v4 - with: - registry: ${{ forgejo.server_url }} - username: ${{ vars.GIT_USERNAME }} - password: ${{ secrets.GIT_PAT }} - -# - name: Set up QEMU -# if: steps.semrel.outputs.version != '' -# uses: docker/setup-qemu-action@v4 - - - name: Set up Docker Buildx - if: steps.create_release.outputs.tag != '' - uses: docker/setup-buildx-action@v4 - - - name: Build only - if: steps.create_release.outputs.tag == '' - uses: docker/build-push-action@v7 - with: - push: false - tags: actions/notify-slim:dev - - - name: Build and push - if: steps.create_release.outputs.tag != '' - uses: docker/build-push-action@v7 - with: - push: true - tags: stackit-solutions.git.onstackit.cloud/actions/notify-slim:${{ steps.create_release.outputs.tag }} - - - name: "🖅 [END] release workflow" - if: ${{ always() }} - uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v${{ env.VER }} - with: - title: "[END] release workflow (${{ forgejo.run_number }})" - subtitle: "${{ forgejo.repostitory }}" - author: ${{ forgejo.actor }} - giturl: ${{ forgejo.server_url }} - iconslug: instacart - actionid: ${{ forgejo.run_number }} - webhook: "${{ secrets.WEBHOOK_URL }}" - status: 'completed' diff --git a/.golangci.yaml b/.golangci.yaml deleted file mode 100644 index 35b6ac1..0000000 --- a/.golangci.yaml +++ /dev/null @@ -1,88 +0,0 @@ -version: "2" -run: - concurrency: 4 -output: - formats: - text: - print-linter-name: true - print-issued-lines: true - colors: true - path: stdout -linters: - enable: - - bodyclose - - depguard - - errorlint - - forcetypeassert - - gochecknoinits - - gocritic - - gosec - - misspell - - nakedret - - revive - - sqlclosecheck - - wastedassign - disable: - - noctx - - unparam - settings: - depguard: - rules: - main: - list-mode: original - allow: [] - deny: - - pkg: github.com/stretchr/testify - desc: Do not use a testing framework - gocritic: - disabled-checks: - - wrapperFunc - - typeDefFirst - - ifElseChain - - dupImport - - hugeParam - enabled-tags: - - performance - - style - - experimental - gosec: - excludes: - - G104 - - G102 - - G304 - - G307 - misspell: - locale: US - nakedret: - max-func-lines: 0 - revive: - severity: error - rules: - - name: errorf - - name: context-as-argument - - name: error-return - - name: increment-decrement - - name: indent-error-flow - - name: superfluous-else - - name: unused-parameter - - name: unreachable-code - - name: atomic - - name: empty-lines - - name: early-return - exclusions: - paths: [] - generated: lax - warn-unused: true - # Excluding configuration per-path, per-linter, per-text and per-source. - rules: - # Exclude some linters from running on tests files. - - path: _test\.go - linters: - - gochecknoinits -formatters: - enable: - - gofmt - - goimports -# settings: -# goimports: -# local-prefixes: diff --git a/.releaserc.json b/.releaserc.json deleted file mode 100644 index 8310b91..0000000 --- a/.releaserc.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "branches": ["main"], - "tagFormat": "v${version}", - "plugins": [ - "@semantic-release/commit-analyzer", - [ - "semantic-release-replace-plugin", - { - "replacements": [ - { - "files": ["action.yml"], - "from": " image: 'docker://stackit-solutions.git.onstackit.cloud/actions/notify-slim:v.*'", - "to": " image: 'docker://stackit-solutions.git.onstackit.cloud/actions/notify-slim:v${nextRelease.version}'", - "results": [ - { - "file": "action.yml", - "hasChanged": true, - "numMatches": 1, - "numReplacements": 1 - } - ], - "countMatches": true - }, - { - "files": ["README.md"], - "from": " uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v.*", - "to": " uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v${nextRelease.version}", - "results": [ - { - "file": "README.md", - "hasChanged": true, - "numMatches": 1, - "numReplacements": 1 - } - ], - "countMatches": true - }, - { - "files": [".github/workflows/example.yml"], - "from": " VER: .*", - "to": " VER: ${nextRelease.version}", - "results": [ - { - "file": ".github/workflows/example.yml", - "hasChanged": true, - "numMatches": 1, - "numReplacements": 1 - } - ], - "countMatches": true - }, - { - "files": [".github/workflows/release.yml"], - "from": " VER: .*", - "to": " VER: ${nextRelease.version}", - "results": [ - { - "file": ".github/workflows/release.yml", - "hasChanged": true, - "numMatches": 1, - "numReplacements": 1 - } - ], - "countMatches": true - } - ] - } - ], - "@semantic-release/release-notes-generator", - "@semantic-release/changelog", - [ - "@semantic-release/git", - { - "assets": ["CHANGELOG.md", "README.md", "action.yml", ".github/workflows/example.yml", ".github/workflows/release.yml"] - } - ] - ] -} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 24b7be5..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,23 +0,0 @@ -## [0.3.1](https://stackit-solutions.git.onstackit.cloud/actions/notify/compare/v0.3.0...v0.3.1) (2026-04-17) - - -### Bug Fixes - -* pipeline fixes ([b195a1d](https://stackit-solutions.git.onstackit.cloud/actions/notify/commit/b195a1dcfdd7bf98eaaeb976d08260a2457da317)) - -# [0.3.0](https://stackit-solutions.git.onstackit.cloud/actions/notify/compare/v0.2.0...v0.3.0) (2026-04-17) - - -### Features - -* linting ([68c1f11](https://stackit-solutions.git.onstackit.cloud/actions/notify/commit/68c1f11a5cc02918166ca05e4af79712a5c0964b)) -* linting ([16a5f87](https://stackit-solutions.git.onstackit.cloud/actions/notify/commit/16a5f874b341a6d4776dbe5e46be391f1d6576d8)) - -# [0.2.0](https://stackit-solutions.git.onstackit.cloud/actions/notify/compare/v0.1.2...v0.2.0) (2026-04-17) - - -### Features - -* linting ([9d4e8c9](https://stackit-solutions.git.onstackit.cloud/actions/notify/commit/9d4e8c9a9dc3fcc133299e978fed191ad6052aac)) -* linting ([5b93809](https://stackit-solutions.git.onstackit.cloud/actions/notify/commit/5b938091d705e01f6467cdd6be9144e491c66502)) -* pipeline container build ([0414cf6](https://stackit-solutions.git.onstackit.cloud/actions/notify/commit/0414cf6dfb9956c85bb48f5217806841f5819716)) diff --git a/Dockerfile b/Dockerfile index f3035dc..89e372a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,29 +1,8 @@ -FROM golang:1.26 AS builder +FROM golang:1.13 -RUN apt-get update && apt-get -y install upx - -WORKDIR /app - -ENV CGO_ENABLED=0 +WORKDIR /src COPY . . -RUN go mod tidy && go build \ - -a \ - -trimpath \ - -ldflags "-s -w -extldflags '-static'" \ - -installsuffix cgo \ - -tags netgo \ - -o /bin/google-chat-action \ - . - -RUN strip /bin/google-chat-action - -RUN upx -q -9 /bin/google-chat-action - -FROM scratch - -COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ - -COPY --from=builder /bin/google-chat-action /bin/google-chat-action +RUN go get -u github.com/sethvargo/go-githubactions/... && go build -o /bin/google-chat-action ENTRYPOINT ["/bin/google-chat-action"] diff --git a/Dockerfile.big b/Dockerfile.big deleted file mode 100644 index 20cd801..0000000 --- a/Dockerfile.big +++ /dev/null @@ -1,10 +0,0 @@ -FROM golang:1.26 - -WORKDIR /src -COPY . . - -RUN go get -u github.com/sethvargo/go-githubactions/... \ - && go mod tidy \ - && go build -o /bin/google-chat-action - -ENTRYPOINT ["/bin/google-chat-action"] diff --git a/README.md b/README.md index c4e8400..d305f27 100644 --- a/README.md +++ b/README.md @@ -13,20 +13,23 @@ jobs: runs-on: ubuntu-latest steps: - # ... all your steps - - name: Sample Chat Message - if: ${{ always() }} # runs als after fails - uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v0.3.1 - with: - title: "[START] sample test (${{ forgejo.run_number }})" - author: ${{ forgejo.actor }} - giturl: ${{ forgejo.server_url }} - iconslug: instacart # optional - # status: ${{ job.status }} # optional - actionid: ${{ forgejo.run_number }} - webhook: "${{ secrets.WEBHOOK_URL }}" - event_body: "This is a sample TEXT
with a new line" # optional + - name: Checkout + uses: actions/checkout@v6 + + - name: Get commit hash + if: ${{ always() }} + run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" + id: slug + + - name: Chat Setup + if: ${{ always() }} + uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v0 + with: + project: ${{ github.repository }} + commit: ${{ steps.slug.outputs.sha8 }} + branch: ${{ github.ref }} + status: ${{ job.status }} + actionid: ${{ github.repository }}/runs/${{ github.run_id }} + webhook: "https://chat.googleapis.com/v1/spaces/AAAAzPcAy4s/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=MmdzluicdrdkyUAV_QwB6BzlLcIhbfrwNzxVrEllaec%3D&threadKey=git-commit" ``` - -TODO - icon_slug diff --git a/action.yml b/action.yml index 7487391..977f0d0 100644 --- a/action.yml +++ b/action.yml @@ -1,18 +1,21 @@ name: 'Google Chat Action' -author: 'D Ther Htun/ Marcel S. Henselin' +author: 'D Ther Htun' description: 'Github actions for google chat Room Bot' branding: icon: 'at-sign' color: 'green' inputs: - autor: - description: 'Git Action Author' + project: + description: 'Github Project Name' required: true - giturl: - description: 'Git Server URL' + commit: + description: 'Github Commit ID' + required: true + branch: + description: 'Github Branch' required: true status: - description: 'Git Action Build Status' + description: 'Github Action Build Status' required: true actionid: description: 'Current Running Action ID' @@ -20,14 +23,10 @@ inputs: webhook: description: 'Google Chat Webhook URL' required: true - event_body: - description: 'Google Chat Event Body' - required: true runs: using: 'docker' - image: 'docker://stackit-solutions.git.onstackit.cloud/actions/notify-slim:v0.1.2' - # image: 'Dockerfile' + image: 'docker://dther/google-chat-action:v0.8' args: - ${{ inputs.project }} - ${{ inputs.commit }} diff --git a/docker-slimbuild b/docker-slimbuild new file mode 100644 index 0000000..bdc6e01 --- /dev/null +++ b/docker-slimbuild @@ -0,0 +1,30 @@ +FROM golang:1.13 AS builder + +RUN apt-get update && apt-get -y install upx + +#RUN mkdir -p $GOPATH/src/github.com/DTherHtun/google-chat-action +#ADD . $GOPATH/src/github.com/DTherHtun/google-chat-action +RUN go get -u github.com/sethvargo/go-githubactions/... +ENV CGO_ENABLED=0 +COPY . . + +RUN go build \ + -a \ + -trimpath \ + -ldflags "-s -w -extldflags '-static'" \ + -installsuffix cgo \ + -tags netgo \ + -o /bin/google-chat-action \ + . + +RUN strip /bin/google-chat-action + +RUN upx -q -9 /bin/google-chat-action + +FROM scratch + +COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ + +COPY --from=builder /bin/google-chat-action /bin/google-chat-action + +ENTRYPOINT ["/bin/google-chat-action"] diff --git a/go.mod b/go.mod index 8e5d566..a935e06 100644 --- a/go.mod +++ b/go.mod @@ -2,9 +2,4 @@ module google-chat-action go 1.26.2 -require ( - github.com/google/go-cmp v0.7.0 - github.com/sethvargo/go-githubactions v1.3.2 -) - -require github.com/google/uuid v1.6.0 +require github.com/sethvargo/go-githubactions v1.3.2 diff --git a/go.sum b/go.sum deleted file mode 100644 index b8212ad..0000000 --- a/go.sum +++ /dev/null @@ -1,6 +0,0 @@ -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/sethvargo/go-githubactions v1.3.2 h1:gkibLr/QjosgNWoCf1V58rTMRZw7xZtSB7dY4atbl1Y= -github.com/sethvargo/go-githubactions v1.3.2/go.mod h1:7/4WeHgYfSz9U5vwuToCK9KPnELVHAhGtRwLREOQV80= diff --git a/google-chat-action.png b/google-chat-action.png index fad33f0..cbab7f1 100644 Binary files a/google-chat-action.png and b/google-chat-action.png differ diff --git a/main.go b/main.go index 7a9eafc..0989c3a 100644 --- a/main.go +++ b/main.go @@ -2,191 +2,89 @@ package main import ( "bytes" - _ "embed" "fmt" "net/http" - "os" - "text/template" - "github.com/google/uuid" "github.com/sethvargo/go-githubactions" ) -const ( - defaultColor = "483d8b/6495ed" - successColor = "006400/228b22" - failedColor = "8b0000/dc143c" -) - -//go:embed message.tpl -var message string - -type templateData struct { - CardID string - IconSlug string - Title string - SubTitle string - Author string - IconUrl string - Status string - ActionID string - GitURL string - Project string - Color string - Add string - EventBody string -} - func main() { - data := templateData{} - data.CardID = uuid.NewString() - data.Add = "" - - getData(&data) - + project := githubactions.GetInput("project") + if project == "" { + githubactions.Fatalf("Missing input 'project'") + } + commit := githubactions.GetInput("commit") + if commit == "" { + githubactions.Fatalf("Missing input 'commit'") + } + branch := githubactions.GetInput("branch") + if branch == "" { + githubactions.Fatalf("Missing input 'branch'") + } + status := githubactions.GetInput("status") + if status == "" { + githubactions.Fatalf("Missing input 'status'") + } + actionid := githubactions.GetInput("actionid") + if actionid == "" { + githubactions.Fatalf("Missing input 'actionid'") + } webhook := githubactions.GetInput("webhook") if webhook == "" { - githubactions.Fatalf("Missing input 'webhook'") - os.Exit(1) + githubactions.Fatalf("Missing input 'webshook'") } - webhook = fmt.Sprintf("%s&threadKey=notify%s&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD", webhook, data.ActionID) - - giturl := githubactions.GetInput("giturl") - if giturl == "" { - githubactions.Fatalf("Missing input 'giturl'") - os.Exit(1) - } - data.GitURL = giturl - - body := githubactions.GetInput("event_body") - data.EventBody = body - - githubactions.Infof("using URL: %s", webhook) - - jsonStr, err := card(data) - if err != nil { - githubactions.Fatalf("err %s", err.Error()) - os.Exit(1) + joburl := githubactions.GetInput("joburl") + if webhook == "" { + githubactions.Fatalf("Missing input 'joburl'") } + 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)) req, err := http.NewRequest("POST", webhook, bytes.NewBuffer(jsonStr)) if err != nil { - githubactions.Fatalf("error %s", err.Error()) - os.Exit(1) + panic(err) } req.Header.Set("Content-Type", "application/json; charset=UTF-8") client := &http.Client{} resp, err := client.Do(req) if err != nil { - githubactions.Fatalf("error %s", err.Error()) - os.Exit(1) + panic(err) } - defer resp.Body.Close() //nolint:gocritic - + defer resp.Body.Close() fmt.Println("response Status:", resp.Status) - if resp.StatusCode != http.StatusOK { - githubactions.Infof("json: %s", jsonStr) - githubactions.Fatalf("response: %+v\n", resp) - os.Exit(1) - } -} - -func getData(data *templateData) { - prj, ok := os.LookupEnv("FORGEJO_REPOSITORY") - if ok { - data.Project = prj - } - - author := githubactions.GetInput("author") - if author == "" { - githubactions.Infof("[INFO] Missing input 'author', using default") - author = "STACKIT git action" - } - data.Author = author - - icon := githubactions.GetInput("iconslug") - if icon == "" { - githubactions.Infof("[INFO] Missing input 'iconslug', using default") - icon = "git" - } - data.IconSlug = icon - - title := githubactions.GetInput("title") - if title == "" { - githubactions.Infof("[INFO] Missing input 'title', using default") - title = "STACKIT git action" - } - data.Title = title - - status := githubactions.GetInput("status") - if status == "" { - githubactions.Infof("[INFO] Missing input 'status', trying default") - var ok bool - if status, ok = os.LookupEnv("JOB_STATUS"); ok { - githubactions.Infof("[INFO] found job status") - } - } - data.Status = status - - actionid := githubactions.GetInput("actionid") - if actionid == "" { - githubactions.Fatalf("Missing input 'actionid'") - os.Exit(1) - } - data.ActionID = actionid -} - -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 = fmt.Sprintf( - "https://cdn.simpleicons.org/%s/%s", - d.IconSlug, - d.Color, - ) - } - - if d.EventBody == "" { - bdy := "" - if d.Project != "" { - bdy += fmt.Sprintf("Project: %s
", d.Project) - } - - sha, ok := os.LookupEnv("FORGEJO_SHA") - if ok { - bdy += fmt.Sprintf("Commit-id: %.*s
", 8, sha) - } - - ref, ok := os.LookupEnv("FORGEJO_REF") - if ok { - bdy += fmt.Sprintf("Branch: %s
", ref) - } - - if d.Status != "" { - bdy += fmt.Sprintf("Build Status: %s", d.Status) - } - - d.EventBody = bdy - } - - tmpl, err := template.New("message").Parse(message) - 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 } diff --git a/main_test.go b/main_test.go deleted file mode 100644 index f7e5241..0000000 --- a/main_test.go +++ /dev/null @@ -1,121 +0,0 @@ -package main - -import ( - "encoding/json" - "testing" - - "github.com/google/go-cmp/cmp" -) - -func Test_card(t *testing.T) { - type args struct { - d templateData - } - tests := []struct { - name string - args args - want []byte - wantErr bool - }{ - { - name: "test one", - args: args{ - d: templateData{ - CardID: "aed17996-84fc-45d5-9061-2c51535ae267", - Title: "test", - SubTitle: "first test", - Author: "gotest", - IconUrl: "https://github.githubassets.com/images/modules/logos_page/Octocat.png", - Project: "proj", - Status: "success", - ActionID: "123", - GitURL: "https://test.url", - Color: "c0c0c0", - EventBody: "no body", - }, - }, - want: []byte(` -{ - "cardsV2": [ - { - "cardId": "notify-aed17996-84fc-45d5-9061-2c51535ae267", - "card": { - "header": { - "title": "test", - "subtitle": "first test", - "imageUrl": "https://github.githubassets.com/images/modules/logos_page/Octocat.png", - "imageAltText": "message avatar image", - "imageType": "SQUARE" - }, - "sections": [ - { - "header": "test", - "collapsible": true, - "uncollapsibleWidgetsCount": 2, - "widgets": [ - { - "decoratedText": { - "startIcon": { - "knownIcon": "PERSON" - }, - "text": "gotest" - } - }, - { - "textParagraph": { - "text": "no body", - "maxLines": 2 - } - }, - { - "buttonList": { - "buttons": [ - { - "text": "View Source Event", - "type": "FILLED", - "onClick": { - "openLink": { - "url": "https://test.url/proj/actions/runs/123" - } - } - } - ] - } - } - ] - } - ] - } - } - ] -} -`), - wantErr: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := card(tt.args.d) - if (err != nil) != tt.wantErr { - t.Errorf("card() error = %v, wantErr %v", err, tt.wantErr) - return - } - - var gotJson any - err = json.Unmarshal(got, &gotJson) - if err != nil { - t.Fatal(err) - } - - var wantJson any - err = json.Unmarshal(tt.want, &wantJson) - if err != nil { - t.Fatalf("error: %v\nsrc: %s", err, tt.want) - } - - if diff := cmp.Diff(wantJson, gotJson); diff != "" { - t.Errorf("MakeGatewayInfo() mismatch (-want +got):\n%s", diff) - } - }) - } -} diff --git a/message.tpl b/message.tpl deleted file mode 100644 index b20a0d7..0000000 --- a/message.tpl +++ /dev/null @@ -1,54 +0,0 @@ -{ - "cardsV2": [ - { - "cardId": "notify-{{ .CardID }}", - "card": { - "header": { - "title": "{{ .Title }}", - "subtitle": "{{ .SubTitle }}", - "imageUrl": "{{ .IconUrl }}", - "imageType": "SQUARE", - "imageAltText": "message avatar image" - }, - "sections": [ - { - "header": "{{ .Title }}", - "collapsible": false, - "uncollapsibleWidgetsCount": 2, - "widgets": [ - { - "decoratedText": { - "startIcon": { - "knownIcon": "PERSON" - }, - "text": "{{ .Author }}" - } - }, - { - "textParagraph": { - "text": "{{ .EventBody }}", - "maxLines": 5 - } - }, - { - "buttonList": { - "buttons": [ - { - "text": "View Source Event", - "type": "FILLED", - "onClick": { - "openLink": { - "url": "{{ .GitURL }}/{{ .Project }}/actions/runs/{{ .ActionID }}" - } - } - } - ] - } - } - ] - } - ] - } - } - ] -}