vet/pkg/reporter/github_sync_resolver.go
Sahil Bansal 3d6d8ed036
Add github actions sync resolver (#539)
* feat: add GHA env resolver

* refactor: expose sync reporter resolver constructors

* fix: use os.LookupEnv for better GHA detection

* fix typo

* use environment sync resolver

* test: add test cases & fix naming

* Update pkg/reporter/sync_test.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Sahil Bansal <bansalsahil315@gmail.com>

* modify sync resolver tests

* fix tests failing in ci/cd

---------

Signed-off-by: Sahil Bansal <bansalsahil315@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-21 09:11:24 +05:30

54 lines
1.7 KiB
Go

package reporter
import (
"os"
controltowerv1pb "buf.build/gen/go/safedep/api/protocolbuffers/go/safedep/messages/controltower/v1"
controltowerv1 "buf.build/gen/go/safedep/api/protocolbuffers/go/safedep/services/controltower/v1"
)
type githubActionResolver struct{}
func GithubActionsSyncReporterResolver() SyncReporterEnvResolver {
return &githubActionResolver{}
}
var _ SyncReporterEnvResolver = &githubActionResolver{}
func (g *githubActionResolver) GetProjectSource() controltowerv1pb.Project_Source {
return controltowerv1pb.Project_SOURCE_GITHUB
}
func (g *githubActionResolver) GetProjectURL() string {
return os.Getenv("GITHUB_SERVER_URL") + "/" + os.Getenv("GITHUB_REPOSITORY")
}
func (g *githubActionResolver) GitRef() string {
return os.Getenv("GITHUB_REF")
}
func (g *githubActionResolver) GitSha() string {
return os.Getenv("GITHUB_SHA")
}
func (g *githubActionResolver) Trigger() controltowerv1.ToolTrigger {
switch eventName := os.Getenv("GITHUB_EVENT_NAME"); eventName {
case "push":
return controltowerv1.ToolTrigger_TOOL_TRIGGER_PUSH
case "pull_request", "pull_request_target":
return controltowerv1.ToolTrigger_TOOL_TRIGGER_PULL_REQUEST
case "create":
// In GitHub Actions, 'create' event with ref_type=tag indicates a tag was created
if os.Getenv("GITHUB_REF_TYPE") == "tag" {
return controltowerv1.ToolTrigger_TOOL_TRIGGER_TAG
}
return controltowerv1.ToolTrigger_TOOL_TRIGGER_UNSPECIFIED
case "schedule":
return controltowerv1.ToolTrigger_TOOL_TRIGGER_SCHEDULED
case "workflow_dispatch", "repository_dispatch":
return controltowerv1.ToolTrigger_TOOL_TRIGGER_MANUAL
default:
return controltowerv1.ToolTrigger_TOOL_TRIGGER_UNSPECIFIED
}
}