diff --git a/docs/shp_build_create.md b/docs/shp_build_create.md index da9b7ff53..f597cc1e4 100644 --- a/docs/shp_build_create.md +++ b/docs/shp_build_create.md @@ -17,28 +17,25 @@ shp build create [flags] ### Options ``` - --builder-credentials-secret string name of the secret with builder-image pull credentials - --builder-image string image employed during the building process - --dockerfile string path to dockerfile relative to repository -e, --env stringArray specify a key-value pair for an environment variable to set for the build container (default []) -h, --help help for create - --output-credentials-secret string name of the secret with builder-image pull credentials --output-image string image employed during the building process --output-image-annotation stringArray specify a set of key-value pairs that correspond to annotations to set on the output image (default []) --output-image-label stringArray specify a set of key-value pairs that correspond to labels to set on the output image (default []) + --output-image-push-secret string name of the secret with output image push credentials --output-insecure flag to indicate an insecure container registry --param-value stringArray set of key-value pairs to pass as parameters to the buildStrategy (default []) --retention-failed-limit uint number of failed BuildRuns to be kept (default 65535) --retention-succeeded-limit uint number of succeeded BuildRuns to be kept (default 65535) --retention-ttl-after-failed duration duration to delete a failed BuildRun after completion --retention-ttl-after-succeeded duration duration to delete a succeeded BuildRun after completion - --source-bundle-image string source bundle image location, e.g. ghcr.io/shipwright-io/sample-go/source-bundle:latest - --source-bundle-prune pruneOption source bundle prune option, either Never, or AfterPull (default Never) --source-context-dir string use a inner directory as context directory - --source-credentials-secret string name of the secret with credentials to access the source, e.g. git or registry credentials - --source-revision string git repository source revision - --source-url string git repository source URL - --strategy-apiversion string kubernetes api-version of the build-strategy resource (default "v1alpha1") + --source-git-clone-secret string name of the secret with credentials to access the git source, e.g. git credentials + --source-git-revision string git repository source revision + --source-git-url string git repository source URL + --source-oci-artifact-image string source OCI artifact image reference, e.g. ghcr.io/shipwright-io/sample-go/source-bundle:latest + --source-oci-artifact-prune pruneOption source OCI artifact image prune option, either Never, or AfterPull (default Never) + --source-oci-artifact-pull-secret string name of the secret with credentials to access the OCI artifact image, e.g. registry credentials --strategy-kind string build-strategy kind (default "ClusterBuildStrategy") --strategy-name string build-strategy name (default "buildpacks-v3") --timeout duration build process timeout diff --git a/docs/shp_build_run.md b/docs/shp_build_run.md index 8a7c19988..3d8c78714 100644 --- a/docs/shp_build_run.md +++ b/docs/shp_build_run.md @@ -18,20 +18,18 @@ shp build run [flags] ### Options ``` - --buildref-apiversion string API version of build resource to reference --buildref-name string name of build resource to reference -e, --env stringArray specify a key-value pair for an environment variable to set for the build container (default []) -F, --follow Start a build and watch its log until it completes or fails. -h, --help help for run - --output-credentials-secret string name of the secret with builder-image pull credentials --output-image string image employed during the building process --output-image-annotation stringArray specify a set of key-value pairs that correspond to annotations to set on the output image (default []) --output-image-label stringArray specify a set of key-value pairs that correspond to labels to set on the output image (default []) + --output-image-push-secret string name of the secret with output image push credentials --output-insecure flag to indicate an insecure container registry --param-value stringArray set of key-value pairs to pass as parameters to the buildStrategy (default []) --retention-ttl-after-failed duration duration to delete the BuildRun after it failed --retention-ttl-after-succeeded duration duration to delete the BuildRun after it succeeded - --sa-generate generate a Kubernetes service-account for the build --sa-name string Kubernetes service-account name --timeout duration build process timeout ``` diff --git a/docs/shp_build_upload.md b/docs/shp_build_upload.md index 12aa7a951..a69270aa1 100644 --- a/docs/shp_build_upload.md +++ b/docs/shp_build_upload.md @@ -28,20 +28,18 @@ shp build upload [path/to/source|.] [flags] ### Options ``` - --buildref-apiversion string API version of build resource to reference --buildref-name string name of build resource to reference -e, --env stringArray specify a key-value pair for an environment variable to set for the build container (default []) -F, --follow Start a build and watch its log until it completes or fails. -h, --help help for upload - --output-credentials-secret string name of the secret with builder-image pull credentials --output-image string image employed during the building process --output-image-annotation stringArray specify a set of key-value pairs that correspond to annotations to set on the output image (default []) --output-image-label stringArray specify a set of key-value pairs that correspond to labels to set on the output image (default []) + --output-image-push-secret string name of the secret with output image push credentials --output-insecure flag to indicate an insecure container registry --param-value stringArray set of key-value pairs to pass as parameters to the buildStrategy (default []) --retention-ttl-after-failed duration duration to delete the BuildRun after it failed --retention-ttl-after-succeeded duration duration to delete the BuildRun after it succeeded - --sa-generate generate a Kubernetes service-account for the build --sa-name string Kubernetes service-account name --timeout duration build process timeout ``` diff --git a/docs/shp_buildrun_create.md b/docs/shp_buildrun_create.md index eb26ca0ce..2dd6e1f3f 100644 --- a/docs/shp_buildrun_create.md +++ b/docs/shp_buildrun_create.md @@ -18,19 +18,17 @@ shp buildrun create [flags] ### Options ``` - --buildref-apiversion string API version of build resource to reference --buildref-name string name of build resource to reference -e, --env stringArray specify a key-value pair for an environment variable to set for the build container (default []) -h, --help help for create - --output-credentials-secret string name of the secret with builder-image pull credentials --output-image string image employed during the building process --output-image-annotation stringArray specify a set of key-value pairs that correspond to annotations to set on the output image (default []) --output-image-label stringArray specify a set of key-value pairs that correspond to labels to set on the output image (default []) + --output-image-push-secret string name of the secret with output image push credentials --output-insecure flag to indicate an insecure container registry --param-value stringArray set of key-value pairs to pass as parameters to the buildStrategy (default []) --retention-ttl-after-failed duration duration to delete the BuildRun after it failed --retention-ttl-after-succeeded duration duration to delete the BuildRun after it succeeded - --sa-generate generate a Kubernetes service-account for the build --sa-name string Kubernetes service-account name --timeout duration build process timeout ``` diff --git a/pkg/shp/bundle/bundle.go b/pkg/shp/bundle/bundle.go index 1fc93c00d..9d9ad717c 100644 --- a/pkg/shp/bundle/bundle.go +++ b/pkg/shp/bundle/bundle.go @@ -11,7 +11,7 @@ import ( v1 "github.com/google/go-containerregistry/pkg/v1" "github.com/google/go-containerregistry/pkg/v1/remote" progressbar "github.com/schollz/progressbar/v3" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" buildbundle "github.com/shipwright-io/build/pkg/bundle" buildclientset "github.com/shipwright-io/build/pkg/client/clientset/versioned" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -20,21 +20,22 @@ import ( // GetSourceBundleImage returns the source bundle image of the build that is // associated with the provided buildrun, an empty string if source bundle is // not used, or an error in case the build cannot be obtained -func GetSourceBundleImage(ctx context.Context, client buildclientset.Interface, buildRun *buildv1alpha1.BuildRun) (string, error) { +func GetSourceBundleImage(ctx context.Context, client buildclientset.Interface, buildRun *buildv1beta1.BuildRun) (string, error) { if buildRun == nil { return "", fmt.Errorf("no buildrun provided, given reference is nil") } - if buildRun.Spec.BuildRef != nil { - name, namespace := buildRun.Spec.BuildRef.Name, buildRun.Namespace + if buildRun.Spec.Build.Name != nil && *buildRun.Spec.Build.Name != "" { + name, namespace := buildRun.Spec.Build.Name, buildRun.Namespace - build, err := client.ShipwrightV1alpha1().Builds(namespace).Get(ctx, name, metav1.GetOptions{}) + build, err := client.ShipwrightV1beta1().Builds(namespace).Get(ctx, *name, metav1.GetOptions{}) if err != nil { return "", err } - - if build.Spec.Source.BundleContainer != nil && build.Spec.Source.BundleContainer.Image != "" { - return build.Spec.Source.BundleContainer.Image, nil + if build.Spec.Source != nil { + if build.Spec.Source.OCIArtifact != nil && build.Spec.Source.OCIArtifact.Image != "" { + return build.Spec.Source.OCIArtifact.Image, nil + } } } diff --git a/pkg/shp/cmd/build/create.go b/pkg/shp/cmd/build/create.go index 7f52947e7..a4942f4ae 100644 --- a/pkg/shp/cmd/build/create.go +++ b/pkg/shp/cmd/build/create.go @@ -3,7 +3,7 @@ package build import ( "fmt" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -18,8 +18,11 @@ import ( type CreateCommand struct { cmd *cobra.Command // cobra command instance - name string // build resource's name - buildSpec *buildv1alpha1.BuildSpec // stores command-line flags + name string // build resource's name + buildSpec *buildv1beta1.BuildSpec // stores command-line flags + dockerfile *string // For dockerfile parameter + builderImage *string // For builder image parameter + } const buildCreateLongDesc = ` @@ -54,7 +57,7 @@ func (c *CreateCommand) Validate() error { // Run executes the creation of a new Build instance using flags to fill up the details. func (c *CreateCommand) Run(params *params.Params, io *genericclioptions.IOStreams) error { - b := &buildv1alpha1.Build{ + b := &buildv1beta1.Build{ ObjectMeta: metav1.ObjectMeta{ Name: c.name, }, @@ -63,16 +66,44 @@ func (c *CreateCommand) Run(params *params.Params, io *genericclioptions.IOStrea flags.SanitizeBuildSpec(&b.Spec) - // print warning with regards to source bundle image being used - if b.Spec.Source.BundleContainer != nil && b.Spec.Source.BundleContainer.Image != "" { - fmt.Fprintf(io.Out, "Build %q uses a source bundle image, which means source code will be transferred to a container registry. It is advised to use private images to ensure the security of the source code being uploaded.\n", c.name) + if b.Spec.Source != nil { + if b.Spec.Source.OCIArtifact != nil && b.Spec.Source.OCIArtifact.Image != "" { + b.Spec.Source.Type = buildv1beta1.OCIArtifactType + } else if b.Spec.Source.Git != nil && b.Spec.Source.Git.URL != "" { + b.Spec.Source.Type = buildv1beta1.GitType + } + + // print warning with regards to source bundle image being used + if b.Spec.Source.OCIArtifact != nil && b.Spec.Source.OCIArtifact.Image != "" { + fmt.Fprintf(io.Out, "Build %q uses a source bundle image, which means source code will be transferred to a container registry. It is advised to use private images to ensure the security of the source code being uploaded.\n", c.name) + } + } + + if c.dockerfile != nil && *c.dockerfile != "" { + dockerfileParam := buildv1beta1.ParamValue{ + Name: "dockerfile", + SingleValue: &buildv1beta1.SingleValue{ + Value: c.dockerfile, + }, + } + c.buildSpec.ParamValues = append(c.buildSpec.ParamValues, dockerfileParam) + } + + if c.builderImage != nil && *c.builderImage != "" { + builderParam := buildv1beta1.ParamValue{ + Name: "builder-image", + SingleValue: &buildv1beta1.SingleValue{ + Value: c.builderImage, + }, + } + c.buildSpec.ParamValues = append(c.buildSpec.ParamValues, builderParam) } clientset, err := params.ShipwrightClientSet() if err != nil { return err } - if _, err := clientset.ShipwrightV1alpha1().Builds(params.Namespace()).Create(c.cmd.Context(), b, metav1.CreateOptions{}); err != nil { + if _, err := clientset.ShipwrightV1beta1().Builds(params.Namespace()).Create(c.cmd.Context(), b, metav1.CreateOptions{}); err != nil { return err } fmt.Fprintf(io.Out, "Created build %q\n", c.name) @@ -89,13 +120,15 @@ func createCmd() runner.SubCommand { // instantiating command-line flags and the build-spec structure which receives the informed flag // values, also marking certain flags as mandatory - buildSpecFlags := flags.BuildSpecFromFlags(cmd.Flags()) + buildSpecFlags, dockerfileFlag, builderImageFlag := flags.BuildSpecFromFlags(cmd.Flags()) if err := cmd.MarkFlagRequired(flags.OutputImageFlag); err != nil { panic(err) } return &CreateCommand{ - cmd: cmd, - buildSpec: buildSpecFlags, + cmd: cmd, + buildSpec: buildSpecFlags, + dockerfile: dockerfileFlag, + builderImage: builderImageFlag, } } diff --git a/pkg/shp/cmd/build/delete.go b/pkg/shp/cmd/build/delete.go index 699b0d2a5..c5e99cd40 100644 --- a/pkg/shp/cmd/build/delete.go +++ b/pkg/shp/cmd/build/delete.go @@ -3,7 +3,7 @@ package build import ( "fmt" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/spf13/cobra" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -58,20 +58,20 @@ func (c *DeleteCommand) Run(params *params.Params, io *genericclioptions.IOStrea if err != nil { return err } - if err := clientset.ShipwrightV1alpha1().Builds(params.Namespace()).Delete(c.Cmd().Context(), c.name, v1.DeleteOptions{}); err != nil { + if err := clientset.ShipwrightV1beta1().Builds(params.Namespace()).Delete(c.Cmd().Context(), c.name, v1.DeleteOptions{}); err != nil { return err } if c.deleteRuns { - var brList *buildv1alpha1.BuildRunList - if brList, err = clientset.ShipwrightV1alpha1().BuildRuns(params.Namespace()).List(c.cmd.Context(), v1.ListOptions{ - LabelSelector: fmt.Sprintf("%v/name=%v", buildv1alpha1.BuildDomain, c.name), + var brList *buildv1beta1.BuildRunList + if brList, err = clientset.ShipwrightV1beta1().BuildRuns(params.Namespace()).List(c.cmd.Context(), v1.ListOptions{ + LabelSelector: fmt.Sprintf("%v/name=%v", buildv1beta1.BuildDomain, c.name), }); err != nil { return err } for _, buildrun := range brList.Items { - if err := clientset.ShipwrightV1alpha1().BuildRuns(params.Namespace()).Delete(c.cmd.Context(), buildrun.Name, v1.DeleteOptions{}); err != nil { + if err := clientset.ShipwrightV1beta1().BuildRuns(params.Namespace()).Delete(c.cmd.Context(), buildrun.Name, v1.DeleteOptions{}); err != nil { fmt.Fprintf(io.ErrOut, "Error deleting BuildRun %q: %v\n", buildrun.Name, err) } } diff --git a/pkg/shp/cmd/build/list.go b/pkg/shp/cmd/build/list.go index 9e0bebe9f..14ddd3782 100644 --- a/pkg/shp/cmd/build/list.go +++ b/pkg/shp/cmd/build/list.go @@ -4,7 +4,7 @@ import ( "fmt" "text/tabwriter" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/shipwright-io/cli/pkg/shp/cmd/runner" "github.com/shipwright-io/cli/pkg/shp/params" "github.com/spf13/cobra" @@ -59,7 +59,7 @@ func (c *ListCommand) Run(params *params.Params, io *genericclioptions.IOStreams columnNames := "NAME\tOUTPUT\tSTATUS" columnTemplate := "%s\t%s\t%s\n" - var buildList *buildv1alpha1.BuildList + var buildList *buildv1beta1.BuildList clientset, err := params.ShipwrightClientSet() if err != nil { return err @@ -78,7 +78,7 @@ func (c *ListCommand) Run(params *params.Params, io *genericclioptions.IOStreams return err } - if buildList, err = clientset.ShipwrightV1alpha1().Builds(params.Namespace()).List(c.cmd.Context(), metav1.ListOptions{}); err != nil { + if buildList, err = clientset.ShipwrightV1beta1().Builds(params.Namespace()).List(c.cmd.Context(), metav1.ListOptions{}); err != nil { return err } if len(buildList.Items) == 0 { diff --git a/pkg/shp/cmd/build/run.go b/pkg/shp/cmd/build/run.go index ed0b5f7bc..4f66c199d 100644 --- a/pkg/shp/cmd/build/run.go +++ b/pkg/shp/cmd/build/run.go @@ -4,7 +4,7 @@ import ( "errors" "fmt" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/shipwright-io/cli/pkg/shp/cmd/follower" "github.com/shipwright-io/cli/pkg/shp/cmd/runner" "github.com/shipwright-io/cli/pkg/shp/flags" @@ -24,8 +24,8 @@ type RunCommand struct { buildName string namespace string - buildRunSpec *buildv1alpha1.BuildRunSpec // stores command-line flags - follow bool // flag to tail pod logs + buildRunSpec *buildv1beta1.BuildRunSpec // stores command-line flags + follow bool // flag to tail pod logs follower *follower.Follower followerReady chan bool } @@ -87,7 +87,7 @@ func (r *RunCommand) FollowerReady() bool { // Run creates a BuildRun resource based on Build's name informed on arguments. func (r *RunCommand) Run(params *params.Params, ioStreams *genericclioptions.IOStreams) error { // resource using GenerateName, which will provide a unique instance - br := &buildv1alpha1.BuildRun{ + br := &buildv1beta1.BuildRun{ ObjectMeta: metav1.ObjectMeta{ GenerateName: fmt.Sprintf("%s-", r.buildName), }, @@ -100,7 +100,7 @@ func (r *RunCommand) Run(params *params.Params, ioStreams *genericclioptions.IOS if err != nil { return err } - br, err = clientset.ShipwrightV1alpha1().BuildRuns(r.namespace).Create(ctx, br, metav1.CreateOptions{}) + br, err = clientset.ShipwrightV1beta1().BuildRuns(r.namespace).Create(ctx, br, metav1.CreateOptions{}) if err != nil { return err } diff --git a/pkg/shp/cmd/build/run_test.go b/pkg/shp/cmd/build/run_test.go index 5a4f56f3f..386a3d14b 100644 --- a/pkg/shp/cmd/build/run_test.go +++ b/pkg/shp/cmd/build/run_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" shpfake "github.com/shipwright-io/build/pkg/client/clientset/versioned/fake" "github.com/shipwright-io/cli/pkg/shp/flags" "github.com/shipwright-io/cli/pkg/shp/params" @@ -98,8 +98,8 @@ func TestStartBuildRunFollowLog(t *testing.T) { Namespace: metav1.NamespaceDefault, Name: name, Labels: map[string]string{ - buildv1alpha1.LabelBuild: name, - buildv1alpha1.LabelBuildRun: name, + buildv1beta1.LabelBuild: name, + buildv1beta1.LabelBuildRun: name, }, }, Spec: corev1.PodSpec{ @@ -108,7 +108,7 @@ func TestStartBuildRunFollowLog(t *testing.T) { }}, }, } - br := &buildv1alpha1.BuildRun{ + br := &buildv1beta1.BuildRun{ ObjectMeta: metav1.ObjectMeta{ Namespace: metav1.NamespaceDefault, Name: name, @@ -153,26 +153,26 @@ func TestStartBuildRunFollowLog(t *testing.T) { switch { case test.cancelled: - br.Spec.State = buildv1alpha1.BuildRunRequestedStatePtr(buildv1alpha1.BuildRunStateCancel) - br.Status.Conditions = []buildv1alpha1.Condition{ + br.Spec.State = buildv1beta1.BuildRunRequestedStatePtr(buildv1beta1.BuildRunStateCancel) + br.Status.Conditions = []buildv1beta1.Condition{ { - Type: buildv1alpha1.Succeeded, + Type: buildv1beta1.Succeeded, Status: corev1.ConditionFalse, }, } case test.brDeleted: br.DeletionTimestamp = &metav1.Time{} - br.Status.Conditions = []buildv1alpha1.Condition{ + br.Status.Conditions = []buildv1beta1.Condition{ { - Type: buildv1alpha1.Succeeded, + Type: buildv1beta1.Succeeded, Status: corev1.ConditionFalse, }, } case test.podDeleted: pod.DeletionTimestamp = &metav1.Time{} - br.Status.Conditions = []buildv1alpha1.Condition{ + br.Status.Conditions = []buildv1beta1.Condition{ { - Type: buildv1alpha1.Succeeded, + Type: buildv1beta1.Succeeded, Status: corev1.ConditionFalse, }, } diff --git a/pkg/shp/cmd/build/upload.go b/pkg/shp/cmd/build/upload.go index 8e3f2d1f5..d64b78f3e 100644 --- a/pkg/shp/cmd/build/upload.go +++ b/pkg/shp/cmd/build/upload.go @@ -7,7 +7,7 @@ import ( "path" "time" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/shipwright-io/build/pkg/reconciler/buildrun/resources/sources" "github.com/shipwright-io/cli/pkg/shp/bundle" @@ -26,9 +26,9 @@ import ( // UploadCommand represents the "build upload" subcommand, implements runner.SubCommand interface. type UploadCommand struct { - cmd *cobra.Command // cobra command instance - buildRunSpec *buildv1alpha1.BuildRunSpec // command-line flags stored directly on the BuildRun - follow bool // flag to tail pod logs + cmd *cobra.Command // cobra command instance + buildRunSpec *buildv1beta1.BuildRunSpec // command-line flags stored directly on the BuildRun + follow bool // flag to tail pod logs buildRefName string // build name sourceDir string // local directory to be streamed @@ -121,20 +121,21 @@ func (u *UploadCommand) Complete(p *params.Params, _ *genericclioptions.IOStream } // check that the cluster actually contains a build with this name - build, err := shpClientSet.ShipwrightV1alpha1().Builds(p.Namespace()).Get(u.cmd.Context(), u.buildRefName, metav1.GetOptions{}) + build, err := shpClientSet.ShipwrightV1beta1().Builds(p.Namespace()).Get(u.cmd.Context(), u.buildRefName, metav1.GetOptions{}) if err != nil { return err } // detect upload method, if build has bundle container image set, it // is assumed that the source bundle upload via registry is used - if build.Spec.Source.BundleContainer != nil && build.Spec.Source.BundleContainer.Image != "" { - u.sourceBundleImage = build.Spec.Source.BundleContainer.Image + if build.Spec.Source != nil { + if build.Spec.Source.OCIArtifact != nil && build.Spec.Source.OCIArtifact.Image != "" { + u.sourceBundleImage = build.Spec.Source.OCIArtifact.Image - } else { - u.dataStreamer = streamer.NewStreamer(restConfig, clientset) + } else { + u.dataStreamer = streamer.NewStreamer(restConfig, clientset) + } } - u.pw, err = p.NewPodWatcher(u.Cmd().Context()) return err } @@ -153,12 +154,12 @@ func (u *UploadCommand) Validate() error { // createBuildRun creates the BuildRun instance to receive the data upload afterwards, it returns the // BuildRun name just created and error. -func (u *UploadCommand) createBuildRun(p *params.Params) (*buildv1alpha1.BuildRun, error) { - var br *buildv1alpha1.BuildRun +func (u *UploadCommand) createBuildRun(p *params.Params) (*buildv1beta1.BuildRun, error) { + var br *buildv1beta1.BuildRun switch { // Use bundle feature for source upload and build case u.sourceBundleImage != "": - br = &buildv1alpha1.BuildRun{ + br = &buildv1beta1.BuildRun{ ObjectMeta: metav1.ObjectMeta{ GenerateName: fmt.Sprintf("%s-", u.buildRefName), }, @@ -167,11 +168,13 @@ func (u *UploadCommand) createBuildRun(p *params.Params) (*buildv1alpha1.BuildRu // Use local copy streaming feature for source upload and build default: - u.buildRunSpec.Sources = []buildv1alpha1.BuildSource{{ - Name: "local-copy", - Type: buildv1alpha1.LocalCopy, - }} - br = &buildv1alpha1.BuildRun{ + u.buildRunSpec.Source = &buildv1beta1.BuildRunSource{ + Type: buildv1beta1.LocalType, + Local: &buildv1beta1.Local{ + Name: "local-copy", + }, + } + br = &buildv1beta1.BuildRun{ ObjectMeta: metav1.ObjectMeta{ GenerateName: fmt.Sprintf("%s-", u.buildRefName), }, @@ -187,7 +190,7 @@ func (u *UploadCommand) createBuildRun(p *params.Params) (*buildv1alpha1.BuildRu if err != nil { return nil, err } - br, err = clientset.ShipwrightV1alpha1(). + br, err = clientset.ShipwrightV1beta1(). BuildRuns(ns). Create(u.cmd.Context(), br, metav1.CreateOptions{}) if err != nil { @@ -309,7 +312,7 @@ func (u *UploadCommand) Run(p *params.Params, ioStreams *genericclioptions.IOStr // BuildRun we've just issued labelSelector := fmt.Sprintf( "%s=%s,%s=%s", - buildNameAnnotation, u.buildRunSpec.BuildRef.Name, + buildNameAnnotation, *u.buildRunSpec.Build.Name, buildRunNameAnnotation, br.Name, ) listOpts := metav1.ListOptions{LabelSelector: labelSelector} diff --git a/pkg/shp/cmd/buildrun/cancel.go b/pkg/shp/cmd/buildrun/cancel.go index 4240630d7..80172df00 100644 --- a/pkg/shp/cmd/buildrun/cancel.go +++ b/pkg/shp/cmd/buildrun/cancel.go @@ -10,7 +10,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/cli-runtime/pkg/genericclioptions" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/shipwright-io/cli/pkg/shp/cmd/runner" "github.com/shipwright-io/cli/pkg/shp/params" ) @@ -56,8 +56,8 @@ func (c *CancelCommand) Run(params *params.Params, ioStreams *genericclioptions. return err } - var br *buildv1alpha1.BuildRun - if br, err = clientset.ShipwrightV1alpha1().BuildRuns(params.Namespace()).Get(c.cmd.Context(), c.name, metav1.GetOptions{}); err != nil { + var br *buildv1beta1.BuildRun + if br, err = clientset.ShipwrightV1beta1().BuildRuns(params.Namespace()).Get(c.cmd.Context(), c.name, metav1.GetOptions{}); err != nil { return fmt.Errorf("failed to retrieve BuildRun %s: %s", c.name, err.Error()) } if br.IsDone() { @@ -72,13 +72,13 @@ func (c *CancelCommand) Run(params *params.Params, ioStreams *genericclioptions. payload := []patchStringValue{{ Op: "replace", Path: "/spec/state", - Value: buildv1alpha1.BuildRunStateCancel, + Value: buildv1beta1.BuildRunStateCancel, }} var data []byte if data, err = json.Marshal(payload); err != nil { return err } - if _, err = clientset.ShipwrightV1alpha1().BuildRuns(params.Namespace()).Patch(c.Cmd().Context(), c.name, types.JSONPatchType, data, metav1.PatchOptions{}); err != nil { + if _, err = clientset.ShipwrightV1beta1().BuildRuns(params.Namespace()).Patch(c.Cmd().Context(), c.name, types.JSONPatchType, data, metav1.PatchOptions{}); err != nil { return err } diff --git a/pkg/shp/cmd/buildrun/cancel_test.go b/pkg/shp/cmd/buildrun/cancel_test.go index 5c9aaf407..632591c6e 100644 --- a/pkg/shp/cmd/buildrun/cancel_test.go +++ b/pkg/shp/cmd/buildrun/cancel_test.go @@ -10,14 +10,14 @@ import ( "github.com/spf13/cobra" - "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/shipwright-io/build/pkg/client/clientset/versioned/fake" "github.com/shipwright-io/cli/pkg/shp/params" ) func TestCancelBuildRun(t *testing.T) { tests := map[string]struct { - br *v1alpha1.BuildRun + br *v1beta1.BuildRun expectCancelSet bool expectErr bool }{ @@ -26,15 +26,15 @@ func TestCancelBuildRun(t *testing.T) { expectErr: true, }, "completed": { - br: &v1alpha1.BuildRun{ + br: &v1beta1.BuildRun{ ObjectMeta: metav1.ObjectMeta{ Name: "completed", Namespace: metav1.NamespaceDefault, }, - Status: v1alpha1.BuildRunStatus{ - Conditions: v1alpha1.Conditions{ + Status: v1beta1.BuildRunStatus{ + Conditions: v1beta1.Conditions{ { - Type: v1alpha1.Succeeded, + Type: v1beta1.Succeeded, Status: corev1.ConditionTrue, }, }, @@ -42,15 +42,15 @@ func TestCancelBuildRun(t *testing.T) { expectErr: true, }, "failed": { - br: &v1alpha1.BuildRun{ + br: &v1beta1.BuildRun{ ObjectMeta: metav1.ObjectMeta{ Name: "failed", Namespace: metav1.NamespaceDefault, }, - Status: v1alpha1.BuildRunStatus{ - Conditions: v1alpha1.Conditions{ + Status: v1beta1.BuildRunStatus{ + Conditions: v1beta1.Conditions{ { - Type: v1alpha1.Succeeded, + Type: v1beta1.Succeeded, Status: corev1.ConditionFalse, }, }, @@ -58,7 +58,7 @@ func TestCancelBuildRun(t *testing.T) { expectErr: true, }, "condition-missing": { - br: &v1alpha1.BuildRun{ + br: &v1beta1.BuildRun{ ObjectMeta: metav1.ObjectMeta{ Name: "failed", Namespace: metav1.NamespaceDefault, @@ -67,15 +67,15 @@ func TestCancelBuildRun(t *testing.T) { expectCancelSet: true, }, "in-progress": { - br: &v1alpha1.BuildRun{ + br: &v1beta1.BuildRun{ ObjectMeta: metav1.ObjectMeta{ Name: "failed", Namespace: metav1.NamespaceDefault, }, - Status: v1alpha1.BuildRunStatus{ - Conditions: v1alpha1.Conditions{ + Status: v1beta1.BuildRunStatus{ + Conditions: v1beta1.Conditions{ { - Type: v1alpha1.Succeeded, + Type: v1beta1.Succeeded, Status: corev1.ConditionUnknown, }, }, @@ -112,7 +112,7 @@ func TestCancelBuildRun(t *testing.T) { continue } - buildRun, _ := clientset.ShipwrightV1alpha1().BuildRuns(param.Namespace()).Get(context.Background(), test.br.Name, metav1.GetOptions{}) + buildRun, _ := clientset.ShipwrightV1beta1().BuildRuns(param.Namespace()).Get(context.Background(), test.br.Name, metav1.GetOptions{}) if test.expectCancelSet && !buildRun.IsCanceled() { t.Errorf("%s: cancel not set", testName) diff --git a/pkg/shp/cmd/buildrun/create.go b/pkg/shp/cmd/buildrun/create.go index 71bae6d50..06d588d57 100644 --- a/pkg/shp/cmd/buildrun/create.go +++ b/pkg/shp/cmd/buildrun/create.go @@ -3,7 +3,7 @@ package buildrun import ( "fmt" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -18,8 +18,8 @@ import ( type CreateCommand struct { cmd *cobra.Command // cobra command instance - name string // buildrun name - buildRunSpec *buildv1alpha1.BuildRunSpec // stores command-line flags + name string // buildrun name + buildRunSpec *buildv1beta1.BuildRunSpec // stores command-line flags } const buildRunCreateLongDesc = ` @@ -55,7 +55,7 @@ func (c *CreateCommand) Validate() error { // Run executes the creation of BuildRun object. func (c *CreateCommand) Run(params *params.Params, ioStreams *genericclioptions.IOStreams) error { - br := &buildv1alpha1.BuildRun{ + br := &buildv1beta1.BuildRun{ ObjectMeta: metav1.ObjectMeta{ Name: c.name, }, @@ -68,10 +68,12 @@ func (c *CreateCommand) Run(params *params.Params, ioStreams *genericclioptions. if err != nil { return err } - if _, err = clientset.ShipwrightV1alpha1().BuildRuns(params.Namespace()).Create(c.cmd.Context(), br, metav1.CreateOptions{}); err != nil { + if _, err = clientset.ShipwrightV1beta1().BuildRuns(params.Namespace()).Create(c.cmd.Context(), br, metav1.CreateOptions{}); err != nil { return err } - fmt.Fprintf(ioStreams.Out, "BuildRun created %q for Build %q\n", c.name, br.Spec.BuildRef.Name) + + // Cli doesn't allow standalone buildruns, so it will always refer an existing build. + fmt.Fprintf(ioStreams.Out, "BuildRun created %q for Build %q\n", c.name, *br.Spec.Build.Name) return nil } diff --git a/pkg/shp/cmd/buildrun/delete.go b/pkg/shp/cmd/buildrun/delete.go index 1beb8215e..582df143e 100644 --- a/pkg/shp/cmd/buildrun/delete.go +++ b/pkg/shp/cmd/buildrun/delete.go @@ -53,7 +53,7 @@ func (c *DeleteCommand) Run(params *params.Params, ioStreams *genericclioptions. return err } - if err = clientset.ShipwrightV1alpha1().BuildRuns(params.Namespace()).Delete(c.cmd.Context(), c.name, metav1.DeleteOptions{}); err != nil { + if err = clientset.ShipwrightV1beta1().BuildRuns(params.Namespace()).Delete(c.cmd.Context(), c.name, metav1.DeleteOptions{}); err != nil { return err } diff --git a/pkg/shp/cmd/buildrun/list.go b/pkg/shp/cmd/buildrun/list.go index 7edc6ee0c..b931acdf9 100644 --- a/pkg/shp/cmd/buildrun/list.go +++ b/pkg/shp/cmd/buildrun/list.go @@ -13,7 +13,7 @@ import ( "k8s.io/apimachinery/pkg/util/duration" "k8s.io/cli-runtime/pkg/genericclioptions" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/shipwright-io/cli/pkg/shp/cmd/runner" "github.com/shipwright-io/cli/pkg/shp/params" @@ -81,8 +81,8 @@ func (c *ListCommand) Run(params *params.Params, io *genericclioptions.IOStreams return err } - var brs *buildv1alpha1.BuildRunList - if brs, err = clientset.ShipwrightV1alpha1().BuildRuns(params.Namespace()).List(c.cmd.Context(), metav1.ListOptions{}); err != nil { + var brs *buildv1beta1.BuildRunList + if brs, err = clientset.ShipwrightV1beta1().BuildRuns(params.Namespace()).List(c.cmd.Context(), metav1.ListOptions{}); err != nil { return err } if len(brs.Items) == 0 { @@ -98,7 +98,7 @@ func (c *ListCommand) Run(params *params.Params, io *genericclioptions.IOStreams name := br.Name status := string(metav1.ConditionUnknown) for _, condition := range br.Status.Conditions { - if condition.Type == buildv1alpha1.Succeeded { + if condition.Type == buildv1beta1.Succeeded { status = condition.Reason break } diff --git a/pkg/shp/cmd/buildrun/logs.go b/pkg/shp/cmd/buildrun/logs.go index 898844af1..114ecdbff 100644 --- a/pkg/shp/cmd/buildrun/logs.go +++ b/pkg/shp/cmd/buildrun/logs.go @@ -12,7 +12,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/cli-runtime/pkg/genericclioptions" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/spf13/cobra" "github.com/shipwright-io/cli/pkg/shp/cmd/follower" @@ -78,7 +78,7 @@ func (c *LogsCommand) Run(params *params.Params, ioStreams *genericclioptions.IO } lo := v1.ListOptions{ - LabelSelector: fmt.Sprintf("%v=%v", buildv1alpha1.LabelBuildRun, c.name), + LabelSelector: fmt.Sprintf("%v=%v", buildv1beta1.LabelBuildRun, c.name), } // first see if pod is already done; if so, even if we have follow == true, just do the normal path; diff --git a/pkg/shp/cmd/buildrun/logs_test.go b/pkg/shp/cmd/buildrun/logs_test.go index b4d7ad1ce..d852b2089 100644 --- a/pkg/shp/cmd/buildrun/logs_test.go +++ b/pkg/shp/cmd/buildrun/logs_test.go @@ -10,7 +10,7 @@ import ( kruntime "k8s.io/apimachinery/pkg/runtime" fakekubetesting "k8s.io/client-go/testing" - "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/shipwright-io/cli/pkg/shp/params" corev1 "k8s.io/api/core/v1" @@ -27,7 +27,7 @@ func TestStreamBuildLogs(t *testing.T) { pod.Name = name pod.Namespace = metav1.NamespaceDefault pod.Labels = map[string]string{ - v1alpha1.LabelBuildRun: name, + v1beta1.LabelBuildRun: name, } pod.Spec.Containers = []corev1.Container{ { @@ -132,8 +132,8 @@ func TestStreamBuildRunFollowLogs(t *testing.T) { Namespace: metav1.NamespaceDefault, Name: name, Labels: map[string]string{ - v1alpha1.LabelBuild: name, - v1alpha1.LabelBuildRun: name, + v1beta1.LabelBuild: name, + v1beta1.LabelBuildRun: name, }, }, Spec: corev1.PodSpec{ @@ -142,7 +142,7 @@ func TestStreamBuildRunFollowLogs(t *testing.T) { }}, }, } - br := &v1alpha1.BuildRun{ + br := &v1beta1.BuildRun{ ObjectMeta: metav1.ObjectMeta{ Namespace: metav1.NamespaceDefault, Name: name, @@ -186,26 +186,26 @@ func TestStreamBuildRunFollowLogs(t *testing.T) { switch { case test.cancelled: - br.Spec.State = v1alpha1.BuildRunRequestedStatePtr(v1alpha1.BuildRunStateCancel) - br.Status.Conditions = []v1alpha1.Condition{ + br.Spec.State = v1beta1.BuildRunRequestedStatePtr(v1beta1.BuildRunStateCancel) + br.Status.Conditions = []v1beta1.Condition{ { - Type: v1alpha1.Succeeded, + Type: v1beta1.Succeeded, Status: corev1.ConditionFalse, }, } case test.brDeleted: br.DeletionTimestamp = &metav1.Time{} - br.Status.Conditions = []v1alpha1.Condition{ + br.Status.Conditions = []v1beta1.Condition{ { - Type: v1alpha1.Succeeded, + Type: v1beta1.Succeeded, Status: corev1.ConditionFalse, }, } case test.podDeleted: pod.DeletionTimestamp = &metav1.Time{} - br.Status.Conditions = []v1alpha1.Condition{ + br.Status.Conditions = []v1beta1.Condition{ { - Type: v1alpha1.Succeeded, + Type: v1beta1.Succeeded, Status: corev1.ConditionFalse, }, } diff --git a/pkg/shp/cmd/follower/follow.go b/pkg/shp/cmd/follower/follow.go index dc34295de..3058529d7 100644 --- a/pkg/shp/cmd/follower/follow.go +++ b/pkg/shp/cmd/follower/follow.go @@ -9,7 +9,7 @@ import ( "sync" "time" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" buildclientset "github.com/shipwright-io/build/pkg/client/clientset/versioned" "github.com/shipwright-io/cli/pkg/shp/reactor" "github.com/shipwright-io/cli/pkg/shp/tail" @@ -140,9 +140,9 @@ func (f *Follower) OnEvent(pod *corev1.Pod) error { } case corev1.PodFailed: msg := "" - var br *buildv1alpha1.BuildRun + var br *buildv1beta1.BuildRun err := wait.PollUntilContextTimeout(f.ctx, f.failPollInterval, f.failPollTimeout, true, func(ctx context.Context) (done bool, err error) { - brClient := f.buildClientset.ShipwrightV1alpha1().BuildRuns(pod.Namespace) + brClient := f.buildClientset.ShipwrightV1beta1().BuildRuns(pod.Namespace) br, err = brClient.Get(ctx, f.buildRun.Name, metav1.GetOptions{}) if err != nil { if kerrors.IsNotFound(err) { @@ -223,7 +223,7 @@ func (f *Follower) OnNoPodEventsYet(podList *corev1.PodList) { f.OnEvent(&podList.Items[0]) // #nosec G104 there is nothing we must handle here, the error is logged in the function already return } - brClient := f.buildClientset.ShipwrightV1alpha1().BuildRuns(f.buildRun.Namespace) + brClient := f.buildClientset.ShipwrightV1beta1().BuildRuns(f.buildRun.Namespace) br, err := brClient.Get(f.ctx, f.buildRun.Name, metav1.GetOptions{}) if err != nil { f.Log(fmt.Sprintf("error accessing BuildRun %q: %s\n", f.buildRun.Name, err.Error())) @@ -231,7 +231,7 @@ func (f *Follower) OnNoPodEventsYet(podList *corev1.PodList) { return } - c := br.Status.GetCondition(buildv1alpha1.Succeeded) + c := br.Status.GetCondition(buildv1beta1.Succeeded) giveUp := false msg := "" switch { @@ -275,7 +275,7 @@ func (f *Follower) Start(listOpts metav1.ListOptions) (*corev1.Pod, error) { return f.WaitForCompletion() } -func buildErrorMessage(br *buildv1alpha1.BuildRun, pod *corev1.Pod) string { +func buildErrorMessage(br *buildv1beta1.BuildRun, pod *corev1.Pod) string { failureDetails := br.Status.FailureDetails if failureDetails == nil { if podBytes, err := json.MarshalIndent(pod, " ", " "); err == nil { diff --git a/pkg/shp/flags/build.go b/pkg/shp/flags/build.go index 2299131ed..0549e9bc2 100644 --- a/pkg/shp/flags/build.go +++ b/pkg/shp/flags/build.go @@ -1,10 +1,9 @@ package flags import ( - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/spf13/pflag" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/utils/ptr" ) @@ -14,33 +13,32 @@ func pointerUInt(value uint) *uint { } // BuildSpecFromFlags creates a BuildSpec instance based on command-line flags. -func BuildSpecFromFlags(flags *pflag.FlagSet) *buildv1alpha1.BuildSpec { - clusterBuildStrategyKind := buildv1alpha1.ClusterBuildStrategyKind - bundlePruneOption := buildv1alpha1.PruneNever - spec := &buildv1alpha1.BuildSpec{ - Source: buildv1alpha1.Source{ - Credentials: &corev1.LocalObjectReference{}, - Revision: ptr.To(""), - ContextDir: ptr.To(""), - URL: ptr.To(""), - BundleContainer: &buildv1alpha1.BundleContainer{Prune: &bundlePruneOption}, +func BuildSpecFromFlags(flags *pflag.FlagSet) (*buildv1beta1.BuildSpec, *string, *string) { + clusterBuildStrategyKind := buildv1beta1.ClusterBuildStrategyKind + pruneOption := buildv1beta1.PruneNever + spec := &buildv1beta1.BuildSpec{ + Source: &buildv1beta1.Source{ + ContextDir: ptr.To(""), + Git: &buildv1beta1.Git{ + Revision: ptr.To(""), + CloneSecret: ptr.To(""), + }, + OCIArtifact: &buildv1beta1.OCIArtifact{ + Prune: &pruneOption, + PullSecret: ptr.To(""), + }, }, - Strategy: buildv1alpha1.Strategy{ - Kind: &clusterBuildStrategyKind, - APIVersion: &buildv1alpha1.SchemeGroupVersion.Version, + Strategy: buildv1beta1.Strategy{ + Kind: &clusterBuildStrategyKind, }, - Dockerfile: ptr.To(""), - Builder: &buildv1alpha1.Image{ - Credentials: &corev1.LocalObjectReference{}, - }, - Output: buildv1alpha1.Image{ - Credentials: &corev1.LocalObjectReference{}, + Output: buildv1beta1.Image{ Insecure: ptr.To(false), + PushSecret: ptr.To(""), Labels: map[string]string{}, Annotations: map[string]string{}, }, Timeout: &metav1.Duration{}, - Retention: &buildv1alpha1.BuildRetention{ + Retention: &buildv1beta1.BuildRetention{ FailedLimit: pointerUInt(65535), SucceededLimit: pointerUInt(65535), TTLAfterFailed: &metav1.Duration{}, @@ -48,10 +46,8 @@ func BuildSpecFromFlags(flags *pflag.FlagSet) *buildv1alpha1.BuildSpec { }, } - sourceFlags(flags, &spec.Source) + sourceFlags(flags, spec.Source) strategyFlags(flags, &spec.Strategy) - dockerfileFlags(flags, spec.Dockerfile) - imageFlags(flags, "builder", spec.Builder) imageFlags(flags, "output", &spec.Output) timeoutFlags(flags, spec.Timeout) envFlags(flags, &spec.Env) @@ -60,48 +56,62 @@ func BuildSpecFromFlags(flags *pflag.FlagSet) *buildv1alpha1.BuildSpec { imageAnnotationsFlags(flags, spec.Output.Annotations) buildRetentionFlags(flags, spec.Retention) - return spec + var dockerfile, builderImage string + dockerfileFlags(flags, &dockerfile) + builderImageFlag(flags, &builderImage) + + return spec, &dockerfile, &builderImage } // SanitizeBuildSpec checks for empty inner data structures and replaces them with nil. -func SanitizeBuildSpec(b *buildv1alpha1.BuildSpec) { +func SanitizeBuildSpec(b *buildv1beta1.BuildSpec) { if b == nil { return } - if b.Source.Credentials != nil && b.Source.Credentials.Name == "" { - b.Source.Credentials = nil - } - if b.Source.ContextDir != nil && *b.Source.ContextDir == "" { - b.Source.ContextDir = nil - } - if b.Source.Revision != nil && *b.Source.Revision == "" { - b.Source.Revision = nil - } - if b.Source.URL != nil && *b.Source.URL == "" { - b.Source.URL = nil - } - if b.Source.BundleContainer != nil && b.Source.BundleContainer.Image == "" { - b.Source.BundleContainer = nil - } - if b.Builder != nil { - if b.Builder.Credentials != nil && b.Builder.Credentials.Name == "" { - b.Builder.Credentials = nil + + if b.Source != nil { + if b.Source.Git != nil { + if b.Source.Git.URL == "" { + b.Source.Git = nil + } } - if b.Builder.Image == "" && b.Builder.Credentials == nil { - b.Builder = nil + + if b.Source.Git != nil { + if b.Source.Git.Revision != nil && *b.Source.Git.Revision == "" { + b.Source.Git.Revision = nil + } + if b.Source.Git.CloneSecret != nil && *b.Source.Git.CloneSecret == "" { + b.Source.Git.CloneSecret = nil + } } - if len(b.Env) == 0 { - b.Env = nil + + if b.Source.ContextDir != nil && *b.Source.ContextDir == "" { + b.Source.ContextDir = nil + } + if b.Source.OCIArtifact != nil && b.Source.OCIArtifact.Image == "" { + b.Source.OCIArtifact = nil + } + if b.Source.OCIArtifact != nil && b.Source.OCIArtifact.PullSecret != nil { + if *b.Source.OCIArtifact.PullSecret == "" { + b.Source.OCIArtifact.PullSecret = nil + } + } + + if b.Source.Git == nil && b.Source.OCIArtifact == nil { + b.Source = nil } } + + if len(b.Env) == 0 { + b.Env = nil + } + if b.Timeout != nil && b.Timeout.Duration == 0 { b.Timeout = nil } - if b.Dockerfile != nil && *b.Dockerfile == "" { - b.Dockerfile = nil - } - if b.Output.Credentials != nil && b.Output.Credentials.Name == "" { - b.Output.Credentials = nil + + if b.Output.PushSecret != nil && *b.Output.PushSecret == "" { + b.Output.PushSecret = nil } if b.Output.Insecure != nil && !*b.Output.Insecure { b.Output.Insecure = nil diff --git a/pkg/shp/flags/build_test.go b/pkg/shp/flags/build_test.go index e85ea9209..454b1e199 100644 --- a/pkg/shp/flags/build_test.go +++ b/pkg/shp/flags/build_test.go @@ -6,9 +6,8 @@ import ( "time" o "github.com/onsi/gomega" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/spf13/cobra" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/utils/ptr" ) @@ -16,29 +15,28 @@ import ( func TestBuildSpecFromFlags(t *testing.T) { g := o.NewWithT(t) - credentials := corev1.LocalObjectReference{Name: "name"} - buildStrategyKind := buildv1alpha1.ClusterBuildStrategyKind - bundlePruneOption := buildv1alpha1.PruneNever - expected := &buildv1alpha1.BuildSpec{ - Source: buildv1alpha1.Source{ - Credentials: &credentials, - URL: ptr.To("https://some.url"), - Revision: ptr.To("some-rev"), - ContextDir: ptr.To("some-contextdir"), - BundleContainer: &buildv1alpha1.BundleContainer{Prune: &bundlePruneOption}, - }, - Strategy: buildv1alpha1.Strategy{ - Name: "strategy-name", - Kind: &buildStrategyKind, - APIVersion: &buildv1alpha1.SchemeGroupVersion.Version, + buildStrategyKind := buildv1beta1.ClusterBuildStrategyKind + bundlePruneOption := buildv1beta1.PruneNever + expected := &buildv1beta1.BuildSpec{ + Source: &buildv1beta1.Source{ + Git: &buildv1beta1.Git{ + URL: "https://some.url", + Revision: ptr.To("some-rev"), + CloneSecret: ptr.To("name"), + }, + ContextDir: ptr.To("some-contextdir"), + OCIArtifact: &buildv1beta1.OCIArtifact{ + Prune: &bundlePruneOption, + PullSecret: ptr.To("pull-secret"), + }, }, - Dockerfile: ptr.To("some-dockerfile"), - Builder: &buildv1alpha1.Image{ - Credentials: &credentials, - Image: "builder-image", + Strategy: buildv1beta1.Strategy{ + Name: "strategy-name", + Kind: &buildStrategyKind, }, - Output: buildv1alpha1.Image{ - Credentials: &credentials, + + Output: buildv1beta1.Image{ + PushSecret: ptr.To("name"), Image: "output-image", Insecure: ptr.To(false), Labels: map[string]string{}, @@ -47,7 +45,7 @@ func TestBuildSpecFromFlags(t *testing.T) { Timeout: &metav1.Duration{ Duration: 1 * time.Second, }, - Retention: &buildv1alpha1.BuildRetention{ + Retention: &buildv1beta1.BuildRetention{ FailedLimit: pointerUInt(10), SucceededLimit: pointerUInt(5), TTLAfterFailed: &metav1.Duration{ @@ -61,29 +59,29 @@ func TestBuildSpecFromFlags(t *testing.T) { cmd := &cobra.Command{} flags := cmd.PersistentFlags() - spec := BuildSpecFromFlags(flags) + spec, dockerfile, builderImage := BuildSpecFromFlags(flags) t.Run(".spec.source", func(_ *testing.T) { - err := flags.Set(SourceURLFlag, *expected.Source.URL) + err := flags.Set(SourceURLFlag, expected.Source.Git.URL) g.Expect(err).To(o.BeNil()) - err = flags.Set(SourceRevisionFlag, *expected.Source.Revision) + err = flags.Set(SourceRevisionFlag, *expected.Source.Git.Revision) g.Expect(err).To(o.BeNil()) err = flags.Set(SourceContextDirFlag, *expected.Source.ContextDir) g.Expect(err).To(o.BeNil()) - err = flags.Set(SourceCredentialsSecretFlag, expected.Source.Credentials.Name) + err = flags.Set(SourceCredentialsSecretFlag, *expected.Source.Git.CloneSecret) g.Expect(err).To(o.BeNil()) - err = flags.Set(StrategyAPIVersionFlag, *expected.Strategy.APIVersion) + err = flags.Set(SourceOCIArtifactPullSecretFlag, *expected.Source.OCIArtifact.PullSecret) g.Expect(err).To(o.BeNil()) g.Expect(expected.Source).To(o.Equal(spec.Source), "spec.source") }) t.Run(".spec.strategy", func(_ *testing.T) { - err := flags.Set(StrategyKindFlag, string(buildv1alpha1.ClusterBuildStrategyKind)) + err := flags.Set(StrategyKindFlag, string(buildv1beta1.ClusterBuildStrategyKind)) g.Expect(err).To(o.BeNil()) err = flags.Set(StrategyNameFlag, expected.Strategy.Name) @@ -92,29 +90,23 @@ func TestBuildSpecFromFlags(t *testing.T) { g.Expect(expected.Strategy).To(o.Equal(spec.Strategy), "spec.strategy") }) - t.Run(".spec.dockerfile", func(_ *testing.T) { - err := flags.Set(DockerfileFlag, *expected.Dockerfile) + t.Run("dockerfile", func(_ *testing.T) { + err := flags.Set(DockerfileFlag, "test-dockerfile") g.Expect(err).To(o.BeNil()) - - g.Expect(spec.Dockerfile).NotTo(o.BeNil()) - g.Expect(*expected.Dockerfile).To(o.Equal(*spec.Dockerfile), "spec.dockerfile") + g.Expect(*dockerfile).To(o.Equal("test-dockerfile")) }) - t.Run(".spec.builder", func(_ *testing.T) { - err := flags.Set(BuilderImageFlag, expected.Builder.Image) + t.Run("builderImage", func(_ *testing.T) { + err := flags.Set(BuilderImageFlag, "test-builder-image") g.Expect(err).To(o.BeNil()) - - err = flags.Set(BuilderCredentialsSecretFlag, expected.Builder.Credentials.Name) - g.Expect(err).To(o.BeNil()) - - g.Expect(*expected.Builder).To(o.Equal(*spec.Builder), "spec.builder") + g.Expect(*builderImage).To(o.Equal("test-builder-image")) }) t.Run(".spec.output", func(_ *testing.T) { err := flags.Set(OutputImageFlag, expected.Output.Image) g.Expect(err).To(o.BeNil()) - err = flags.Set(OutputCredentialsSecretFlag, expected.Output.Credentials.Name) + err = flags.Set(OutputCredentialsSecretFlag, *expected.Output.PushSecret) g.Expect(err).To(o.BeNil()) err = flags.Set(OutputInsecureFlag, strconv.FormatBool(*expected.Output.Insecure)) @@ -162,13 +154,13 @@ func TestBuildSpecFromFlags(t *testing.T) { func TestSanitizeBuildSpec(t *testing.T) { g := o.NewWithT(t) - completeBuildSpec := buildv1alpha1.BuildSpec{ - Source: buildv1alpha1.Source{ - Credentials: &corev1.LocalObjectReference{Name: "name"}, - }, - Builder: &buildv1alpha1.Image{ - Credentials: &corev1.LocalObjectReference{Name: "name"}, - Image: "image", + completeBuildSpec := buildv1beta1.BuildSpec{ + Source: &buildv1beta1.Source{ + Type: buildv1beta1.GitType, + Git: &buildv1beta1.Git{ + URL: "test-url", + CloneSecret: ptr.To("name"), + }, }, } @@ -176,104 +168,101 @@ func TestSanitizeBuildSpec(t *testing.T) { testCases := []struct { name string - in buildv1alpha1.BuildSpec - out buildv1alpha1.BuildSpec - }{{ - name: "all empty should stay empty", - in: buildv1alpha1.BuildSpec{}, - out: buildv1alpha1.BuildSpec{}, - }, { - name: "should clean-up `.spec.source.credentials`", - in: buildv1alpha1.BuildSpec{Source: buildv1alpha1.Source{ - Credentials: &corev1.LocalObjectReference{}, - }}, - out: buildv1alpha1.BuildSpec{}, - }, { - name: "should clean-up `.spec.builder.credentials`", - in: buildv1alpha1.BuildSpec{Builder: &buildv1alpha1.Image{ - Credentials: &corev1.LocalObjectReference{}, - }}, - out: buildv1alpha1.BuildSpec{}, - }, { - name: "should clean-up `.spec.builder.image`", - in: buildv1alpha1.BuildSpec{Builder: &buildv1alpha1.Image{}}, - out: buildv1alpha1.BuildSpec{}, - }, { - name: "should not clean-up complete objects", - in: completeBuildSpec, - out: completeBuildSpec, - }, { - name: "should clean-up 0s duration", - in: buildv1alpha1.BuildSpec{Timeout: &metav1.Duration{ - Duration: time.Duration(0), - }}, - out: buildv1alpha1.BuildSpec{Timeout: nil}, - }, { - name: "should clean-up an empty Dockerfile", - in: buildv1alpha1.BuildSpec{Dockerfile: &emptyString}, - out: buildv1alpha1.BuildSpec{Dockerfile: nil}, - }, { - name: "should clean-up an empty revision", - in: buildv1alpha1.BuildSpec{Source: buildv1alpha1.Source{ - Revision: &emptyString, - }}, - out: buildv1alpha1.BuildSpec{Source: buildv1alpha1.Source{ - Revision: nil, - }}, - }, { - name: "should clean-up an empty retention", - in: buildv1alpha1.BuildSpec{ - Retention: &buildv1alpha1.BuildRetention{}, + in buildv1beta1.BuildSpec + out buildv1beta1.BuildSpec + }{ + { + name: "all empty should stay empty", + in: buildv1beta1.BuildSpec{}, + out: buildv1beta1.BuildSpec{}, + }, { + name: "should clean-up `.spec.source.credentials`", + in: buildv1beta1.BuildSpec{Source: &buildv1beta1.Source{ + Git: &buildv1beta1.Git{ + CloneSecret: ptr.To(""), + }, + }}, + out: buildv1beta1.BuildSpec{}, }, - out: buildv1alpha1.BuildSpec{}, - }, { - name: "should clean-up an empty source contextDir", - in: buildv1alpha1.BuildSpec{ - Source: buildv1alpha1.Source{ - ContextDir: ptr.To(""), - }, - }, - out: buildv1alpha1.BuildSpec{ - Source: buildv1alpha1.Source{}, + { + name: "should not clean-up complete objects", + in: completeBuildSpec, + out: completeBuildSpec, + }, { + name: "should clean-up 0s duration", + in: buildv1beta1.BuildSpec{Timeout: &metav1.Duration{ + Duration: time.Duration(0), + }}, + out: buildv1beta1.BuildSpec{Timeout: nil}, }, - }, { - name: "should clean-up an empty source URL", - in: buildv1alpha1.BuildSpec{ - Source: buildv1alpha1.Source{ - URL: ptr.To(""), + { + name: "should clean-up an empty revision", + in: buildv1beta1.BuildSpec{Source: &buildv1beta1.Source{ + Type: buildv1beta1.GitType, + Git: &buildv1beta1.Git{ + URL: "test-url", + Revision: &emptyString, + }, + }}, + out: buildv1beta1.BuildSpec{Source: &buildv1beta1.Source{ + Type: buildv1beta1.GitType, + Git: &buildv1beta1.Git{ + URL: "test-url", + Revision: nil, + }, + }}, + }, { + name: "should clean-up an empty retention", + in: buildv1beta1.BuildSpec{ + Retention: &buildv1beta1.BuildRetention{}, }, - }, - out: buildv1alpha1.BuildSpec{ - Source: buildv1alpha1.Source{}, - }, - }, { - name: "should clean-up a false output insecure", - in: buildv1alpha1.BuildSpec{ - Output: buildv1alpha1.Image{ - Image: "some", - Insecure: ptr.To(false), + out: buildv1beta1.BuildSpec{}, + }, { + name: "should clean-up an empty source contextDir", + in: buildv1beta1.BuildSpec{ + Source: &buildv1beta1.Source{ + ContextDir: ptr.To(""), + }, }, - }, - out: buildv1alpha1.BuildSpec{ - Output: buildv1alpha1.Image{ - Image: "some", + out: buildv1beta1.BuildSpec{}, + }, { + name: "should clean-up an empty source URL", + in: buildv1beta1.BuildSpec{ + Source: &buildv1beta1.Source{ + Git: &buildv1beta1.Git{ + URL: "", + }, + }, }, - }, - }, { - name: "should not clean-up a true output insecure", - in: buildv1alpha1.BuildSpec{ - Output: buildv1alpha1.Image{ - Image: "some", - Insecure: ptr.To(true), + out: buildv1beta1.BuildSpec{}, + }, { + name: "should clean-up a false output insecure", + in: buildv1beta1.BuildSpec{ + Output: buildv1beta1.Image{ + Image: "some", + Insecure: ptr.To(false), + }, }, - }, - out: buildv1alpha1.BuildSpec{ - Output: buildv1alpha1.Image{ - Image: "some", - Insecure: ptr.To(true), + out: buildv1beta1.BuildSpec{ + Output: buildv1beta1.Image{ + Image: "some", + }, }, - }, - }} + }, { + name: "should not clean-up a true output insecure", + in: buildv1beta1.BuildSpec{ + Output: buildv1beta1.Image{ + Image: "some", + Insecure: ptr.To(true), + }, + }, + out: buildv1beta1.BuildSpec{ + Output: buildv1beta1.Image{ + Image: "some", + Insecure: ptr.To(true), + }, + }, + }} for _, tt := range testCases { t.Run(tt.name, func(_ *testing.T) { diff --git a/pkg/shp/flags/buildrun.go b/pkg/shp/flags/buildrun.go index 677f48195..7181030dc 100644 --- a/pkg/shp/flags/buildrun.go +++ b/pkg/shp/flags/buildrun.go @@ -1,7 +1,7 @@ package flags import ( - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/spf13/pflag" corev1 "k8s.io/api/core/v1" @@ -10,30 +10,27 @@ import ( ) // BuildRunSpecFromFlags creates a BuildRun spec from command-line flags. -func BuildRunSpecFromFlags(flags *pflag.FlagSet) *buildv1alpha1.BuildRunSpec { - spec := &buildv1alpha1.BuildRunSpec{ - BuildRef: &buildv1alpha1.BuildRef{ - APIVersion: ptr.To(""), +func BuildRunSpecFromFlags(flags *pflag.FlagSet) *buildv1beta1.BuildRunSpec { + spec := &buildv1beta1.BuildRunSpec{ + Build: buildv1beta1.ReferencedBuild{ + Name: ptr.To(""), }, - ServiceAccount: &buildv1alpha1.ServiceAccount{ - Name: ptr.To(""), - Generate: ptr.To(false), - }, - Timeout: &metav1.Duration{}, - Output: &buildv1alpha1.Image{ - Credentials: &corev1.LocalObjectReference{}, + ServiceAccount: ptr.To(""), + Timeout: &metav1.Duration{}, + Output: &buildv1beta1.Image{ + PushSecret: ptr.To(""), Insecure: ptr.To(false), Labels: map[string]string{}, Annotations: map[string]string{}, }, Env: []corev1.EnvVar{}, - Retention: &buildv1alpha1.BuildRunRetention{ + Retention: &buildv1beta1.BuildRunRetention{ TTLAfterFailed: &metav1.Duration{}, TTLAfterSucceeded: &metav1.Duration{}, }, } - buildRefFlags(flags, spec.BuildRef) + buildRefFlags(flags, &spec.Build) serviceAccountFlags(flags, spec.ServiceAccount) timeoutFlags(flags, spec.Timeout) imageFlags(flags, "output", spec.Output) @@ -47,33 +44,24 @@ func BuildRunSpecFromFlags(flags *pflag.FlagSet) *buildv1alpha1.BuildRunSpec { } // SanitizeBuildRunSpec checks for empty inner data structures and replaces them with nil. -func SanitizeBuildRunSpec(br *buildv1alpha1.BuildRunSpec) { +func SanitizeBuildRunSpec(br *buildv1beta1.BuildRunSpec) { if br == nil { return } - if br.BuildRef != nil { - if br.BuildRef.APIVersion != nil && *br.BuildRef.APIVersion == "" { - br.BuildRef.APIVersion = nil - } - - if br.BuildRef.Name == "" && br.BuildRef.APIVersion == nil { - br.BuildRef = nil - } + if br.Build.Name != nil && *br.Build.Name == "" { + br.Build.Name = nil } - if br.ServiceAccount != nil { - if (br.ServiceAccount.Name == nil || *br.ServiceAccount.Name == "") && - (br.ServiceAccount.Generate == nil || !*br.ServiceAccount.Generate) { - br.ServiceAccount = nil - } + if br.ServiceAccount != nil && *br.ServiceAccount == "" { + br.ServiceAccount = nil } if br.Output != nil { - if br.Output.Credentials != nil && br.Output.Credentials.Name == "" { - br.Output.Credentials = nil + if br.Output.PushSecret != nil && *br.Output.PushSecret == "" { + br.Output.PushSecret = nil } if br.Output.Insecure != nil && !*br.Output.Insecure { br.Output.Insecure = nil } - if br.Output.Image == "" && br.Output.Credentials == nil { + if br.Output.Image == "" && br.Output.PushSecret == nil { br.Output = nil } } diff --git a/pkg/shp/flags/buildrun_test.go b/pkg/shp/flags/buildrun_test.go index e12767c7f..3459bc902 100644 --- a/pkg/shp/flags/buildrun_test.go +++ b/pkg/shp/flags/buildrun_test.go @@ -1,14 +1,12 @@ package flags import ( - "strconv" "testing" "time" o "github.com/onsi/gomega" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/spf13/cobra" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/utils/ptr" ) @@ -17,26 +15,22 @@ func TestBuildRunSpecFromFlags(t *testing.T) { g := o.NewWithT(t) str := "something-random" - expected := &buildv1alpha1.BuildRunSpec{ - BuildRef: &buildv1alpha1.BuildRef{ - Name: str, - APIVersion: ptr.To(""), - }, - ServiceAccount: &buildv1alpha1.ServiceAccount{ - Name: &str, - Generate: ptr.To(false), + expected := &buildv1beta1.BuildRunSpec{ + Build: buildv1beta1.ReferencedBuild{ + Name: &str, }, + ServiceAccount: &str, Timeout: &metav1.Duration{ Duration: 1 * time.Second, }, - Output: &buildv1alpha1.Image{ - Credentials: &corev1.LocalObjectReference{Name: "name"}, + Output: &buildv1beta1.Image{ + PushSecret: ptr.To("name"), Image: str, Insecure: ptr.To(false), Labels: map[string]string{}, Annotations: map[string]string{}, }, - Retention: &buildv1alpha1.BuildRunRetention{ + Retention: &buildv1beta1.BuildRunRetention{ TTLAfterFailed: &metav1.Duration{ Duration: 48 * time.Hour, }, @@ -51,17 +45,14 @@ func TestBuildRunSpecFromFlags(t *testing.T) { spec := BuildRunSpecFromFlags(flags) t.Run(".spec.buildRef", func(_ *testing.T) { - err := flags.Set(BuildrefNameFlag, expected.BuildRef.Name) + err := flags.Set(BuildrefNameFlag, *expected.Build.Name) g.Expect(err).To(o.BeNil()) - g.Expect(*expected.BuildRef).To(o.Equal(*spec.BuildRef), "spec.buildRef") + g.Expect(expected.Build).To(o.Equal(spec.Build), "spec.buildRef") }) t.Run(".spec.serviceAccount", func(_ *testing.T) { - err := flags.Set(ServiceAccountNameFlag, *expected.ServiceAccount.Name) - g.Expect(err).To(o.BeNil()) - - err = flags.Set(ServiceAccountGenerateFlag, strconv.FormatBool(*expected.ServiceAccount.Generate)) + err := flags.Set(ServiceAccountNameFlag, *expected.ServiceAccount) g.Expect(err).To(o.BeNil()) g.Expect(*expected.ServiceAccount).To(o.Equal(*spec.ServiceAccount), "spec.serviceAccount") @@ -78,7 +69,7 @@ func TestBuildRunSpecFromFlags(t *testing.T) { err := flags.Set(OutputImageFlag, expected.Output.Image) g.Expect(err).To(o.BeNil()) - err = flags.Set(OutputCredentialsSecretFlag, expected.Output.Credentials.Name) + err = flags.Set(OutputCredentialsSecretFlag, *expected.Output.PushSecret) g.Expect(err).To(o.BeNil()) g.Expect(*expected.Output).To(o.Equal(*spec.Output), "spec.output") @@ -103,46 +94,46 @@ func TestSanitizeBuildRunSpec(t *testing.T) { g := o.NewWithT(t) name := "name" - completeBuildRunSpec := buildv1alpha1.BuildRunSpec{ - ServiceAccount: &buildv1alpha1.ServiceAccount{Name: &name}, - Output: &buildv1alpha1.Image{ - Credentials: &corev1.LocalObjectReference{Name: "name"}, - Image: "image", + completeBuildRunSpec := buildv1beta1.BuildRunSpec{ + ServiceAccount: &name, + Output: &buildv1beta1.Image{ + PushSecret: ptr.To("name"), + Image: "image", }, } testCases := []struct { name string - in buildv1alpha1.BuildRunSpec - out buildv1alpha1.BuildRunSpec + in buildv1beta1.BuildRunSpec + out buildv1beta1.BuildRunSpec }{{ name: "all empty should stay empty", - in: buildv1alpha1.BuildRunSpec{}, - out: buildv1alpha1.BuildRunSpec{}, + in: buildv1beta1.BuildRunSpec{}, + out: buildv1beta1.BuildRunSpec{}, }, { name: "should clean-up service-account", - in: buildv1alpha1.BuildRunSpec{ServiceAccount: &buildv1alpha1.ServiceAccount{}}, - out: buildv1alpha1.BuildRunSpec{}, + in: buildv1beta1.BuildRunSpec{ServiceAccount: ptr.To("")}, + out: buildv1beta1.BuildRunSpec{}, }, { name: "should clean-up output", - in: buildv1alpha1.BuildRunSpec{Output: &buildv1alpha1.Image{}}, - out: buildv1alpha1.BuildRunSpec{}, + in: buildv1beta1.BuildRunSpec{Output: &buildv1beta1.Image{}}, + out: buildv1beta1.BuildRunSpec{}, }, { name: "should not clean-up complete objects", in: completeBuildRunSpec, out: completeBuildRunSpec, }, { name: "should clean-up 0s duration", - in: buildv1alpha1.BuildRunSpec{Timeout: &metav1.Duration{ + in: buildv1beta1.BuildRunSpec{Timeout: &metav1.Duration{ Duration: time.Duration(0), }}, - out: buildv1alpha1.BuildRunSpec{Timeout: nil}, + out: buildv1beta1.BuildRunSpec{Timeout: nil}, }, { name: "should clean-up an empty retention", - in: buildv1alpha1.BuildRunSpec{ - Retention: &buildv1alpha1.BuildRunRetention{}, + in: buildv1beta1.BuildRunSpec{ + Retention: &buildv1beta1.BuildRunRetention{}, }, - out: buildv1alpha1.BuildRunSpec{}, + out: buildv1beta1.BuildRunSpec{}, }} for _, tt := range testCases { diff --git a/pkg/shp/flags/core_envvar_value_test.go b/pkg/shp/flags/core_envvar_value_test.go index 5d47b8975..fac1ce3fc 100644 --- a/pkg/shp/flags/core_envvar_value_test.go +++ b/pkg/shp/flags/core_envvar_value_test.go @@ -3,7 +3,7 @@ package flags import ( "testing" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" corev1 "k8s.io/api/core/v1" o "github.com/onsi/gomega" @@ -12,7 +12,7 @@ import ( func TestCoreEnvVarSliceValue(t *testing.T) { g := o.NewWithT(t) - spec := &buildv1alpha1.BuildSpec{Env: []corev1.EnvVar{}} + spec := &buildv1beta1.BuildSpec{Env: []corev1.EnvVar{}} c := NewCoreEnvVarArrayValue(&spec.Env) // expect error when key-value is not split by equal sign diff --git a/pkg/shp/flags/flags.go b/pkg/shp/flags/flags.go index 0d90701ab..bdb371f0b 100644 --- a/pkg/shp/flags/flags.go +++ b/pkg/shp/flags/flags.go @@ -4,7 +4,7 @@ import ( "fmt" "time" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "github.com/spf13/pflag" corev1 "k8s.io/api/core/v1" @@ -16,26 +16,24 @@ const ( BuildrefNameFlag = "buildref-name" // BuilderImageFlag command-line flag. BuilderImageFlag = "builder-image" - // BuilderCredentialsSecretFlag command-line flag. - BuilderCredentialsSecretFlag = "builder-credentials-secret" // DockerfileFlag command-line flag. DockerfileFlag = "dockerfile" // EnvFlag command-line flag. EnvFlag = "env" // SourceURLFlag command-line flag. - SourceURLFlag = "source-url" + SourceURLFlag = "source-git-url" // SourceRevisionFlag command-line flag. - SourceRevisionFlag = "source-revision" + SourceRevisionFlag = "source-git-revision" // SourceContextDirFlag command-line flag. SourceContextDirFlag = "source-context-dir" // SourceCredentialsSecretFlag command-line flag. - SourceCredentialsSecretFlag = "source-credentials-secret" // #nosec G101 + SourceCredentialsSecretFlag = "source-git-clone-secret" // #nosec G101 // SourceBundleImageFlag command-line flag - SourceBundleImageFlag = "source-bundle-image" + SourceOCIArtifactImageFlag = "source-oci-artifact-image" // SourceBundlePruneFlag command-line flag - SourceBundlePruneFlag = "source-bundle-prune" - // StrategyAPIVersionFlag command-line flag. - StrategyAPIVersionFlag = "strategy-apiversion" + SourceOCIArtifactPruneFlag = "source-oci-artifact-prune" + // SourceOCIArtifactPullSecretFlag command-line flag + SourceOCIArtifactPullSecretFlag = "source-oci-artifact-pull-secret" // #nosec G101 // StrategyKindFlag command-line flag. StrategyKindFlag = "strategy-kind" // StrategyNameFlag command-line flag. @@ -69,52 +67,92 @@ const ( ) // sourceFlags flags for ".spec.source" -func sourceFlags(flags *pflag.FlagSet, source *buildv1alpha1.Source) { +func sourceFlags(flags *pflag.FlagSet, source *buildv1beta1.Source) { flags.StringVar( - source.URL, + &source.Git.URL, SourceURLFlag, "", "git repository source URL", ) flags.StringVar( - source.Revision, + &source.Git.URL, + "source-url", + "", + "alias for source-git-url", + ) + flags.MarkDeprecated("source-url", fmt.Sprintf("please use --%s instead", SourceURLFlag)) + + flags.StringVar( + source.Git.Revision, SourceRevisionFlag, "", "git repository source revision", ) + flags.StringVar( + source.Git.Revision, + "source-revision", + "", + "alias for source-git-revision", + ) + flags.MarkDeprecated("source-revision", fmt.Sprintf("please use --%s instead", SourceRevisionFlag)) + flags.StringVar( source.ContextDir, SourceContextDirFlag, "", "use a inner directory as context directory", ) + flags.StringVar( - &source.Credentials.Name, + source.Git.CloneSecret, SourceCredentialsSecretFlag, "", - "name of the secret with credentials to access the source, e.g. git or registry credentials", + "name of the secret with credentials to access the git source, e.g. git credentials", + ) + flags.StringVar( + source.Git.CloneSecret, + "source-credentials-secret", + "", + "name of the secret with credentials to access the source, e.g. credentials", + ) + flags.MarkDeprecated("source-credentials-secret", fmt.Sprintf("please use --%s instead", SourceCredentialsSecretFlag)) + + flags.StringVar( + &source.OCIArtifact.Image, + SourceOCIArtifactImageFlag, + "", + "source OCI artifact image reference, e.g. ghcr.io/shipwright-io/sample-go/source-bundle:latest", ) flags.StringVar( - &source.BundleContainer.Image, - SourceBundleImageFlag, + &source.OCIArtifact.Image, + "source-bundle-image", "", "source bundle image location, e.g. ghcr.io/shipwright-io/sample-go/source-bundle:latest", ) + flags.MarkDeprecated("source-bundle-image", fmt.Sprintf("please use --%s instead", SourceOCIArtifactImageFlag)) + + flags.StringVar( + source.OCIArtifact.PullSecret, + SourceOCIArtifactPullSecretFlag, + "", + "name of the secret with credentials to access the OCI artifact image, e.g. registry credentials", + ) + + flags.Var( + pruneOptionFlag{ref: source.OCIArtifact.Prune}, + SourceOCIArtifactPruneFlag, + fmt.Sprintf("source OCI artifact image prune option, either %s, or %s", buildv1beta1.PruneNever, buildv1beta1.PruneAfterPull), + ) flags.Var( - pruneOptionFlag{ref: source.BundleContainer.Prune}, - SourceBundlePruneFlag, - fmt.Sprintf("source bundle prune option, either %s, or %s", buildv1alpha1.PruneNever, buildv1alpha1.PruneAfterPull), + pruneOptionFlag{ref: source.OCIArtifact.Prune}, + "source-bundle-prune", + fmt.Sprintf("source bundle prune option, either %s, or %s", buildv1beta1.PruneNever, buildv1beta1.PruneAfterPull), ) + flags.MarkDeprecated("source-bundle-prune", fmt.Sprintf("please use --%s instead", SourceOCIArtifactPruneFlag)) } // strategyFlags flags for ".spec.strategy". -func strategyFlags(flags *pflag.FlagSet, strategy *buildv1alpha1.Strategy) { - flags.StringVar( - strategy.APIVersion, - StrategyAPIVersionFlag, - buildv1alpha1.SchemeGroupVersion.Version, - "kubernetes api-version of the build-strategy resource", - ) +func strategyFlags(flags *pflag.FlagSet, strategy *buildv1beta1.Strategy) { flags.Var( NewStrategyKindValue(strategy.Kind), StrategyKindFlag, @@ -129,7 +167,7 @@ func strategyFlags(flags *pflag.FlagSet, strategy *buildv1alpha1.Strategy) { } // imageFlags flags for Shipwright's Image definition, using a prefix to avoid duplicated flags. -func imageFlags(flags *pflag.FlagSet, prefix string, image *buildv1alpha1.Image) { +func imageFlags(flags *pflag.FlagSet, prefix string, image *buildv1beta1.Image) { flags.StringVar( &image.Image, fmt.Sprintf("%s-image", prefix), @@ -137,11 +175,19 @@ func imageFlags(flags *pflag.FlagSet, prefix string, image *buildv1alpha1.Image) "image employed during the building process", ) flags.StringVar( - &image.Credentials.Name, + image.PushSecret, + fmt.Sprintf("%s-image-push-secret", prefix), + "", + "name of the secret with output image push credentials", + ) + flags.StringVar( + image.PushSecret, fmt.Sprintf("%s-credentials-secret", prefix), "", - "name of the secret with builder-image pull credentials", + "name of the secret with output image push credentials", ) + flags.MarkDeprecated(fmt.Sprintf("%s-credentials-secret", prefix), fmt.Sprintf("please use --%s-image-push-secret instead", prefix)) + if prefix == "output" { flags.BoolVar( image.Insecure, @@ -152,7 +198,7 @@ func imageFlags(flags *pflag.FlagSet, prefix string, image *buildv1alpha1.Image) } } -// dockerfileFlags register dockerfile flag as pointer to string. +// dockerfileFlags register dockerfile flag as an environment variable. func dockerfileFlags(flags *pflag.FlagSet, dockerfile *string) { flags.StringVar( dockerfile, @@ -160,6 +206,18 @@ func dockerfileFlags(flags *pflag.FlagSet, dockerfile *string) { "", "path to dockerfile relative to repository", ) + flags.MarkDeprecated("dockerfile", "dockerfile parameter is deprecated") +} + +// builderImageFlag register builder-image flag as an environment variable.. +func builderImageFlag(flags *pflag.FlagSet, builderImage *string) { + flags.StringVar( + builderImage, + BuilderImageFlag, + "", + "path to dockerfile relative to repository", + ) + flags.MarkDeprecated("builder-image", "builder-image flag is deprecated, and will be removed in a future release. Use an appropriate parameter for the build strategy instead.") } // timeoutFlags register a timeout flag as time.Duration instance. @@ -173,35 +231,32 @@ func timeoutFlags(flags *pflag.FlagSet, timeout *metav1.Duration) { } // buildRefFlags register flags for BuildRun's spec.buildRef attribute. -func buildRefFlags(flags *pflag.FlagSet, buildRef *buildv1alpha1.BuildRef) { +func buildRefFlags(flags *pflag.FlagSet, buildRef *buildv1beta1.ReferencedBuild) { flags.StringVar( - &buildRef.Name, + buildRef.Name, BuildrefNameFlag, "", "name of build resource to reference", ) - flags.StringVar( - buildRef.APIVersion, - "buildref-apiversion", - "", - "API version of build resource to reference", - ) } // serviceAccountFlags register flags for BuildRun's spec.serviceAccount attribute. -func serviceAccountFlags(flags *pflag.FlagSet, sa *buildv1alpha1.ServiceAccount) { +func serviceAccountFlags(flags *pflag.FlagSet, sa *string) { flags.StringVar( - sa.Name, + sa, ServiceAccountNameFlag, "", "Kubernetes service-account name", ) + var ignore bool flags.BoolVar( - sa.Generate, + &ignore, ServiceAccountGenerateFlag, false, "generate a Kubernetes service-account for the build", ) + flags.MarkDeprecated("sa-generate", fmt.Sprintf("this flag has no effect, please use --%s for service account", ServiceAccountNameFlag)) + } // envFlags registers flags for adding corev1.EnvVars. @@ -215,7 +270,7 @@ func envFlags(flags *pflag.FlagSet, envs *[]corev1.EnvVar) { } // parameterValueFlag registers flags for adding BuildSpec.ParamValues -func paramValueFlag(flags *pflag.FlagSet, paramValue *[]buildv1alpha1.ParamValue) { +func paramValueFlag(flags *pflag.FlagSet, paramValue *[]buildv1beta1.ParamValue) { flags.VarP( NewParamArrayValue(paramValue), ParamValueFlag, @@ -244,7 +299,7 @@ func imageAnnotationsFlags(flags *pflag.FlagSet, annotations map[string]string) ) } -func buildRetentionFlags(flags *pflag.FlagSet, buildRetention *buildv1alpha1.BuildRetention) { +func buildRetentionFlags(flags *pflag.FlagSet, buildRetention *buildv1beta1.BuildRetention) { flags.UintVar( buildRetention.FailedLimit, RetentionFailedLimitFlag, @@ -271,7 +326,7 @@ func buildRetentionFlags(flags *pflag.FlagSet, buildRetention *buildv1alpha1.Bui ) } -func buildRunRetentionFlags(flags *pflag.FlagSet, buildRunRetention *buildv1alpha1.BuildRunRetention) { +func buildRunRetentionFlags(flags *pflag.FlagSet, buildRunRetention *buildv1beta1.BuildRunRetention) { flags.DurationVar( &buildRunRetention.TTLAfterFailed.Duration, RetentionTTLAfterFailedFlag, diff --git a/pkg/shp/flags/map_value_test.go b/pkg/shp/flags/map_value_test.go index 7eb15481c..a617c44b4 100644 --- a/pkg/shp/flags/map_value_test.go +++ b/pkg/shp/flags/map_value_test.go @@ -3,7 +3,7 @@ package flags import ( "testing" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" o "github.com/onsi/gomega" ) @@ -11,7 +11,7 @@ import ( func TestNewMapValue(t *testing.T) { g := o.NewWithT(t) - spec := &buildv1alpha1.BuildSpec{Output: buildv1alpha1.Image{ + spec := &buildv1beta1.BuildSpec{Output: buildv1beta1.Image{ Labels: map[string]string{}, }} c := NewMapValue(spec.Output.Labels) diff --git a/pkg/shp/flags/param_value.go b/pkg/shp/flags/param_value.go index 1f21aed21..24bdc112d 100644 --- a/pkg/shp/flags/param_value.go +++ b/pkg/shp/flags/param_value.go @@ -3,13 +3,13 @@ package flags import ( "fmt" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" ) // ParamArrayValue implements pflag.Value interface, in order to store ParamValue key-value // pairs used on Shipwright's BuildSpec. type ParamArrayValue struct { - params *[]buildv1alpha1.ParamValue // pointer to the slice of ParamValue + params *[]buildv1beta1.ParamValue // pointer to the slice of ParamValue } // String prints out the string representation of the slice of EnvVar objects. @@ -33,7 +33,7 @@ func (p *ParamArrayValue) Set(value string) error { return fmt.Errorf("environment variable '%s' is already set", k) } } - *p.params = append(*p.params, buildv1alpha1.ParamValue{Name: k, SingleValue: &buildv1alpha1.SingleValue{Value: &v}}) + *p.params = append(*p.params, buildv1beta1.ParamValue{Name: k, SingleValue: &buildv1beta1.SingleValue{Value: &v}}) return nil } @@ -45,6 +45,6 @@ func (p *ParamArrayValue) Type() string { } // NewCoreEnvVarArrayValue instantiate a ParamValSliceValue sharing the EnvVar pointer. -func NewParamArrayValue(params *[]buildv1alpha1.ParamValue) *ParamArrayValue { +func NewParamArrayValue(params *[]buildv1beta1.ParamValue) *ParamArrayValue { return &ParamArrayValue{params: params} } diff --git a/pkg/shp/flags/param_value_test.go b/pkg/shp/flags/param_value_test.go index eddad09d6..102d306f7 100644 --- a/pkg/shp/flags/param_value_test.go +++ b/pkg/shp/flags/param_value_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/onsi/gomega" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" ) func TestNewParamArrayValue(t *testing.T) { @@ -42,7 +42,7 @@ func TestNewParamArrayValue(t *testing.T) { } for tName, tCase := range testCases { t.Run(tName, func(_ *testing.T) { - buildSpec := buildv1alpha1.BuildSpec{} + buildSpec := buildv1beta1.BuildSpec{} buildParamVal := NewParamArrayValue(&buildSpec.ParamValues) err := buildParamVal.Set(tCase.paramPassed) diff --git a/pkg/shp/flags/prune_option_value.go b/pkg/shp/flags/prune_option_value.go index 712a3d55c..cf894a1af 100644 --- a/pkg/shp/flags/prune_option_value.go +++ b/pkg/shp/flags/prune_option_value.go @@ -3,28 +3,28 @@ package flags import ( "fmt" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" ) // pruneOptionFlag serves as an adapter to make the Build spec source bundle // container prune option to be used as a command-line flag (pflag.Value). type pruneOptionFlag struct { - ref *buildv1alpha1.PruneOption + ref *buildv1beta1.PruneOption } // Set translates the provided input string into one of the supported prune // options, or fails with an error in cases of an unsupported value func (p pruneOptionFlag) Set(val string) error { - var pruneOption = buildv1alpha1.PruneOption(val) + var pruneOption = buildv1beta1.PruneOption(val) switch pruneOption { - case buildv1alpha1.PruneNever, buildv1alpha1.PruneAfterPull: + case buildv1beta1.PruneNever, buildv1beta1.PruneAfterPull: *p.ref = pruneOption return nil default: return fmt.Errorf("supported values are %s, or %s", - buildv1alpha1.PruneNever, - buildv1alpha1.PruneAfterPull, + buildv1beta1.PruneNever, + buildv1beta1.PruneAfterPull, ) } } @@ -33,7 +33,7 @@ func (p pruneOptionFlag) Set(val string) error { // spec source container bundle prune default of `Never` in case it is not set func (p pruneOptionFlag) String() string { if p.ref == nil { - return string(buildv1alpha1.PruneNever) + return string(buildv1beta1.PruneNever) } return string(*p.ref) diff --git a/pkg/shp/flags/prune_option_value_test.go b/pkg/shp/flags/prune_option_value_test.go index ffd483fa2..37c8f9561 100644 --- a/pkg/shp/flags/prune_option_value_test.go +++ b/pkg/shp/flags/prune_option_value_test.go @@ -4,7 +4,7 @@ import ( "testing" o "github.com/onsi/gomega" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" ) func TestSourcePruneOption(t *testing.T) { @@ -12,16 +12,16 @@ func TestSourcePruneOption(t *testing.T) { // Check for type and defaults g.Expect(pruneOptionFlag{}.Type()).To(o.Equal("pruneOption")) - g.Expect(pruneOptionFlag{}.String()).To(o.Equal(string(buildv1alpha1.PruneNever))) + g.Expect(pruneOptionFlag{}.String()).To(o.Equal(string(buildv1beta1.PruneNever))) - var obj buildv1alpha1.PruneOption + var obj buildv1beta1.PruneOption v := pruneOptionFlag{ref: &obj} // Check the supported values - g.Expect(v.Set(string(buildv1alpha1.PruneNever))).Should(o.Succeed()) - g.Expect(v.String()).To(o.Equal(string(buildv1alpha1.PruneNever))) - g.Expect(v.Set(string(buildv1alpha1.PruneAfterPull))).Should(o.Succeed()) - g.Expect(v.String()).To(o.Equal(string(buildv1alpha1.PruneAfterPull))) + g.Expect(v.Set(string(buildv1beta1.PruneNever))).Should(o.Succeed()) + g.Expect(v.String()).To(o.Equal(string(buildv1beta1.PruneNever))) + g.Expect(v.Set(string(buildv1beta1.PruneAfterPull))).Should(o.Succeed()) + g.Expect(v.String()).To(o.Equal(string(buildv1beta1.PruneAfterPull))) // Check that invalid values fail with the flag g.Expect(v.Set("invalid")).ToNot(o.Succeed()) diff --git a/pkg/shp/flags/strategy_kind_value.go b/pkg/shp/flags/strategy_kind_value.go index 41fbd1bb3..d190d8226 100644 --- a/pkg/shp/flags/strategy_kind_value.go +++ b/pkg/shp/flags/strategy_kind_value.go @@ -3,13 +3,13 @@ package flags import ( "fmt" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" ) // StrategyKindValue implements pflag.Value interface, to represent Shipwright's BuildStrategyKind as // a string command-line in an cobra.Command instance. type StrategyKindValue struct { - kindPtr *buildv1alpha1.BuildStrategyKind + kindPtr *buildv1beta1.BuildStrategyKind } // String shows the value as string. @@ -22,9 +22,9 @@ func (s *StrategyKindValue) String() string { // Set set the informed string as BuildStrategyKind by casting. func (s *StrategyKindValue) Set(value string) error { - kind := buildv1alpha1.BuildStrategyKind(value) - if kind != buildv1alpha1.NamespacedBuildStrategyKind && - kind != buildv1alpha1.ClusterBuildStrategyKind { + kind := buildv1beta1.BuildStrategyKind(value) + if kind != buildv1beta1.NamespacedBuildStrategyKind && + kind != buildv1beta1.ClusterBuildStrategyKind { return fmt.Errorf("'%s' is an invalid BuildStrategyKind", value) } *s.kindPtr = kind @@ -37,6 +37,6 @@ func (s *StrategyKindValue) Type() string { } // NewStrategyKindValue creates a new instance of StrategyKindValue sharing an existing reference. -func NewStrategyKindValue(kindPtr *buildv1alpha1.BuildStrategyKind) *StrategyKindValue { +func NewStrategyKindValue(kindPtr *buildv1beta1.BuildStrategyKind) *StrategyKindValue { return &StrategyKindValue{kindPtr: kindPtr} } diff --git a/pkg/shp/flags/strategy_kind_value_test.go b/pkg/shp/flags/strategy_kind_value_test.go index d43553a77..5ec0e39ad 100644 --- a/pkg/shp/flags/strategy_kind_value_test.go +++ b/pkg/shp/flags/strategy_kind_value_test.go @@ -4,16 +4,16 @@ import ( "testing" o "github.com/onsi/gomega" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" ) func TestStrategyKindValue(t *testing.T) { g := o.NewWithT(t) - buildStrategyKind := buildv1alpha1.ClusterBuildStrategyKind + buildStrategyKind := buildv1beta1.ClusterBuildStrategyKind v := NewStrategyKindValue(&buildStrategyKind) - expected := buildv1alpha1.NamespacedBuildStrategyKind + expected := buildv1beta1.NamespacedBuildStrategyKind err := v.Set(string(expected)) g.Expect(err).To(o.BeNil()) diff --git a/test/e2e/e2e.bats b/test/e2e/e2e.bats index 34c6ca464..bce4340ba 100644 --- a/test/e2e/e2e.bats +++ b/test/e2e/e2e.bats @@ -51,7 +51,7 @@ teardown() { buildrun_name=$(random_name) # ensure that shp build create does not give an error when a build_name is specified - run shp build create ${build_name} --source-url=url --output-image=image + run shp build create ${build_name} --source-git-url=url --output-image=image assert_success # ensure that shp buildrun create does not give an error when a buildrun_name is specified @@ -63,14 +63,14 @@ teardown() { # ensure that shp command doesn't log the api calls by default run shp build list assert_success - refute_line --regexp "GET .*/apis/shipwright.io/v1alpha1/namespaces/" + refute_line --regexp "GET .*/apis/shipwright.io/v1beta1/namespaces/" refute_line --partial "Response Headers" refute_line --partial "Response Body" # ensure that shp command supports -v loglevel flag. run shp -v=10 build list assert_success - assert_line --regexp "GET .*/apis/shipwright.io/v1alpha1/namespaces/" + assert_line --regexp "GET .*/apis/shipwright.io/v1beta1/namespaces/" assert_line --partial "Response Headers" assert_line --partial "Response Body" } diff --git a/test/e2e/envvars.bats b/test/e2e/envvars.bats index b8969d17c..e9df08feb 100644 --- a/test/e2e/envvars.bats +++ b/test/e2e/envvars.bats @@ -19,7 +19,7 @@ teardown() { buildrun_name=$(random_name) # create a Build with two environment variables - run shp build create ${build_name} --source-url=https://github.com/shipwright-io/sample-go --output-image=my-image --env=VAR_1=build-value-1 --env=VAR_2=build-value-2 + run shp build create ${build_name} --source-git-url=https://github.com/shipwright-io/sample-go --output-image=my-image --env=VAR_1=build-value-1 --env=VAR_2=build-value-2 assert_success # ensure that the build was successfully created diff --git a/test/e2e/log-follow--follow.bats b/test/e2e/log-follow--follow.bats index f06d8d9f6..f050cbb98 100644 --- a/test/e2e/log-follow--follow.bats +++ b/test/e2e/log-follow--follow.bats @@ -21,7 +21,7 @@ teardown() { # creating a golang based build run shp build create ${build_name} \ - --source-url=https://github.com/shipwright-io/sample-go \ + --source-git-url=https://github.com/shipwright-io/sample-go \ --source-context-dir=source-build \ --output-image=${output_image} assert_success diff --git a/test/e2e/log-follow-F.bats b/test/e2e/log-follow-F.bats index 1afa4937f..6ebab219b 100644 --- a/test/e2e/log-follow-F.bats +++ b/test/e2e/log-follow-F.bats @@ -21,7 +21,7 @@ teardown() { # create a Build with two environment variables run shp build create ${build_name} \ - --source-url=https://github.com/shipwright-io/sample-go \ + --source-git-url=https://github.com/shipwright-io/sample-go \ --source-context-dir=source-build \ --output-image=${output_image} assert_success diff --git a/test/e2e/output-image-labels-annotations.bats b/test/e2e/output-image-labels-annotations.bats index 1e1c5b31c..df76d4d2e 100644 --- a/test/e2e/output-image-labels-annotations.bats +++ b/test/e2e/output-image-labels-annotations.bats @@ -19,7 +19,7 @@ teardown() { buildrun_name=$(random_name) # create a Build with a label and an annotation - run shp build create ${build_name} --source-url=https://github.com/shipwright-io/sample-go --output-image=my-image --output-image-label=foo=bar --output-image-annotation=created-by=shipwright + run shp build create ${build_name} --source-git-url=https://github.com/shipwright-io/sample-go --output-image=my-image --output-image-label=foo=bar --output-image-annotation=created-by=shipwright assert_success # ensure that the build was successfully created diff --git a/test/e2e/run-follow.bats b/test/e2e/run-follow.bats index d9da9d914..b3b4be3e5 100644 --- a/test/e2e/run-follow.bats +++ b/test/e2e/run-follow.bats @@ -21,7 +21,7 @@ teardown() { # create a Build run shp build create ${build_name} \ - --source-url=https://github.com/shipwright-io/sample-go \ + --source-git-url=https://github.com/shipwright-io/sample-go \ --source-context-dir=source-build \ --output-image=${output_image} assert_success @@ -53,7 +53,7 @@ teardown() { # create a Build which will fail run shp build create ${build_name} \ - --source-url=https://github.com/shipwright-io/sample-go \ + --source-git-url=https://github.com/shipwright-io/sample-go \ --source-context-dir=source-build \ --output-image=${output_image} \ --strategy-name buildkit diff --git a/test/e2e/upload.bats b/test/e2e/upload.bats index 4324ed5ef..082c7fadf 100644 --- a/test/e2e/upload.bats +++ b/test/e2e/upload.bats @@ -39,7 +39,7 @@ function assert_shp_upload_follow_output() { # change directory (cd) during the build process, so if the directory is not uploaded properly # the actual build will fail run shp build create ${build_name} \ - --source-url="${source_url}" \ + --source-git-url="${source_url}" \ --source-context-dir="source-build" \ --output-image="${output_image}" assert_success @@ -82,8 +82,8 @@ function assert_shp_upload_follow_output() { # Verify that invalid prune options are not accepted run shp build create ${build_name} \ - --source-bundle-image="$(get_output_image source-bundle):latest" \ - --source-bundle-prune=Magic + --source-oci-artifact-image="$(get_output_image source-bundle):latest" \ + --source-oci-artifact-prune=Magic assert_failure assert_output --partial 'invalid argument' @@ -95,8 +95,8 @@ function assert_shp_upload_follow_output() { # from the local shp client. # run shp build create ${build_name} \ - --source-bundle-image="$(get_output_image source-bundle):latest" \ - --source-bundle-prune=AfterPull \ + --source-oci-artifact-image="$(get_output_image source-bundle):latest" \ + --source-oci-artifact-prune=AfterPull \ --source-context-dir="docker-build" \ --dockerfile=Dockerfile \ --strategy-name=kaniko \ diff --git a/test/stub/client.go b/test/stub/client.go index f8b7046c9..c9dde1245 100644 --- a/test/stub/client.go +++ b/test/stub/client.go @@ -3,7 +3,7 @@ package stub import ( "log" - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/dynamic" @@ -13,7 +13,7 @@ import ( // NewFakeClient creates a fake client with Shipwright's Build scheme. func NewFakeClient() dynamic.Interface { scheme := runtime.NewScheme() - if err := buildv1alpha1.SchemeBuilder.AddToScheme(scheme); err != nil { + if err := buildv1beta1.SchemeBuilder.AddToScheme(scheme); err != nil { log.Fatal(err) } return fake.NewSimpleDynamicClient(scheme) diff --git a/test/stub/stub.go b/test/stub/stub.go index 189f6e150..f9de8e272 100644 --- a/test/stub/stub.go +++ b/test/stub/stub.go @@ -1,33 +1,36 @@ package stub import ( - buildv1alpha1 "github.com/shipwright-io/build/pkg/apis/build/v1alpha1" + buildv1beta1 "github.com/shipwright-io/build/pkg/apis/build/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // BuildRunEmpty simple empty BuildRun instance. -func BuildRunEmpty() buildv1alpha1.BuildRun { - return buildv1alpha1.BuildRun{} +func BuildRunEmpty() buildv1beta1.BuildRun { + return buildv1beta1.BuildRun{} } // TestBuild returns instance of Build for testing purposes -func TestBuild(name, image, source string) *buildv1alpha1.Build { - strategyKind := buildv1alpha1.ClusterBuildStrategyKind +func TestBuild(name, image, source string) *buildv1beta1.Build { + strategyKind := buildv1beta1.ClusterBuildStrategyKind - result := &buildv1alpha1.Build{ + result := &buildv1beta1.Build{ ObjectMeta: metav1.ObjectMeta{ Name: name, }, - Spec: buildv1alpha1.BuildSpec{ - Strategy: buildv1alpha1.Strategy{ + Spec: buildv1beta1.BuildSpec{ + Strategy: buildv1beta1.Strategy{ Name: "buildah", Kind: &strategyKind, }, - Source: buildv1alpha1.Source{ - URL: &source, + Source: &buildv1beta1.Source{ + Type: buildv1beta1.GitType, + Git: &buildv1beta1.Git{ + URL: source, + }, }, - Output: buildv1alpha1.Image{ + Output: buildv1beta1.Image{ Image: image, }, },