Skip to content

Commit

Permalink
Add mvn:// prefix to application.binary.
Browse files Browse the repository at this point in the history
Signed-off-by: Jeff Ortel <[email protected]>
  • Loading branch information
jortel committed Jun 18, 2024
1 parent 13efd99 commit 2661b4c
Show file tree
Hide file tree
Showing 10 changed files with 918 additions and 3 deletions.
2 changes: 1 addition & 1 deletion hack/add/task.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ curl -X POST ${host}/tasks -d \
'{
"name":"Test",
"locator": "app.1.test",
"addon": "test",
"addon": "analyzer",
"application": {"id": 1},
"data": {
"path": "/etc"
Expand Down
2 changes: 1 addition & 1 deletion k8s/api/tackle/v1alpha2/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions migration/pkg.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
v12 "github.com/konveyor/tackle2-hub/migration/v12"
v13 "github.com/konveyor/tackle2-hub/migration/v13"
v14 "github.com/konveyor/tackle2-hub/migration/v14"
v15 "github.com/konveyor/tackle2-hub/migration/v15"
v2 "github.com/konveyor/tackle2-hub/migration/v2"
v3 "github.com/konveyor/tackle2-hub/migration/v3"
v4 "github.com/konveyor/tackle2-hub/migration/v4"
Expand Down Expand Up @@ -56,5 +57,6 @@ func All() []Migration {
v12.Migration{},
v13.Migration{},
v14.Migration{},
v15.Migration{},
}
}
38 changes: 38 additions & 0 deletions migration/v15/migrate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package v15

import (
"github.com/jortel/go-utils/logr"
"github.com/konveyor/tackle2-hub/migration/v15/model"
"gorm.io/gorm"
)

var log = logr.WithName("migration|v14")

type Migration struct{}

func (r Migration) Apply(db *gorm.DB) (err error) {
err = db.AutoMigrate(r.Models()...)
if err != nil {
return
}
list := []*model.Application{}
err = db.Find(&list).Error
if err != nil {
return
}
for _, m := range list {
if m.Binary == "" {
continue
}
m.Binary = "mvn://" + m.Binary
err = db.Save(m).Error
if err != nil {
return
}
}
return
}

func (r Migration) Models() []interface{} {
return model.All()
}
157 changes: 157 additions & 0 deletions migration/v15/model/analysis.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
package model

import "gorm.io/gorm"

// Analysis report.
type Analysis struct {
Model
Effort int
Commit string
Archived bool
Summary JSON `gorm:"type:json"`
Issues []Issue `gorm:"constraint:OnDelete:CASCADE"`
Dependencies []TechDependency `gorm:"constraint:OnDelete:CASCADE"`
ApplicationID uint `gorm:"index;not null"`
Application *Application
}

// TechDependency report dependency.
type TechDependency struct {
Model
Provider string `gorm:"uniqueIndex:depA"`
Name string `gorm:"uniqueIndex:depA"`
Version string `gorm:"uniqueIndex:depA"`
SHA string `gorm:"uniqueIndex:depA"`
Indirect bool
Labels JSON `gorm:"type:json"`
AnalysisID uint `gorm:"index;uniqueIndex:depA;not null"`
Analysis *Analysis
}

// Issue report issue (violation).
type Issue struct {
Model
RuleSet string `gorm:"uniqueIndex:issueA;not null"`
Rule string `gorm:"uniqueIndex:issueA;not null"`
Name string `gorm:"index"`
Description string
Category string `gorm:"index;not null"`
Incidents []Incident `gorm:"foreignKey:IssueID;constraint:OnDelete:CASCADE"`
Links JSON `gorm:"type:json"`
Facts JSON `gorm:"type:json"`
Labels JSON `gorm:"type:json"`
Effort int `gorm:"index;not null"`
AnalysisID uint `gorm:"index;uniqueIndex:issueA;not null"`
Analysis *Analysis
}

// Incident report an issue incident.
type Incident struct {
Model
File string `gorm:"index;not null"`
Line int
Message string
CodeSnip string
Facts JSON `gorm:"type:json"`
IssueID uint `gorm:"index;not null"`
Issue *Issue
}

// Link URL link.
type Link struct {
URL string `json:"url"`
Title string `json:"title,omitempty"`
}

// ArchivedIssue resource created when issues are archived.
type ArchivedIssue struct {
RuleSet string `json:"ruleSet"`
Rule string `json:"rule"`
Name string `json:"name,omitempty" yaml:",omitempty"`
Description string `json:"description,omitempty" yaml:",omitempty"`
Category string `json:"category"`
Effort int `json:"effort"`
Incidents int `json:"incidents"`
}

// RuleSet - Analysis ruleset.
type RuleSet struct {
Model
UUID *string `gorm:"uniqueIndex"`
Kind string
Name string `gorm:"uniqueIndex;not null"`
Description string
Repository JSON `gorm:"type:json"`
IdentityID *uint `gorm:"index"`
Identity *Identity
Rules []Rule `gorm:"constraint:OnDelete:CASCADE"`
DependsOn []RuleSet `gorm:"many2many:RuleSetDependencies;constraint:OnDelete:CASCADE"`
}

func (r *RuleSet) Builtin() bool {
return r.UUID != nil
}

// BeforeUpdate hook to avoid cyclic dependencies.
func (r *RuleSet) BeforeUpdate(db *gorm.DB) (err error) {
seen := make(map[uint]bool)
var nextDeps []RuleSet
var nextRuleSetIDs []uint
for _, dep := range r.DependsOn {
nextRuleSetIDs = append(nextRuleSetIDs, dep.ID)
}
for len(nextRuleSetIDs) != 0 {
result := db.Preload("DependsOn").Where("ID IN ?", nextRuleSetIDs).Find(&nextDeps)
if result.Error != nil {
err = result.Error
return
}
nextRuleSetIDs = nextRuleSetIDs[:0]
for _, nextDep := range nextDeps {
for _, dep := range nextDep.DependsOn {
if seen[dep.ID] {
continue
}
if dep.ID == r.ID {
err = DependencyCyclicError{}
return
}
seen[dep.ID] = true
nextRuleSetIDs = append(nextRuleSetIDs, dep.ID)
}
}
}

return
}

// Rule - Analysis rule.
type Rule struct {
Model
Name string
Description string
Labels JSON `gorm:"type:json"`
RuleSetID uint `gorm:"uniqueIndex:RuleA;not null"`
RuleSet *RuleSet
FileID *uint `gorm:"uniqueIndex:RuleA" ref:"file"`
File *File
}

// Target - analysis rule selector.
type Target struct {
Model
UUID *string `gorm:"uniqueIndex"`
Name string `gorm:"uniqueIndex;not null"`
Description string
Provider string
Choice bool
Labels JSON `gorm:"type:json"`
ImageID uint `gorm:"index" ref:"file"`
Image *File
RuleSetID *uint `gorm:"index"`
RuleSet *RuleSet
}

func (r *Target) Builtin() bool {
return r.UUID != nil
}
Loading

0 comments on commit 2661b4c

Please sign in to comment.