-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This PR adds a [Conda](https://conda.io/) package registry.
- Loading branch information
Showing
24 changed files
with
1,244 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
--- | ||
date: "2022-12-28T00:00:00+00:00" | ||
title: "Conda Packages Repository" | ||
slug: "packages/conda" | ||
draft: false | ||
toc: false | ||
menu: | ||
sidebar: | ||
parent: "packages" | ||
name: "Conda" | ||
weight: 25 | ||
identifier: "conda" | ||
--- | ||
|
||
# Conda Packages Repository | ||
|
||
Publish [Conda](https://docs.conda.io/en/latest/) packages for your user or organization. | ||
|
||
**Table of Contents** | ||
|
||
{{< toc >}} | ||
|
||
## Requirements | ||
|
||
To work with the Conda package registry, you need to use [conda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html). | ||
|
||
## Configuring the package registry | ||
|
||
To register the package registry and provide credentials, edit your `.condarc` file: | ||
|
||
```yaml | ||
channel_alias: https://gitea.example.com/api/packages/{owner}/conda | ||
channels: | ||
- https://gitea.example.com/api/packages/{owner}/conda | ||
default_channels: | ||
- https://gitea.example.com/api/packages/{owner}/conda | ||
``` | ||
| Placeholder | Description | | ||
| ------------ | ----------- | | ||
| `owner` | The owner of the package. | | ||
|
||
See the [official documentation](https://conda.io/projects/conda/en/latest/user-guide/configuration/use-condarc.html) for explanations of the individual settings. | ||
|
||
If you need to provide credentials, you may embed them as part of the channel url (`https://user:password@gitea.example.com/...`). | ||
|
||
## Publish a package | ||
|
||
To publish a package, perform a HTTP PUT operation with the package content in the request body. | ||
|
||
``` | ||
PUT https://gitea.example.com/api/packages/{owner}/conda/{channel}/{filename} | ||
``` | ||
| Placeholder | Description | | ||
| ------------ | ----------- | | ||
| `owner` | The owner of the package. | | ||
| `channel` | The [channel](https://conda.io/projects/conda/en/latest/user-guide/concepts/channels.html) of the package. (optional) | | ||
| `filename` | The name of the file. | | ||
Example request using HTTP Basic authentication: | ||
```shell | ||
curl --user your_username:your_password_or_token \ | ||
--upload-file path/to/package-1.0.conda \ | ||
https://gitea.example.com/api/packages/testuser/conda/package-1.0.conda | ||
``` | ||
|
||
You cannot publish a package if a package of the same name and version already exists. You must delete the existing package first. | ||
|
||
## Install a package | ||
|
||
To install a package from the package registry, execute one of the following commands: | ||
|
||
```shell | ||
conda install {package_name} | ||
conda install {package_name}={package_version} | ||
conda install -c {channel} {package_name} | ||
``` | ||
|
||
| Parameter | Description | | ||
| ----------------- | ----------- | | ||
| `package_name` | The package name. | | ||
| `package_version` | The package version. | | ||
| `channel` | The channel of the package. (optional) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// Copyright 2022 The Gitea Authors. All rights reserved. | ||
// SPDX-License-Identifier: MIT | ||
|
||
package conda | ||
|
||
import ( | ||
"context" | ||
"strings" | ||
|
||
"code.gitea.io/gitea/models/db" | ||
"code.gitea.io/gitea/models/packages" | ||
conda_module "code.gitea.io/gitea/modules/packages/conda" | ||
|
||
"xorm.io/builder" | ||
) | ||
|
||
type FileSearchOptions struct { | ||
OwnerID int64 | ||
Channel string | ||
Subdir string | ||
Filename string | ||
} | ||
|
||
// SearchFiles gets all files matching the search options | ||
func SearchFiles(ctx context.Context, opts *FileSearchOptions) ([]*packages.PackageFile, error) { | ||
var cond builder.Cond = builder.Eq{ | ||
"package.type": packages.TypeConda, | ||
"package.owner_id": opts.OwnerID, | ||
"package_version.is_internal": false, | ||
} | ||
|
||
if opts.Filename != "" { | ||
cond = cond.And(builder.Eq{ | ||
"package_file.lower_name": strings.ToLower(opts.Filename), | ||
}) | ||
} | ||
|
||
var versionPropsCond builder.Cond = builder.Eq{ | ||
"package_property.ref_type": packages.PropertyTypePackage, | ||
"package_property.name": conda_module.PropertyChannel, | ||
"package_property.value": opts.Channel, | ||
} | ||
|
||
cond = cond.And(builder.In("package.id", builder.Select("package_property.ref_id").Where(versionPropsCond).From("package_property"))) | ||
|
||
var filePropsCond builder.Cond = builder.Eq{ | ||
"package_property.ref_type": packages.PropertyTypeFile, | ||
"package_property.name": conda_module.PropertySubdir, | ||
"package_property.value": opts.Subdir, | ||
} | ||
|
||
cond = cond.And(builder.In("package_file.id", builder.Select("package_property.ref_id").Where(filePropsCond).From("package_property"))) | ||
|
||
sess := db.GetEngine(ctx). | ||
Select("package_file.*"). | ||
Table("package_file"). | ||
Join("INNER", "package_version", "package_version.id = package_file.version_id"). | ||
Join("INNER", "package", "package.id = package_version.package_id"). | ||
Where(cond) | ||
|
||
pfs := make([]*packages.PackageFile, 0, 10) | ||
return pfs, sess.Find(&pfs) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.