From 5bf179810b2c530366883e5707b0b4bcbc406a8d Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Sun, 17 Jul 2022 10:08:09 +0300 Subject: [PATCH 01/11] use git2go to get file commit information --- core/cautils/localgitrepository.go | 163 ++++++++++++++++++++---- core/cautils/localgitrepository_test.go | 6 + core/pkg/resourcehandler/filesloader.go | 69 +++++++--- go.mod | 1 + go.sum | 6 + 5 files changed, 203 insertions(+), 42 deletions(-) diff --git a/core/cautils/localgitrepository.go b/core/cautils/localgitrepository.go index 1f6463d9..245c60f0 100644 --- a/core/cautils/localgitrepository.go +++ b/core/cautils/localgitrepository.go @@ -4,26 +4,30 @@ import ( "fmt" "path" "strings" + "time" "github.com/armosec/go-git-url/apis" gitv5 "github.com/go-git/go-git/v5" configv5 "github.com/go-git/go-git/v5/config" plumbingv5 "github.com/go-git/go-git/v5/plumbing" + git2go "github.com/libgit2/git2go/v33" ) type LocalGitRepository struct { - repo *gitv5.Repository - head *plumbingv5.Reference - config *configv5.Config + goGitRepo *gitv5.Repository + git2GoRepo *git2go.Repository + head *plumbingv5.Reference + config *configv5.Config + fileToLastCommit map[string]*git2go.Commit } func NewLocalGitRepository(path string) (*LocalGitRepository, error) { - gitRepo, err := gitv5.PlainOpenWithOptions(path, &gitv5.PlainOpenOptions{DetectDotGit: true}) + goGitRepo, err := gitv5.PlainOpenWithOptions(path, &gitv5.PlainOpenOptions{DetectDotGit: true}) if err != nil { return nil, err } - head, err := gitRepo.Head() + head, err := goGitRepo.Head() if err != nil { return nil, err } @@ -32,15 +36,25 @@ func NewLocalGitRepository(path string) (*LocalGitRepository, error) { return nil, fmt.Errorf("current HEAD reference is not a branch") } - config, err := gitRepo.Config() + config, err := goGitRepo.Config() + if err != nil { + return nil, err + } + + if len(config.Remotes) == 0 { + return nil, fmt.Errorf("no remotes found") + } + + git2GoRepo, err := git2go.OpenRepository(path) if err != nil { return nil, err } return &LocalGitRepository{ - repo: gitRepo, - head: head, - config: config, + goGitRepo: goGitRepo, + head: head, + config: config, + git2GoRepo: git2GoRepo, }, nil } @@ -80,20 +94,7 @@ func (g *LocalGitRepository) GetName() (string, error) { // GetLastCommit get latest commit object func (g *LocalGitRepository) GetLastCommit() (*apis.Commit, error) { - return g.GetFileLastCommit("") -} - -// GetFileLastCommit get file latest commit object, if empty will return latest commit -func (g *LocalGitRepository) GetFileLastCommit(filePath string) (*apis.Commit, error) { - // By default, returns commit information from current HEAD - logOptions := &gitv5.LogOptions{} - - if filePath != "" { - logOptions.FileName = &filePath - logOptions.Order = gitv5.LogOrderCommitterTime // faster -> LogOrderDFSPost - } - - cIter, err := g.repo.Log(logOptions) + cIter, err := g.goGitRepo.Log(&gitv5.LogOptions{}) if err != nil { return nil, err } @@ -117,8 +118,122 @@ func (g *LocalGitRepository) GetFileLastCommit(filePath string) (*apis.Commit, e }, nil } +func (g *LocalGitRepository) getAllCommits() ([]*git2go.Commit, error) { + logItr, itrErr := g.git2GoRepo.Walk() + if itrErr != nil { + + return nil, itrErr + } + + pushErr := logItr.PushHead() + if pushErr != nil { + return nil, pushErr + } + + var allCommits []*git2go.Commit + err := logItr.Iterate(func(commit *git2go.Commit) bool { + if commit != nil { + allCommits = append(allCommits, commit) + return true + } + return false + }) + + if err != nil { + return nil, err + } + + if err != nil { + return nil, err + } + + return allCommits, nil +} + +func (g *LocalGitRepository) GetFileLastCommit(filePath string) (*apis.Commit, error) { + if g.fileToLastCommit == nil { + filePathToCommitTime := map[string]time.Time{} + filePathToCommit := map[string]*git2go.Commit{} + allCommits, _ := g.getAllCommits() + + // builds a map of all files to their last commit + for _, commit := range allCommits { + // Ignore merge commits (2+ parents) + if commit.ParentCount() <= 1 { + tree, err := commit.Tree() + if err != nil { + continue + } + + // ParentCount can be either 1 or 0 (initial commit) + // In case it's the initial commit, prevTree is nil + var prevTree *git2go.Tree + if commit.ParentCount() == 1 { + prevCommit := commit.Parent(0) + prevTree, err = prevCommit.Tree() + if err != nil { + continue + } + } + + diff, err := g.git2GoRepo.DiffTreeToTree(prevTree, tree, nil) + if err != nil { + continue + } + + numDeltas, err := diff.NumDeltas() + if err != nil { + continue + } + + for i := 0; i < numDeltas; i++ { + delta, err := diff.Delta(i) + if err != nil { + continue + } + + deltaFilePath := delta.NewFile.Path + commitTime := commit.Author().When + + // In case we have the commit information for the file which is not the latest - we override it + if currentCommitTime, exists := filePathToCommitTime[deltaFilePath]; exists { + if currentCommitTime.Before(commitTime) { + filePathToCommitTime[deltaFilePath] = commitTime + filePathToCommit[deltaFilePath] = commit + } + } else { + filePathToCommitTime[deltaFilePath] = commitTime + filePathToCommit[deltaFilePath] = commit + } + } + } + } + g.fileToLastCommit = filePathToCommit + } + + if relevantCommit, exists := g.fileToLastCommit[filePath]; exists { + return g.getCommit(relevantCommit), nil + } + + return nil, fmt.Errorf("failed to get commit information for file: %s", filePath) +} + +func (g *LocalGitRepository) getCommit(commit *git2go.Commit) *apis.Commit { + return &apis.Commit{ + SHA: commit.Id().String(), + Author: apis.Committer{ + Name: commit.Author().Name, + Email: commit.Author().Email, + Date: commit.Author().When, + }, + Message: commit.Message(), + Committer: apis.Committer{}, + Files: []apis.Files{}, + } +} + func (g *LocalGitRepository) GetRootDir() (string, error) { - wt, err := g.repo.Worktree() + wt, err := g.goGitRepo.Worktree() if err != nil { return "", fmt.Errorf("failed to get repo root") } diff --git a/core/cautils/localgitrepository_test.go b/core/cautils/localgitrepository_test.go index 1ce827d2..a822fc08 100644 --- a/core/cautils/localgitrepository_test.go +++ b/core/cautils/localgitrepository_test.go @@ -92,6 +92,12 @@ func (s *LocalGitRepositoryTestSuite) TestInvalidRepositoryPath() { } } +func (s *LocalGitRepositoryTestSuite) TestRepositoryWithoutRemotes() { + if _, err := NewLocalGitRepository("/Users/amirmalka/dev/gitwithoutremote"); s.Error(err) { + s.Equal("no remotes found", err.Error()) + } +} + func (s *LocalGitRepositoryTestSuite) TestGetBranchName() { if localRepo, err := NewLocalGitRepository(s.gitRepositoryPath); s.NoError(err) { s.Equal("master", localRepo.GetBranchName()) diff --git a/core/pkg/resourcehandler/filesloader.go b/core/pkg/resourcehandler/filesloader.go index 8af20ffe..0008476c 100644 --- a/core/pkg/resourcehandler/filesloader.go +++ b/core/pkg/resourcehandler/filesloader.go @@ -57,9 +57,9 @@ func (fileHandler *FileResourceHandler) GetResources(sessionObj *cautils.OPASess // Get repo root repoRoot := "" - giRepo, err := cautils.NewLocalGitRepository(path) + gitRepo, err := cautils.NewLocalGitRepository(path) if err == nil { - repoRoot, _ = giRepo.GetRootDir() + repoRoot, _ = gitRepo.GetRootDir() } // load resource from local file system @@ -75,19 +75,36 @@ func (fileHandler *FileResourceHandler) GetResources(sessionObj *cautils.OPASess if err == nil { source = relSource } + + var filetype string + if cautils.IsYaml(source) { + filetype = reporthandling.SourceTypeYaml + } else if cautils.IsJson(source) { + filetype = reporthandling.SourceTypeJson + } else { + continue + } + + var lastCommit reporthandling.LastCommit + commitInfo, _ := gitRepo.GetFileLastCommit(source) + if commitInfo != nil { + lastCommit = reporthandling.LastCommit{ + Hash: commitInfo.SHA, + Date: commitInfo.Author.Date, + CommitterName: commitInfo.Author.Name, + CommitterEmail: commitInfo.Author.Email, + Message: commitInfo.Message, + } + } + + workloadSource := reporthandling.Source{ + RelativePath: source, + FileType: filetype, + LastCommit: lastCommit, + } + for i := range ws { - var filetype string - if cautils.IsYaml(source) { - filetype = reporthandling.SourceTypeYaml - } else if cautils.IsJson(source) { - filetype = reporthandling.SourceTypeJson - } else { - continue - } - workloadIDToSource[ws[i].GetID()] = reporthandling.Source{ - RelativePath: source, - FileType: filetype, - } + workloadIDToSource[ws[i].GetID()] = workloadSource } } @@ -104,12 +121,28 @@ func (fileHandler *FileResourceHandler) GetResources(sessionObj *cautils.OPASess if err == nil { source = relSource } - for i := range ws { - workloadIDToSource[ws[i].GetID()] = reporthandling.Source{ - RelativePath: source, - FileType: reporthandling.SourceTypeHelmChart, + + var lastCommit reporthandling.LastCommit + commitInfo, _ := gitRepo.GetFileLastCommit(source) + if commitInfo != nil { + lastCommit = reporthandling.LastCommit{ + Hash: commitInfo.SHA, + Date: commitInfo.Author.Date, + CommitterName: commitInfo.Author.Name, + CommitterEmail: commitInfo.Author.Email, + Message: commitInfo.Message, } } + + workloadSource := reporthandling.Source{ + RelativePath: source, + FileType: reporthandling.SourceTypeHelmChart, + LastCommit: lastCommit, + } + + for i := range ws { + workloadIDToSource[ws[i].GetID()] = workloadSource + } } if len(helmSourceToWorkloads) > 0 { diff --git a/go.mod b/go.mod index 1c9d9655..7b629b3c 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/go-git/go-git/v5 v5.4.2 github.com/google/uuid v1.3.0 github.com/johnfercher/maroto v0.37.0 + github.com/libgit2/git2go/v33 v33.0.9 github.com/mattn/go-isatty v0.0.14 github.com/olekukonko/tablewriter v0.0.5 github.com/open-policy-agent/opa v0.41.0 diff --git a/go.sum b/go.sum index 7574832f..1ebeec2c 100644 --- a/go.sum +++ b/go.sum @@ -717,6 +717,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -862,6 +864,8 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/libgit2/git2go/v33 v33.0.9 h1:4ch2DJed6IhJO28BEohkUoGvxLsRzUjxljoNFJ6/O78= +github.com/libgit2/git2go/v33 v33.0.9/go.mod h1:KdpqkU+6+++4oHna/MIOgx4GCQ92IPCdpVRMRI80J+4= github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -1356,6 +1360,7 @@ golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -1608,6 +1613,7 @@ golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= From a6d9badc5f97f07bc6795e1f1c75a262a03d5a02 Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Sun, 17 Jul 2022 12:12:40 +0300 Subject: [PATCH 02/11] remove file commit information for windows --- core/cautils/localgitrepository.go | 3 + core/cautils/localgitrepository_test.go | 29 +++-- core/cautils/localgitrepository_windows.go | 125 +++++++++++++++++++++ 3 files changed, 145 insertions(+), 12 deletions(-) create mode 100644 core/cautils/localgitrepository_windows.go diff --git a/core/cautils/localgitrepository.go b/core/cautils/localgitrepository.go index 245c60f0..23496edd 100644 --- a/core/cautils/localgitrepository.go +++ b/core/cautils/localgitrepository.go @@ -1,3 +1,6 @@ +//go:build !windows +// +build !windows + package cautils import ( diff --git a/core/cautils/localgitrepository_test.go b/core/cautils/localgitrepository_test.go index a822fc08..91af359f 100644 --- a/core/cautils/localgitrepository_test.go +++ b/core/cautils/localgitrepository_test.go @@ -6,6 +6,7 @@ import ( "io" "os" "path/filepath" + "runtime" "strings" "testing" @@ -136,24 +137,28 @@ func (s *LocalGitRepositoryTestSuite) TestGetLastCommit() { func (s *LocalGitRepositoryTestSuite) TestGetFileLastCommit() { s.Run("fileA", func() { if localRepo, err := NewLocalGitRepository(s.gitRepositoryPath); s.NoError(err) { - if commit, err := localRepo.GetFileLastCommit("fileA"); s.NoError(err) { - s.Equal("9fae4be19624297947d2b605cefbff516628612d", commit.SHA) - s.Equal("Amir Malka", commit.Author.Name) - s.Equal("amirm@armosec.io", commit.Author.Email) - s.Equal("2022-05-22 18:55:48 +0300 +0300", commit.Author.Date.String()) - s.Equal("added file A\n", commit.Message) + if runtime.GOOS != "windows" { + if commit, err := localRepo.GetFileLastCommit("fileA"); s.NoError(err) { + s.Equal("9fae4be19624297947d2b605cefbff516628612d", commit.SHA) + s.Equal("Amir Malka", commit.Author.Name) + s.Equal("amirm@armosec.io", commit.Author.Email) + s.Equal("2022-05-22 18:55:48 +0300 +0300", commit.Author.Date.String()) + s.Equal("added file A\n", commit.Message) + } } } }) s.Run("fileB", func() { if localRepo, err := NewLocalGitRepository(s.gitRepositoryPath); s.NoError(err) { - if commit, err := localRepo.GetFileLastCommit("dirA/fileB"); s.NoError(err) { - s.Equal("7e09312b8017695fadcd606882e3779f10a5c832", commit.SHA) - s.Equal("Amir Malka", commit.Author.Name) - s.Equal("amirm@armosec.io", commit.Author.Email) - s.Equal("2022-05-22 19:11:57 +0300 +0300", commit.Author.Date.String()) - s.Equal("added file B\n", commit.Message) + if runtime.GOOS != "windows" { + if commit, err := localRepo.GetFileLastCommit("dirA/fileB"); s.NoError(err) { + s.Equal("7e09312b8017695fadcd606882e3779f10a5c832", commit.SHA) + s.Equal("Amir Malka", commit.Author.Name) + s.Equal("amirm@armosec.io", commit.Author.Email) + s.Equal("2022-05-22 19:11:57 +0300 +0300", commit.Author.Date.String()) + s.Equal("added file B\n", commit.Message) + } } } }) diff --git a/core/cautils/localgitrepository_windows.go b/core/cautils/localgitrepository_windows.go new file mode 100644 index 00000000..5a72f597 --- /dev/null +++ b/core/cautils/localgitrepository_windows.go @@ -0,0 +1,125 @@ +//go:build windows +// +build windows + +package cautils + +import ( + "fmt" + "path" + "strings" + + "github.com/armosec/go-git-url/apis" + gitv5 "github.com/go-git/go-git/v5" + configv5 "github.com/go-git/go-git/v5/config" + plumbingv5 "github.com/go-git/go-git/v5/plumbing" +) + +type LocalGitRepository struct { + goGitRepo *gitv5.Repository + head *plumbingv5.Reference + config *configv5.Config +} + +func NewLocalGitRepository(path string) (*LocalGitRepository, error) { + goGitRepo, err := gitv5.PlainOpenWithOptions(path, &gitv5.PlainOpenOptions{DetectDotGit: true}) + if err != nil { + return nil, err + } + + head, err := goGitRepo.Head() + if err != nil { + return nil, err + } + + if !head.Name().IsBranch() { + return nil, fmt.Errorf("current HEAD reference is not a branch") + } + + config, err := goGitRepo.Config() + if err != nil { + return nil, err + } + + if len(config.Remotes) == 0 { + return nil, fmt.Errorf("no remotes found") + } + + return &LocalGitRepository{ + goGitRepo: goGitRepo, + head: head, + config: config, + }, nil +} + +// GetBranchName get current branch name +func (g *LocalGitRepository) GetBranchName() string { + return g.head.Name().Short() +} + +// GetRemoteUrl get default remote URL +func (g *LocalGitRepository) GetRemoteUrl() (string, error) { + branchName := g.GetBranchName() + if branchRef, branchFound := g.config.Branches[branchName]; branchFound { + remoteName := branchRef.Remote + if len(g.config.Remotes[remoteName].URLs) == 0 { + return "", fmt.Errorf("expected to find URLs for remote '%s', branch '%s'", remoteName, branchName) + } + return g.config.Remotes[remoteName].URLs[0], nil + } + + const defaultRemoteName string = "origin" + if len(g.config.Remotes[defaultRemoteName].URLs) == 0 { + return "", fmt.Errorf("expected to find URLs for remote '%s'", defaultRemoteName) + } + return g.config.Remotes[defaultRemoteName].URLs[0], nil +} + +// GetName get origin name without the .git suffix +func (g *LocalGitRepository) GetName() (string, error) { + originUrl, err := g.GetRemoteUrl() + if err != nil { + return "", err + } + baseName := path.Base(originUrl) + // remove .git + return strings.TrimSuffix(baseName, ".git"), nil +} + +// GetLastCommit get latest commit object +func (g *LocalGitRepository) GetLastCommit() (*apis.Commit, error) { + cIter, err := g.goGitRepo.Log(&gitv5.LogOptions{}) + if err != nil { + return nil, err + } + + commit, err := cIter.Next() + defer cIter.Close() + if err != nil { + return nil, err + } + + return &apis.Commit{ + SHA: commit.Hash.String(), + Author: apis.Committer{ + Name: commit.Author.Name, + Email: commit.Author.Email, + Date: commit.Author.When, + }, + Message: commit.Message, + Committer: apis.Committer{}, + Files: []apis.Files{}, + }, nil +} + +func (g *LocalGitRepository) GetFileLastCommit(filePath string) (*apis.Commit, error) { + return nil, nil +} + +func (g *LocalGitRepository) GetRootDir() (string, error) { + wt, err := g.goGitRepo.Worktree() + if err != nil { + return "", fmt.Errorf("failed to get repo root") + } + + return wt.Filesystem.Root(), nil +} From c356246f82210c6bea83e59f3395f6ec91eb53a8 Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Sun, 17 Jul 2022 17:48:19 +0300 Subject: [PATCH 03/11] update build process with libgit2 --- .github/workflows/build.yaml | 10 +++++++++- .github/workflows/build_dev.yaml | 8 +++++++- .github/workflows/master_pr_checks.yaml | 8 +++++++- .gitmodules | 3 +++ build.py | 2 +- build/Dockerfile | 12 ++++++++++-- git2go | 1 + go.mod | 2 ++ go.sum | 2 -- httphandler/build.py | 2 +- httphandler/go.mod | 3 +++ httphandler/go.sum | 4 ++++ install_dependencies.py | 15 +++++++++++++++ 13 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 .gitmodules create mode 160000 git2go create mode 100644 install_dependencies.py diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 01135a11..df24b9d4 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -29,12 +29,18 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Set up Go uses: actions/setup-go@v3 with: go-version: 1.18 # - name: Test cmd pkg # run: cd cmd && go test -v ./... + - name: Install dependencies + run: python3 --version && python3 install_dependencies.py + - name: Test core pkg env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -51,7 +57,7 @@ jobs: ArmoAuthServer: auth.armo.cloud ArmoERServer: report.armo.cloud ArmoWebsite: portal.armo.cloud - CGO_ENABLED: 0 + CGO_ENABLED: 1 run: python3 --version && python3 build.py - name: Smoke Testing @@ -93,6 +99,8 @@ jobs: steps: - uses: actions/checkout@v2 + with: + submodules: recursive - name: Set image version id: image-version diff --git a/.github/workflows/build_dev.yaml b/.github/workflows/build_dev.yaml index ef50af89..fed4dda5 100644 --- a/.github/workflows/build_dev.yaml +++ b/.github/workflows/build_dev.yaml @@ -12,6 +12,8 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v3 + with: + submodules: recursive - name: Set up Go uses: actions/setup-go@v3 with: @@ -27,6 +29,8 @@ jobs: # - name: Test cmd pkg # run: cd cmd && go test -v ./... + - name: Install dependencies + run: python3 --version && python3 install_dependencies.py - name: Test core pkg env: @@ -44,7 +48,7 @@ jobs: ArmoAuthServer: auth.armo.cloud ArmoERServer: report.armo.cloud ArmoWebsite: portal.armo.cloud - CGO_ENABLED: 0 + CGO_ENABLED: 1 run: python3 --version && python3 build.py - name: Smoke Testing @@ -71,6 +75,8 @@ jobs: steps: - uses: actions/checkout@v2 + with: + submodules: recursive - name: Set image version id: image-version diff --git a/.github/workflows/master_pr_checks.yaml b/.github/workflows/master_pr_checks.yaml index ae9a279e..5d58d3be 100644 --- a/.github/workflows/master_pr_checks.yaml +++ b/.github/workflows/master_pr_checks.yaml @@ -13,11 +13,17 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Set up Go uses: actions/setup-go@v3 with: go-version: 1.18 + - name: Install dependencies + run: python3 --version && python3 install_dependencies.py + # - name: Test cmd pkg # run: cd cmd && go test -v ./... @@ -37,7 +43,7 @@ jobs: ArmoAuthServer: auth.armo.cloud ArmoERServer: report.armo.cloud ArmoWebsite: portal.armo.cloud - CGO_ENABLED: 0 + CGO_ENABLED: 1 run: python3 --version && python3 build.py - name: Smoke Testing diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..0cda0556 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "git2go"] + path = git2go + url = https://github.com/libgit2/git2go.git diff --git a/build.py b/build.py index 56e2d646..f035cd4a 100644 --- a/build.py +++ b/build.py @@ -73,7 +73,7 @@ def main(): if armo_auth_server: ldflags += " -X {}={}".format(AUTH_SERVER_CONST, armo_auth_server) - build_command = ["go", "build", "-o", ks_file, "-ldflags" ,ldflags] + build_command = ["go", "build", "-tags=static", "-o", ks_file, "-ldflags" ,ldflags] print("Building kubescape and saving here: {}".format(ks_file)) print("Build command: {}".format(" ".join(build_command))) diff --git a/build/Dockerfile b/build/Dockerfile index d67403cc..27724661 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -8,17 +8,25 @@ ENV CLIENT=$client ENV GO111MODULE= -ENV CGO_ENABLED=0 +ENV CGO_ENABLED=1 # Install required python/pip ENV PYTHONUNBUFFERED=1 -RUN apk add --update --no-cache python3 && ln -sf python3 /usr/bin/python +RUN apk add --update --no-cache python3 git openssl-dev musl-dev gcc make cmake pkgconfig && ln -sf python3 /usr/bin/python RUN python3 -m ensurepip RUN pip3 install --no-cache --upgrade pip setuptools WORKDIR /work ADD . . +# install git2go +WORKDIR /work +RUN rm -rf /work/git2go +RUN git submodule update --init +WORKDIR /work/git2go +RUN git submodule update --init +RUN make install-static + # build kubescape server WORKDIR /work/httphandler RUN python build.py diff --git a/git2go b/git2go new file mode 160000 index 00000000..9db5de10 --- /dev/null +++ b/git2go @@ -0,0 +1 @@ +Subproject commit 9db5de109c166aa802b85cfae2dced3c4728a00d diff --git a/go.mod b/go.mod index 7b629b3c..3845820f 100644 --- a/go.mod +++ b/go.mod @@ -163,3 +163,5 @@ require ( sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect ) + +replace github.com/libgit2/git2go/v33 => ./git2go diff --git a/go.sum b/go.sum index 1ebeec2c..7bc527ea 100644 --- a/go.sum +++ b/go.sum @@ -864,8 +864,6 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/libgit2/git2go/v33 v33.0.9 h1:4ch2DJed6IhJO28BEohkUoGvxLsRzUjxljoNFJ6/O78= -github.com/libgit2/git2go/v33 v33.0.9/go.mod h1:KdpqkU+6+++4oHna/MIOgx4GCQ92IPCdpVRMRI80J+4= github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= diff --git a/httphandler/build.py b/httphandler/build.py index 7be5c512..b5f01c16 100644 --- a/httphandler/build.py +++ b/httphandler/build.py @@ -69,7 +69,7 @@ def main(): if ArmoAuthServer: ldflags += " -X {}={}".format(AUTH_SERVER_CONST, ArmoAuthServer) - build_command = ["go", "build", "-o", ks_file, "-ldflags" ,ldflags] + build_command = ["go", "build", "-tags=static", "-o", ks_file, "-ldflags" ,ldflags] print("Building kubescape and saving here: {}".format(ks_file)) print("Build command: {}".format(" ".join(build_command))) diff --git a/httphandler/go.mod b/httphandler/go.mod index 01489569..f30e39b6 100644 --- a/httphandler/go.mod +++ b/httphandler/go.mod @@ -99,6 +99,7 @@ require ( github.com/json-iterator/go v1.1.12 // indirect github.com/jung-kurt/gofpdf v1.16.2 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/libgit2/git2go/v33 v33.0.9 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect @@ -165,3 +166,5 @@ require ( sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) + +replace github.com/libgit2/git2go/v33 => ../git2go diff --git a/httphandler/go.sum b/httphandler/go.sum index 0077f8b2..7f67971b 100644 --- a/httphandler/go.sum +++ b/httphandler/go.sum @@ -717,6 +717,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -1357,6 +1359,7 @@ golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -1609,6 +1612,7 @@ golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/install_dependencies.py b/install_dependencies.py new file mode 100644 index 00000000..a185aa98 --- /dev/null +++ b/install_dependencies.py @@ -0,0 +1,15 @@ +import os +import platform + + +def main(): + current_platform = platform.system() + if current_platform == "Windows": + pass + elif current_platform == "Linux" or current_platform == "Darwin": + os.system(f"git submodule update --init && cd git2go && git submodule update --init&& make install-static") + else: + raise OSError("Platform %s is not supported!" % (current_platform)) + +if __name__ == '__main__': + main() From a6bae0147668d46d9a3210b55d04d0f0861d8cae Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Sun, 17 Jul 2022 17:58:37 +0300 Subject: [PATCH 04/11] missing tag for go test --- .github/workflows/build.yaml | 4 ++-- .github/workflows/build_dev.yaml | 4 ++-- .github/workflows/master_pr_checks.yaml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index df24b9d4..11967af4 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -44,10 +44,10 @@ jobs: - name: Test core pkg env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: go test -v ./... + run: go test -tags=static -v ./... - name: Test httphandler pkg - run: cd httphandler && go test -v ./... + run: cd httphandler && go test -tags=static -v ./... - name: Build env: diff --git a/.github/workflows/build_dev.yaml b/.github/workflows/build_dev.yaml index fed4dda5..78189a28 100644 --- a/.github/workflows/build_dev.yaml +++ b/.github/workflows/build_dev.yaml @@ -35,10 +35,10 @@ jobs: - name: Test core pkg env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: go test -v ./... + run: go test -tags=static -v ./... - name: Test httphandler pkg - run: cd httphandler && go test -v ./... + run: cd httphandler && go test -tags=static -v ./... - name: Build env: diff --git a/.github/workflows/master_pr_checks.yaml b/.github/workflows/master_pr_checks.yaml index 5d58d3be..41c145cb 100644 --- a/.github/workflows/master_pr_checks.yaml +++ b/.github/workflows/master_pr_checks.yaml @@ -30,10 +30,10 @@ jobs: - name: Test core pkg env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: go test -v ./... + run: go test -tags=static -v ./... - name: Test httphandler pkg - run: cd httphandler && go test -v ./... + run: cd httphandler && go test -tags=static -v ./... - name: Build env: From 44f0473a093f0942774a8685d1cda9786fa5572d Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Sun, 17 Jul 2022 18:35:33 +0300 Subject: [PATCH 05/11] fix tests --- core/cautils/localgitrepository_test.go | 51 ++++++++++++++--------- core/cautils/testdata/withoutremotes.git | Bin 0 -> 21216 bytes 2 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 core/cautils/testdata/withoutremotes.git diff --git a/core/cautils/localgitrepository_test.go b/core/cautils/localgitrepository_test.go index 91af359f..d7a63f7e 100644 --- a/core/cautils/localgitrepository_test.go +++ b/core/cautils/localgitrepository_test.go @@ -13,11 +13,13 @@ import ( "github.com/stretchr/testify/suite" ) +var TEST_REPOS = [...]string{"localrepo", "withoutremotes"} + type LocalGitRepositoryTestSuite struct { suite.Suite - archive *zip.ReadCloser - gitRepositoryPath string - destinationPath string + archives map[string]*zip.ReadCloser + gitRepositoryPaths map[string]string + destinationPath string } func unzipFile(zipPath, destinationFolder string) (*zip.ReadCloser, error) { @@ -62,17 +64,21 @@ func unzipFile(zipPath, destinationFolder string) (*zip.ReadCloser, error) { } func (s *LocalGitRepositoryTestSuite) SetupSuite() { - zippedFixturePath := filepath.Join(".", "testdata", "localrepo.git") + s.archives = make(map[string]*zip.ReadCloser) + s.gitRepositoryPaths = make(map[string]string) + destinationPath := filepath.Join(".", "testdata", "temp") - gitRepositoryPath := filepath.Join(destinationPath, "localrepo") - + s.destinationPath = destinationPath os.RemoveAll(destinationPath) - archive, err := unzipFile(zippedFixturePath, destinationPath) + for _, repo := range TEST_REPOS { + zippedFixturePath := filepath.Join(".", "testdata", repo+".git") + gitRepositoryPath := filepath.Join(destinationPath, repo) + archive, err := unzipFile(zippedFixturePath, destinationPath) - if err == nil { - s.archive = archive - s.gitRepositoryPath = gitRepositoryPath - s.destinationPath = destinationPath + if err == nil { + s.archives[repo] = archive + s.gitRepositoryPaths[repo] = gitRepositoryPath + } } } @@ -81,9 +87,14 @@ func TestLocalGitRepositoryTestSuite(t *testing.T) { } func (s *LocalGitRepositoryTestSuite) TearDownSuite() { - if s.archive != nil { - s.archive.Close() + if s.archives != nil { + for _, archive := range s.archives { + if archive != nil { + archive.Close() + } + } } + os.RemoveAll(s.destinationPath) } @@ -94,19 +105,19 @@ func (s *LocalGitRepositoryTestSuite) TestInvalidRepositoryPath() { } func (s *LocalGitRepositoryTestSuite) TestRepositoryWithoutRemotes() { - if _, err := NewLocalGitRepository("/Users/amirmalka/dev/gitwithoutremote"); s.Error(err) { + if _, err := NewLocalGitRepository(s.gitRepositoryPaths["withoutremotes"]); s.Error(err) { s.Equal("no remotes found", err.Error()) } } func (s *LocalGitRepositoryTestSuite) TestGetBranchName() { - if localRepo, err := NewLocalGitRepository(s.gitRepositoryPath); s.NoError(err) { + if localRepo, err := NewLocalGitRepository(s.gitRepositoryPaths["localrepo"]); s.NoError(err) { s.Equal("master", localRepo.GetBranchName()) } } func (s *LocalGitRepositoryTestSuite) TestGetName() { - if localRepo, err := NewLocalGitRepository(s.gitRepositoryPath); s.NoError(err) { + if localRepo, err := NewLocalGitRepository(s.gitRepositoryPaths["localrepo"]); s.NoError(err) { if name, err := localRepo.GetName(); s.NoError(err) { s.Equal("localrepo", name) } @@ -115,7 +126,7 @@ func (s *LocalGitRepositoryTestSuite) TestGetName() { } func (s *LocalGitRepositoryTestSuite) TestGetOriginUrl() { - if localRepo, err := NewLocalGitRepository(s.gitRepositoryPath); s.NoError(err) { + if localRepo, err := NewLocalGitRepository(s.gitRepositoryPaths["localrepo"]); s.NoError(err) { if url, err := localRepo.GetRemoteUrl(); s.NoError(err) { s.Equal("git@github.com:testuser/localrepo", url) } @@ -123,7 +134,7 @@ func (s *LocalGitRepositoryTestSuite) TestGetOriginUrl() { } func (s *LocalGitRepositoryTestSuite) TestGetLastCommit() { - if localRepo, err := NewLocalGitRepository(s.gitRepositoryPath); s.NoError(err) { + if localRepo, err := NewLocalGitRepository(s.gitRepositoryPaths["localrepo"]); s.NoError(err) { if commit, err := localRepo.GetLastCommit(); s.NoError(err) { s.Equal("7e09312b8017695fadcd606882e3779f10a5c832", commit.SHA) s.Equal("Amir Malka", commit.Author.Name) @@ -136,7 +147,7 @@ func (s *LocalGitRepositoryTestSuite) TestGetLastCommit() { func (s *LocalGitRepositoryTestSuite) TestGetFileLastCommit() { s.Run("fileA", func() { - if localRepo, err := NewLocalGitRepository(s.gitRepositoryPath); s.NoError(err) { + if localRepo, err := NewLocalGitRepository(s.gitRepositoryPaths["localrepo"]); s.NoError(err) { if runtime.GOOS != "windows" { if commit, err := localRepo.GetFileLastCommit("fileA"); s.NoError(err) { s.Equal("9fae4be19624297947d2b605cefbff516628612d", commit.SHA) @@ -150,7 +161,7 @@ func (s *LocalGitRepositoryTestSuite) TestGetFileLastCommit() { }) s.Run("fileB", func() { - if localRepo, err := NewLocalGitRepository(s.gitRepositoryPath); s.NoError(err) { + if localRepo, err := NewLocalGitRepository(s.gitRepositoryPaths["localrepo"]); s.NoError(err) { if runtime.GOOS != "windows" { if commit, err := localRepo.GetFileLastCommit("dirA/fileB"); s.NoError(err) { s.Equal("7e09312b8017695fadcd606882e3779f10a5c832", commit.SHA) diff --git a/core/cautils/testdata/withoutremotes.git b/core/cautils/testdata/withoutremotes.git new file mode 100644 index 0000000000000000000000000000000000000000..6d78412da5fc9cdfed3a4f9b08d15254e1be18b2 GIT binary patch literal 21216 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 Date: Sun, 17 Jul 2022 18:53:17 +0300 Subject: [PATCH 06/11] update submodule commit --- git2go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git2go b/git2go index 9db5de10..eae00773 160000 --- a/git2go +++ b/git2go @@ -1 +1 @@ -Subproject commit 9db5de109c166aa802b85cfae2dced3c4728a00d +Subproject commit eae00773cce87d5282a8ac7c10b5c1961ee6f9cb From 8347fa7874911ba58b2f3878432c84779c6ba4d0 Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Sun, 17 Jul 2022 18:56:20 +0300 Subject: [PATCH 07/11] update build --- build/Dockerfile | 4 +--- install_dependencies.py | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index 27724661..dfde7bca 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -21,10 +21,8 @@ ADD . . # install git2go WORKDIR /work -RUN rm -rf /work/git2go -RUN git submodule update --init +RUN git submodule update --init --recursive WORKDIR /work/git2go -RUN git submodule update --init RUN make install-static # build kubescape server diff --git a/install_dependencies.py b/install_dependencies.py index a185aa98..096f6d0d 100644 --- a/install_dependencies.py +++ b/install_dependencies.py @@ -7,7 +7,7 @@ def main(): if current_platform == "Windows": pass elif current_platform == "Linux" or current_platform == "Darwin": - os.system(f"git submodule update --init && cd git2go && git submodule update --init&& make install-static") + os.system(f"git submodule update --init --recursive --init && cd git2go && make install-static") else: raise OSError("Platform %s is not supported!" % (current_platform)) From 30f454de088d90e3864e61eb3a154cdc6c800a3d Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Mon, 18 Jul 2022 11:01:43 +0300 Subject: [PATCH 08/11] updated workflow to run also on PR to dev --- .github/workflows/{master_pr_checks.yaml => pr_checks.yaml} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename .github/workflows/{master_pr_checks.yaml => pr_checks.yaml} (96%) diff --git a/.github/workflows/master_pr_checks.yaml b/.github/workflows/pr_checks.yaml similarity index 96% rename from .github/workflows/master_pr_checks.yaml rename to .github/workflows/pr_checks.yaml index 41c145cb..b3ca159d 100644 --- a/.github/workflows/master_pr_checks.yaml +++ b/.github/workflows/pr_checks.yaml @@ -1,8 +1,8 @@ -name: master-pr +name: pr-checks on: pull_request: - branches: [ master ] + branches: [ master, dev ] types: [ edited, opened, synchronize, reopened ] jobs: build: From 895f330e14a8c56a97c414024904aa4b27dd06a4 Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Mon, 18 Jul 2022 13:42:58 +0300 Subject: [PATCH 09/11] Replaced install_dependencie with Makefile, updated readme --- .github/workflows/build.yaml | 6 ++-- .github/workflows/build_dev.yaml | 6 ++-- .github/workflows/pr_checks.yaml | 5 +-- Makefile | 20 ++++++++++++ README.md | 55 +++++++++++++++++++++++++++++--- build/Dockerfile | 6 ++-- install_dependencies.py | 15 --------- 7 files changed, 84 insertions(+), 29 deletions(-) create mode 100644 Makefile delete mode 100644 install_dependencies.py diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 11967af4..25b28de4 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -38,8 +38,10 @@ jobs: go-version: 1.18 # - name: Test cmd pkg # run: cd cmd && go test -v ./... - - name: Install dependencies - run: python3 --version && python3 install_dependencies.py + + - name: Install libgit2 + run: make libgit2 + if: matrix.os != 'windows-latest' - name: Test core pkg env: diff --git a/.github/workflows/build_dev.yaml b/.github/workflows/build_dev.yaml index 78189a28..153bab25 100644 --- a/.github/workflows/build_dev.yaml +++ b/.github/workflows/build_dev.yaml @@ -29,8 +29,10 @@ jobs: # - name: Test cmd pkg # run: cd cmd && go test -v ./... - - name: Install dependencies - run: python3 --version && python3 install_dependencies.py + + - name: Install libgit2 + run: make libgit2 + if: matrix.os != 'windows-latest' - name: Test core pkg env: diff --git a/.github/workflows/pr_checks.yaml b/.github/workflows/pr_checks.yaml index b3ca159d..a49c7833 100644 --- a/.github/workflows/pr_checks.yaml +++ b/.github/workflows/pr_checks.yaml @@ -21,8 +21,9 @@ jobs: with: go-version: 1.18 - - name: Install dependencies - run: python3 --version && python3 install_dependencies.py + - name: Install libgit2 + run: make libgit2 + if: matrix.os != 'windows-latest' # - name: Test cmd pkg # run: cd cmd && go test -v ./... diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..1fd42de0 --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +.PHONY: test all build libgit2 + +# default task invoked while running make +all: libgit2 build + +export CGO_ENABLED=1 + +# build and install libgit2 +libgit2: + git submodule update --init --recursive + cd git2go; make install-static + +# go build tags +TAGS = "static" + +build: + go build -v -tags=$(TAGS) . + +test: + go test -v -tags=$(TAGS) ./... diff --git a/README.md b/README.md index 7d656a41..80bea113 100644 --- a/README.md +++ b/README.md @@ -144,9 +144,6 @@ home-manager: Or to your profile (not preferred): `nix-env --install -A nixpkgs.kubescape` -## Install using Go - -With a sufficient version of `go` you can install and build with `go install github.com/armosec/kubescape/v2@latest` ## Usage & Examples @@ -302,7 +299,6 @@ Now you can submit the results to the Kubescape SaaS version - kubescape submit results path/to/results.json ``` - # Integrations ## VS Code Extension @@ -315,6 +311,57 @@ Scan the YAML files while writing them using the [vs code extension](https://git View Kubescape scan results directly in [Lens IDE](https://k8slens.dev/) using kubescape [Lens extension](https://github.com/armosec/lens-kubescape/blob/master/README.md) + +# Building Kubescape + +## Windows + +Simply run `go build .` OR `make build` + +## Linux / MacOS + +1. Install libgit2 dependency (first time): `make libgit2` +2. Build: `make build` +3. Test: `make test` + +## VS code configuration samples + +You can use the samples files below to setup your VS code environment for building and debugging purposes. + + +```json5 +// .vscode/settings.json +{ + "go.testTags": "static", + "go.buildTags": "static", + "go.toolsEnvVars": { + "CGO_ENABLED": "1" + } +} +``` + +```json5 +// .vscode/launch.json∂ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Package", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceFolder}/main.go", + "args": [ + "scan", + "--logger", + "debug" + ], + "buildFlags": "-tags=static" + } + ] +} +``` + # Under the hood ## Technology diff --git a/build/Dockerfile b/build/Dockerfile index dfde7bca..542bc210 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -19,11 +19,9 @@ RUN pip3 install --no-cache --upgrade pip setuptools WORKDIR /work ADD . . -# install git2go +# install libgit2 WORKDIR /work -RUN git submodule update --init --recursive -WORKDIR /work/git2go -RUN make install-static +RUN rm -rf git2go && make libgit2 # build kubescape server WORKDIR /work/httphandler diff --git a/install_dependencies.py b/install_dependencies.py deleted file mode 100644 index 096f6d0d..00000000 --- a/install_dependencies.py +++ /dev/null @@ -1,15 +0,0 @@ -import os -import platform - - -def main(): - current_platform = platform.system() - if current_platform == "Windows": - pass - elif current_platform == "Linux" or current_platform == "Darwin": - os.system(f"git submodule update --init --recursive --init && cd git2go && make install-static") - else: - raise OSError("Platform %s is not supported!" % (current_platform)) - -if __name__ == '__main__': - main() From 0feca50ebbac9b21aa60e533d6138ab8fe2f4ae9 Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Mon, 18 Jul 2022 15:35:25 +0300 Subject: [PATCH 10/11] fix README --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 80bea113..770e8b93 100644 --- a/README.md +++ b/README.md @@ -320,7 +320,10 @@ Simply run `go build .` OR `make build` ## Linux / MacOS -1. Install libgit2 dependency (first time): `make libgit2` +You should have cmake installed, if not + +1. Install libgit2 dependency: `make libgit2` +> `cmake` is required to build libgit2. You can install it by running `sudo apt-get install cmake` (Linux) or `brew install cmake` (MacOS) 2. Build: `make build` 3. Test: `make test` @@ -341,7 +344,7 @@ You can use the samples files below to setup your VS code environment for buildi ``` ```json5 -// .vscode/launch.json∂ +// .vscode/launch.json { "version": "0.2.0", "configurations": [ From 26bbcae0bd81e23e11cee1c774f946fecae798e4 Mon Sep 17 00:00:00 2001 From: Amir Malka Date: Mon, 18 Jul 2022 16:44:59 +0300 Subject: [PATCH 11/11] updated README --- README.md | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 770e8b93..5202fa97 100644 --- a/README.md +++ b/README.md @@ -316,16 +316,34 @@ View Kubescape scan results directly in [Lens IDE](https://k8slens.dev/) using k ## Windows -Simply run `go build .` OR `make build` +``` +go build . +``` +OR +``` +make build +``` ## Linux / MacOS -You should have cmake installed, if not +1. Install libgit2 dependency + + ``` + make libgit2 + ``` -1. Install libgit2 dependency: `make libgit2` > `cmake` is required to build libgit2. You can install it by running `sudo apt-get install cmake` (Linux) or `brew install cmake` (MacOS) -2. Build: `make build` -3. Test: `make test` + +2. Build + + ``` + make build + ``` +3. Test + + ``` + make test + ``` ## VS code configuration samples