Skip to content

Commit a3aafa8

Browse files
Add --generate-commit-name flag (#282)
* Add --generate-commit-name flag * Update to only use auto-generate if no env / -c commit hash is found * Add more tests, reduce complexity * Apply suggestions from code review Co-authored-by: filip-debricked <[email protected]> --------- Co-authored-by: filip-debricked <[email protected]>
1 parent 7ccd91c commit a3aafa8

File tree

3 files changed

+85
-0
lines changed

3 files changed

+85
-0
lines changed

internal/cmd/scan/scan.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ var callgraphGenerateTimeout int
2121
var callgraphUploadTimeout int
2222
var commitAuthor string
2323
var commitName string
24+
var generateCommitName bool
2425
var debug bool
2526
var exclusions = file.Exclusions()
2627
var inclusions = file.Exclusions()
@@ -68,6 +69,7 @@ const (
6869
TagCommitAsReleaseFlag = "tag-commit-as-release"
6970
TagCommitAsReleaseEnv = "TAG_COMMIT_AS_RELEASE"
7071
ExperimentalFlag = "experimental"
72+
GenerateCommitNameFlag = "generate-commit-name"
7173
)
7274

7375
var scanCmdError error
@@ -88,6 +90,7 @@ If the given path contains a git repository all flags but "integration" will be
8890

8991
cmd.Flags().StringVarP(&repositoryName, RepositoryFlag, "r", "", "repository name")
9092
cmd.Flags().StringVarP(&commitName, CommitFlag, "c", "", "commit hash")
93+
cmd.Flags().BoolVar(&generateCommitName, GenerateCommitNameFlag, false, "auto-generate a commit name if no commit hash is found (in -c or env)")
9194
cmd.Flags().StringVarP(&branchName, BranchFlag, "b", "", "branch name")
9295
cmd.Flags().StringVarP(&commitAuthor, CommitAuthorFlag, "a", "", "commit author")
9396
cmd.Flags().StringVarP(&repositoryUrl, RepositoryUrlFlag, "u", "", "repository URL")
@@ -239,6 +242,7 @@ func RunE(s *scan.IScanner) func(_ *cobra.Command, args []string) error {
239242
VersionHint: viper.GetBool(VersionHintFlag),
240243
RepositoryName: viper.GetString(RepositoryFlag),
241244
CommitName: viper.GetString(CommitFlag),
245+
GenerateCommitName: viper.GetBool(GenerateCommitNameFlag),
242246
BranchName: viper.GetString(BranchFlag),
243247
CommitAuthor: viper.GetString(CommitAuthorFlag),
244248
RepositoryUrl: viper.GetString(RepositoryUrlFlag),

internal/scan/scanner.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"os"
88
"path/filepath"
9+
"time"
910

1011
"github.com/debricked/cli/internal/callgraph"
1112
"github.com/debricked/cli/internal/callgraph/config"
@@ -60,6 +61,7 @@ type DebrickedOptions struct {
6061
VersionHint bool
6162
RepositoryName string
6263
CommitName string
64+
GenerateCommitName bool
6365
BranchName string
6466
CommitAuthor string
6567
RepositoryUrl string
@@ -105,6 +107,7 @@ func (dScanner *DebrickedScanner) Scan(o IOptions) error {
105107

106108
debug.Log("Mapping environment variables...", dOptions.Debug)
107109
MapEnvToOptions(&dOptions, e)
110+
UpdatedEmptyCommitName(&dOptions)
108111

109112
if err := SetWorkingDirectory(&dOptions); err != nil {
110113
return err
@@ -332,6 +335,17 @@ func SetWorkingDirectory(d *DebrickedOptions) error {
332335
return nil
333336
}
334337

338+
func UpdatedEmptyCommitName(o *DebrickedOptions) {
339+
if o.GenerateCommitName && o.CommitName == "" {
340+
debug.Log("No commit name set, generating commit name", o.Debug)
341+
o.CommitName = GenerateCommitNameTimestamp()
342+
}
343+
}
344+
345+
func GenerateCommitNameTimestamp() string {
346+
return fmt.Sprintf("generated-%d", time.Now().Unix())
347+
}
348+
335349
func MapEnvToOptions(o *DebrickedOptions, env env.Env) {
336350
if len(o.RepositoryName) == 0 {
337351
o.RepositoryName = env.Repository

internal/scan/scanner_test.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,40 @@ var cases = []struct {
519519
},
520520
}
521521

522+
func TestUpdateEmptyCommitName(t *testing.T) {
523+
opts := DebrickedOptions{
524+
CommitName: "",
525+
GenerateCommitName: true,
526+
}
527+
528+
UpdatedEmptyCommitName(&opts)
529+
assert.Contains(t, opts.CommitName, "generated-")
530+
}
531+
532+
func TestUpdateEmptyCommitNameNotEmpty(t *testing.T) {
533+
opts := DebrickedOptions{
534+
CommitName: "test",
535+
GenerateCommitName: true,
536+
}
537+
538+
UpdatedEmptyCommitName(&opts)
539+
assert.Equal(t, opts.CommitName, "test")
540+
}
541+
542+
func TestUpdateEmptyCommitNameNoGenerateCommitNameSet(t *testing.T) {
543+
opts := DebrickedOptions{
544+
CommitName: "",
545+
}
546+
547+
UpdatedEmptyCommitName(&opts)
548+
assert.Empty(t, opts.CommitName)
549+
}
550+
551+
func TestGenerateCommitName(t *testing.T) {
552+
res := GenerateCommitNameTimestamp()
553+
assert.Contains(t, res, "generated-")
554+
}
555+
522556
func TestMapEnvToOptions(t *testing.T) {
523557

524558
for _, co := range cases {
@@ -718,6 +752,39 @@ func TestScanWithFingerprintNoEnterprise(t *testing.T) {
718752
assert.Contains(t, cwd, path)
719753
}
720754

755+
func TestScanWithGeneratedCommitName(t *testing.T) {
756+
clientMock := testdata.NewDebClientMock()
757+
addMockedFormatsResponse(clientMock, "package\\.json")
758+
addMockedFileUploadResponse(clientMock)
759+
addMockedFinishResponse(clientMock, http.StatusNoContent)
760+
addMockedStatusResponse(clientMock, http.StatusOK, 100)
761+
762+
scanner := makeScanner(clientMock, nil, nil)
763+
764+
cwd, _ := os.Getwd()
765+
defer resetWd(t, cwd)
766+
767+
path := testdataNpm
768+
repositoryName := path
769+
opts := DebrickedOptions{
770+
Path: path,
771+
Resolve: false,
772+
Fingerprint: false,
773+
CallGraph: false,
774+
Exclusions: nil,
775+
Inclusions: nil,
776+
RepositoryName: repositoryName,
777+
GenerateCommitName: true,
778+
BranchName: "",
779+
RepositoryUrl: "",
780+
IntegrationName: "",
781+
}
782+
err := scanner.Scan(opts)
783+
assert.Nil(t, err)
784+
cwd, _ = os.Getwd()
785+
assert.Contains(t, cwd, path)
786+
}
787+
721788
func TestScanWithCallgraph(t *testing.T) {
722789
if runtime.GOOS == windowsOS {
723790
t.Skipf("TestScan is skipped due to Windows env")

0 commit comments

Comments
 (0)