diff --git a/cmd/server/flags.go b/cmd/server/flags.go index 45631a319..cfeb763c8 100644 --- a/cmd/server/flags.go +++ b/cmd/server/flags.go @@ -244,7 +244,7 @@ var flags = append([]cli.Flag{ EnvVars: []string{"WOODPECKER_STATUS_CONTEXT_FORMAT"}, Name: "status-context-format", Usage: "status context format", - Value: "{{ .context }}/{{ .event }}/{{ .workflow }}", + Value: "{{ .context }}/{{ .event }}/{{ .workflow }}{{if not (eq .axis_id 0}}/{{.axis_id}}{{end}}", }, &cli.BoolFlag{ EnvVars: []string{"WOODPECKER_MIGRATIONS_ALLOW_LONG"}, diff --git a/docs/docs/30-administration/10-server-config.md b/docs/docs/30-administration/10-server-config.md index 9cf2a879a..ba5ac735d 100644 --- a/docs/docs/30-administration/10-server-config.md +++ b/docs/docs/30-administration/10-server-config.md @@ -517,7 +517,7 @@ Context prefix Woodpecker will use to publish status messages to SCM. You probab ### `WOODPECKER_STATUS_CONTEXT_FORMAT` -> Default: `{{ .context }}/{{ .event }}/{{ .workflow }}` +> Default: `{{ .context }}/{{ .event }}/{{ .workflow }}{{if not (eq .axis_id 0}}/{{.axis_id}}{{end}}` Template for the status messages published to forges, uses [Go templates](https://pkg.go.dev/text/template) as template language. Supported variables: diff --git a/pipeline/stepBuilder.go b/pipeline/stepBuilder.go index 8c933b089..c3c198b31 100644 --- a/pipeline/stepBuilder.go +++ b/pipeline/stepBuilder.go @@ -77,12 +77,13 @@ func (b *StepBuilder) Build() ([]*Item, error) { axes = append(axes, matrix.Axis{}) } - for _, axis := range axes { + for i, axis := range axes { workflow := &model.Workflow{ PID: pidSequence, State: model.StatusPending, Environ: axis, Name: SanitizePath(y.Name), + AxisID: i + 1, } item, err := b.genItemForWorkflow(workflow, axis, string(y.Data)) if err != nil { diff --git a/server/forge/common/status.go b/server/forge/common/status.go index cae222fbc..fca6ffe32 100644 --- a/server/forge/common/status.go +++ b/server/forge/common/status.go @@ -19,6 +19,8 @@ import ( "fmt" "text/template" + "github.com/rs/zerolog/log" + "github.com/woodpecker-ci/woodpecker/server" "github.com/woodpecker-ci/woodpecker/server/model" ) @@ -41,8 +43,10 @@ func GetPipelineStatusContext(repo *model.Repo, pipeline *model.Pipeline, workfl "workflow": workflow.Name, "owner": repo.Owner, "repo": repo.Name, + "axis_id": workflow.AxisID, }) if err != nil { + log.Error().Err(err).Msg("could not create status context") return "" } diff --git a/server/model/workflow.go b/server/model/workflow.go index edd5b0a45..2cceeee15 100644 --- a/server/model/workflow.go +++ b/server/model/workflow.go @@ -28,6 +28,7 @@ type Workflow struct { AgentID int64 `json:"agent_id,omitempty" xorm:"workflow_agent_id"` Platform string `json:"platform,omitempty" xorm:"workflow_platform"` Environ map[string]string `json:"environ,omitempty" xorm:"json 'workflow_environ'"` + AxisID int `json:"-" xorm:"workflow_axis_id"` Children []*Step `json:"children,omitempty" xorm:"-"` }