From f3297977993af979c64faf0b455910e3c72d1cbd Mon Sep 17 00:00:00 2001 From: releaser-pleaser <> Date: Sun, 8 Sep 2024 19:07:31 +0000 Subject: [PATCH 01/10] chore(main): release v0.4.0 --- CHANGELOG.md | 12 ++++++++++++ action.yml | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb47b20..f7be68b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [v0.4.0](https://github.com/apricote/releaser-pleaser/releases/tag/v0.4.0) + +### Features + +- add support for GitLab repositories (#49) + +### Bug Fixes + +- **parser**: continue on unparsable commit message (#48) +- **cli**: command name in help output (#52) +- **parser**: invalid handling of empty lines (#53) + ## [v0.3.0](https://github.com/apricote/releaser-pleaser/releases/tag/v0.3.0) ### :sparkles: Highlights diff --git a/action.yml b/action.yml index 8e3b8e1..f6f1415 100644 --- a/action.yml +++ b/action.yml @@ -21,7 +21,7 @@ inputs: outputs: {} runs: using: 'docker' - image: ghcr.io/apricote/releaser-pleaser:v0.3.0 # x-releaser-pleaser-version + image: ghcr.io/apricote/releaser-pleaser:v0.4.0 # x-releaser-pleaser-version args: - run - --forge=github From 84d4dd9d262b2375c30a9b0582c7d66ec6768e6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sun, 15 Sep 2024 17:18:24 +0200 Subject: [PATCH 02/10] chore(main): release v0.4.0-beta.0 (#50) Co-authored-by: releaser-pleaser <> --- CHANGELOG.md | 12 ++++++++++++ action.yml | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb47b20..80d9bc3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [v0.4.0-beta.0](https://github.com/apricote/releaser-pleaser/releases/tag/v0.4.0-beta.0) + +### Features + +- add support for GitLab repositories (#49) + +### Bug Fixes + +- **parser**: continue on unparsable commit message (#48) +- **cli**: command name in help output (#52) +- **parser**: invalid handling of empty lines (#53) + ## [v0.3.0](https://github.com/apricote/releaser-pleaser/releases/tag/v0.3.0) ### :sparkles: Highlights diff --git a/action.yml b/action.yml index 8e3b8e1..bcadc15 100644 --- a/action.yml +++ b/action.yml @@ -21,7 +21,7 @@ inputs: outputs: {} runs: using: 'docker' - image: ghcr.io/apricote/releaser-pleaser:v0.3.0 # x-releaser-pleaser-version + image: ghcr.io/apricote/releaser-pleaser:v0.4.0-beta.0 # x-releaser-pleaser-version args: - run - --forge=github From da0c07497b7cd4acfb85b6caf15f7ca5d19d1a3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sun, 15 Sep 2024 18:41:32 +0200 Subject: [PATCH 03/10] ci: push all changes to gitlab.com mirror (#57) GitLab only considers repos on the current instance for its CI/CD catalog. We want to publish a GitLab CI/CD component for #4. --- .github/workflows/mirror.yaml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/mirror.yaml diff --git a/.github/workflows/mirror.yaml b/.github/workflows/mirror.yaml new file mode 100644 index 0000000..897cdc5 --- /dev/null +++ b/.github/workflows/mirror.yaml @@ -0,0 +1,28 @@ +name: mirror +on: + push: + branches: [main] + tags: ["*"] + +jobs: + gitlab.com: + runs-on: ubuntu-latest + env: + REMOTE: mirror + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + # Need all to fetch all tags so we can push them + fetch-depth: 0 + + - name: Add Remote + env: + CLONE_URL: "https://releaser-pleaser:${{ secrets.GITLAB_COM_PUSH_TOKEN }}@gitlab.com/apricote/releaser-pleaser.git" + run: git remote add $REMOTE $CLONE_URL + + - name: Push Branches + run: git push --force --all --verbose $REMOTE + + - name: Push Tags + run: git push --force --tags --verbose $REMOTE From 7b49e8ea0c8311fe5ab5f370db8684badab2fcdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sun, 15 Sep 2024 18:43:16 +0200 Subject: [PATCH 04/10] ci: job name may not contain dot (#58) --- .github/workflows/mirror.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/mirror.yaml b/.github/workflows/mirror.yaml index 897cdc5..352ed37 100644 --- a/.github/workflows/mirror.yaml +++ b/.github/workflows/mirror.yaml @@ -5,7 +5,7 @@ on: tags: ["*"] jobs: - gitlab.com: + gitlab-com: runs-on: ubuntu-latest env: REMOTE: mirror From 61cf12a052c86500164821f8812f9202cc1b1961 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sun, 15 Sep 2024 18:46:45 +0200 Subject: [PATCH 05/10] feat: add shell to container image (#59) Images used in GitLab CI need to have a shell included, otherwise the job could not be started. This replaces the default `cgr.dev/chainguard/static` base image with `cgr.dev/chainguard/busybox`. Busybox is the smallest image that includes a functional shell. Needed for #55. --- .ko.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.ko.yaml b/.ko.yaml index c7c0e49..49805d6 100644 --- a/.ko.yaml +++ b/.ko.yaml @@ -1,3 +1,6 @@ defaultPlatforms: - linux/arm64 - - linux/amd64 \ No newline at end of file + - linux/amd64 + +# Need a shell for gitlab-ci +defaultBaseImage: cgr.dev/chainguard/busybox From 8d7b1c9580091b78ef4e68ead6889623f198ff1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sun, 15 Sep 2024 18:54:38 +0200 Subject: [PATCH 06/10] feat(gitlab): add CI/CD component (#55) This adds a GitLab CI/CD component that can be `included` in users GitLab CI configuration to integrate releaser-pleaser. Unlike the GitHub Action, this can not easily run whenever a merge request description is changed, only when changes are pushed to main. --- .gitlab-ci.yml | 15 +++++++++++++++ templates/run.yml | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 .gitlab-ci.yml create mode 100644 templates/run.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..742be9d --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,15 @@ +stages: [release] + +# For the GitLab CI/CD component to be usable, it needs to be published in +# the CI/CD catalog. This happens on new releases. +# As the primary tagging happens on GitHub, we only react to pushed tags +# and create a corresponding GitLab Release. +create-release: + stage: release + image: registry.gitlab.com/gitlab-org/release-cli:latest + script: echo "Creating release $CI_COMMIT_TAG" + rules: + - if: $CI_COMMIT_TAG + release: + tag_name: "$CI_COMMIT_TAG" + description: "$CI_COMMIT_TAG_MESSAGE" diff --git a/templates/run.yml b/templates/run.yml new file mode 100644 index 0000000..e1d16a5 --- /dev/null +++ b/templates/run.yml @@ -0,0 +1,36 @@ +spec: + inputs: + # Remember to update docs/reference/gitlab-ci-component.md + branch: + default: main + description: "This branch is used as the target for releases." + + token: + description: "GitLab token for creating and updating release MRs." + + extra-files: + description: 'List of files that are scanned for version references.' + default: "" + + stage: + default: build + description: 'Defines the build stage' + # Remember to update docs/reference/gitlab-ci-component.md +--- + +releaser-pleaser: + stage: $[[ inputs.stage ]] + rules: + # There is no way to run a pipeline when the MR description is updated :( + - if: $CI_COMMIT_BRANCH == "$[[ inputs.branch ]]" + image: + name: ghcr.io/apricote/releaser-pleaser:v0.4.0-beta.0 # x-releaser-pleaser-version + entrypoint: [""] + variables: + GITLAB_TOKEN: $[[ inputs.token ]] + script: + - | + rp run \ + --forge=gitlab \ + --branch=$[[ inputs.branch ]] \ + --extra-files=$[[ inputs.extra-files ]] From 7a3d46eac7fe23595e8ea90c9be75e5a61c91bf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sun, 15 Sep 2024 18:58:38 +0200 Subject: [PATCH 07/10] ci: update version reference in gitlab ci/cd component (#60) --- .github/workflows/releaser-pleaser.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/releaser-pleaser.yaml b/.github/workflows/releaser-pleaser.yaml index ff1c0fa..543c557 100644 --- a/.github/workflows/releaser-pleaser.yaml +++ b/.github/workflows/releaser-pleaser.yaml @@ -43,3 +43,4 @@ jobs: token: ${{ secrets.RELEASER_PLEASER_TOKEN }} extra-files: | action.yml + templates/run.yml From 2567293368c7c7a3e6050b3ebcf9067209b5660f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sun, 15 Sep 2024 20:59:17 +0200 Subject: [PATCH 08/10] fix: multiple extra-files are not evaluated properly (#61) Quoting issues caused multiple extra-files to be ignored. --- action.yml | 4 +-- cmd/rp/cmd/run.go | 6 +++++ cmd/rp/cmd/run_test.go | 59 ++++++++++++++++++++++++++++++++++++++++++ templates/run.yml | 2 +- 4 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 cmd/rp/cmd/run_test.go diff --git a/action.yml b/action.yml index bcadc15..49bf119 100644 --- a/action.yml +++ b/action.yml @@ -26,7 +26,7 @@ runs: - run - --forge=github - --branch=${{ inputs.branch }} - - --extra-files=${{ inputs.extra-files }} + - --extra-files="${{ inputs.extra-files }}" env: - GITHUB_TOKEN: ${{ inputs.token }} + GITHUB_TOKEN: "${{ inputs.token }}" GITHUB_USER: "oauth2" diff --git a/cmd/rp/cmd/run.go b/cmd/rp/cmd/run.go index 8fe818f..c29047b 100644 --- a/cmd/rp/cmd/run.go +++ b/cmd/rp/cmd/run.go @@ -95,6 +95,12 @@ func run(cmd *cobra.Command, _ []string) error { } func parseExtraFiles(input string) []string { + // We quote the arg to avoid issues with the expected newlines in the value. + // Need to remove those quotes before parsing the data + input = strings.Trim(input, `"`) + // In some situations we get a "\n" sequence, where we actually expect new lines, + // replace the two characters with an actual new line + input = strings.ReplaceAll(input, `\n`, "\n") lines := strings.Split(input, "\n") extraFiles := make([]string, 0, len(lines)) diff --git a/cmd/rp/cmd/run_test.go b/cmd/rp/cmd/run_test.go new file mode 100644 index 0000000..d4cea7a --- /dev/null +++ b/cmd/rp/cmd/run_test.go @@ -0,0 +1,59 @@ +package cmd + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_parseExtraFiles(t *testing.T) { + tests := []struct { + name string + input string + want []string + }{ + { + name: "empty", + input: ``, + want: []string{}, + }, + { + name: "empty quoted", + input: `""`, + want: []string{}, + }, + { + name: "single", + input: `foo.txt`, + want: []string{"foo.txt"}, + }, + { + name: "single quoted", + input: `"foo.txt"`, + want: []string{"foo.txt"}, + }, + { + name: "multiple", + input: `foo.txt +dir/Chart.yaml`, + want: []string{"foo.txt", "dir/Chart.yaml"}, + }, + { + name: "multiple quoted", + input: `"foo.txt +dir/Chart.yaml"`, + want: []string{"foo.txt", "dir/Chart.yaml"}, + }, + { + name: "multiple with broken new lines", + input: `"action.yml\ntemplates/run.yml\n"`, + want: []string{"action.yml", "templates/run.yml"}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := parseExtraFiles(tt.input) + assert.Equal(t, tt.want, got) + }) + } +} diff --git a/templates/run.yml b/templates/run.yml index e1d16a5..27ca27d 100644 --- a/templates/run.yml +++ b/templates/run.yml @@ -33,4 +33,4 @@ releaser-pleaser: rp run \ --forge=gitlab \ --branch=$[[ inputs.branch ]] \ - --extra-files=$[[ inputs.extra-files ]] + --extra-files="$[[ inputs.extra-files ]]" From dc1903c4b4a839a2f60a141ed222e2819901ec44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sun, 15 Sep 2024 21:00:06 +0200 Subject: [PATCH 09/10] chore(main): release v0.4.0-beta.1 (#56) Co-authored-by: releaser-pleaser <> --- CHANGELOG.md | 11 +++++++++++ action.yml | 2 +- templates/run.yml | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80d9bc3..0f187be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [v0.4.0-beta.1](https://github.com/apricote/releaser-pleaser/releases/tag/v0.4.0-beta.1) + +### Features + +- add shell to container image (#59) +- **gitlab**: add CI/CD component (#55) + +### Bug Fixes + +- multiple extra-files are not evaluated properly (#61) + ## [v0.4.0-beta.0](https://github.com/apricote/releaser-pleaser/releases/tag/v0.4.0-beta.0) ### Features diff --git a/action.yml b/action.yml index 49bf119..15c82df 100644 --- a/action.yml +++ b/action.yml @@ -21,7 +21,7 @@ inputs: outputs: {} runs: using: 'docker' - image: ghcr.io/apricote/releaser-pleaser:v0.4.0-beta.0 # x-releaser-pleaser-version + image: ghcr.io/apricote/releaser-pleaser:v0.4.0-beta.1 # x-releaser-pleaser-version args: - run - --forge=github diff --git a/templates/run.yml b/templates/run.yml index 27ca27d..bd762be 100644 --- a/templates/run.yml +++ b/templates/run.yml @@ -24,7 +24,7 @@ releaser-pleaser: # There is no way to run a pipeline when the MR description is updated :( - if: $CI_COMMIT_BRANCH == "$[[ inputs.branch ]]" image: - name: ghcr.io/apricote/releaser-pleaser:v0.4.0-beta.0 # x-releaser-pleaser-version + name: ghcr.io/apricote/releaser-pleaser:v0.4.0-beta.1 # x-releaser-pleaser-version entrypoint: [""] variables: GITLAB_TOKEN: $[[ inputs.token ]] From 334b3d9d275b19af4e0afc973549c668da53d8a2 Mon Sep 17 00:00:00 2001 From: releaser-pleaser <> Date: Sun, 15 Sep 2024 19:00:20 +0000 Subject: [PATCH 10/10] chore(main): release v0.4.0 --- CHANGELOG.md | 15 +++++++++++++++ action.yml | 2 +- templates/run.yml | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f187be..33d6ecd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [v0.4.0](https://github.com/apricote/releaser-pleaser/releases/tag/v0.4.0) + +### Features + +- add support for GitLab repositories (#49) +- add shell to container image (#59) +- **gitlab**: add CI/CD component (#55) + +### Bug Fixes + +- **parser**: continue on unparsable commit message (#48) +- **cli**: command name in help output (#52) +- **parser**: invalid handling of empty lines (#53) +- multiple extra-files are not evaluated properly (#61) + ## [v0.4.0-beta.1](https://github.com/apricote/releaser-pleaser/releases/tag/v0.4.0-beta.1) ### Features diff --git a/action.yml b/action.yml index 15c82df..118385a 100644 --- a/action.yml +++ b/action.yml @@ -21,7 +21,7 @@ inputs: outputs: {} runs: using: 'docker' - image: ghcr.io/apricote/releaser-pleaser:v0.4.0-beta.1 # x-releaser-pleaser-version + image: ghcr.io/apricote/releaser-pleaser:v0.4.0 # x-releaser-pleaser-version args: - run - --forge=github diff --git a/templates/run.yml b/templates/run.yml index bd762be..0531c95 100644 --- a/templates/run.yml +++ b/templates/run.yml @@ -24,7 +24,7 @@ releaser-pleaser: # There is no way to run a pipeline when the MR description is updated :( - if: $CI_COMMIT_BRANCH == "$[[ inputs.branch ]]" image: - name: ghcr.io/apricote/releaser-pleaser:v0.4.0-beta.1 # x-releaser-pleaser-version + name: ghcr.io/apricote/releaser-pleaser:v0.4.0 # x-releaser-pleaser-version entrypoint: [""] variables: GITLAB_TOKEN: $[[ inputs.token ]]