Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add gitbranch and sha into spaces payload #4734

Merged
merged 36 commits into from May 3, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
7da2236
Add gitbranch and sha into spaces payload
mehulkar Apr 26, 2023
305be40
rm debug
mehulkar Apr 27, 2023
084a1e7
comments
mehulkar Apr 27, 2023
5f1a8ae
Merge branch 'main' into mehulkar/turbo-1049-add-git-sha-and-branch-t…
mehulkar Apr 28, 2023
8cfeb18
return struct instead of tuple
mehulkar Apr 28, 2023
213b9f5
Use branch --show-current to get branch name instead
mehulkar Apr 28, 2023
0d57d8c
ONly use stdout, ignore stderr
mehulkar Apr 28, 2023
8d1db8d
git state
mehulkar Apr 28, 2023
4de2dbf
look up env vars more simply
mehulkar Apr 28, 2023
c8553ff
rm comment
mehulkar Apr 28, 2023
0975950
Merge branch 'main' into mehulkar/turbo-1049-add-git-sha-and-branch-t…
mehulkar Apr 28, 2023
9455443
Merge branch 'main' into mehulkar/turbo-1049-add-git-sha-and-branch-t…
mehulkar May 2, 2023
ef0621b
Move gitState to run summary instead of just spaces
mehulkar May 2, 2023
da9917a
add tests, fix key, remove newline char
mehulkar May 2, 2023
1e9d30d
Set CWD when getting git info
mehulkar May 2, 2023
dd4a603
compile err
mehulkar May 2, 2023
35dda2b
Merge branch 'main' into mehulkar/turbo-1049-add-git-sha-and-branch-t…
mehulkar May 2, 2023
c1e3d68
branch names can be anything
mehulkar May 2, 2023
bffe3ce
stringify at the end
mehulkar May 2, 2023
2199840
Merge branch 'main' into mehulkar/turbo-1049-add-git-sha-and-branch-t…
mehulkar May 2, 2023
21ff859
Use scm key/struct naming for run summary, keep git fields for spaces
mehulkar May 2, 2023
f1daab1
Fix tests
mehulkar May 2, 2023
c480e15
add unit tests for git branch/sha
mehulkar May 2, 2023
ced3468
more logging on fail
mehulkar May 2, 2023
23c13ac
print byte string correctly
mehulkar May 2, 2023
cdda67c
setup git first
May 2, 2023
9363c2e
Merge branch 'main' into mehulkar/turbo-1049-add-git-sha-and-branch-t…
May 2, 2023
6e5aa1c
yes
May 2, 2023
fae2b88
only set local git user in test, so it doesn't blow up dev machines
May 3, 2023
c443620
set local without flag
May 3, 2023
29410e3
set --global git config in tests and reset after
mehulkar May 3, 2023
b37ef03
Merge branch 'main' into mehulkar/turbo-1049-add-git-sha-and-branch-t…
May 3, 2023
ae52ed8
Merge branch 'main' into mehulkar/turbo-1049-add-git-sha-and-branch-t…
May 3, 2023
467feb2
show which cmd failed
May 3, 2023
90ee2f5
Ignore errors when no global config exists
May 3, 2023
9440bbe
Merge branch 'main' into mehulkar/turbo-1049-add-git-sha-and-branch-t…
May 3, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
22 changes: 16 additions & 6 deletions cli/internal/ci/vendors.go
Expand Up @@ -15,6 +15,12 @@ type Vendor struct {
Env vendorEnvs
// EvalEnv is key/value map of environment variables that can be used to quickly determine the vendor
EvalEnv map[string]string

// The name of the environment variable that contains the current git sha
ShaEnvVar string

// The name of the environment variable that contains the current checked out branch
BranchEnvVar string
}

