Skip to content

Commit

Permalink
feat: update cli to retrieve applications for product release steps (#…
Browse files Browse the repository at this point in the history
…758)

## What
Adding promotion commits to product release steps if the version of
codefresh is compatible. I've added a fall back in case the cli is
connected to an old version of codefresh (on prem).

## Why
A customer wanted to know the commit created by promotions for each step
of a product release for each application. See Jira ticket for details.

## Notes
Jira: https://codefresh-io.atlassian.net/browse/CR-25720
  • Loading branch information
scme0 authored Oct 23, 2024
1 parent 6b74b8d commit c9bb31c
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 22 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
VERSION=v0.1.65
VERSION=v0.1.66

OUT_DIR=dist
YEAR?=$(shell date +"%Y")
Expand Down
80 changes: 59 additions & 21 deletions cmd/commands/product-release.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (

"github.com/codefresh-io/cli-v2/pkg/util"

"github.com/codefresh-io/cli-v2/pkg/log"
"github.com/codefresh-io/go-sdk/pkg/client"
platmodel "github.com/codefresh-io/go-sdk/pkg/model/promotion-orchestrator"
"github.com/spf13/cobra"
Expand All @@ -37,6 +38,55 @@ type (
}
)

const latest_query = `
query getProductReleasesList(
$productName: String!
$filters: ProductReleaseFiltersArgs!
$pagination: SlicePaginationArgs
) {
productReleases(productName: $productName, filters: $filters, pagination: $pagination) {
edges {
node {
releaseId
steps {
environmentName
status
applications {
applicationId {
runtime
namespace
name
}
commitSha
}
}
status
}
}
}
}
`

const pre_v1_3120_1_query = `
query getProductReleasesList(
$productName: String!
$filters: ProductReleaseFiltersArgs!
$pagination: SlicePaginationArgs
) {
productReleases(productName: $productName, filters: $filters, pagination: $pagination) {
edges {
node {
releaseId
steps {
environmentName
status
}
status
}
}
}
}`

func NewProductReleaseCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "product-release",
Expand Down Expand Up @@ -98,25 +148,7 @@ func newProductReleaseListCommand() *cobra.Command {

// client here is for mock testings usage
func runProductReleaseList(ctx context.Context, filterArgs platmodel.ProductReleaseFiltersArgs, productName string, pageLimit int) error {
query := `
query getProductReleasesList(
$productName: String!
$filters: ProductReleaseFiltersArgs!
$pagination: SlicePaginationArgs
) {
productReleases(productName: $productName, filters: $filters, pagination: $pagination) {
edges {
node {
releaseId
steps {
environmentName
status
}
status
}
}
}
}`

// add pagination - default for now is last 20
variables := map[string]any{
"filters": filterArgs,
Expand All @@ -126,9 +158,15 @@ query getProductReleasesList(
},
}

productReleasesPage, err := client.GraphqlAPI[productReleaseSlice](ctx, cfConfig.NewClient().InternalClient(), query, variables)
productReleasesPage, err := client.GraphqlAPI[productReleaseSlice](ctx, cfConfig.NewClient().InternalClient(), latest_query, variables)
if err != nil {
return fmt.Errorf("failed to get product releases: %w", err)
if strings.Contains(err.Error(), "Cannot query field \\\"applications\\\" on type \\\"ProductReleaseStep\\\".") {
log.G().Warn("codefresh version older than v1.3120.1 detected. Using pre v1.3120.1 query which excludes applications.")
productReleasesPage, err = client.GraphqlAPI[productReleaseSlice](ctx, cfConfig.NewClient().InternalClient(), pre_v1_3120_1_query, variables)
}
if err != nil {
return fmt.Errorf("failed to get product releases: %s", err.Error())
}
}

if len(productReleasesPage.Edges) == 0 {
Expand Down

0 comments on commit c9bb31c

Please sign in to comment.