Skip to content

Commit

Permalink
feat: CDK .dev file info (#1462)
Browse files Browse the repository at this point in the history
  • Loading branch information
jon-stewart authored Nov 30, 2023
1 parent 3e2f4ff commit 144c65b
Show file tree
Hide file tree
Showing 8 changed files with 133 additions and 67 deletions.
12 changes: 2 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -212,16 +212,8 @@ protoc-python: install-tools
--grpc_python_out=./cli/cdk/python proto/v1/*.proto

.PHONY: install-cli
install-cli: build-cli-cross-platform ## Build and install the Lacework CLI binary at /usr/local/bin/lacework
ifeq (x86_64, $(shell uname -m))
mv bin/$(PACKAGENAME)-$(shell uname -s | tr '[:upper:]' '[:lower:]')-amd64 /usr/local/bin/$(CLINAME)
else ifeq (arm64, $(shell uname -m))
mv bin/$(PACKAGENAME)-$(shell uname -s | tr '[:upper:]' '[:lower:]')-arm64 /usr/local/bin/$(CLINAME)
else ifeq (aarch64, $(shell uname -m))
mv bin/$(PACKAGENAME)-$(shell uname -s | tr '[:upper:]' '[:lower:]')-arm64 /usr/local/bin/$(CLINAME)
else
mv bin/$(PACKAGENAME)-$(shell uname -s | tr '[:upper:]' '[:lower:]')-386 /usr/local/bin/$(CLINAME)
endif
install-cli: build ## Build and install the Lacework CLI binary at /usr/local/bin/lacework
mv bin/lacework /usr/local/bin/$(CLINAME)
@echo "\nThe lacework cli has been installed at /usr/local/bin"

.PHONY: release
Expand Down
31 changes: 17 additions & 14 deletions lwcomponent/api_info.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@ type ApiInfo interface {
}

type apiInfo struct {
id int32
name string
version semver.Version
allVersions []*semver.Version
desc string
sizeKB int64
deprecated bool
id int32
name string
version semver.Version
allVersions []*semver.Version
desc string
sizeKB int64
deprecated bool
componentType Type
}

func NewAPIInfo(
Expand All @@ -32,15 +33,17 @@ func NewAPIInfo(
desc string,
size int64,
deprecated bool,
componentType Type,
) ApiInfo {
return &apiInfo{
id: id,
name: name,
version: *version,
allVersions: allVersions,
desc: desc,
sizeKB: size,
deprecated: deprecated,
id: id,
name: name,
version: *version,
allVersions: allVersions,
desc: desc,
sizeKB: size,
deprecated: deprecated,
componentType: componentType,
}
}

Expand Down
4 changes: 2 additions & 2 deletions lwcomponent/api_info_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func TestApiInfoId(t *testing.T) {

var id int32 = 23

info := lwcomponent.NewAPIInfo(id, "test", version, allVersions, "", 0, false)
info := lwcomponent.NewAPIInfo(id, "test", version, allVersions, "", 0, false, lwcomponent.BinaryType)

result := info.Id()
assert.Equal(t, id, result)
Expand All @@ -32,7 +32,7 @@ func TestApiInfoLatestVersion(t *testing.T) {
panic(err)
}

info := lwcomponent.NewAPIInfo(1, "test", version, allVersions, "", 0, false)
info := lwcomponent.NewAPIInfo(1, "test", version, allVersions, "", 0, false, lwcomponent.BinaryType)

result := info.LatestVersion()
assert.Equal(t, expectedVer, result.String())
Expand Down
42 changes: 32 additions & 10 deletions lwcomponent/catalog.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,35 +265,57 @@ func NewCatalog(client *api.Client, stageConstructor StageConstructor) (*Catalog
return nil, errors.Wrap(err, fmt.Sprintf("unable to fetch component '%s' versions", c.Name))
}

api := NewAPIInfo(c.Id, c.Name, ver, allVersions, c.Description, c.Size, c.Deprecated)
api := NewAPIInfo(c.Id, c.Name, ver, allVersions, c.Description, c.Size, c.Deprecated, Type(c.ComponentType))

host, found := localComponents[c.Name]
if found {
delete(localComponents, c.Name)
}

component := NewCDKComponent(c.Name, Type(c.ComponentType), api, host)
component := NewCDKComponent(c.Name, c.Description, Type(c.ComponentType), api, host)

cdkComponents[c.Name] = component
}

for _, localHost := range localComponents {
// @jon-stewart: TODO: local specification
cdkComponents[localHost.Name()] = NewCDKComponent(localHost.Name(), BinaryType, nil, localHost)
if localHost.Development() {
devInfo, err := NewDevInfo(localHost.Dir())
if err != nil {
return nil, err
}

cdkComponents[localHost.Name()] = NewCDKComponent(
localHost.Name(),
devInfo.Desc,
devInfo.ComponentType,
nil,
localHost)
} else {
// @jon-stewart: persisted API info
cdkComponents[localHost.Name()] = NewCDKComponent(localHost.Name(), "", BinaryType, nil, localHost)
}
}

return &Catalog{client, cdkComponents, stageConstructor}, nil
}

func LocalComponents() (components []CDKComponent, err error) {
var localHost map[string]HostInfo

localHostInfo, err := loadLocalComponents()
if err != nil {
return
}
localHost, err = loadLocalComponents()

for _, l := range localHost {
if l.Development() {
devInfo, err := NewDevInfo(l.Dir())
if err != nil {
return nil, err
}

for _, l := range localHostInfo {
components = append(components, NewCDKComponent(l.Name(), BinaryType, nil, l))
components = append(components, NewCDKComponent(l.Name(), devInfo.Desc, devInfo.ComponentType, nil, l))
} else {
// @jon-stewart: persisted API info
components = append(components, NewCDKComponent(l.Name(), "", BinaryType, nil, l))
}
}

return
Expand Down
9 changes: 8 additions & 1 deletion lwcomponent/catalog_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -896,7 +896,14 @@ func CreateLocalComponent(componentName string, version string, development bool
}

if development {
if _, err := os.Create(filepath.Join(path, lwcomponent.DevelopmentFile)); err != nil {
data, err := json.Marshal(lwcomponent.DevInfo{Name: componentName, Version: version, Desc: "", ComponentType: lwcomponent.BinaryType})
if err != nil {
panic(err)
}

fmt.Println(filepath.Join(path, lwcomponent.DevelopmentFile))

if err := os.WriteFile(filepath.Join(path, lwcomponent.DevelopmentFile), data, os.ModePerm); err != nil {
panic(err)
}
}
Expand Down
15 changes: 8 additions & 7 deletions lwcomponent/cdk_component.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ type CDKComponent struct {
stage Stager
}

func NewCDKComponent(name string, componentType Type, apiInfo ApiInfo, hostInfo HostInfo) CDKComponent {
func NewCDKComponent(name string, desc string, componentType Type, apiInfo ApiInfo, hostInfo HostInfo) CDKComponent {
var (
exec Executer = &nonExecutable{}
)
Expand All @@ -48,12 +48,13 @@ func NewCDKComponent(name string, componentType Type, apiInfo ApiInfo, hostInfo
}

return CDKComponent{
Name: name,
Type: componentType,
Status: status,
Exec: exec,
apiInfo: apiInfo,
hostInfo: hostInfo,
Name: name,
Description: desc,
Type: componentType,
Status: status,
Exec: exec,
apiInfo: apiInfo,
hostInfo: hostInfo,
}
}

Expand Down
46 changes: 23 additions & 23 deletions lwcomponent/cdk_component_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ func TestNewCDKComponent(t *testing.T) {
defer ResetHome(home)

t.Run("UnknownStatus", func(t *testing.T) {
component := lwcomponent.NewCDKComponent("unknown", lwcomponent.BinaryType, nil, nil)
component := lwcomponent.NewCDKComponent("unknown", "", lwcomponent.BinaryType, nil, nil)

assert.Equal(t, lwcomponent.UnknownStatus, component.Status)
})
Expand All @@ -25,9 +25,9 @@ func TestNewCDKComponent(t *testing.T) {
version, _ := semver.NewVersion("1.1.1")
allVersions := []*semver.Version{version}

apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false)
apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false, lwcomponent.BinaryType)

component := lwcomponent.NewCDKComponent(name, lwcomponent.BinaryType, apiInfo, nil)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.BinaryType, apiInfo, nil)

assert.Equal(t, lwcomponent.NotInstalled, component.Status)
})
Expand All @@ -41,15 +41,15 @@ func TestNewCDKComponent(t *testing.T) {
version, _ := semver.NewVersion(ver)
allVersions := []*semver.Version{version}

apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false)
apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false, lwcomponent.BinaryType)

CreateLocalComponent(name, ver, false)

dir, _ := lwcomponent.CatalogCacheDir()

hostInfo := lwcomponent.NewHostInfo(filepath.Join(dir, name))

component := lwcomponent.NewCDKComponent(name, lwcomponent.BinaryType, apiInfo, hostInfo)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.BinaryType, apiInfo, hostInfo)

assert.Equal(t, lwcomponent.Installed, component.Status)
})
Expand All @@ -65,15 +65,15 @@ func TestNewCDKComponent(t *testing.T) {
installedVersion, _ := semver.NewVersion(installVer)
allVersions := []*semver.Version{version, installedVersion}

apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false)
apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false, lwcomponent.BinaryType)

CreateLocalComponent(name, installVer, false)

dir, _ := lwcomponent.CatalogCacheDir()

hostInfo := lwcomponent.NewHostInfo(filepath.Join(dir, name))

component := lwcomponent.NewCDKComponent(name, lwcomponent.BinaryType, apiInfo, hostInfo)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.BinaryType, apiInfo, hostInfo)

assert.Equal(t, lwcomponent.UpdateAvailable, component.Status)
})
Expand All @@ -90,7 +90,7 @@ func TestNewCDKComponent(t *testing.T) {

hostInfo := lwcomponent.NewHostInfo(filepath.Join(dir, name))

component := lwcomponent.NewCDKComponent(name, lwcomponent.BinaryType, nil, hostInfo)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.BinaryType, nil, hostInfo)

assert.Equal(t, lwcomponent.InstalledDeprecated, component.Status)
})
Expand All @@ -106,12 +106,12 @@ func TestNewCDKComponent(t *testing.T) {

CreateLocalComponent(name, ver, false)

apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, true)
apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, true, lwcomponent.BinaryType)

dir, _ := lwcomponent.CatalogCacheDir()
hostInfo := lwcomponent.NewHostInfo(filepath.Join(dir, name))

component := lwcomponent.NewCDKComponent(name, lwcomponent.BinaryType, apiInfo, hostInfo)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.BinaryType, apiInfo, hostInfo)

assert.Equal(t, lwcomponent.InstalledDeprecated, component.Status)
})
Expand All @@ -124,9 +124,9 @@ func TestNewCDKComponent(t *testing.T) {
version, _ := semver.NewVersion("1.1.1")
allVersions := []*semver.Version{version}

apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, true)
apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, true, lwcomponent.BinaryType)

component := lwcomponent.NewCDKComponent(name, lwcomponent.BinaryType, apiInfo, nil)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.BinaryType, apiInfo, nil)

assert.Equal(t, lwcomponent.NotInstalledDeprecated, component.Status)
})
Expand All @@ -141,15 +141,15 @@ func TestNewCDKComponent(t *testing.T) {
version, _ := semver.NewVersion(apiVer)
allVersions := []*semver.Version{version}

apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false)
apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false, lwcomponent.BinaryType)

CreateLocalComponent(name, installVer, false)

dir, _ := lwcomponent.CatalogCacheDir()

hostInfo := lwcomponent.NewHostInfo(filepath.Join(dir, name))

component := lwcomponent.NewCDKComponent(name, lwcomponent.BinaryType, apiInfo, hostInfo)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.BinaryType, apiInfo, hostInfo)

assert.Equal(t, lwcomponent.Tainted, component.Status)
})
Expand All @@ -166,7 +166,7 @@ func TestNewCDKComponent(t *testing.T) {

hostInfo := lwcomponent.NewHostInfo(filepath.Join(dir, name))

component := lwcomponent.NewCDKComponent(name, lwcomponent.BinaryType, nil, hostInfo)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.BinaryType, nil, hostInfo)

assert.Equal(t, lwcomponent.Development, component.Status)
})
Expand All @@ -180,15 +180,15 @@ func TestNewCDKComponent(t *testing.T) {
version, _ := semver.NewVersion(ver)
allVersions := []*semver.Version{version}

apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false)
apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false, lwcomponent.BinaryType)

CreateLocalComponent(name, ver, false)

dir, _ := lwcomponent.CatalogCacheDir()

hostInfo := lwcomponent.NewHostInfo(filepath.Join(dir, name))

component := lwcomponent.NewCDKComponent(name, lwcomponent.BinaryType, apiInfo, hostInfo)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.BinaryType, apiInfo, hostInfo)

_, _, err := component.Exec.Execute([]string{}, "")
assert.Nil(t, err)
Expand All @@ -203,15 +203,15 @@ func TestNewCDKComponent(t *testing.T) {
version, _ := semver.NewVersion(ver)
allVersions := []*semver.Version{version}

apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false)
apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false, lwcomponent.BinaryType)

CreateLocalComponent(name, ver, false)

dir, _ := lwcomponent.CatalogCacheDir()

hostInfo := lwcomponent.NewHostInfo(filepath.Join(dir, name))

component := lwcomponent.NewCDKComponent(name, lwcomponent.CommandType, apiInfo, hostInfo)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.CommandType, apiInfo, hostInfo)

_, _, err := component.Exec.Execute([]string{}, "")
assert.Nil(t, err)
Expand All @@ -226,15 +226,15 @@ func TestNewCDKComponent(t *testing.T) {
version, _ := semver.NewVersion(ver)
allVersions := []*semver.Version{version}

apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false)
apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false, lwcomponent.BinaryType)

CreateLocalComponent(name, ver, false)

dir, _ := lwcomponent.CatalogCacheDir()

hostInfo := lwcomponent.NewHostInfo(filepath.Join(dir, name))

component := lwcomponent.NewCDKComponent(name, lwcomponent.LibraryType, apiInfo, hostInfo)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.LibraryType, apiInfo, hostInfo)

_, _, err := component.Exec.Execute([]string{}, "")
assert.Equal(t, lwcomponent.ErrNonExecutable, err)
Expand All @@ -249,15 +249,15 @@ func TestNewCDKComponent(t *testing.T) {
version, _ := semver.NewVersion(ver)
allVersions := []*semver.Version{version}

apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false)
apiInfo := lwcomponent.NewAPIInfo(1, name, version, allVersions, "", 1, false, lwcomponent.BinaryType)

CreateLocalComponent(name, ver, false)

dir, _ := lwcomponent.CatalogCacheDir()

hostInfo := lwcomponent.NewHostInfo(filepath.Join(dir, name))

component := lwcomponent.NewCDKComponent(name, lwcomponent.StandaloneType, apiInfo, hostInfo)
component := lwcomponent.NewCDKComponent(name, "", lwcomponent.StandaloneType, apiInfo, hostInfo)

_, _, err := component.Exec.Execute([]string{}, "")
assert.Equal(t, lwcomponent.ErrNonExecutable, err)
Expand Down
Loading

0 comments on commit 144c65b

Please sign in to comment.