Merge pull request 'Crash group link' (#20) from replay into main
Reviewed-on: https://git.ts.mattnite.net/mattnite/cairn/pulls/20
This commit is contained in:
commit
aa0c47d9e7
|
|
@ -16,7 +16,7 @@ jobs:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-go@v5
|
- uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: "1.25.7"
|
go-version: "1.26.1"
|
||||||
- run: go mod download
|
- run: go mod download
|
||||||
- run: go test -v -race -coverprofile=coverage.out ./...
|
- run: go test -v -race -coverprofile=coverage.out ./...
|
||||||
- run: go tool cover -func=coverage.out
|
- run: go tool cover -func=coverage.out
|
||||||
|
|
@ -28,7 +28,7 @@ jobs:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-go@v5
|
- uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: "1.25.7"
|
go-version: "1.26.1"
|
||||||
- run: go vet ./...
|
- run: go vet ./...
|
||||||
- name: Check formatting
|
- name: Check formatting
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -66,7 +66,7 @@ jobs:
|
||||||
- name: Install Go
|
- name: Install Go
|
||||||
uses: actions/setup-go@v5
|
uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: "1.25.7"
|
go-version: "1.26.1"
|
||||||
|
|
||||||
- name: Compute next version
|
- name: Compute next version
|
||||||
run: |
|
run: |
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ jobs:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-go@v5
|
- uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: "1.25.7"
|
go-version: "1.26.1"
|
||||||
- run: go mod download
|
- run: go mod download
|
||||||
- run: go test -v -race -coverprofile=coverage.out ./...
|
- run: go test -v -race -coverprofile=coverage.out ./...
|
||||||
- run: go tool cover -func=coverage.out
|
- run: go tool cover -func=coverage.out
|
||||||
|
|
@ -26,7 +26,7 @@ jobs:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-go@v5
|
- uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: "1.25.7"
|
go-version: "1.26.1"
|
||||||
- run: go vet ./...
|
- run: go vet ./...
|
||||||
- name: Check formatting
|
- name: Check formatting
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -59,7 +59,7 @@ jobs:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-go@v5
|
- uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: "1.25.7"
|
go-version: "1.26.1"
|
||||||
- name: Build Go binaries
|
- name: Build Go binaries
|
||||||
run: |
|
run: |
|
||||||
CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o ./bin/cairn-server ./cmd/cairn-server
|
CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o ./bin/cairn-server ./cmd/cairn-server
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1.25-alpine AS builder
|
FROM golang:1.26-alpine AS builder
|
||||||
|
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
COPY go.mod go.sum ./
|
COPY go.mod go.sum ./
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ func main() {
|
||||||
Store: store,
|
Store: store,
|
||||||
ForgejoClient: forgejoClient,
|
ForgejoClient: forgejoClient,
|
||||||
ForgejoURL: cfg.ForgejoURL,
|
ForgejoURL: cfg.ForgejoURL,
|
||||||
|
CairnURL: cfg.ExternalURL,
|
||||||
WebhookSecret: cfg.ForgejoWebhookSecret,
|
WebhookSecret: cfg.ForgejoWebhookSecret,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
2
go.mod
2
go.mod
|
|
@ -1,6 +1,6 @@
|
||||||
module github.com/mattnite/cairn
|
module github.com/mattnite/cairn
|
||||||
|
|
||||||
go 1.25.7
|
go 1.26.1
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gin-gonic/gin v1.12.0
|
github.com/gin-gonic/gin v1.12.0
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ type Config struct {
|
||||||
S3SecretKey string `envconfig:"CAIRN_S3_SECRET_KEY" default:"minioadmin"`
|
S3SecretKey string `envconfig:"CAIRN_S3_SECRET_KEY" default:"minioadmin"`
|
||||||
S3UseSSL bool `envconfig:"CAIRN_S3_USE_SSL" default:"false"`
|
S3UseSSL bool `envconfig:"CAIRN_S3_USE_SSL" default:"false"`
|
||||||
|
|
||||||
|
ExternalURL string `envconfig:"CAIRN_EXTERNAL_URL"`
|
||||||
ForgejoURL string `envconfig:"CAIRN_FORGEJO_URL"`
|
ForgejoURL string `envconfig:"CAIRN_FORGEJO_URL"`
|
||||||
ForgejoToken string `envconfig:"CAIRN_FORGEJO_TOKEN"`
|
ForgejoToken string `envconfig:"CAIRN_FORGEJO_TOKEN"`
|
||||||
ForgejoWebhookSecret string `envconfig:"CAIRN_FORGEJO_WEBHOOK_SECRET"`
|
ForgejoWebhookSecret string `envconfig:"CAIRN_FORGEJO_WEBHOOK_SECRET"`
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import (
|
||||||
type Sync struct {
|
type Sync struct {
|
||||||
Client *Client
|
Client *Client
|
||||||
DB *gorm.DB
|
DB *gorm.DB
|
||||||
|
CairnURL string
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateIssueForCrashGroup creates a Forgejo issue for a new crash group.
|
// CreateIssueForCrashGroup creates a Forgejo issue for a new crash group.
|
||||||
|
|
@ -29,8 +30,14 @@ func (s *Sync) CreateIssueForCrashGroup(ctx context.Context, group *cairnapi.Cra
|
||||||
return fmt.Errorf("getting repository: %w", err)
|
return fmt.Errorf("getting repository: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
crashGroupLink := fmt.Sprintf("%d", group.ID)
|
||||||
|
if s.CairnURL != "" {
|
||||||
|
crashGroupLink = fmt.Sprintf("[%d](%s/crashgroups/%d)", group.ID, strings.TrimRight(s.CairnURL, "/"), group.ID)
|
||||||
|
}
|
||||||
|
|
||||||
body := fmt.Sprintf(`## Crash Group
|
body := fmt.Sprintf(`## Crash Group
|
||||||
|
|
||||||
|
**Crash Group:** %s
|
||||||
**Fingerprint:** `+"`%s`"+`
|
**Fingerprint:** `+"`%s`"+`
|
||||||
**First seen:** %s
|
**First seen:** %s
|
||||||
**Type:** %s
|
**Type:** %s
|
||||||
|
|
@ -43,7 +50,7 @@ func (s *Sync) CreateIssueForCrashGroup(ctx context.Context, group *cairnapi.Cra
|
||||||
|
|
||||||
---
|
---
|
||||||
*Auto-created by [Cairn](/) — crash artifact aggregator*
|
*Auto-created by [Cairn](/) — crash artifact aggregator*
|
||||||
`, group.Fingerprint, group.FirstSeenAt.Format("2006-01-02 15:04:05"), group.Title, sampleTrace)
|
`, crashGroupLink, group.Fingerprint, group.FirstSeenAt.Format("2006-01-02 15:04:05"), group.Title, sampleTrace)
|
||||||
|
|
||||||
issue, err := s.Client.CreateIssue(ctx, repo.Owner, repo.Name, CreateIssueRequest{
|
issue, err := s.Client.CreateIssue(ctx, repo.Owner, repo.Name, CreateIssueRequest{
|
||||||
Title: "[Cairn] " + group.Title,
|
Title: "[Cairn] " + group.Title,
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ type RouterConfig struct {
|
||||||
Store blob.Store
|
Store blob.Store
|
||||||
ForgejoClient *forgejo.Client
|
ForgejoClient *forgejo.Client
|
||||||
ForgejoURL string
|
ForgejoURL string
|
||||||
|
CairnURL string
|
||||||
WebhookSecret string
|
WebhookSecret string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -26,7 +27,7 @@ func NewRouter(cfg RouterConfig) (*gin.Engine, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
forgejoSync := &forgejo.Sync{Client: cfg.ForgejoClient, DB: cfg.DB}
|
forgejoSync := &forgejo.Sync{Client: cfg.ForgejoClient, DB: cfg.DB, CairnURL: cfg.CairnURL}
|
||||||
|
|
||||||
pages := &PageHandler{DB: cfg.DB, Templates: templates, ForgejoURL: cfg.ForgejoURL}
|
pages := &PageHandler{DB: cfg.DB, Templates: templates, ForgejoURL: cfg.ForgejoURL}
|
||||||
ingest := &handler.IngestHandler{DB: cfg.DB, Store: cfg.Store, ForgejoSync: forgejoSync}
|
ingest := &handler.IngestHandler{DB: cfg.DB, Store: cfg.Store, ForgejoSync: forgejoSync}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue