From d5a3b249c3c17ac11e428c7e3e5f64115d38da36 Mon Sep 17 00:00:00 2001 From: Appu Date: Fri, 19 Aug 2022 15:55:20 -0400 Subject: [PATCH] Add git commitOptions. This means a user can do something like ["-s"] to satisfy DCO bots: https://github.com/apps/dco --- README.md | 6 ++++++ .../net/researchgate/release/GitAdapter.groovy | 5 +++++ .../release/GitReleasePluginTests.groovy | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/README.md b/README.md index c3deaad3..8e95098e 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,12 @@ Below are some properties of the Release Plugin Convention that are specific to main Defines the branch which releases must be done off of. Eg. set to `release` to require releases are done on the `release` branch (or use a regular expression to allow releases from multiple branches, e.g. `/release|main/`). Set to null to ignore. + + Git + commitOptions + {empty} + Defines an array of options to add to the git adapter during a commit. Example `commitOptions = ["-s"]` + Git pushOptions diff --git a/src/main/groovy/net/researchgate/release/GitAdapter.groovy b/src/main/groovy/net/researchgate/release/GitAdapter.groovy index dbb570f9..9952fa79 100644 --- a/src/main/groovy/net/researchgate/release/GitAdapter.groovy +++ b/src/main/groovy/net/researchgate/release/GitAdapter.groovy @@ -40,6 +40,9 @@ class GitAdapter extends BaseScmAdapter { final Property requireBranch @Optional @Input + ListProperty commitOptions + @Optional + @Input final Property pushToRemote @Optional @Input @@ -54,6 +57,7 @@ class GitAdapter extends BaseScmAdapter { GitConfig(Project project) { requireBranch = project.objects.property(String.class).convention('main') + commitOptions = project.objects.listProperty(String.class).convention([]) pushToRemote = project.objects.property(Object.class).convention('origin') pushOptions = project.objects.listProperty(String.class).convention([]) signTag = project.objects.property(Boolean.class).convention(false) @@ -142,6 +146,7 @@ class GitAdapter extends BaseScmAdapter { } else { command << '-a' } + command += extension.git.commitOptions.get() exec(command, directory: workingDirectory, errorPatterns: ['error: ', 'fatal: ']) diff --git a/src/test/groovy/net/researchgate/release/GitReleasePluginTests.groovy b/src/test/groovy/net/researchgate/release/GitReleasePluginTests.groovy index bc5ff8a4..a89f65de 100644 --- a/src/test/groovy/net/researchgate/release/GitReleasePluginTests.groovy +++ b/src/test/groovy/net/researchgate/release/GitReleasePluginTests.groovy @@ -113,4 +113,22 @@ class GitReleasePluginTests extends Specification { then: remoteRepo.list().any { it == 'gradle.properties' } } + + def 'commitOptions are passed through to git command'() { + given: + executor.exec(['git', 'checkout', '-B', 'myBranch'], failOnStderr: false, directory: localRepo, env: [:]) + when: + project.release { + git { + requireBranch.set('myBranch') + commitOptions.set(['-s']) + } + } + (project.tasks.commitNewVersion as CommitNewVersion).commitNewVersion() + String newestCommit = executor.exec(['git', 'show', 'myBranch', '-s'], failOnStderr: false, directory: remoteRepo, env: [:]) + executor.exec(['git', 'checkout', 'myBranch'], failOnStderr: false, directory: remoteRepo, env: [:]) + executor.exec(['git', 'reset', '--hard', 'HEAD'], failOnStderr: false, directory: remoteRepo, env: [:]) + then: + newestCommit.contains("Signed-off-by: Unit Test ") + } }