diff --git a/CHANGELOG.md b/CHANGELOG.md index d71c82685..59e341c26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add changelog validation workflow for release PRs. + ## [7.3.0] - 2025-06-24 ## [7.2.7] - 2025-06-11 diff --git a/cmd/gen/workflows/runner.go b/cmd/gen/workflows/runner.go index a20c93b9f..fe6881682 100644 --- a/cmd/gen/workflows/runner.go +++ b/cmd/gen/workflows/runner.go @@ -55,6 +55,7 @@ func (r *runner) run(ctx context.Context, cmd *cobra.Command, args []string) err inputs := []input.Input{ workflowsInput.CreateRelease(), workflowsInput.CreateReleasePR(), + workflowsInput.ValidateChangelog(), } if r.flag.Language == "go" { diff --git a/pkg/gen/input/workflows/internal/file/validate_changelog.go b/pkg/gen/input/workflows/internal/file/validate_changelog.go new file mode 100644 index 000000000..ff8cbcd45 --- /dev/null +++ b/pkg/gen/input/workflows/internal/file/validate_changelog.go @@ -0,0 +1,31 @@ +package file + +import ( + _ "embed" + + "github.com/giantswarm/devctl/v7/pkg/gen/input" + "github.com/giantswarm/devctl/v7/pkg/gen/input/workflows/internal/params" +) + +//go:embed validate_changelog.yaml.template +var validateChangelogTemplate string + +//go:generate go run ../../../update-template-sha.go validate_changelog.yaml.template +//go:embed validate_changelog.yaml.template.sha +var validateChangelogTemplateSha string + +func NewValidateChangelogInput(p params.Params) input.Input { + i := input.Input{ + Path: params.RegenerableFileName(p, "validate_changelog.yaml"), + TemplateBody: validateChangelogTemplate, + TemplateDelims: input.InputTemplateDelims{ + Left: "{{{{", + Right: "}}}}", + }, + TemplateData: map[string]interface{}{ + "Header": params.Header("#", validateChangelogTemplateSha), + }, + } + + return i +} diff --git a/pkg/gen/input/workflows/internal/file/validate_changelog.yaml.template b/pkg/gen/input/workflows/internal/file/validate_changelog.yaml.template new file mode 100644 index 000000000..23fe8124f --- /dev/null +++ b/pkg/gen/input/workflows/internal/file/validate_changelog.yaml.template @@ -0,0 +1,34 @@ +{{{{ .Header }}}} +name: Validate changelog + +on: + workflow_call: + pull_request: + types: [opened, synchronize, reopened] + paths: + - 'CHANGELOG.md' + branches: + - 'legacy#release#v*.*.*' + - 'main#release#v*.*.*' + - 'main#release#major' + - 'main#release#minor' + - 'main#release#patch' + - 'master#release#v*.*.*' + - 'master#release#major' + - 'master#release#minor' + - 'master#release#patch' + - 'release#v*.*.*' + - 'release#major' + - 'release#minor' + - 'release#patch' + - 'release-v*.*.x#release#v*.*.*' + # "!" negates previous positive patterns so it has to be at the end. + - '!release-v*.x.x#release#v*.*.*' + +permissions: + contents: read + pull-requests: write + +jobs: + validate-changelog: + uses: giantswarm/github-workflows/.github/workflows/validate-changelog.yaml@3681e34c08ca044821ef7c1c037cf8b859194777 diff --git a/pkg/gen/input/workflows/workflows.go b/pkg/gen/input/workflows/workflows.go index e1f694d81..3dd1dee4c 100644 --- a/pkg/gen/input/workflows/workflows.go +++ b/pkg/gen/input/workflows/workflows.go @@ -83,3 +83,7 @@ func (w *Workflows) RunOSSFScorecard() input.Input { func (w *Workflows) UpdateChart() input.Input { return file.NewUpdateChartInput(w.params) } + +func (w *Workflows) ValidateChangelog() input.Input { + return file.NewValidateChangelogInput(w.params) +}