mirror of
https://github.com/apricote/releaser-pleaser.git
synced 2026-01-13 21:21:03 +00:00
Merge 9cb85f630c into 944b70cee9
This commit is contained in:
commit
f17049d4ab
5 changed files with 109 additions and 2 deletions
|
|
@ -104,6 +104,8 @@ func newRunCommand() *cobra.Command {
|
||||||
updaters = append(updaters, updater.Changelog())
|
updaters = append(updaters, updater.Changelog())
|
||||||
case "packagejson":
|
case "packagejson":
|
||||||
updaters = append(updaters, updater.PackageJson())
|
updaters = append(updaters, updater.PackageJson())
|
||||||
|
case "helmchart":
|
||||||
|
updaters = append(updaters, updater.HelmChart())
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("unknown updater: %s", name)
|
return fmt.Errorf("unknown updater: %s", name)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,5 +57,6 @@ Learn more in the [Release Notes customization](../guides/release-notes.md) guid
|
||||||
### Updater
|
### Updater
|
||||||
|
|
||||||
Updaters can update or create files that will be included in [Release Pull Request](#release-pull-request). Examples of Updaters are
|
Updaters can update or create files that will be included in [Release Pull Request](#release-pull-request). Examples of Updaters are
|
||||||
`changelog` for `CHANGELOG.md`, `generic` that can update arbitrary files and
|
`changelog` for `CHANGELOG.md`, `generic` that can update arbitrary files,
|
||||||
`packagejson` that knows how to update Node.JS `package.json` files.
|
`packagejson` that knows how to update Node.JS `package.json` files and
|
||||||
|
`helmchart` for Helm's `Chart.yaml` file.
|
||||||
|
|
@ -31,3 +31,10 @@ Learn more about this updater in ["Updating arbitrary files"](../guides/updating
|
||||||
- **Default**: disabled
|
- **Default**: disabled
|
||||||
|
|
||||||
This updater can update the `version` field in Node.js `package.json` files. The updater is disabled by default.
|
This updater can update the `version` field in Node.js `package.json` files. The updater is disabled by default.
|
||||||
|
|
||||||
|
## Helm's `Chart.yaml` Updater
|
||||||
|
|
||||||
|
- **Name**: `helmchart`
|
||||||
|
- **Default**: disabled
|
||||||
|
|
||||||
|
This updater can update the `version` field in Helm's `Chart.yaml` files. The updater is disabled by default.
|
||||||
|
|
|
||||||
35
internal/updater/helmchart.go
Normal file
35
internal/updater/helmchart.go
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
package updater
|
||||||
|
|
||||||
|
import (
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
// HelmChart creates an updater that modifies the version field in Chart.yaml files
|
||||||
|
func HelmChart() Updater {
|
||||||
|
return helmchart{}
|
||||||
|
}
|
||||||
|
|
||||||
|
type helmchart struct{}
|
||||||
|
|
||||||
|
func (h helmchart) Files() []string {
|
||||||
|
return []string{"Chart.yaml"}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h helmchart) CreateNewFiles() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h helmchart) Update(info ReleaseInfo) func(content string) (string, error) {
|
||||||
|
return func(content string) (string, error) {
|
||||||
|
// Regex to match ^version: ...$ with flexible whitespace in multiline mode
|
||||||
|
versionRegex := regexp.MustCompile(`(?m:^(version:\s*)\S*$)`)
|
||||||
|
|
||||||
|
// Check if the file contains a version field
|
||||||
|
if !versionRegex.MatchString(content) {
|
||||||
|
return content, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the version value while preserving the original formatting
|
||||||
|
return versionRegex.ReplaceAllString(content, `${1}`+info.Version), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
62
internal/updater/helmchart_test.go
Normal file
62
internal/updater/helmchart_test.go
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
package updater
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestHelmChartUpdater_Files(t *testing.T) {
|
||||||
|
assert.Equal(t, []string{"Chart.yaml"}, HelmChart().Files())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHelmChartUpdater_CreateNewFiles(t *testing.T) {
|
||||||
|
assert.False(t, HelmChart().CreateNewFiles())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHelmChartUpdater_Update(t *testing.T) {
|
||||||
|
tests := []updaterTestCase{
|
||||||
|
{
|
||||||
|
name: "simple Chart.yaml",
|
||||||
|
content: "apiVersion: v2\nname: test\nversion: v1.0.0",
|
||||||
|
info: ReleaseInfo{
|
||||||
|
Version: "v2.0.5",
|
||||||
|
},
|
||||||
|
want: "apiVersion: v2\nname: test\nversion: v2.0.5",
|
||||||
|
wantErr: assert.NoError,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "complex Chart.yaml",
|
||||||
|
content: "apiVersion: v2\nname: test\ndescription: testing version update against complex Chart.yaml\ntype: application\nkeywords:\n - testing\n - version\n - update\nversion: 1.0.0\nhome: https://apricote.github.io/releaser-pleaser/\ndependencies:\n - name: somechart\n version: 1.2.3\n",
|
||||||
|
info: ReleaseInfo{
|
||||||
|
Version: "v2.0.0",
|
||||||
|
},
|
||||||
|
want: "apiVersion: v2\nname: test\ndescription: testing version update against complex Chart.yaml\ntype: application\nkeywords:\n - testing\n - version\n - update\nversion: v2.0.0\nhome: https://apricote.github.io/releaser-pleaser/\ndependencies:\n - name: somechart\n version: 1.2.3\n",
|
||||||
|
wantErr: assert.NoError,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "invalid yaml",
|
||||||
|
content: `not yaml`,
|
||||||
|
info: ReleaseInfo{
|
||||||
|
Version: "v2.0.0",
|
||||||
|
},
|
||||||
|
want: `not yaml`,
|
||||||
|
wantErr: assert.NoError,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "yaml without version",
|
||||||
|
content: `apiVersion: v2\nname: test`,
|
||||||
|
info: ReleaseInfo{
|
||||||
|
Version: "v2.0.0",
|
||||||
|
},
|
||||||
|
want: `apiVersion: v2\nname: test`,
|
||||||
|
wantErr: assert.NoError,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
runUpdaterTest(t, HelmChart(), tt)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue