Skip to content

Commit

Permalink
Merge branch 'main' into genkeys
Browse files Browse the repository at this point in the history
Signed-off-by: Jeff Ortel <[email protected]>
  • Loading branch information
jortel authored Aug 13, 2024
2 parents b5b1746 + 74c5419 commit ffc4506
Show file tree
Hide file tree
Showing 44 changed files with 825 additions and 997 deletions.
67 changes: 27 additions & 40 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,88 +12,75 @@ jobs:
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v3
with:
go-version: '1.19'
- run: make fmt

vet:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v3
with:
go-version: '1.19'
- run: make vet

build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v3
with:
go-version: '1.19'
- run: make cmd
build-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: make podman-build

test-unit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v3
with:
go-version: '1.19'
- run: make test

test-api:
needs:
- fmt
- vet
- build
- test-unit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-go@v3
with:
go-version: '1.19'
- run: |
make vet
DISCONNECTED=1 make run &
sleep 15 # probably a dirty solution
DISCONNECTED=1 HUB_BASE_URL=http://localhost:8080 make test-api
DISCONNECTED=1 HUB_BASE_URL=http://localhost:8080 make test-api # Intentionaly run 2x to catch data left in Hub DB.
test-e2e:
build-image:
needs:
- fmt
- vet
- build
- test-unit
- test-api
runs-on: ubuntu-latest
env:
IMG: ttl.sh/konveyor-hub-${{ github.sha }}:2h
steps:
- uses: actions/checkout@v3
- name: start-minikube
uses: konveyor/tackle2-operator/.github/actions/start-minikube@main
- name: Build image in minikube
run: |
export SHELL=/bin/bash
eval $(minikube -p minikube docker-env)
make docker-build
- name: install-tackle
uses: konveyor/tackle2-operator/.github/actions/install-tackle@main
with:
tackle-hub-image: tackle2-hub:latest
tackle-image-pull-policy: IfNotPresent

- name: save image
run: |
IMG=quay.io/konveyor/tackle2-hub:latest make docker-build
docker save -o /tmp/tackle2-hub.tar quay.io/konveyor/tackle2-hub:latest
- name: Upload image as artifact
uses: actions/upload-artifact@v3
with:
name: tackle2-hub
path: /tmp/tackle2-hub.tar
retention-days: 1
- uses: actions/checkout@v4
- run: make docker-build
- run: docker push ${IMG}

test-integration:
needs: test-e2e
uses: konveyor/ci/.github/workflows/global-ci.yml@main
needs: build-image
uses: konveyor/ci/.github/workflows/global-ci-bundle.yml@main
with:
component_name: tackle2-hub
tackle_hub: ttl.sh/konveyor-hub-${{ github.sha }}:2h
api_hub_tests_ref: ${{ github.ref }}
18 changes: 6 additions & 12 deletions .github/workflows/march-image-build-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,9 @@ jobs:
runs-on: ubuntu-20.04
strategy:
fail-fast: false
steps:
- name: Checkout Push to Registry action
uses: konveyor/release-tools/build-push-quay@main
with:
architectures: "amd64, arm64"
containerfile: "./Dockerfile"
image_name: "tackle2-hub"
image_namespace: "konveyor"
image_registry: "quay.io"
quay_publish_robot: ${{ secrets.QUAY_PUBLISH_ROBOT }}
quay_publish_token: ${{ secrets.QUAY_PUBLISH_TOKEN }}
ref: ${{ github.ref }}
uses: konveyor/release-tools/build-push-images.yaml@main
with:
registry: "quay.io/konveyor"
image_name: "tackle2-hub"
containerfile: "./Dockerfile"
architectures: '[ "amd64", "arm64" ]'
2 changes: 1 addition & 1 deletion api/addon.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"net/http"

