Skip to content

Commit

Permalink
Merge branch 'main' into pv-pipeline-readiness-gates
Browse files Browse the repository at this point in the history
  • Loading branch information
JamesMcDermott authored Feb 25, 2025
2 parents dafc351 + 941fdd1 commit 8421cb6
Show file tree
Hide file tree
Showing 38 changed files with 165 additions and 37 deletions.
2 changes: 1 addition & 1 deletion api/generated/clientset/versioned/clientset.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/generated/clientset/versioned/fake/doc.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/generated/clientset/versioned/fake/register.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/generated/clientset/versioned/scheme/doc.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/generated/clientset/versioned/scheme/register.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/generated/informers/externalversions/factory.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/generated/informers/externalversions/generic.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/generated/listers/porch/v1alpha1/packagerevision.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/generated/listers/porch/v1alpha1/porchpackage.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions api/generated/openapi/zz_generated.openapi.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion api/porch/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,9 @@ type PackageSpec struct {
// PackageStatus defines the observed state of Package
type PackageStatus struct {
// LatestRevision identifies the package revision that is the latest
// published package revision belonging to this package
// published package revision belonging to this package. Latest is determined by comparing
// packages that have valid semantic version as their revision. In case of git backend, branch tracking
// revisions like "main" and in case of oci backend, revisions tracking "latest" are not considered during
// selection of the latest revision.
LatestRevision string `json:"latestRevision,omitempty"`
}
5 changes: 4 additions & 1 deletion api/porch/v1alpha1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -566,6 +566,9 @@ type PackageSpec struct {
// PackageStatus defines the observed state of Package
type PackageStatus struct {
// LatestRevision identifies the package revision that is the latest
// published package revision belonging to this package
// published package revision belonging to this package. Latest is determined by comparing
// packages that have valid semantic version as their revision. In case of git backend, branch tracking
// revisions like "main" and in case of oci backend, revisions tracking "latest" are not considered during
// selection of the latest revision.
LatestRevision string `json:"latestRevision,omitempty"`
}
2 changes: 1 addition & 1 deletion api/porch/v1alpha1/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/porch/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/porch/v1alpha1/zz_generated.defaults.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/porch/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

68 changes: 68 additions & 0 deletions test/e2e/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3088,6 +3088,73 @@ func (t *PorchSuite) TestPackageVariantReadinessGate(ctx context.Context) {
assert.NoError(t, proposeError, "propose operation should have succeeded now that all Conditions have been set to True")
}

func (t *PorchSuite) TestLatestVersionOnDelete(ctx context.Context) {
const (
repositoryName = "test-latest-on-delete-repository"
workspacev1 = "test-latest-on-delete-workspace-v1"
workspacev2 = "test-latest-on-delete-workspace-v2"
packageName = "test-latest-on-delete-package"
)

t.RegisterMainGitRepositoryF(ctx, repositoryName)

pr1 := t.CreatePackageDraftF(ctx, repositoryName, packageName, workspacev1)

pr1.Spec.Lifecycle = porchapi.PackageRevisionLifecycleProposed
t.UpdateF(ctx, pr1)

pr1.Spec.Lifecycle = porchapi.PackageRevisionLifecyclePublished
t.UpdateApprovalF(ctx, pr1, metav1.UpdateOptions{})

//After approval of the first revision, the package should be labeled as latest
t.MustHaveLabels(ctx, pr1.Name, map[string]string{
porchapi.LatestPackageRevisionKey: porchapi.LatestPackageRevisionValue,
})

pr2 := t.CreatePackageDraftF(ctx, repositoryName, packageName, workspacev2)

pr2.Spec.Lifecycle = porchapi.PackageRevisionLifecycleProposed
t.UpdateF(ctx, pr2)

pr2.Spec.Lifecycle = porchapi.PackageRevisionLifecyclePublished
t.UpdateApprovalF(ctx, pr2, metav1.UpdateOptions{})

//After approval of the second revision, the latest label should migrate to the
//v2 packageRevision
t.MustNotHaveLabels(ctx, pr1.Name, []string{
porchapi.LatestPackageRevisionKey,
})

t.MustHaveLabels(ctx, pr2.Name, map[string]string{
porchapi.LatestPackageRevisionKey: porchapi.LatestPackageRevisionValue,
})

t.GetF(ctx, client.ObjectKeyFromObject(pr2), pr2)

pr2.Spec.Lifecycle = porchapi.PackageRevisionLifecycleDeletionProposed
t.UpdateF(ctx, pr2)

t.DeleteF(ctx, pr2)
//After deletion of the v2 pacakgeRevision,
//the label should migrate back to the v2 packageRevision
t.MustHaveLabels(ctx, pr1.Name, map[string]string{
porchapi.LatestPackageRevisionKey: porchapi.LatestPackageRevisionValue,
})

t.GetF(ctx, client.ObjectKeyFromObject(pr1), pr1)

pr1.Spec.Lifecycle = porchapi.PackageRevisionLifecycleDeletionProposed
t.UpdateF(ctx, pr1)

t.DeleteF(ctx, pr1)
//After the removal of all versioned packageRevisions, the main branch
//packageRevision should still not get the latest label.
mainPr := t.GetPackageRevision(ctx, repositoryName, packageName, "main")
t.MustNotHaveLabels(ctx, mainPr.Name, []string{
porchapi.LatestPackageRevisionKey,
})
}

func (t *PorchSuite) TestRepositoryModify(ctx context.Context) {
const (
repositoryName = "repo-modify-test"
Expand Down Expand Up @@ -3170,4 +3237,5 @@ func (t *PorchSuite) TestRepositoryModify(ctx context.Context) {
}
break
}

}
54 changes: 54 additions & 0 deletions test/e2e/suite_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,41 @@ func (t *TestSuite) ValidateLabelsAndAnnos(ctx context.Context, name string, lab
}
}

func (t *TestSuite) MustHaveLabels(ctx context.Context, name string, labels map[string]string) {
t.Helper()
var pr porchapi.PackageRevision
t.GetF(ctx, client.ObjectKey{
Namespace: t.Namespace,
Name: name,
}, &pr)

for labelKey, labelValue := range labels {
actualValue, ok := pr.Labels[labelKey]
if !ok {
t.Errorf("Expected PR %s to have label %s, but didn't find it", pr.Name, labelKey)
}
if actualValue != labelValue {
t.Errorf("Expected PR %s to have label %s value %s but got %s", pr.Name, labelKey, labelValue, actualValue)
}
}
}

func (t *TestSuite) MustNotHaveLabels(ctx context.Context, name string, labels []string) {
t.Helper()
var pr porchapi.PackageRevision
t.GetF(ctx, client.ObjectKey{
Namespace: t.Namespace,
Name: name,
}, &pr)

for _, label := range labels {
_, ok := pr.Labels[label]
if ok {
t.Errorf("Expected PR %s not to have label %s, but found it", pr.Name, label)
}
}
}

func (t *TestSuite) RegisterGitRepositoryF(ctx context.Context, repo, name, directory string, opts ...RepositoryOption) {
t.Helper()
config := GitConfig{
Expand Down Expand Up @@ -544,6 +579,25 @@ func (t *TestSuite) WaitUntilPackageRevisionResourcesExists(
return foundPrr
}

func (t *TestSuite) GetPackageRevision(ctx context.Context, repository string, pkgName string, revision string) *porchapi.PackageRevision {
t.Helper()
var prList porchapi.PackageRevisionList
selector := client.MatchingFields(fields.Set{
"spec.repository": repository,
"spec.packageName": pkgName,
"spec.revision": revision,
})
t.ListF(ctx, &prList, selector, client.InNamespace(t.Namespace))

if len(prList.Items) == 0 {
t.Fatalf("PackageRevision object wasn't found for package revision %v/%v/%v", repository, pkgName, revision)
}
if len(prList.Items) > 1 {
t.Fatalf("Multiple PackageRevision objects were found for package revision %v/%v/%v", repository, pkgName, revision)
}
return &prList.Items[0]
}

func (t *TestSuite) GetContentsOfPackageRevision(ctx context.Context, repository string, pkgName string, revision string) map[string]string {

t.Helper()
Expand Down

0 comments on commit 8421cb6

Please sign in to comment.