@@ -12,12 +12,14 @@ import (
12
12
"github.com/jfrog/jfrog-cli/inttestutils"
13
13
"github.com/jfrog/jfrog-cli/utils/cliutils"
14
14
"github.com/jfrog/jfrog-cli/utils/tests"
15
+ artifactoryclientUtils "github.com/jfrog/jfrog-client-go/artifactory/services/utils"
15
16
"github.com/jfrog/jfrog-client-go/http/httpclient"
16
17
"github.com/jfrog/jfrog-client-go/lifecycle"
17
18
"github.com/jfrog/jfrog-client-go/lifecycle/services"
18
19
clientUtils "github.com/jfrog/jfrog-client-go/utils"
19
20
"github.com/jfrog/jfrog-client-go/utils/errorutils"
20
21
"github.com/jfrog/jfrog-client-go/utils/io/fileutils"
22
+ "github.com/jfrog/jfrog-client-go/utils/log"
21
23
clientTestUtils "github.com/jfrog/jfrog-client-go/utils/tests"
22
24
"github.com/stretchr/testify/assert"
23
25
"net/http"
@@ -40,6 +42,9 @@ const (
40
42
prodEnvironment = "PROD"
41
43
number1 , number2 , number3 = "111" , "222" , "333"
42
44
withoutSigningKey = true
45
+ artifactoryLifecycleSetTagMinVersion = "7.111.0"
46
+ rbManifestName = "release-bundle.json.evd"
47
+ releaseBundlesV2 = "release-bundles-v2"
43
48
)
44
49
45
50
var (
@@ -456,6 +461,174 @@ func deleteReleaseBundleWithProject(t *testing.T, lcManager *lifecycle.Lifecycle
456
461
time .Sleep (5 * time .Second )
457
462
}
458
463
464
+ func TestSetReleaseBundleTag (t * testing.T ) {
465
+ cleanCallback := initLifecycleTest (t , artifactoryLifecycleSetTagMinVersion )
466
+ defer cleanCallback ()
467
+ lcManager := getLcServiceManager (t )
468
+
469
+ deleteBuilds := uploadBuilds (t )
470
+ defer deleteBuilds ()
471
+
472
+ // set tag
473
+ createRbFromSpec (t , tests .LifecycleBuilds12 , tests .LcRbName1 , number1 , true , true )
474
+ defer deleteReleaseBundle (t , lcManager , tests .LcRbName1 , number1 )
475
+
476
+ assertStatusCompleted (t , lcManager , tests .LcRbName1 , number1 , "" )
477
+ setReleaseBundleTag (t , lcManager , tests .LcRbName1 , number1 , "" , "bundle-tag" )
478
+
479
+ // unset tag
480
+ createRbFromSpec (t , tests .LifecycleBuilds12 , tests .LcRbName2 , number1 , true , true )
481
+ defer deleteReleaseBundle (t , lcManager , tests .LcRbName2 , number1 )
482
+ assertStatusCompleted (t , lcManager , tests .LcRbName2 , number1 , "" )
483
+ setReleaseBundleTag (t , lcManager , tests .LcRbName1 , number1 , "" , "bundle-tag" )
484
+ unsetReleaseBundleTag (t , lcManager , tests .LcRbName1 , number1 )
485
+ }
486
+
487
+ func unsetReleaseBundleTag (t * testing.T , lcManager * lifecycle.LifecycleServicesManager , rbName , version string ) {
488
+ setReleaseBundleTag (t , lcManager , rbName , version , "" , "" )
489
+ }
490
+
491
+ func TestReleaseBundleCreateOrUpdateProperties (t * testing.T ) {
492
+ cleanCallback := initLifecycleTest (t , artifactoryLifecycleSetTagMinVersion )
493
+ defer cleanCallback ()
494
+ lcManager := getLcServiceManager (t )
495
+
496
+ deleteBuilds := uploadBuilds (t )
497
+ defer deleteBuilds ()
498
+
499
+ // set properties
500
+ createRbFromSpec (t , tests .LifecycleBuilds12 , tests .LcRbName1 , number1 , true , true )
501
+ defer deleteReleaseBundle (t , lcManager , tests .LcRbName1 , number1 )
502
+ assertStatusCompleted (t , lcManager , tests .LcRbName1 , number1 , "" )
503
+ setReleaseBundleProperties (t , lcManager , tests .LcRbName1 , number1 , "default" ,
504
+ "key1=value1;key2=value2" )
505
+ setReleaseBundleProperties (t , lcManager , tests .LcRbName1 , number1 , "default" ,
506
+ "key1=value1;key2=''" )
507
+ }
508
+
509
+ func TestReleaseBundleDeleteProperties (t * testing.T ) {
510
+ cleanCallback := initLifecycleTest (t , artifactoryLifecycleSetTagMinVersion )
511
+ defer cleanCallback ()
512
+ lcManager := getLcServiceManager (t )
513
+
514
+ deleteBuilds := uploadBuilds (t )
515
+ defer deleteBuilds ()
516
+
517
+ // set and delete properties
518
+ createRbFromSpec (t , tests .LifecycleBuilds12 , tests .LcRbName1 , number1 , true , true )
519
+ defer deleteReleaseBundle (t , lcManager , tests .LcRbName1 , number1 )
520
+ assertStatusCompleted (t , lcManager , tests .LcRbName1 , number1 , "" )
521
+ setReleaseBundleProperties (t , lcManager , tests .LcRbName1 , number1 , "default" ,
522
+ "key1=value1;key2=value2" )
523
+ deleteReleaseBundleProperties (t , lcManager , tests .LcRbName1 , number1 , "default" , "key1,key2" )
524
+ }
525
+
526
+ func deleteReleaseBundleProperties (t * testing.T , lcManager * lifecycle.LifecycleServicesManager , rbName ,
527
+ rbVersion , projectKey , delProps string ) {
528
+ rbDetails := services.ReleaseBundleDetails {
529
+ ReleaseBundleName : rbName ,
530
+ ReleaseBundleVersion : rbVersion ,
531
+ }
532
+ queryParams := services.CommonOptionalQueryParams {
533
+ Async : false ,
534
+ ProjectKey : projectKey ,
535
+ }
536
+
537
+ annotateParams := buildAnnotateParams ("" , "" , delProps , false , false ,
538
+ true , rbDetails , queryParams )
539
+ assert .NoError (t , lcManager .AnnotateReleaseBundle (annotateParams ))
540
+ // Wait after remote deleting. Can be removed once remote deleting supports sync.
541
+ time .Sleep (5 * time .Second )
542
+ }
543
+
544
+ func setReleaseBundleTag (t * testing.T , lcManager * lifecycle.LifecycleServicesManager , rbName , rbVersion ,
545
+ projectKey , tag string ) {
546
+ log .Info (fmt .Sprintf ("Setting release bundle tag=%s to: %s/%s" , tag , rbName , rbVersion ))
547
+ rbDetails := services.ReleaseBundleDetails {
548
+ ReleaseBundleName : rbName ,
549
+ ReleaseBundleVersion : rbVersion ,
550
+ }
551
+ queryParams := services.CommonOptionalQueryParams {
552
+ Async : false ,
553
+ ProjectKey : projectKey ,
554
+ }
555
+
556
+ annotateParams := buildAnnotateParams (tag , "" , "" , true , false , false ,
557
+ rbDetails , queryParams )
558
+ assert .NoError (t , lcManager .AnnotateReleaseBundle (annotateParams ))
559
+ // Wait after remote deleting. Can be removed once remote deleting supports sync.
560
+ time .Sleep (5 * time .Second )
561
+ }
562
+
563
+ func setReleaseBundleProperties (t * testing.T , lcManager * lifecycle.LifecycleServicesManager , rbName , rbVersion ,
564
+ projectKey , properties string ) {
565
+ rbDetails := services.ReleaseBundleDetails {
566
+ ReleaseBundleName : rbName ,
567
+ ReleaseBundleVersion : rbVersion ,
568
+ }
569
+ queryParams := services.CommonOptionalQueryParams {
570
+ Async : false ,
571
+ ProjectKey : projectKey ,
572
+ }
573
+
574
+ annotateParams := buildAnnotateParams ("" , properties , "" , false , true ,
575
+ false , rbDetails , queryParams )
576
+ assert .NoError (t , lcManager .AnnotateReleaseBundle (annotateParams ))
577
+ // Wait after remote deleting. Can be removed once remote deleting supports sync.
578
+ time .Sleep (5 * time .Second )
579
+ }
580
+
581
+ func buildAnnotateParams (tag , properties , keysToDelete string , tagExists , propsExist , delExist bool , rbDetails services.ReleaseBundleDetails ,
582
+ queryParams services.CommonOptionalQueryParams ) services.AnnotateOperationParams {
583
+ return services.AnnotateOperationParams {
584
+ RbTag : services.RbAnnotationTag {
585
+ Tag : tag ,
586
+ Exist : tagExists ,
587
+ },
588
+ RbProps : services.RbAnnotationProps {
589
+ Properties : resolveProps (properties ),
590
+ Exist : propsExist ,
591
+ },
592
+ RbDelProps : services.RbDelProps {
593
+ Keys : keysToDelete ,
594
+ Exist : delExist ,
595
+ },
596
+ RbDetails : rbDetails ,
597
+ QueryParams : queryParams ,
598
+ PropertyParams : services.CommonPropParams {
599
+ Path : buildManifestPath (queryParams .ProjectKey , rbDetails .ReleaseBundleName , rbDetails .ReleaseBundleVersion ),
600
+ Recursive : false ,
601
+ },
602
+ ArtifactoryUrl : services.ArtCommonParams {
603
+ Url : serverDetails .ArtifactoryUrl ,
604
+ },
605
+ }
606
+ }
607
+
608
+ func buildManifestPath (projectKey , bundleName , bundleVersion string ) string {
609
+ return fmt .Sprintf ("%s/%s/%s/%s" , buildRepoKey (projectKey ), bundleName , bundleVersion , rbManifestName )
610
+ }
611
+
612
+ func buildRepoKey (project string ) string {
613
+ if project == "" || project == "default" {
614
+ return releaseBundlesV2
615
+ }
616
+ return fmt .Sprintf ("%s-%s" , project , releaseBundlesV2 )
617
+ }
618
+
619
+ func resolveProps (properties string ) map [string ][]string {
620
+ if properties == "" {
621
+ return make (map [string ][]string )
622
+ }
623
+
624
+ props , err := artifactoryclientUtils .ParseProperties (properties )
625
+ if err != nil {
626
+ return make (map [string ][]string )
627
+ }
628
+
629
+ return props .ToMap ()
630
+ }
631
+
459
632
/*
460
633
func remoteDeleteReleaseBundle(t *testing.T, lcManager *lifecycle.LifecycleServicesManager, rbName, rbVersion string) {
461
634
params := distribution.NewDistributeReleaseBundleParams(rbName, rbVersion)
0 commit comments