Skip to content

Commit

Permalink
feat: update
Browse files Browse the repository at this point in the history
  • Loading branch information
ryan-timothy-albert committed Feb 6, 2025
1 parent 27a1e12 commit 2167d7c
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 65 deletions.
2 changes: 1 addition & 1 deletion internal/actions/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func Test() error {
}

if len(testedTargets) == 0 {
files, err := g.GetCommittedFilesFromBaseBranch()
files, err := g.GetChangedFilesForPR()
if err != nil {
fmt.Printf("Failed to get commited files: %s\n", err.Error())
}
Expand Down
100 changes: 36 additions & 64 deletions internal/git/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -916,94 +916,66 @@ func getDownloadLinkFromReleases(releases []*github.RepositoryRelease, version s
return defaultDownloadUrl, defaultTagName
}

func (g *Git) GetCommittedFilesFromBaseBranch() ([]string, error) {
path := environment.GetWorkflowEventPayloadPath()
if path == "" {
func (g *Git) GetChangedFilesForPR() ([]string, error) {
ctx := context.Background()
eventPath := os.Getenv("GITHUB_EVENT_PATH")
if eventPath == "" {
return nil, fmt.Errorf("no workflow event payload path")
}

data, err := os.ReadFile(path)
data, err := os.ReadFile(eventPath)
if err != nil {
return nil, fmt.Errorf("failed to read workflow event payload: %w", err)
}

fmt.Println(string(data))
fmt.Println(environment.GetRef())

var payload struct {
After string `json:"after"`
Repo struct {
DefaultBranch string `json:"default_branch"`
} `json:"repository"`
PullRequest *struct {
Base struct {
Ref string `json:"ref"`
} `json:"base"`
Head struct {
Sha string `json:"sha"`
} `json:"head"`
} `json:"pull_request,omitempty"`
Number int `json:"number"`
}

if err := json.Unmarshal(data, &payload); err != nil {
return nil, fmt.Errorf("failed to unmarshal workflow event payload: %w", err)
}

var baseBranch, headCommitHash string

// **PR Event**
if payload.PullRequest != nil {
baseBranch = payload.PullRequest.Base.Ref
headCommitHash = payload.PullRequest.Head.Sha
} else { // **Branch Push Event**
baseBranch = payload.Repo.DefaultBranch
headCommitHash = payload.After
}

// **Get Base Commit**
baseBranchRef, err := g.repo.Reference(plumbing.ReferenceName(fmt.Sprintf("refs/remotes/origin/%s", baseBranch)), true)
if err != nil {
return nil, fmt.Errorf("failed to get base branch reference: %w", err)
}

baseCommit, err := g.repo.CommitObject(baseBranchRef.Hash())
if err != nil {
return nil, fmt.Errorf("failed to get base commit object: %w", err)
}

// **Get Head Commit**
headCommit, err := g.repo.CommitObject(plumbing.NewHash(headCommitHash))
if err != nil {
return nil, fmt.Errorf("failed to get head commit object: %w", err)
}
prNumber := payload.Number
// This occurs if we come from a non-PR event trigger
if prNumber == 0 {
opts := &github.PullRequestListOptions{
Head: fmt.Sprintf("%s:%s", os.Getenv("GITHUB_REPOSITORY_OWNER"), environment.GetRef()),
State: "open",
}

// **Compute Diff**
baseTree, err := baseCommit.Tree()
if err != nil {
return nil, fmt.Errorf("failed to get base commit tree: %w", err)
}
if prs, _, _ := g.client.PullRequests.List(ctx, os.Getenv("GITHUB_REPOSITORY_OWNER"), getRepo(), opts); len(prs) > 0 {
prNumber = prs[0].GetNumber()
} else {
return nil, fmt.Errorf("no open PR found for %s", environment.GetRef())
}

headTree, err := headCommit.Tree()
if err != nil {
return nil, fmt.Errorf("failed to get head commit tree: %w", err)
}

changes, err := baseTree.Diff(headTree)
if err != nil {
return nil, fmt.Errorf("failed to compute diff: %w", err)
}
opts := &github.ListOptions{PerPage: 100}
var allFiles []string

// **Extract Changed Files**
var files []string
for _, change := range changes {
action, err := change.Action()
// Fetch all changed files of the PR to determine testing coverage
for {
files, resp, err := g.client.PullRequests.ListFiles(ctx, os.Getenv("GITHUB_REPOSITORY_OWNER"), getRepo(), prNumber, opts)
if err != nil {
return nil, fmt.Errorf("failed to get change action: %w", err)
return nil, fmt.Errorf("failed to get changed files: %w", err)
}
if action != merkletrie.Delete {
files = append(files, change.To.Name)

for _, file := range files {
allFiles = append(allFiles, file.GetFilename())
}

if resp.NextPage == 0 {
break
}
opts.Page = resp.NextPage
}

logging.Info("Found %d changed files between %s and %s", len(files), baseBranch, headCommitHash)
return files, nil
return allFiles, nil
}

func (g *Git) GetCommitedFiles() ([]string, error) {
Expand Down

0 comments on commit 2167d7c

Please sign in to comment.