"github.com/gin-gonic/gin"
crd "github.com/konveyor/tackle2-hub/k8s/api/tackle/v1alpha2"
crd "github.com/konveyor/tackle2-hub/k8s/api/tackle/v1alpha1"
core "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
k8s "sigs.k8s.io/controller-runtime/pkg/client"
Expand Down
6 changes: 3 additions & 3 deletions api/analysis.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ func (h AnalysisHandler) AddRoutes(e *gin.Engine) {
// Application
routeGroup = e.Group("/")
routeGroup.Use(Required("applications.analyses"))
routeGroup.POST(AppAnalysesRoot, h.AppCreate)
routeGroup.POST(AppAnalysesRoot, Transaction, h.AppCreate)
routeGroup.GET(AppAnalysesRoot, h.AppList)
routeGroup.GET(AppAnalysisRoot, h.AppLatest)
routeGroup.GET(AppAnalysisReportRoot, h.AppLatestReport)
Expand Down Expand Up @@ -1300,7 +1300,7 @@ func (h AnalysisHandler) IssueAppReports(ctx *gin.Context) {
"app.Name",
"app.Description",
"b.Name BusinessService",
"a.Effort",
"i.Effort",
"COUNT(n.ID) Incidents",
"COUNT(distinct n.File) Files",
"i.ID IssueID",
Expand Down Expand Up @@ -1350,7 +1350,7 @@ func (h AnalysisHandler) IssueAppReports(ctx *gin.Context) {
r.Name = m.Name
r.Description = m.Description
r.BusinessService = m.BusinessService
r.Effort = m.Effort
r.Effort = m.Effort * m.Incidents
r.Incidents = m.Incidents
r.Files = m.Files
r.Issue.ID = m.IssueID
Expand Down
39 changes: 31 additions & 8 deletions api/application.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,22 +58,22 @@ func (h ApplicationHandler) AddRoutes(e *gin.Engine) {
routeGroup.DELETE(ApplicationRoot, h.Delete)
// Tags
routeGroup = e.Group("/")
routeGroup.Use(Required("applications"))
routeGroup.Use(Required("applications"), Transaction)
routeGroup.GET(ApplicationTagsRoot, h.TagList)
routeGroup.GET(ApplicationTagsRoot+"/", h.TagList)
routeGroup.POST(ApplicationTagsRoot, h.TagAdd)
routeGroup.DELETE(ApplicationTagRoot, h.TagDelete)
routeGroup.PUT(ApplicationTagsRoot, h.TagReplace, Transaction)
routeGroup.PUT(ApplicationTagsRoot, h.TagReplace)
// Facts
routeGroup = e.Group("/")
routeGroup.Use(Required("applications.facts"))
routeGroup.Use(Required("applications.facts"), Transaction)
routeGroup.GET(ApplicationFactsRoot, h.FactGet)
routeGroup.GET(ApplicationFactsRoot+"/", h.FactGet)
routeGroup.POST(ApplicationFactsRoot, h.FactCreate)
routeGroup.GET(ApplicationFactRoot, h.FactGet)
routeGroup.PUT(ApplicationFactRoot, h.FactPut)
routeGroup.DELETE(ApplicationFactRoot, h.FactDelete)
routeGroup.PUT(ApplicationFactsRoot, h.FactPut, Transaction)
routeGroup.PUT(ApplicationFactsRoot, h.FactPut)
// Bucket
routeGroup = e.Group("/")
routeGroup.Use(Required("applications.bucket"))
Expand All @@ -84,11 +84,11 @@ func (h ApplicationHandler) AddRoutes(e *gin.Engine) {
routeGroup.DELETE(AppBucketContentRoot, h.BucketDelete)
// Stakeholders
routeGroup = e.Group("/")
routeGroup.Use(Required("applications.stakeholders"))
routeGroup.Use(Required("applications.stakeholders"), Transaction)
routeGroup.PUT(AppStakeholdersRoot, h.StakeholdersUpdate)
// Assessments
routeGroup = e.Group("/")
routeGroup.Use(Required("applications.assessments"))
routeGroup.Use(Required("applications.assessments"), Transaction)
routeGroup.GET(AppAssessmentsRoot, h.AssessmentList)
routeGroup.POST(AppAssessmentsRoot, h.AssessmentCreate)
}
Expand Down Expand Up @@ -210,11 +210,23 @@ func (h ApplicationHandler) Create(ctx *gin.Context) {
}
m := r.Model()
m.CreateUser = h.BaseHandler.CurrentUser(ctx)
result := h.DB(ctx).Omit("Tags").Create(m)
result := h.DB(ctx).Omit(clause.Associations).Create(m)
if result.Error != nil {
_ = ctx.Error(result.Error)
return
}
db := h.DB(ctx).Model(m)
err = db.Association("Identities").Replace(m.Identities)
if err != nil {
_ = ctx.Error(err)
return
}
db = h.DB(ctx).Model(m)
err = db.Association("Contributors").Replace(m.Contributors)
if err != nil {
_ = ctx.Error(err)
return
}

tags := []model.ApplicationTag{}
if len(r.Tags) > 0 {
Expand Down Expand Up @@ -1078,11 +1090,21 @@ func (h ApplicationHandler) AssessmentCreate(ctx *gin.Context) {
assessment.PrepareForApplication(resolver, application, m)
newAssessment = true
}
result = h.DB(ctx).Create(m)
result = h.DB(ctx).Omit(clause.Associations).Create(m)
if result.Error != nil {
_ = ctx.Error(result.Error)
return
}
err = h.DB(ctx).Model(m).Association("Stakeholders").Replace("Stakeholders", m.Stakeholders)
if err != nil {
_ = ctx.Error(err)
return
}
err = h.DB(ctx).Model(m).Association("StakeholderGroups").Replace("StakeholderGroups", m.StakeholderGroups)
if err != nil {
_ = ctx.Error(err)
return
}
if newAssessment {
metrics.AssessmentsInitiated.Inc()
}
Expand Down Expand Up @@ -1138,6 +1160,7 @@ func (r *Application) With(m *model.Application, tags []model.ApplicationTag) {
r.Identities,
ref)
}
r.Tags = []TagRef{}
for i := range tags {
ref := TagRef{}
ref.With(tags[i].TagID, tags[i].Tag.Name, tags[i].Source, false)
Expand Down
35 changes: 33 additions & 2 deletions api/archetype.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,12 +136,33 @@ func (h ArchetypeHandler) Create(ctx *gin.Context) {
}
m := r.Model()
m.CreateUser = h.CurrentUser(ctx)
result := h.DB(ctx).Create(m)
result := h.DB(ctx).Omit(clause.Associations).Create(m)
if result.Error != nil {
_ = ctx.Error(result.Error)
return
}

err = h.DB(ctx).Model(m).Association("Stakeholders").Replace("Stakeholders", m.Stakeholders)
if err != nil {
_ = ctx.Error(err)
return
}
err = h.DB(ctx).Model(m).Association("StakeholderGroups").Replace("StakeholderGroups", m.StakeholderGroups)
if err != nil {
_ = ctx.Error(err)
return
}
err = h.DB(ctx).Model(m).Association("CriteriaTags").Replace("CriteriaTags", m.CriteriaTags)
if err != nil {
_ = ctx.Error(err)
return
}
err = h.DB(ctx).Model(m).Association("Tags").Replace("Tags", m.Tags)
if err != nil {
_ = ctx.Error(err)
return
}

archetypes := []model.Archetype{}
db := h.preLoad(h.DB(ctx), "Tags", "CriteriaTags")
result = db.Find(&archetypes)
Expand Down Expand Up @@ -319,11 +340,21 @@ func (h ArchetypeHandler) AssessmentCreate(ctx *gin.Context) {
assessment.PrepareForArchetype(resolver, archetype, m)
newAssessment = true
}
result = h.DB(ctx).Create(m)
result = h.DB(ctx).Omit(clause.Associations).Create(m)
if result.Error != nil {
_ = ctx.Error(result.Error)
return
}
err = h.DB(ctx).Model(m).Association("Stakeholders").Replace("Stakeholders", m.Stakeholders)
if err != nil {
_ = ctx.Error(err)
return
}
err = h.DB(ctx).Model(m).Association("StakeholderGroups").Replace("StakeholderGroups", m.StakeholderGroups)
if err != nil {
_ = ctx.Error(err)
return
}
if newAssessment {
metrics.AssessmentsInitiated.Inc()
}
Expand Down
2 changes: 1 addition & 1 deletion api/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ import (
"github.com/gin-gonic/gin/binding"
liberr "github.com/jortel/go-utils/error"
"github.com/jortel/go-utils/logr"
"github.com/konveyor/tackle2-hub/api/reflect"
"github.com/konveyor/tackle2-hub/api/sort"
"github.com/konveyor/tackle2-hub/auth"
"github.com/konveyor/tackle2-hub/model"
"github.com/konveyor/tackle2-hub/reflect"
"gopkg.in/yaml.v2"
"gorm.io/gorm"
"sigs.k8s.io/controller-runtime/pkg/client"
Expand Down
12 changes: 11 additions & 1 deletion api/group.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,21 @@ func (h StakeholderGroupHandler) Create(ctx *gin.Context) {
}
m := r.Model()
m.CreateUser = h.BaseHandler.CurrentUser(ctx)
result := h.DB(ctx).Create(m)
result := h.DB(ctx).Omit(clause.Associations).Create(m)
if result.Error != nil {
_ = ctx.Error(result.Error)
return
}
err = h.DB(ctx).Model(m).Association("Stakeholders").Replace(m.Stakeholders)
if err != nil {
_ = ctx.Error(err)
return
}
err = h.DB(ctx).Model(m).Association("MigrationWaves").Replace(m.MigrationWaves)
if err != nil {
_ = ctx.Error(err)
return
}
r.With(m)

h.Respond(ctx, http.StatusCreated, r)
Expand Down
2 changes: 1 addition & 1 deletion api/identity.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ func (h IdentityHandler) AddRoutes(e *gin.Engine) {
routeGroup.GET(IdentitiesRoot+"/", h.setDecrypted, h.List)
routeGroup.POST(IdentitiesRoot, h.Create)
routeGroup.GET(IdentityRoot, h.setDecrypted, h.Get)
routeGroup.PUT(IdentityRoot, h.Update, Transaction)
routeGroup.PUT(IdentityRoot, Transaction, h.Update)
routeGroup.DELETE(IdentityRoot, h.Delete)
}

Expand Down
3 changes: 1 addition & 2 deletions api/migrationwave.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,7 @@ func (h MigrationWaveHandler) Create(ctx *gin.Context) {
}
m := r.Model()
m.CreateUser = h.CurrentUser(ctx)
db := h.DB(ctx).Omit(clause.Associations)
result := db.Create(m)
result := h.DB(ctx).Omit(clause.Associations).Create(m)
if result.Error != nil {
_ = ctx.Error(result.Error)
return
Expand Down
2 changes: 1 addition & 1 deletion api/sort/sort.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"strings"

"github.com/gin-gonic/gin"
"github.com/konveyor/tackle2-hub/api/reflect"
"github.com/konveyor/tackle2-hub/reflect"
"gorm.io/gorm"
)

Expand Down
Loading

0 comments on commit ffc4506

Please sign in to comment.