mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Add Conda package registry (#22262)
This PR adds a [Conda](https://conda.io/) package registry.
This commit is contained in:
		@@ -16,6 +16,7 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/web"
 | 
			
		||||
	"code.gitea.io/gitea/routers/api/packages/composer"
 | 
			
		||||
	"code.gitea.io/gitea/routers/api/packages/conan"
 | 
			
		||||
	"code.gitea.io/gitea/routers/api/packages/conda"
 | 
			
		||||
	"code.gitea.io/gitea/routers/api/packages/container"
 | 
			
		||||
	"code.gitea.io/gitea/routers/api/packages/generic"
 | 
			
		||||
	"code.gitea.io/gitea/routers/api/packages/helm"
 | 
			
		||||
@@ -167,6 +168,43 @@ func CommonRoutes(ctx gocontext.Context) *web.Route {
 | 
			
		||||
				})
 | 
			
		||||
			})
 | 
			
		||||
		}, reqPackageAccess(perm.AccessModeRead))
 | 
			
		||||
		r.Group("/conda", func() {
 | 
			
		||||
			var (
 | 
			
		||||
				downloadPattern = regexp.MustCompile(`\A(.+/)?(.+)/((?:[^/]+(?:\.tar\.bz2|\.conda))|(?:current_)?repodata\.json(?:\.bz2)?)\z`)
 | 
			
		||||
				uploadPattern   = regexp.MustCompile(`\A(.+/)?([^/]+(?:\.tar\.bz2|\.conda))\z`)
 | 
			
		||||
			)
 | 
			
		||||
 | 
			
		||||
			r.Get("/*", func(ctx *context.Context) {
 | 
			
		||||
				m := downloadPattern.FindStringSubmatch(ctx.Params("*"))
 | 
			
		||||
				if len(m) == 0 {
 | 
			
		||||
					ctx.Status(http.StatusNotFound)
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				ctx.SetParams("channel", strings.TrimSuffix(m[1], "/"))
 | 
			
		||||
				ctx.SetParams("architecture", m[2])
 | 
			
		||||
				ctx.SetParams("filename", m[3])
 | 
			
		||||
 | 
			
		||||
				switch m[3] {
 | 
			
		||||
				case "repodata.json", "repodata.json.bz2", "current_repodata.json", "current_repodata.json.bz2":
 | 
			
		||||
					conda.EnumeratePackages(ctx)
 | 
			
		||||
				default:
 | 
			
		||||
					conda.DownloadPackageFile(ctx)
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
			r.Put("/*", reqPackageAccess(perm.AccessModeWrite), func(ctx *context.Context) {
 | 
			
		||||
				m := uploadPattern.FindStringSubmatch(ctx.Params("*"))
 | 
			
		||||
				if len(m) == 0 {
 | 
			
		||||
					ctx.Status(http.StatusNotFound)
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				ctx.SetParams("channel", strings.TrimSuffix(m[1], "/"))
 | 
			
		||||
				ctx.SetParams("filename", m[2])
 | 
			
		||||
 | 
			
		||||
				conda.UploadPackageFile(ctx)
 | 
			
		||||
			})
 | 
			
		||||
		}, reqPackageAccess(perm.AccessModeRead))
 | 
			
		||||
		r.Group("/generic", func() {
 | 
			
		||||
			r.Group("/{packagename}/{packageversion}", func() {
 | 
			
		||||
				r.Delete("", reqPackageAccess(perm.AccessModeWrite), generic.DeletePackage)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user