Compare commits
62 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45a4a7e647 | ||
|
|
c1349c7e40 | ||
|
|
bd882b6d3e | ||
|
|
a2d6cf9305 | ||
|
|
b195a1dcfd | ||
|
|
e12834bc14 | ||
|
|
6b34a9774b | ||
|
|
eb96639c17 | ||
|
|
49fa812459 | ||
|
|
68c1f11a5c | ||
|
|
16a5f874b3 | ||
|
|
e0072ca3f8 | ||
|
|
9d4e8c9a9d | ||
|
|
5b938091d7 | ||
|
|
0414cf6dfb | ||
|
|
cceaea7cb7 | ||
|
|
6b7fb1fe82 | ||
|
|
15d776c790 | ||
|
|
f51f6faf19 | ||
|
|
141b4aba86 | ||
|
|
4d0bfa2eb0 | ||
|
|
ffd2cd4716 | ||
|
|
ab184a741a | ||
|
|
82f727210d | ||
|
|
b375061648 | ||
|
|
8f1877086c | ||
|
|
c9f0fc3d86 | ||
|
|
d5b203cb65 | ||
|
|
f4b486b99b | ||
|
|
5417352afc | ||
|
|
5d2272dc85 | ||
|
|
de5dc0d49c | ||
|
|
c55fad7215 | ||
|
|
f178b6fc09 | ||
|
|
4855b86cc4 | ||
|
|
f9c27b01a8 | ||
|
|
8ff3cc5034 | ||
|
|
5d0d3eb4bd | ||
|
|
73312c28b3 | ||
|
|
e31a184f97 | ||
|
|
f4d7d7c241 | ||
|
|
7bcca643bb | ||
|
|
2a8f2dea76 | ||
|
|
557fde5dff | ||
|
|
ed4f6cb7b0 | ||
|
|
59ff5a81b4 | ||
|
|
3d63ed4790 | ||
|
|
d9828186fd | ||
|
|
ae5c8efaa0 | ||
|
|
0de0522a0c | ||
|
|
0303b4b9aa | ||
|
|
f2566ae21d | ||
|
|
c6521c7fcf | ||
|
|
eeed1a402d | ||
|
|
e6be735f1a | ||
|
|
75443b23a5 | ||
|
|
0b4fd7b258 | ||
|
|
96fa11f4b9 | ||
|
|
ce1a0ec40b | ||
|
|
f486b95d02 | ||
|
|
a87686cb73 | ||
|
|
e194659ce8 |
17 changed files with 781 additions and 142 deletions
5
.dockerignore
Normal file
5
.dockerignore
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
.github
|
||||||
|
.gitignore
|
||||||
|
action.yml
|
||||||
|
docker-slimbuild
|
||||||
|
main_test.go
|
||||||
47
.github/workflows/example.yml
vendored
47
.github/workflows/example.yml
vendored
|
|
@ -1,26 +1,41 @@
|
||||||
name: Sample Testing
|
name: Sample Testing
|
||||||
on: [push]
|
on: [workflow_dispatch]
|
||||||
|
|
||||||
|
env:
|
||||||
|
VER: 0.3.1
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
my_job:
|
my_job:
|
||||||
runs-on: stackit-docker
|
runs-on: stackit-docker
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: First Chat Message
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- name: Get commit hash
|
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
run: echo "::set-output name=sha8::$(echo ${FORGEJO_SHA} | cut -c1-8)"
|
uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v${{ env.VER }}
|
||||||
id: slug
|
|
||||||
|
|
||||||
- name: Chat Setup
|
|
||||||
if: ${{ always() }}
|
|
||||||
uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v0
|
|
||||||
with:
|
with:
|
||||||
project: ${{ forgejo.repository }}
|
title: "[START] sample test (${{ forgejo.run_number }})"
|
||||||
commit: ${{ steps.slug.outputs.sha8 }}
|
author: ${{ forgejo.actor }}
|
||||||
branch: ${{ forgejo.ref }}
|
giturl: ${{ forgejo.server_url }}
|
||||||
|
iconslug: instacart
|
||||||
|
# status: ${{ job.status }} # optional
|
||||||
|
actionid: ${{ forgejo.run_number }}
|
||||||
|
webhook: "${{ secrets.WEBHOOK_URL }}"
|
||||||
|
# event_body: "" # optional
|
||||||
|
|
||||||
|
# - name: Force failure
|
||||||
|
# run: |
|
||||||
|
# echo "This is a force failure"
|
||||||
|
# exit 1
|
||||||
|
|
||||||
|
- name: Second Chat Message as ThreadResponse
|
||||||
|
if: ${{ always() }}
|
||||||
|
uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v0.1.2
|
||||||
|
with:
|
||||||
|
title: "[END] sample test (${{ forgejo.run_number }})"
|
||||||
|
iconslug: bun
|
||||||
|
author: ${{ forgejo.actor }}
|
||||||
|
giturl: ${{ forgejo.server_url }}
|
||||||
status: ${{ job.status }}
|
status: ${{ job.status }}
|
||||||
actionid: ${{ forgejo.repository }}/actions/runs/${{ forgejo.run_id }}
|
actionid: ${{ forgejo.run_number }}
|
||||||
webhook: "https://chat.googleapis.com/v1/spaces/AAAAYTX-Vqs/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=Iwtvo1dwg36dZgUyrUCREQGGMrO71PkIoQGafOf17Yg%3D&threadKey=git-commit"
|
webhook: "${{ secrets.WEBHOOK_URL }}"
|
||||||
|
event_body: "this time <b>I</b> provided a body"
|
||||||
|
|
|
||||||
143
.github/workflows/release.yml
vendored
Normal file
143
.github/workflows/release.yml
vendored
Normal file
|
|
@ -0,0 +1,143 @@
|
||||||
|
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'
|
||||||
88
.golangci.yaml
Normal file
88
.golangci.yaml
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
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:
|
||||||
78
.releaserc.json
Normal file
78
.releaserc.json
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
{
|
||||||
|
"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"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
23
CHANGELOG.md
Normal file
23
CHANGELOG.md
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
## [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))
|
||||||
27
Dockerfile
27
Dockerfile
|
|
@ -1,8 +1,29 @@
|
||||||
FROM golang:1.13
|
FROM golang:1.26 AS builder
|
||||||
|
|
||||||
WORKDIR /src
|
RUN apt-get update && apt-get -y install upx
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
ENV CGO_ENABLED=0
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go get -u github.com/sethvargo/go-githubactions/... && go build -o /bin/google-chat-action
|
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
|
||||||
|
|
||||||
ENTRYPOINT ["/bin/google-chat-action"]
|
ENTRYPOINT ["/bin/google-chat-action"]
|
||||||
|
|
|
||||||
10
Dockerfile.big
Normal file
10
Dockerfile.big
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
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"]
|
||||||
31
README.md
31
README.md
|
|
@ -13,23 +13,20 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
# ... all your steps
|
||||||
uses: actions/checkout@v6
|
- name: Sample Chat Message
|
||||||
|
if: ${{ always() }} # runs als after fails
|
||||||
- name: Get commit hash
|
uses: https://stackit-solutions.git.onstackit.cloud/actions/notify@v0.3.1
|
||||||
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:
|
with:
|
||||||
project: ${{ github.repository }}
|
title: "[START] sample test (${{ forgejo.run_number }})"
|
||||||
commit: ${{ steps.slug.outputs.sha8 }}
|
author: ${{ forgejo.actor }}
|
||||||
branch: ${{ github.ref }}
|
giturl: ${{ forgejo.server_url }}
|
||||||
status: ${{ job.status }}
|
iconslug: instacart # optional
|
||||||
actionid: ${{ github.repository }}/runs/${{ github.run_id }}
|
# status: ${{ job.status }} # optional
|
||||||
webhook: "https://chat.googleapis.com/v1/spaces/AAAAzPcAy4s/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=MmdzluicdrdkyUAV_QwB6BzlLcIhbfrwNzxVrEllaec%3D&threadKey=git-commit"
|
actionid: ${{ forgejo.run_number }}
|
||||||
|
webhook: "${{ secrets.WEBHOOK_URL }}"
|
||||||
|
event_body: "This is a sample <b>TEXT</b><br>with a new line" # optional
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
TODO - icon_slug
|
||||||
|
|
|
||||||
21
action.yml
21
action.yml
|
|
@ -1,21 +1,18 @@
|
||||||
name: 'Google Chat Action'
|
name: 'Google Chat Action'
|
||||||
author: 'D Ther Htun'
|
author: 'D Ther Htun/ Marcel S. Henselin'
|
||||||
description: 'Github actions for google chat Room Bot'
|
description: 'Github actions for google chat Room Bot'
|
||||||
branding:
|
branding:
|
||||||
icon: 'at-sign'
|
icon: 'at-sign'
|
||||||
color: 'green'
|
color: 'green'
|
||||||
inputs:
|
inputs:
|
||||||
project:
|
autor:
|
||||||
description: 'Github Project Name'
|
description: 'Git Action Author'
|
||||||
required: true
|
required: true
|
||||||
commit:
|
giturl:
|
||||||
description: 'Github Commit ID'
|
description: 'Git Server URL'
|
||||||
required: true
|
|
||||||
branch:
|
|
||||||
description: 'Github Branch'
|
|
||||||
required: true
|
required: true
|
||||||
status:
|
status:
|
||||||
description: 'Github Action Build Status'
|
description: 'Git Action Build Status'
|
||||||
required: true
|
required: true
|
||||||
actionid:
|
actionid:
|
||||||
description: 'Current Running Action ID'
|
description: 'Current Running Action ID'
|
||||||
|
|
@ -23,10 +20,14 @@ inputs:
|
||||||
webhook:
|
webhook:
|
||||||
description: 'Google Chat Webhook URL'
|
description: 'Google Chat Webhook URL'
|
||||||
required: true
|
required: true
|
||||||
|
event_body:
|
||||||
|
description: 'Google Chat Event Body'
|
||||||
|
required: true
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: 'docker'
|
using: 'docker'
|
||||||
image: 'docker://dther/google-chat-action:v0.8'
|
image: 'docker://stackit-solutions.git.onstackit.cloud/actions/notify-slim:v0.1.2'
|
||||||
|
# image: 'Dockerfile'
|
||||||
args:
|
args:
|
||||||
- ${{ inputs.project }}
|
- ${{ inputs.project }}
|
||||||
- ${{ inputs.commit }}
|
- ${{ inputs.commit }}
|
||||||
|
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
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"]
|
|
||||||
7
go.mod
7
go.mod
|
|
@ -2,4 +2,9 @@ module google-chat-action
|
||||||
|
|
||||||
go 1.26.2
|
go 1.26.2
|
||||||
|
|
||||||
require github.com/sethvargo/go-githubactions v1.3.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
|
||||||
|
|
|
||||||
6
go.sum
Normal file
6
go.sum
Normal file
|
|
@ -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=
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 51 KiB |
230
main.go
230
main.go
|
|
@ -2,89 +2,191 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
_ "embed"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"text/template"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
"github.com/sethvargo/go-githubactions"
|
"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() {
|
func main() {
|
||||||
project := githubactions.GetInput("project")
|
data := templateData{}
|
||||||
if project == "" {
|
data.CardID = uuid.NewString()
|
||||||
githubactions.Fatalf("Missing input 'project'")
|
data.Add = ""
|
||||||
}
|
|
||||||
commit := githubactions.GetInput("commit")
|
getData(&data)
|
||||||
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")
|
webhook := githubactions.GetInput("webhook")
|
||||||
if webhook == "" {
|
if webhook == "" {
|
||||||
githubactions.Fatalf("Missing input 'webshook'")
|
githubactions.Fatalf("Missing input 'webhook'")
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
joburl := githubactions.GetInput("joburl")
|
webhook = fmt.Sprintf("%s&threadKey=notify%s&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD", webhook, data.ActionID)
|
||||||
if webhook == "" {
|
|
||||||
githubactions.Fatalf("Missing input 'joburl'")
|
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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": "<b>Project:</b> %s<br><b>Commit-id:</b> <font color=\"#FF0000\">%s</font><br><b>Branch:</b> <font color=\"#00FF00f\">%s</font><br><b>Build Status:</b> <font color=\"#0000ff\">%s</font>"
|
|
||||||
},
|
|
||||||
"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))
|
req, err := http.NewRequest("POST", webhook, bytes.NewBuffer(jsonStr))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
githubactions.Fatalf("error %s", err.Error())
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
req.Header.Set("Content-Type", "application/json; charset=UTF-8")
|
req.Header.Set("Content-Type", "application/json; charset=UTF-8")
|
||||||
client := &http.Client{}
|
client := &http.Client{}
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
githubactions.Fatalf("error %s", err.Error())
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close() //nolint:gocritic
|
||||||
|
|
||||||
fmt.Println("response Status:", resp.Status)
|
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("<b>Project:</b> %s<br>", d.Project)
|
||||||
|
}
|
||||||
|
|
||||||
|
sha, ok := os.LookupEnv("FORGEJO_SHA")
|
||||||
|
if ok {
|
||||||
|
bdy += fmt.Sprintf("<b>Commit-id:</b> <font color='#FF0000'> %.*s</font><br>", 8, sha)
|
||||||
|
}
|
||||||
|
|
||||||
|
ref, ok := os.LookupEnv("FORGEJO_REF")
|
||||||
|
if ok {
|
||||||
|
bdy += fmt.Sprintf("<b>Branch:</b> <font color='#00FF00f'>%s</font><br>", ref)
|
||||||
|
}
|
||||||
|
|
||||||
|
if d.Status != "" {
|
||||||
|
bdy += fmt.Sprintf("<b>Build Status:</b> <font color='#0000ff'>%s</font>", 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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
121
main_test.go
Normal file
121
main_test.go
Normal file
|
|
@ -0,0 +1,121 @@
|
||||||
|
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": "<b>gotest</b>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
54
message.tpl
Normal file
54
message.tpl
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
{
|
||||||
|
"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": "<b>{{ .Author }}</b>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"textParagraph": {
|
||||||
|
"text": "{{ .EventBody }}",
|
||||||
|
"maxLines": 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buttonList": {
|
||||||
|
"buttons": [
|
||||||
|
{
|
||||||
|
"text": "View Source Event",
|
||||||
|
"type": "FILLED",
|
||||||
|
"onClick": {
|
||||||
|
"openLink": {
|
||||||
|
"url": "{{ .GitURL }}/{{ .Project }}/actions/runs/{{ .ActionID }}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue