Skip to content

Commit 896914c

Browse files
authored
Clear the status of the subpackage Kptfile on subpackage clones and upgrades (#1118)
* Updated upstream Signed-off-by: liamfallon <liam.fallon@est.tech> * Clear of status of kptfile in subpackages implemented Signed-off-by: liamfallon <liam.fallon@est.tech> * Updated error messages Signed-off-by: liamfallon <liam.fallon@est.tech> * Added unit tests Signed-off-by: liamfallon <liam.fallon@est.tech> * Address CoPilot comments Signed-off-by: liamfallon <liam.fallon@est.tech> --------- Signed-off-by: liamfallon <liam.fallon@est.tech>
1 parent 6497e09 commit 896914c

2 files changed

Lines changed: 95 additions & 3 deletions

File tree

pkg/task/generictaskhandler.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,11 @@ func (th *genericTaskHandler) applySubpackageTask(
280280

281281
subpackageName, _ := porchapi.ComposeSubpkgObjName(subpackageDir)
282282
if err := kptFile.SetName(subpackageName); err != nil {
283-
return pkgerrors.Wrapf(err, "failed to write package name %q to subpackage Kptfile", subpackageName)
283+
return pkgerrors.Wrapf(err, "failed to write package name %q to subpackage Kptfile %q", subpackageName, path.Join(subpackageDir, kptfilev1.KptFileName))
284+
}
285+
286+
if err := kptFile.ClearStatus(); err != nil {
287+
return pkgerrors.Wrapf(err, "failed to clear status in Kptfile %q", path.Join(subpackageDir, kptfilev1.KptFileName))
284288
}
285289

286290
if err := kptFile.WriteToPackage(subpackageResources.Contents); err != nil {

pkg/task/generictaskhandler_test.go

Lines changed: 90 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1416,8 +1416,96 @@ func TestApplySubpackageTask_InvalidSubpackageName(t *testing.T) {
14161416

14171417
err := th.applySubpackageTask(context.Background(), draft, obj, repository.PackageResources{Contents: map[string]string{}})
14181418
require.Error(t, err)
1419-
assert.Contains(t, err.Error(), "subpackage resource name")
1420-
assert.Contains(t, err.Error(), "lowercase RFC 1123 subdomain")
1419+
require.Contains(t, err.Error(), "subpackage resource name")
1420+
}
1421+
1422+
func TestApplySubpackageTask_CheckKptfileStatusCleared(t *testing.T) {
1423+
// SubpackageDir that produces an invalid k8s name (uppercase letters)
1424+
upstreamPrKey := repository.PackageRevisionKey{
1425+
PkgKey: repository.PackageKey{
1426+
RepoKey: repository.RepositoryKey{
1427+
Namespace: "default",
1428+
Name: "upstream-repo",
1429+
},
1430+
Package: "subpkg",
1431+
},
1432+
WorkspaceName: "ws",
1433+
Revision: 1,
1434+
}
1435+
1436+
upstreamPR := &fakeextrepo.FakePackageRevision{
1437+
PrKey: upstreamPrKey,
1438+
Resources: &porchapi.PackageRevisionResources{
1439+
Spec: porchapi.PackageRevisionResourcesSpec{
1440+
Resources: map[string]string{
1441+
kptfilev1.KptFileName: "apiVersion: kpt.dev/v1\nkind: Kptfile\nmetadata:\n name: subpkg\nstatus:\n conditions:\n",
1442+
},
1443+
},
1444+
},
1445+
Kptfile: kptfilev1.KptFile{
1446+
Upstream: &kptfilev1.Upstream{
1447+
Type: kptfilev1.GitOrigin,
1448+
Git: &kptfilev1.Git{Repo: "https://github.com/example/repo.git", Ref: "main", Directory: "/subpkg"},
1449+
},
1450+
UpstreamLock: &kptfilev1.Locator{
1451+
Type: kptfilev1.GitOrigin,
1452+
Git: &kptfilev1.GitLock{Repo: "https://github.com/example/repo.git", Ref: "main", Directory: "/subpkg", Commit: "abc123"},
1453+
},
1454+
},
1455+
}
1456+
1457+
fakeRepo := &fakeextrepo.Repository{
1458+
PackageRevisions: []repository.PackageRevision{upstreamPR},
1459+
}
1460+
1461+
obj := &porchapi.PackageRevision{
1462+
Spec: porchapi.PackageRevisionSpec{
1463+
Tasks: []porchapi.Task{
1464+
{Type: porchapi.TaskTypeClone, Clone: &porchapi.PackageCloneTaskSpec{}},
1465+
{
1466+
Type: porchapi.TaskTypeClone,
1467+
Clone: &porchapi.PackageCloneTaskSpec{
1468+
SubpackageDir: "my-subpackage",
1469+
Upstream: porchapi.UpstreamPackage{
1470+
UpstreamRef: &porchapi.PackageRevisionRef{
1471+
Name: "upstream-repo.subpkg.ws",
1472+
},
1473+
},
1474+
},
1475+
},
1476+
},
1477+
},
1478+
}
1479+
1480+
draft := &fakeextrepo.FakePackageRevision{
1481+
PrKey: repository.PackageRevisionKey{
1482+
PkgKey: repository.PackageKey{
1483+
RepoKey: repository.RepositoryKey{
1484+
Namespace: "default",
1485+
Name: "test-repo",
1486+
},
1487+
Package: "test-pkg",
1488+
},
1489+
WorkspaceName: "ws",
1490+
},
1491+
Resources: &porchapi.PackageRevisionResources{
1492+
Spec: porchapi.PackageRevisionResourcesSpec{
1493+
Resources: map[string]string{},
1494+
},
1495+
},
1496+
}
1497+
1498+
th := &genericTaskHandler{
1499+
referenceResolver: &mockReferenceResolver{repo: &configapi.Repository{}},
1500+
repoOpener: &mockRepositoryOpener{repo: fakeRepo},
1501+
}
1502+
1503+
resources := repository.PackageResources{Contents: map[string]string{}}
1504+
1505+
err := th.applySubpackageTask(context.Background(), draft, obj, resources)
1506+
require.NoError(t, err)
1507+
require.Contains(t, upstreamPR.Resources.Spec.Resources[kptfilev1.KptFileName], "\nstatus:")
1508+
require.NotContains(t, resources.Contents["my-subpackage/"+kptfilev1.KptFileName], "\nstatus:")
14211509
}
14221510

14231511
type mockReferenceResolver struct {

0 commit comments

Comments
 (0)