@@ -1115,6 +1115,106 @@ func (t *PorchSuite) TestDeleteAndRecreate(ctx context.Context) {
11151115 t .Logf ("successfully recreated package revision %q" , packageName )
11161116}
11171117
1118+ func (t * PorchSuite ) TestDeleteFromMain (ctx context.Context ) {
1119+ const (
1120+ repository = "delete-main"
1121+ packageNameFirst = "test-delete-main-first"
1122+ packageNameSecond = "test-delete-main-second"
1123+ workspace = "workspace"
1124+ )
1125+
1126+ // Register the repository
1127+ t .registerMainGitRepositoryF (ctx , repository )
1128+
1129+ // Create the first draft package
1130+ createdFirst := t .createPackageDraftF (ctx , repository , packageNameFirst , workspace )
1131+
1132+ // Check the package exists
1133+ var pkgFirst porchapi.PackageRevision
1134+ t .mustExist (ctx , client.ObjectKey {Namespace : t .namespace , Name : createdFirst .Name }, & pkgFirst )
1135+
1136+ // Propose the package revision to be finalized
1137+ pkgFirst .Spec .Lifecycle = porchapi .PackageRevisionLifecycleProposed
1138+ t .UpdateF (ctx , & pkgFirst )
1139+
1140+ pkgFirst .Spec .Lifecycle = porchapi .PackageRevisionLifecyclePublished
1141+ t .UpdateApprovalF (ctx , & pkgFirst , metav1.UpdateOptions {})
1142+
1143+ t .mustExist (ctx , client.ObjectKey {Namespace : t .namespace , Name : createdFirst .Name }, & pkgFirst )
1144+
1145+ // Create the second draft package
1146+ createdSecond := t .createPackageDraftF (ctx , repository , packageNameSecond , workspace )
1147+
1148+ // Check the package exists
1149+ var pkgSecond porchapi.PackageRevision
1150+ t .mustExist (ctx , client.ObjectKey {Namespace : t .namespace , Name : createdSecond .Name }, & pkgSecond )
1151+
1152+ // Propose the package revision to be finalized
1153+ pkgSecond .Spec .Lifecycle = porchapi .PackageRevisionLifecycleProposed
1154+ t .UpdateF (ctx , & pkgSecond )
1155+
1156+ pkgSecond .Spec .Lifecycle = porchapi .PackageRevisionLifecyclePublished
1157+ t .UpdateApprovalF (ctx , & pkgSecond , metav1.UpdateOptions {})
1158+
1159+ t .mustExist (ctx , client.ObjectKey {Namespace : t .namespace , Name : createdSecond .Name }, & pkgSecond )
1160+
1161+ // We need to wait for the sync for the "main" revisions to get created
1162+ time .Sleep (75 * time .Second )
1163+
1164+ var list porchapi.PackageRevisionList
1165+ t .ListE (ctx , & list , client .InNamespace (t .namespace ))
1166+
1167+ var firstPkgRevFromMain porchapi.PackageRevision
1168+ var secondPkgRevFromMain porchapi.PackageRevision
1169+
1170+ for _ , pkgrev := range list .Items {
1171+ if pkgrev .Spec .PackageName == packageNameFirst && pkgrev .Spec .Revision == "main" {
1172+ firstPkgRevFromMain = pkgrev
1173+ }
1174+ if pkgrev .Spec .PackageName == packageNameSecond && pkgrev .Spec .Revision == "main" {
1175+ secondPkgRevFromMain = pkgrev
1176+ }
1177+ }
1178+
1179+ // Propose deletion of both main packages
1180+ firstPkgRevFromMain .Spec .Lifecycle = porchapi .PackageRevisionLifecycleDeletionProposed
1181+ t .UpdateApprovalF (ctx , & firstPkgRevFromMain , metav1.UpdateOptions {})
1182+ secondPkgRevFromMain .Spec .Lifecycle = porchapi .PackageRevisionLifecycleDeletionProposed
1183+ t .UpdateApprovalF (ctx , & secondPkgRevFromMain , metav1.UpdateOptions {})
1184+
1185+ // Delete the first package revision from main
1186+ t .DeleteE (ctx , & porchapi.PackageRevision {
1187+ ObjectMeta : metav1.ObjectMeta {
1188+ Namespace : t .namespace ,
1189+ Name : firstPkgRevFromMain .Name ,
1190+ },
1191+ })
1192+
1193+ // We need to wait for the sync
1194+ time .Sleep (75 * time .Second )
1195+
1196+ // Delete the second package revision from main
1197+ t .DeleteE (ctx , & porchapi.PackageRevision {
1198+ ObjectMeta : metav1.ObjectMeta {
1199+ Namespace : t .namespace ,
1200+ Name : secondPkgRevFromMain .Name ,
1201+ },
1202+ })
1203+
1204+ // Propose and delete the original package revisions (cleanup)
1205+ t .ListE (ctx , & list , client .InNamespace (t .namespace ))
1206+ for _ , pkgrev := range list .Items {
1207+ pkgrev .Spec .Lifecycle = porchapi .PackageRevisionLifecycleDeletionProposed
1208+ t .UpdateApprovalF (ctx , & pkgrev , metav1.UpdateOptions {})
1209+ t .DeleteE (ctx , & porchapi.PackageRevision {
1210+ ObjectMeta : metav1.ObjectMeta {
1211+ Namespace : t .namespace ,
1212+ Name : pkgrev .Name ,
1213+ },
1214+ })
1215+ }
1216+ }
1217+
11181218func (t * PorchSuite ) TestCloneLeadingSlash (ctx context.Context ) {
11191219 const (
11201220 repository = "clone-ls"
0 commit comments