Tag pipeline with source information (#4771)

Co-authored-by: qwerty287 <80460567+qwerty287@users.noreply.github.com>
This commit is contained in:
Jener Rasmussen 2025-01-30 13:03:58 +01:00 committed by GitHub
parent ea45a0af6f
commit 846fd8dc51
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 40 additions and 9 deletions

View file

@ -4,7 +4,7 @@ To enhance the usability of Woodpecker and meet evolving security standards, occ
## `next` ## `next`
- No changes - (Kubernetes) Deprecated `step` label on pod in favor of new namespaced label `woodpecker-ci.org/step`. The `step` label will be removed in a future update.
## 3.0.0 ## 3.0.0

View file

@ -31,9 +31,12 @@ import (
) )
const ( const (
StepLabel = "step" // StepLabelLegacy is the legacy label name from before the introduction of the woodpecker-ci.org namespace.
podPrefix = "wp-" // This will be removed in the future.
defaultFSGroup int64 = 1000 StepLabelLegacy = "step"
StepLabel = "woodpecker-ci.org/step"
podPrefix = "wp-"
defaultFSGroup int64 = 1000
) )
func mkPod(step *types.Step, config *config, podName, goos string, options BackendOptions) (*v1.Pod, error) { func mkPod(step *types.Step, config *config, podName, goos string, options BackendOptions) (*v1.Pod, error) {
@ -115,6 +118,10 @@ func podLabels(step *types.Step, config *config, options BackendOptions) (map[st
if step.Type == types.StepTypeService { if step.Type == types.StepTypeService {
labels[ServiceLabel], _ = serviceName(step) labels[ServiceLabel], _ = serviceName(step)
} }
labels[StepLabelLegacy], err = stepLabel(step)
if err != nil {
return labels, err
}
labels[StepLabel], err = stepLabel(step) labels[StepLabel], err = stepLabel(step)
if err != nil { if err != nil {
return labels, err return labels, err

View file

@ -72,7 +72,8 @@ func TestTinyPod(t *testing.T) {
"namespace": "woodpecker", "namespace": "woodpecker",
"creationTimestamp": null, "creationTimestamp": null,
"labels": { "labels": {
"step": "build-via-gradle" "step": "build-via-gradle",
"woodpecker-ci.org/step": "build-via-gradle"
} }
}, },
"spec": { "spec": {
@ -153,7 +154,8 @@ func TestFullPod(t *testing.T) {
"labels": { "labels": {
"app": "test", "app": "test",
"part-of": "woodpecker-ci", "part-of": "woodpecker-ci",
"step": "go-test" "step": "go-test",
"woodpecker-ci.org/step": "go-test"
}, },
"annotations": { "annotations": {
"apps.kubernetes.io/pod-index": "0", "apps.kubernetes.io/pod-index": "0",
@ -447,7 +449,8 @@ func TestScratchPod(t *testing.T) {
"namespace": "woodpecker", "namespace": "woodpecker",
"creationTimestamp": null, "creationTimestamp": null,
"labels": { "labels": {
"step": "curl-google" "step": "curl-google",
"woodpecker-ci.org/step": "curl-google"
} }
}, },
"spec": { "spec": {
@ -492,7 +495,8 @@ func TestSecrets(t *testing.T) {
"namespace": "woodpecker", "namespace": "woodpecker",
"creationTimestamp": null, "creationTimestamp": null,
"labels": { "labels": {
"step": "test-secrets" "step": "test-secrets",
"woodpecker-ci.org/step": "test-secrets"
} }
}, },
"spec": { "spec": {

View file

@ -258,6 +258,10 @@ func registrySecretLabels(step *types.Step) (map[string]string, error) {
if step.Type == types.StepTypeService { if step.Type == types.StepTypeService {
labels[ServiceLabel], _ = serviceName(step) labels[ServiceLabel], _ = serviceName(step)
} }
labels[StepLabelLegacy], err = stepLabel(step)
if err != nil {
return labels, err
}
labels[StepLabel], err = stepLabel(step) labels[StepLabel], err = stepLabel(step)
if err != nil { if err != nil {
return labels, err return labels, err

View file

@ -212,7 +212,8 @@ func TestRegistrySecret(t *testing.T) {
"namespace": "woodpecker", "namespace": "woodpecker",
"creationTimestamp": null, "creationTimestamp": null,
"labels": { "labels": {
"step": "go-test" "step": "go-test",
"woodpecker-ci.org/step": "go-test"
} }
}, },
"type": "kubernetes.io/dockerconfigjson", "type": "kubernetes.io/dockerconfigjson",

View file

@ -19,6 +19,7 @@ import (
"fmt" "fmt"
"maps" "maps"
"path/filepath" "path/filepath"
"strconv"
"strings" "strings"
"github.com/oklog/ulid/v2" "github.com/oklog/ulid/v2"
@ -194,6 +195,20 @@ func (b *StepBuilder) genItemForWorkflow(workflow *model.Workflow, axis matrix.A
maps.Copy(item.Labels, b.DefaultLabels) maps.Copy(item.Labels, b.DefaultLabels)
} }
// "woodpecker-ci.org" namespace is reserved for internal use
for key := range item.Labels {
if strings.HasPrefix(key, "woodpecker-ci.org") {
log.Debug().Str("forge", b.Forge.Name()).Str("repo", b.Repo.FullName).Str("label", key).Msg("dropped pipeline label with reserved prefix woodpecker-ci.org")
delete(item.Labels, key)
}
}
item.Labels["woodpecker-ci.org/forge-id"] = b.Forge.Name()
item.Labels["woodpecker-ci.org/repo-forge-id"] = string(b.Repo.ForgeRemoteID)
item.Labels["woodpecker-ci.org/repo-id"] = strconv.FormatInt(b.Repo.ID, 10)
item.Labels["woodpecker-ci.org/repo-name"] = b.Repo.Name
item.Labels["woodpecker-ci.org/branch"] = b.Repo.Branch
return item, errorsAndWarnings return item, errorsAndWarnings
} }