diff --git a/modules/htmlutil/html.go b/modules/htmlutil/html.go index a480826bc61..cba73e1fb83 100644 --- a/modules/htmlutil/html.go +++ b/modules/htmlutil/html.go @@ -149,7 +149,7 @@ func (b *HTMLBuilder) WriteHTML(s template.HTML) *HTMLBuilder { return b } -func (b *HTMLBuilder) WriteFormat(fmt template.HTML, args ...any) *HTMLBuilder { +func (b *HTMLBuilder) WriteFormatf(fmt template.HTML, args ...any) *HTMLBuilder { _, _ = HTMLPrintf(&b.sb, fmt, args...) return b } diff --git a/modules/htmlutil/html_test.go b/modules/htmlutil/html_test.go index 88e4935a1df..a499bfba8a1 100644 --- a/modules/htmlutil/html_test.go +++ b/modules/htmlutil/html_test.go @@ -26,7 +26,7 @@ func TestHTMLFormat(t *testing.T) { func TestHTMLBuilder(t *testing.T) { b := &HTMLBuilder{} - b.WriteString("<").WriteHTML("
Rprofile.site file:",
"packages.cran.install": "To install the package, run the following command:",
"packages.debian.registry": "Set up this registry from the command line:",
- "packages.debian.registry.info": "Choose $distribution and $component from the list below.",
"packages.debian.install": "To install the package, run the following command:",
"packages.debian.repository": "Repository Info",
"packages.debian.repository.distributions": "Distributions",
diff --git a/routers/web/user/package.go b/routers/web/user/package.go
index 102e347d9c8..bd363bfc8ce 100644
--- a/routers/web/user/package.go
+++ b/routers/web/user/package.go
@@ -23,7 +23,6 @@ import (
alpine_module "gitea.dev/modules/packages/alpine"
arch_module "gitea.dev/modules/packages/arch"
container_module "gitea.dev/modules/packages/container"
- debian_module "gitea.dev/modules/packages/debian"
rpm_module "gitea.dev/modules/packages/rpm"
terraform_module "gitea.dev/modules/packages/terraform"
"gitea.dev/modules/setting"
@@ -245,27 +244,6 @@ func ViewPackageVersion(ctx *context.Context) {
ctx.Data["Repositories"] = util.Sorted(repositories.Values())
ctx.Data["Architectures"] = util.Sorted(architectures.Values())
- case packages_model.TypeDebian:
- distributions := make(container.Set[string])
- components := make(container.Set[string])
- architectures := make(container.Set[string])
-
- for _, f := range pd.Files {
- for _, pp := range f.Properties {
- switch pp.Name {
- case debian_module.PropertyDistribution:
- distributions.Add(pp.Value)
- case debian_module.PropertyComponent:
- components.Add(pp.Value)
- case debian_module.PropertyArchitecture:
- architectures.Add(pp.Value)
- }
- }
- }
-
- ctx.Data["Distributions"] = util.Sorted(distributions.Values())
- ctx.Data["Components"] = util.Sorted(components.Values())
- ctx.Data["Architectures"] = util.Sorted(architectures.Values())
case packages_model.TypeRpm:
groups := make(container.Set[string])
architectures := make(container.Set[string])
@@ -318,12 +296,15 @@ func ViewPackageVersion(ctx *context.Context) {
}
ctx.Data["LatestVersions"] = pvs
ctx.Data["TotalVersionCount"] = pvsTotal
- ctx.Data["PackageVersionViewData"], err = packages_service.GetSpecManager().Get(pd.Package.Type).GetViewPackageVersionData(ctx, pd)
+ pkgSpec := packages_service.GetSpecManager().Get(pd.Package.Type)
+ viewData, err := pkgSpec.GetViewPackageVersionData(ctx, pd)
if err != nil {
ctx.ServerError("GetViewPackageVersionData", err)
return
}
+ ctx.Data["PackageVersionViewData"] = viewData
+ ctx.Data["PackageVersionSetupManual"] = pkgSpec.RenderSetupManual(ctx, pd, viewData)
ctx.Data["CanWritePackages"] = ctx.Package.AccessMode >= perm.AccessModeWrite || ctx.IsUserSiteAdmin()
hasRepositoryAccess := false
diff --git a/services/packages/debian/spec.go b/services/packages/debian/spec.go
new file mode 100644
index 00000000000..cab6d49e80b
--- /dev/null
+++ b/services/packages/debian/spec.go
@@ -0,0 +1,87 @@
+// Copyright 2026 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package debian
+
+import (
+ "context"
+ "html/template"
+ "strings"
+
+ packages_model "gitea.dev/models/packages"
+ "gitea.dev/modules/container"
+ "gitea.dev/modules/htmlutil"
+ "gitea.dev/modules/httplib"
+ debian_module "gitea.dev/modules/packages/debian"
+ "gitea.dev/modules/util"
+ packages_service "gitea.dev/services/packages"
+)
+
+type Specialization struct {
+ packages_service.SpecOnBeforeRemovePackageAll
+ packages_service.SpecOnBeforeRemovePackageVersion
+}
+
+var _ packages_service.Specialization = (*Specialization)(nil)
+
+type debianViewData struct {
+ Distributions []string
+ Components []string
+ Architectures []string
+}
+
+func (s Specialization) GetViewPackageVersionData(ctx context.Context, pd *packages_model.PackageDescriptor) (any, error) {
+ distributions := make(container.Set[string])
+ components := make(container.Set[string])
+ architectures := make(container.Set[string])
+ for _, f := range pd.Files {
+ for _, pp := range f.Properties {
+ switch pp.Name {
+ case debian_module.PropertyDistribution:
+ distributions.Add(pp.Value)
+ case debian_module.PropertyComponent:
+ components.Add(pp.Value)
+ case debian_module.PropertyArchitecture:
+ architectures.Add(pp.Value)
+ }
+ }
+ }
+ viewData := debianViewData{
+ Distributions: util.Sorted(distributions.Values()),
+ Components: util.Sorted(components.Values()),
+ Architectures: util.Sorted(architectures.Values()),
+ }
+ return viewData, nil
+}
+
+func writeVarSelect(w *htmlutil.HTMLBuilder, varName string, varItems []string) {
+ w.WriteFormatf(``)
+ w.WriteFormatf(`sudo curl %s/api/packages/%s/debian/repository.key -o /etc/apt/keyrings/gitea-%s.asc`+nl+nl, appFullLink, pkg.Owner.Name, pkg.Owner.Name)
+ w.WriteFormatf(`echo "deb [signed-by=/etc/apt/keyrings/gitea-%s.asc] %s/api/packages/%s/debian $distribution $component" | sudo tee -a /etc/apt/sources.list.d/gitea.list`+nl+nl, pkg.Owner.Name, appFullLink, pkg.Owner.Name)
+ w.WriteHTML(`sudo apt update` + nl)
+ w.WriteHTML(`sudo curl {{ctx.AppFullLink}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/debian/repository.key -o /etc/apt/keyrings/gitea-{{$.PackageDescriptor.Owner.Name}}.asc
-echo "deb [signed-by=/etc/apt/keyrings/gitea-{{$.PackageDescriptor.Owner.Name}}.asc] {{ctx.AppFullLink}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/debian $distribution $component" | sudo tee -a /etc/apt/sources.list.d/gitea.list
-sudo apt update{{ctx.Locale.Tr "packages.debian.registry.info"}}
+ {{$.PackageVersionSetupManual}}{{ctx.Locale.Tr "packages.debian.repository.distributions"}} |
- {{StringUtils.Join .Distributions ", "}} | +{{StringUtils.Join $viewData.Distributions ", "}} |
{{ctx.Locale.Tr "packages.debian.repository.components"}} |
- {{StringUtils.Join .Components ", "}} | +{{StringUtils.Join $viewData.Components ", "}} |
{{ctx.Locale.Tr "packages.debian.repository.architectures"}} |
- {{StringUtils.Join .Architectures ", "}} | +{{StringUtils.Join $viewData.Architectures ", "}} |