// Vendors is a list of common CI/CD vendors (from https://github.com/watson/ci-info/blob/master/vendors.json)
Expand Down Expand Up @@ -107,9 +113,11 @@ var Vendors = []Vendor{
Env: vendorEnvs{Any: []string{"EAS_BUILD"}},
},
{
Name: "GitHub Actions",
Constant: "GITHUB_ACTIONS",
Env: vendorEnvs{Any: []string{"GITHUB_ACTIONS"}},
Name: "GitHub Actions",
Constant: "GITHUB_ACTIONS",
Env: vendorEnvs{Any: []string{"GITHUB_ACTIONS"}},
ShaEnvVar: "GITHUB_SHA",
BranchEnvVar: "GITHUB_REF_NAME",
},
{
Name: "GitLab CI",
Expand Down Expand Up @@ -224,9 +232,11 @@ var Vendors = []Vendor{
Env: vendorEnvs{Any: []string{"TRAVIS"}},
},
{
Name: "Vercel",
Constant: "VERCEL",
Env: vendorEnvs{Any: []string{"NOW_BUILDER", "VERCEL"}},
Name: "Vercel",
Constant: "VERCEL",
Env: vendorEnvs{Any: []string{"NOW_BUILDER", "VERCEL"}},
ShaEnvVar: "VERCEL_GIT_COMMIT_SHA",
BranchEnvVar: "VERCEL_GIT_COMMIT_REF",
},
{
Name: "Visual Studio App Center",
Expand Down
43 changes: 41 additions & 2 deletions cli/internal/runsummary/spaces.go
Expand Up @@ -2,6 +2,8 @@ package runsummary

import (
"github.com/vercel/turbo/cli/internal/ci"
"github.com/vercel/turbo/cli/internal/env"
"github.com/vercel/turbo/cli/internal/scm"
)

// spacesRunResponse deserialized the response from POST Run endpoint
Expand All @@ -19,11 +21,11 @@ type spacesRunPayload struct {
Command string `json:"command,omitempty"` // the thing that kicked off the turbo run
RepositoryPath string `json:"repositoryPath,omitempty"` // where the command was invoked from
Context string `json:"context,omitempty"` // the host on which this Run was executed (e.g. Github Action, Vercel, etc)
GitBranch string `json:"gitBranch"`
GitSha string `json:"gitSha"`
mehulkar marked this conversation as resolved.
Show resolved Hide resolved

// TODO: we need to add these in
// originationUser string
// gitBranch string
// gitSha string
}

// spacesCacheStatus is the same as TaskCacheSummary so we can convert
Expand Down Expand Up @@ -57,13 +59,19 @@ func (rsm *Meta) newSpacesRunCreatePayload() *spacesRunPayload {
if name := ci.Constant(); name != "" {
context = name
}

// Get a list of env vars
sha, branch := getStateOfRepo()

return &spacesRunPayload{
StartTime: startTime,
Status: "running",
Command: rsm.synthesizedCommand,
RepositoryPath: rsm.repoPath.ToString(),
Type: "TURBO",
Context: context,
GitBranch: branch,
GitSha: sha,
}
}

Expand Down Expand Up @@ -94,3 +102,34 @@ func newSpacesTaskPayload(taskSummary *TaskSummary) *spacesTask {
Logs: string(taskSummary.GetLogs()),
}
}

// getStateOfRepo returns the sha and branch when in a git repo
// Otherwise it should return empty strings right now.
// We my add handling of other scms and non-git tracking in the future.
func getStateOfRepo() (string, string) {
mehulkar marked this conversation as resolved.
Show resolved Hide resolved
allEnvVars := env.GetEnvMap()

var sha string
var branch string

// If we're in CI, try to get the values we need from environment variables
if ci.IsCi() {
vendor := ci.Info()
branchVarName := vendor.BranchEnvVar
mehulkar marked this conversation as resolved.
Show resolved Hide resolved
shaVarName := vendor.ShaEnvVar
// Get the values of the vars
vars := env.FromKeys(allEnvVars, []string{shaVarName, branchVarName})
mehulkar marked this conversation as resolved.
Show resolved Hide resolved
sha = vars[shaVarName]
branch = vars[branchVarName]
}

// Otherwise fallback to using `git`
if branch == "" {
branch = scm.GetCurrentBranch()
}
if sha == "" {
sha = scm.GetCurrentSha()
}

return sha, branch
}
22 changes: 22 additions & 0 deletions cli/internal/scm/scm.go
Expand Up @@ -7,6 +7,8 @@
package scm

import (
"os/exec"

"github.com/pkg/errors"

"github.com/vercel/turbo/cli/internal/turbopath"
Expand Down Expand Up @@ -51,3 +53,23 @@ func FromInRepo(repoRoot turbopath.AbsoluteSystemPath) (SCM, error) {
}
return newFallback(dotGitDir.Dir())
}

// GetCurrentBranch returns the current branch
func GetCurrentBranch() string {
command := []string{"rev-parse", "--abbrev-ref", "HEAD"}
mehulkar marked this conversation as resolved.
Show resolved Hide resolved
out, err := exec.Command("git", command...).CombinedOutput()
mehulkar marked this conversation as resolved.
Show resolved Hide resolved
mehulkar marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
return ""
}
return string(out)
}

// GetCurrentSha returns the current SHA
func GetCurrentSha() string {
command := []string{"rev-parse", "HEAD"}
out, err := exec.Command("git", command...).CombinedOutput()
mehulkar marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
return ""
}
return string(out)
}