From a2ffffedc1bae7b94db41efce334063af5b72500 Mon Sep 17 00:00:00 2001 From: Zhang Xiao Date: Wed, 20 Aug 2025 09:14:21 +0000 Subject: [PATCH 1/2] Support updating label and origin domain of publish Signed-off-by: Zhang Xiao --- api/publish.go | 24 ++++++++++++++++++++++++ cmd/publish_update.go | 10 ++++++++++ system/t12_api/publish.py | 12 ++++++++---- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/api/publish.go b/api/publish.go index 5c8d06ade..3b970f424 100644 --- a/api/publish.go +++ b/api/publish.go @@ -386,6 +386,10 @@ type publishedRepoUpdateSwitchParams struct { SignedBy *string ` json:"SignedBy" example:""` // Enable multiple packages with the same filename in different distributions MultiDist *bool ` json:"MultiDist" example:"false"` + // Value of Label: field in published repository stanza + Label *string ` json:"Label" example:"Debian"` + // Value of Origin: field in published repository stanza + Origin *string ` json:"Origin" example:"Debian"` } // @Summary Update Published Repository @@ -477,6 +481,14 @@ func apiPublishUpdateSwitch(c *gin.Context) { published.MultiDist = *b.MultiDist } + if b.Label != nil { + published.Label = *b.Label + } + + if b.Origin != nil { + published.Origin = *b.Origin + } + resources := []string{string(published.Key())} taskName := fmt.Sprintf("Update published %s repository %s/%s", published.SourceKind, published.StoragePrefix(), published.Distribution) maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { @@ -970,6 +982,10 @@ type publishedRepoUpdateParams struct { SignedBy *string ` json:"SignedBy" example:""` // Enable multiple packages with the same filename in different distributions MultiDist *bool ` json:"MultiDist" example:"false"` + // Value of Label: field in published repository stanza + Label *string ` json:"Label" example:"Debian"` + // Value of Origin: field in published repository stanza + Origin *string ` json:"Origin" example:"Debian"` } // @Summary Update Published Repository @@ -1042,6 +1058,14 @@ func apiPublishUpdate(c *gin.Context) { published.MultiDist = *b.MultiDist } + if b.Label != nil { + published.Label = *b.Label + } + + if b.Origin != nil { + published.Origin = *b.Origin + } + resources := []string{string(published.Key())} taskName := fmt.Sprintf("Update published %s repository %s/%s", published.SourceKind, published.StoragePrefix(), published.Distribution) maybeRunTaskInBackground(c, taskName, resources, func(out aptly.Progress, _ *task.Detail) (*task.ProcessReturnValue, error) { diff --git a/cmd/publish_update.go b/cmd/publish_update.go index 34075bb2d..7240863dc 100644 --- a/cmd/publish_update.go +++ b/cmd/publish_update.go @@ -64,6 +64,14 @@ func aptlyPublishUpdate(cmd *commander.Command, args []string) error { published.SignedBy = context.Flags().Lookup("signed-by").Value.String() } + if context.Flags().IsSet("origin") { + published.Origin = context.Flags().Lookup("origin").Value.String() + } + + if context.Flags().IsSet("label") { + published.Label = context.Flags().Lookup("label").Value.String() + } + if context.Flags().IsSet("multi-dist") { published.MultiDist = context.Flags().Lookup("multi-dist").Value.Get().(bool) } @@ -132,6 +140,8 @@ Example: cmd.Flag.String("signed-by", "", "an optional field containing a comma separated list of OpenPGP key fingerprints to be used for validating the next Release file") cmd.Flag.Bool("skip-cleanup", false, "don't remove unreferenced files in prefix/component") cmd.Flag.Bool("multi-dist", false, "enable multiple packages with the same filename in different distributions") + cmd.Flag.String("origin", "", "overwrite origin name to publish") + cmd.Flag.String("label", "", "overwrite label to publish") return cmd } diff --git a/system/t12_api/publish.py b/system/t12_api/publish.py index 58ed244a3..1d207ce9e 100644 --- a/system/t12_api/publish.py +++ b/system/t12_api/publish.py @@ -938,6 +938,8 @@ def check(self): "Snapshots": [{"Component": "main", "Name": snapshot2_name}], "Signing": DefaultSigningOptions, "SkipContents": True, + "Label": "fun", + "Origin": "earth", }) self.check_task(task) repo_expected = { @@ -945,8 +947,8 @@ def check(self): 'Architectures': ['i386', 'source'], 'Codename': '', 'Distribution': 'wheezy', - 'Label': '', - 'Origin': '', + 'Label': 'fun', + 'Origin': 'earth', 'NotAutomatic': '', 'ButAutomaticUpgrades': '', 'Path': prefix + '/' + 'wheezy', @@ -1845,6 +1847,8 @@ def check(self): "Signing": DefaultSigningOptions, "SkipBz2": True, "SkipContents": True, + "Label": "fun", + "Origin": "earth", } ).status_code, 200) @@ -1853,8 +1857,8 @@ def check(self): 'Architectures': ['i386', 'source'], 'Codename': '', 'Distribution': 'wheezy', - 'Label': '', - 'Origin': '', + 'Label': 'fun', + 'Origin': 'earth', 'NotAutomatic': '', 'ButAutomaticUpgrades': '', 'Path': prefix + '/' + 'wheezy', From 0db9797c4ef5143290d8cc2742eccebbd2cbf529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roth?= Date: Wed, 14 Jan 2026 16:06:26 +0100 Subject: [PATCH 2/2] add test --- system/t06_publish/PublishUpdate20Test_gold | 9 ++++++++ .../t06_publish/PublishUpdate20Test_release | 11 ++++++++++ system/t06_publish/update.py | 22 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 system/t06_publish/PublishUpdate20Test_gold create mode 100644 system/t06_publish/PublishUpdate20Test_release diff --git a/system/t06_publish/PublishUpdate20Test_gold b/system/t06_publish/PublishUpdate20Test_gold new file mode 100644 index 000000000..040bcc133 --- /dev/null +++ b/system/t06_publish/PublishUpdate20Test_gold @@ -0,0 +1,9 @@ +Loading packages... +Generating metadata files and linking package files... +Finalizing metadata files... +Signing file 'Release' with gpg, please enter your passphrase when prompted: +Clearsigning file 'Release' with gpg, please enter your passphrase when prompted: +Cleaning up published repository ./maverick... +Cleaning up component 'main'... + +Published local repository ./maverick (origin: earth, label: fun) [i386, source] publishes {main: [local-repo]} has been updated successfully. diff --git a/system/t06_publish/PublishUpdate20Test_release b/system/t06_publish/PublishUpdate20Test_release new file mode 100644 index 000000000..0ab5dd0ab --- /dev/null +++ b/system/t06_publish/PublishUpdate20Test_release @@ -0,0 +1,11 @@ +Origin: earth +Label: fun +Suite: maverick +Codename: maverick +Architectures: i386 +Components: main +Description: Generated by aptly +MD5Sum: +SHA1: +SHA256: +SHA512: diff --git a/system/t06_publish/update.py b/system/t06_publish/update.py index f4a175265..47663d22a 100644 --- a/system/t06_publish/update.py +++ b/system/t06_publish/update.py @@ -625,3 +625,25 @@ def check(self): super(PublishUpdate19Test, self).check() self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor) + + +class PublishUpdate20Test(BaseTest): + """ + publish update: update label and origin + """ + fixtureCmds = [ + "aptly repo create local-repo", + "aptly repo add local-repo ${files}/", + "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -skip-bz2 local-repo", + "aptly repo remove local-repo pyspi" + ] + runCmd = "aptly publish update -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -label=fun -origin=earth maverick" + gold_processor = BaseTest.expand_environ + + def check(self): + super(PublishUpdate20Test, self).check() + + self.check_exists('public/dists/maverick/InRelease') + + # verify contents except of sums + self.check_file_contents('public/dists/maverick/Release', 'release', match_prepare=strip_processor)