aboutsummaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorBrad Nabholz <bnabholz@gmail.com>2023-04-06 20:37:08 -0400
committerGitHub <noreply@github.com>2023-04-06 20:37:08 -0400
commit950c93a66a684a84767e9e22a19953d1fc9b43b9 (patch)
tree63fe7804f5432d30505524092bd807a2b1b9ccef /services
parent6eb678374b583079a0a08b7ed0c9ca220c0c0434 (diff)
downloadgitea-950c93a66a684a84767e9e22a19953d1fc9b43b9.tar.gz
gitea-950c93a66a684a84767e9e22a19953d1fc9b43b9.zip
Actions: Use default branch as ref when a branch/tag delete occurs (#23910)
Currently using the tip of main (2c585d62a4ebbb52175b8fd8697458ae1c3b2937) and when deleting a branch (and presumably tag, but not tested), no workflows with `on: [delete]` are being triggered. The runner isn't being notified about them. I see this in the gitea log: `2023/04/04 04:29:36 ...s/notifier_helper.go:102:Notify() [E] an error occurred while executing the NotifyDeleteRef actions method: gitRepo.GetCommit: object does not exist [id: test, rel_path: ]` Understandably the ref has already been deleted and so `GetCommit` fails. Currently at https://github.com/go-gitea/gitea/blob/main/services/actions/notifier_helper.go#L130, if the ref is an empty string it falls back to the default branch name. This PR also checks if it is a `HookEventDelete` and does the same. Currently `${{ github.ref }}` would be equivalent to the deleted branch (if `notify()` succeded), but this PR allows `notify()` to proceed and also aligns it with the GitHub Actions behavior at https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#delete: `$GITHUB_REF` / `${{ github.ref }}` => Default branch (main/master) `$GITHUB_SHA` / `${{ github.sha }}` => Last commit on default branch If the user needs the name of the deleted branch (or tag), it is available as `${{ github.event.ref }}`. There appears to be no way for the user to get the tip commit SHA of the deleted branch (GitHub does not do this either). N.B. there may be other conditions other than `HookEventDelete` where the default branch ref needs swapped in, but this was sufficient for my use case.
Diffstat (limited to 'services')
-rw-r--r--services/actions/notifier_helper.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/services/actions/notifier_helper.go b/services/actions/notifier_helper.go
index 1c1b986a41..49a8c4e744 100644
--- a/services/actions/notifier_helper.go
+++ b/services/actions/notifier_helper.go
@@ -127,6 +127,11 @@ func notify(ctx context.Context, input *notifyInput) error {
defer gitRepo.Close()
ref := input.Ref
+ if input.Event == webhook_module.HookEventDelete {
+ // The event is deleting a reference, so it will fail to get the commit for a deleted reference.
+ // Set ref to empty string to fall back to the default branch.
+ ref = ""
+ }
if ref == "" {
ref = input.Repo.DefaultBranch
}