mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-10 19:11:08 +00:00
Remove deprecated pipeline settings (#3916)
This commit is contained in:
parent
bbdeb4622c
commit
1c7c87b8f0
14 changed files with 20 additions and 201 deletions
|
@ -11,6 +11,7 @@ Some versions need some changes to the server configuration or the pipeline conf
|
|||
|
||||
## `next`
|
||||
|
||||
- Compatibility mode of deprecated `pipeline:`, `platform:` and `branches:` pipeline config options are now removed and pipeline will now fail if still in use.
|
||||
- Deprecated `steps.[name].group` in favor of `steps.[name].depends_on` (see [workflow syntax](./20-usage/20-workflow-syntax.md#depends_on) to learn how to set dependencies)
|
||||
- Removed `WOODPECKER_ROOT_PATH` and `WOODPECKER_ROOT_URL` config variables. Use `WOODPECKER_HOST` with a path instead
|
||||
- Pipelines without a config file will now be skipped instead of failing
|
||||
|
|
|
@ -215,45 +215,6 @@ func (l *Linter) lintDeprecations(config *WorkflowConfig) (err error) {
|
|||
return err
|
||||
}
|
||||
|
||||
if parsed.PipelineDoNotUseIt.ContainerList != nil {
|
||||
err = multierr.Append(err, &errorTypes.PipelineError{
|
||||
Type: errorTypes.PipelineErrorTypeDeprecation,
|
||||
Message: "Please use 'steps:' instead of deprecated 'pipeline:' list",
|
||||
Data: errors.DeprecationErrorData{
|
||||
File: config.File,
|
||||
Field: "pipeline",
|
||||
Docs: "https://woodpecker-ci.org/docs/next/migrations#next-200",
|
||||
},
|
||||
IsWarning: true,
|
||||
})
|
||||
}
|
||||
|
||||
if parsed.PlatformDoNotUseIt != "" {
|
||||
err = multierr.Append(err, &errorTypes.PipelineError{
|
||||
Type: errorTypes.PipelineErrorTypeDeprecation,
|
||||
Message: "Please use labels instead of deprecated 'platform' filters",
|
||||
Data: errors.DeprecationErrorData{
|
||||
File: config.File,
|
||||
Field: "platform",
|
||||
Docs: "https://woodpecker-ci.org/docs/next/migrations#next-200",
|
||||
},
|
||||
IsWarning: true,
|
||||
})
|
||||
}
|
||||
|
||||
if parsed.BranchesDoNotUseIt != nil {
|
||||
err = multierr.Append(err, &errorTypes.PipelineError{
|
||||
Type: errorTypes.PipelineErrorTypeDeprecation,
|
||||
Message: "Please use global when instead of deprecated 'branches' filter",
|
||||
Data: errors.DeprecationErrorData{
|
||||
File: config.File,
|
||||
Field: "branches",
|
||||
Docs: "https://woodpecker-ci.org/docs/next/migrations#next-200",
|
||||
},
|
||||
IsWarning: true,
|
||||
})
|
||||
}
|
||||
|
||||
for _, step := range parsed.Steps.ContainerList {
|
||||
if step.Group != "" {
|
||||
err = multierr.Append(err, &errorTypes.PipelineError{
|
||||
|
|
|
@ -165,6 +165,10 @@ func TestLintErrors(t *testing.T) {
|
|||
from: "steps: { build: { image: golang, settings: { test: 'true' }, environment: [ 'TEST=true' ] } }",
|
||||
want: "Cannot configure both environment and settings",
|
||||
},
|
||||
{
|
||||
from: "{pipeline: { build: { image: golang, settings: { test: 'true' } } }, when: { branch: main, event: push } }",
|
||||
want: "Additional property pipeline is not allowed",
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range testdata {
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
branches: [main, pages]
|
||||
|
||||
steps:
|
||||
build:
|
||||
image: golang
|
||||
commands:
|
||||
- go test
|
|
@ -1,9 +0,0 @@
|
|||
branches:
|
||||
include: main
|
||||
exclude: [develop, feature/*]
|
||||
|
||||
steps:
|
||||
build:
|
||||
image: golang
|
||||
commands:
|
||||
- go test
|
|
@ -1,7 +0,0 @@
|
|||
branches: main
|
||||
|
||||
steps:
|
||||
build:
|
||||
image: golang
|
||||
commands:
|
||||
- go test
|
|
@ -1,7 +0,0 @@
|
|||
platform: linux/amd64
|
||||
|
||||
steps:
|
||||
build:
|
||||
image: golang:latest
|
||||
commands:
|
||||
- go test
|
|
@ -19,6 +19,9 @@ steps:
|
|||
- echo "test"
|
||||
when:
|
||||
event: push
|
||||
branch:
|
||||
include: main
|
||||
exclude: [develop, feature/*]
|
||||
|
||||
when-event-array:
|
||||
image: alpine
|
||||
|
|
|
@ -20,19 +20,12 @@
|
|||
"skip_clone": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"branches": {
|
||||
"$ref": "#/definitions/branches"
|
||||
},
|
||||
"when": {
|
||||
"$ref": "#/definitions/pipeline_when"
|
||||
"$ref": "#/definitions/workflow_when"
|
||||
},
|
||||
"steps": {
|
||||
"$ref": "#/definitions/step_list"
|
||||
},
|
||||
"pipeline": {
|
||||
"$ref": "#/definitions/step_list",
|
||||
"description": "deprecated, use steps"
|
||||
},
|
||||
"services": {
|
||||
"$ref": "#/definitions/services"
|
||||
},
|
||||
|
@ -42,9 +35,6 @@
|
|||
"matrix": {
|
||||
"$ref": "#/definitions/matrix"
|
||||
},
|
||||
"platform": {
|
||||
"$ref": "#/definitions/platform"
|
||||
},
|
||||
"labels": {
|
||||
"$ref": "#/definitions/labels"
|
||||
},
|
||||
|
@ -128,55 +118,6 @@
|
|||
"type": ["boolean", "string", "number", "array", "object"]
|
||||
}
|
||||
},
|
||||
"branches": {
|
||||
"description": "deprecated, use when.branch",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"minProperties": 1
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"exclude": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"minLength": 1
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
},
|
||||
"include": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"minLength": 1
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"step_list": {
|
||||
"description": "The steps section defines a list of steps which will be executed serially, in the order in which they are defined. Read more: https://woodpecker-ci.org/docs/usage/workflow-syntax#steps",
|
||||
"oneOf": [
|
||||
|
@ -196,22 +137,22 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"pipeline_when": {
|
||||
"description": "Whole pipelines can be skipped based on conditions. Read more: https://woodpecker-ci.org/docs/usage/workflow-syntax#when---global-workflow-conditions",
|
||||
"workflow_when": {
|
||||
"description": "Whole workflow can be skipped based on conditions. Read more: https://woodpecker-ci.org/docs/usage/workflow-syntax#when---global-workflow-conditions",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "array",
|
||||
"minLength": 1,
|
||||
"items": {
|
||||
"$ref": "#/definitions/pipeline_when_condition"
|
||||
"$ref": "#/definitions/workflow_when_condition"
|
||||
}
|
||||
},
|
||||
{
|
||||
"$ref": "#/definitions/pipeline_when_condition"
|
||||
"$ref": "#/definitions/workflow_when_condition"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pipeline_when_condition": {
|
||||
"workflow_when_condition": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
|
@ -1120,11 +1061,6 @@
|
|||
"minLength": 1
|
||||
}
|
||||
},
|
||||
"platform": {
|
||||
"description": "deprecated, use labels.platform",
|
||||
"type": "string",
|
||||
"additionalProperties": false
|
||||
},
|
||||
"labels": {
|
||||
"description": "Configures the labels used for the agent selection. Read more: https://woodpecker-ci.org/docs/usage/workflow-syntax#labels",
|
||||
"type": "object",
|
||||
|
|
|
@ -32,18 +32,6 @@ func TestSchema(t *testing.T) {
|
|||
testFile string
|
||||
fail bool
|
||||
}{
|
||||
{
|
||||
name: "Branches",
|
||||
testFile: ".woodpecker/test-branches.yaml",
|
||||
},
|
||||
{
|
||||
name: "Branches Array",
|
||||
testFile: ".woodpecker/test-branches-array.yaml",
|
||||
},
|
||||
{
|
||||
name: "Branches exclude & include",
|
||||
testFile: ".woodpecker/test-branches-exclude-include.yaml",
|
||||
},
|
||||
{
|
||||
name: "Clone",
|
||||
testFile: ".woodpecker/test-clone.yaml",
|
||||
|
@ -84,10 +72,6 @@ func TestSchema(t *testing.T) {
|
|||
name: "Workspace",
|
||||
testFile: ".woodpecker/test-workspace.yaml",
|
||||
},
|
||||
{
|
||||
name: "Platform",
|
||||
testFile: ".woodpecker/test-platform.yaml",
|
||||
},
|
||||
{
|
||||
name: "Labels",
|
||||
testFile: ".woodpecker/test-labels.yaml",
|
||||
|
|
|
@ -15,11 +15,8 @@
|
|||
package yaml
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"codeberg.org/6543/xyaml"
|
||||
|
||||
"go.woodpecker-ci.org/woodpecker/v2/pipeline/frontend/yaml/constraint"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/pipeline/frontend/yaml/types"
|
||||
)
|
||||
|
||||
|
@ -30,37 +27,6 @@ func ParseBytes(b []byte) (*types.Workflow, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// support deprecated branch filter
|
||||
if out.BranchesDoNotUseIt != nil {
|
||||
switch {
|
||||
case out.When.Constraints == nil:
|
||||
out.When.Constraints = []constraint.Constraint{{Branch: *out.BranchesDoNotUseIt}}
|
||||
case len(out.When.Constraints) == 1 && out.When.Constraints[0].Branch.IsEmpty():
|
||||
out.When.Constraints[0].Branch = *out.BranchesDoNotUseIt
|
||||
default:
|
||||
return nil, fmt.Errorf("could not apply deprecated branches filter into global when filter")
|
||||
}
|
||||
out.BranchesDoNotUseIt = nil
|
||||
}
|
||||
|
||||
// support deprecated pipeline keyword
|
||||
if len(out.PipelineDoNotUseIt.ContainerList) != 0 && len(out.Steps.ContainerList) == 0 {
|
||||
out.Steps.ContainerList = out.PipelineDoNotUseIt.ContainerList
|
||||
}
|
||||
|
||||
// support deprecated platform filter
|
||||
if out.PlatformDoNotUseIt != "" {
|
||||
if out.Labels == nil {
|
||||
out.Labels = make(map[string]string)
|
||||
}
|
||||
if _, set := out.Labels["platform"]; !set {
|
||||
out.Labels["platform"] = out.PlatformDoNotUseIt
|
||||
}
|
||||
out.PlatformDoNotUseIt = ""
|
||||
}
|
||||
out.PipelineDoNotUseIt.ContainerList = nil
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -139,10 +139,11 @@ func TestParse(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestParseLegacy(t *testing.T) {
|
||||
sampleYamlPipelineLegacy := `
|
||||
platform: linux/amd64
|
||||
sampleYamlPipeline := `
|
||||
labels:
|
||||
platform: linux/amd64
|
||||
|
||||
pipeline:
|
||||
steps:
|
||||
say hello:
|
||||
image: bash
|
||||
commands: echo hello
|
||||
|
@ -164,7 +165,7 @@ pipeline:
|
|||
commands: meh!
|
||||
`
|
||||
|
||||
workflow1, err := ParseString(sampleYamlPipelineLegacy)
|
||||
workflow1, err := ParseString(sampleYamlPipeline)
|
||||
if !assert.NoError(t, err) {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -34,13 +34,6 @@ type (
|
|||
// Undocumented
|
||||
Networks WorkflowNetworks `yaml:"networks,omitempty"`
|
||||
Volumes WorkflowVolumes `yaml:"volumes,omitempty"`
|
||||
|
||||
// Deprecated
|
||||
PlatformDoNotUseIt string `yaml:"platform,omitempty"` // TODO: remove in next major version
|
||||
// Deprecated
|
||||
BranchesDoNotUseIt *constraint.List `yaml:"branches,omitempty"` // TODO: remove in next major version
|
||||
// Deprecated
|
||||
PipelineDoNotUseIt ContainerList `yaml:"pipeline,omitempty"` // TODO: remove in next major version
|
||||
}
|
||||
|
||||
// Workspace defines a pipeline workspace.
|
||||
|
|
|
@ -348,10 +348,10 @@ func TestBranchFilter(t *testing.T) {
|
|||
{Data: []byte(`
|
||||
when:
|
||||
event: push
|
||||
branch: main
|
||||
steps:
|
||||
xxx:
|
||||
image: scratch
|
||||
branches: main
|
||||
`)},
|
||||
{Data: []byte(`
|
||||
when:
|
||||
|
|
Loading…
Reference in a new issue