diff --git a/.github/workflows/example.yml b/.github/workflows/example.yml index dba744a..0e5d3be 100644 --- a/.github/workflows/example.yml +++ b/.github/workflows/example.yml @@ -1,8 +1,8 @@ name: Sample Testing -on: [push] +on: [workflow_dispatch] env: - VER: 0.1.2 + VER: 0.3.1 jobs: my_job: @@ -22,10 +22,10 @@ jobs: webhook: "${{ secrets.WEBHOOK_URL }}" # event_body: "" # optional - - name: Force failure - run: | - echo "This is a force failure" - exit 1 +# - name: Force failure +# run: | +# echo "This is a force failure" +# exit 1 - name: Second Chat Message as ThreadResponse if: ${{ always() }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2890b3e..581badf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,6 +7,9 @@ on: 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: @@ -22,10 +25,14 @@ jobs: - name: Setup GO uses: actions/setup-go@v6 with: - go-version: 1.26 + # go-version: 1.26 + go-version-file: 'go.mod' + cache-dependency-path: 'go.sum' - name: GO Linting - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v9 + with: + version: v2.11 # build: # runs-on: stackit-docker @@ -47,6 +54,18 @@ jobs: 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 @@ -72,6 +91,7 @@ jobs: 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 \ @@ -95,8 +115,29 @@ jobs: if: steps.create_release.outputs.tag != '' uses: docker/setup-buildx-action@v4 - - name: Build and push + - name: Build only + if: steps.create_release.outputs.tag == '' uses: docker/build-push-action@v7 with: push: false - tags: actions/notify-slim:${{ steps.create_release.outputs.tag }} + 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/.golang-ci.yaml b/.golangci.yaml similarity index 96% rename from .golang-ci.yaml rename to .golangci.yaml index b5d12d0..35b6ac1 100644 --- a/.golang-ci.yaml +++ b/.golangci.yaml @@ -70,9 +70,7 @@ linters: - name: empty-lines - name: early-return exclusions: - paths: - - generator/ - - internal/testutils + paths: [] generated: lax warn-unused: true # Excluding configuration per-path, per-linter, per-text and per-source. diff --git a/.releaserc.json b/.releaserc.json index d36c572..8310b91 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -3,8 +3,76 @@ "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" + [ + "@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 index 3428ef0..24b7be5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +## [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) diff --git a/README.md b/README.md index 97d5ff4..c4e8400 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ jobs: # ... all your steps - name: Sample Chat Message if: ${{ always() }} # runs als after fails - uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v0.1.2 + uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v0.3.1 with: title: "[START] sample test (${{ forgejo.run_number }})" author: ${{ forgejo.actor }} diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..b8212ad --- /dev/null +++ b/go.sum @@ -0,0 +1,6 @@ +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/main.go b/main.go index 12cb578..7a9eafc 100644 --- a/main.go +++ b/main.go @@ -42,6 +42,56 @@ func main() { data.CardID = uuid.NewString() data.Add = "" + getData(&data) + + webhook := githubactions.GetInput("webhook") + if webhook == "" { + githubactions.Fatalf("Missing input 'webhook'") + os.Exit(1) + } + 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) + } + + req, err := http.NewRequest("POST", webhook, bytes.NewBuffer(jsonStr)) + if err != nil { + githubactions.Fatalf("error %s", err.Error()) + os.Exit(1) + } + 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) + } + defer resp.Body.Close() //nolint:gocritic + + 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 @@ -84,56 +134,6 @@ func main() { os.Exit(1) } data.ActionID = actionid - - webhook := githubactions.GetInput("webhook") - if webhook == "" { - githubactions.Fatalf("Missing input 'webhook'") - os.Exit(1) - } - 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) - // fmt.Println("URL:> ", webhook) - - // var jsonStr = []byte(fmt.Sprintf(data, project, commit, branch, status, actionid)) - - jsonStr, err := card(data) - if err != nil { - githubactions.Fatalf("error %s", err.Error()) - os.Exit(1) - } - - // log.Printf("retrieved data: %s", string(jsonStr)) - - req, err := http.NewRequest("POST", webhook, bytes.NewBuffer(jsonStr)) - if err != nil { - githubactions.Fatalf("error %s", err.Error()) - os.Exit(1) - } - 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) - } - 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 card(d templateData) ([]byte, error) { diff --git a/main_test.go b/main_test.go index 5c04597..f7e5241 100644 --- a/main_test.go +++ b/main_test.go @@ -27,8 +27,6 @@ func Test_card(t *testing.T) { Author: "gotest", IconUrl: "https://github.githubassets.com/images/modules/logos_page/Octocat.png", Project: "proj", - Commit: "12345", - Branch: "main", Status: "success", ActionID: "123", GitURL: "https://test.url", @@ -115,9 +113,6 @@ func Test_card(t *testing.T) { t.Fatalf("error: %v\nsrc: %s", err, tt.want) } - //if !reflect.DeepEqual(wantJson, gotJson) { - // t.Errorf("card() got = %v, want %v", gotJson, wantJson) - //} if diff := cmp.Diff(wantJson, gotJson); diff != "" { t.Errorf("MakeGatewayInfo() mismatch (-want +got):\n%s", diff) }