Support setting GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL

Our autobump workflow sets the author and committer to the user who
triggered the workflow, defaulting to @BrewTestBot for scheduled runs.

This can be confusing for maintainers when GitHub shows up as
"Unverified" because the commit is signed with @BrewTestBot's key.[^1]

Let's fix that by configuring our autobump workflow to always commit as
@BrewTestBot, so that the committer matches the GPG signature. To do
that, we need to add support for setting `GIT_COMMITTER_NAME` and
`GIT_COMMITTER_EMAIL`.

[^1]: See, for example, Homebrew/homebrew-core#197234.
This commit is contained in:
Carlo Cabrera 2024-11-10 23:31:01 +08:00 committed by Carlo Cabrera
parent 284035d624
commit 1fbe4366a0
No known key found for this signature in database
GPG Key ID: C74D447FC549A1D0
4 changed files with 29 additions and 5 deletions

View File

@ -273,11 +273,19 @@ module Homebrew
HOMEBREW_GITHUB_PACKAGES_USER: {
description: "Use this username when accessing the GitHub Packages Registry (where bottles may be stored).",
},
HOMEBREW_GIT_COMMITTER_EMAIL: {
description: "Set the Git committer email to this value.",
},
HOMEBREW_GIT_COMMITTER_NAME: {
description: "Set the Git committer name to this value.",
},
HOMEBREW_GIT_EMAIL: {
description: "Set the Git author and committer email to this value.",
description: "Set the Git author name and, if `HOMEBREW_GIT_COMMITTER_EMAIL` is unset, committer email to " \
"this value.",
},
HOMEBREW_GIT_NAME: {
description: "Set the Git author and committer name to this value.",
description: "Set the Git author name and, if `HOMEBREW_GIT_COMMITTER_NAME` is unset, committer name to " \
"this value.",
},
HOMEBREW_GIT_PATH: {
description: "Linux only: Set this value to a new enough `git` executable for Homebrew to use.",

View File

@ -160,6 +160,12 @@ module Homebrew::EnvConfig
sig { returns(T.nilable(::String)) }
def ftp_proxy; end
sig { returns(T.nilable(::String)) }
def git_committer_email; end
sig { returns(T.nilable(::String)) }
def git_committer_name; end
sig { returns(T.nilable(::String)) }
def git_email; end

View File

@ -119,12 +119,21 @@ module Utils
ENV["GIT_COMMITTER_NAME"] = Homebrew::EnvConfig.git_name if committer
end
return unless Homebrew::EnvConfig.git_email
if Homebrew::EnvConfig.git_committer_name && committer
ENV["GIT_COMMITTER_NAME"] = Homebrew::EnvConfig.git_committer_name
end
if Homebrew::EnvConfig.git_email
ENV["GIT_AUTHOR_EMAIL"] = Homebrew::EnvConfig.git_email if author
ENV["GIT_COMMITTER_EMAIL"] = Homebrew::EnvConfig.git_email if committer
end
return unless committer
return unless Homebrew::EnvConfig.git_committer_email
ENV["GIT_COMMITTER_EMAIL"] = Homebrew::EnvConfig.git_committer_email
end
def self.setup_gpg!
gnupg_bin = HOMEBREW_PREFIX/"opt/gnupg/bin"
return unless gnupg_bin.directory?

View File

@ -756,6 +756,7 @@ module GitHub
safe_system "git", "add", *changed_files
safe_system "git", "checkout", "--no-track", "-b", branch, "#{remote}/#{remote_branch}" unless args.commit?
Utils::Git.set_name_email!
safe_system "git", "commit", "--no-edit", "--verbose",
"--message=#{commit_message}",
"--", *changed_files