Orkestia
Blog
Product pages

Packages and Git

Publish wheels and npm packages, and use a Git remote, on the namespace you already have from Orkestia Registry.

The namespace you already have on Orkestia Registry is the name for pip, npm, and Git. Images stay at registry.orkestia.dev. Wheels and npm packages use packages.orkestia.dev. Git uses git.orkestia.dev.

In Cockpit, open Registry under Your Orkestia bill. That page shows your namespace. Replace acme in the examples below with that name. The username is the namespace. The password is the one-hour password you create there. From the API, registry.native.login returns username and token. The token is the password, and it is shown once. Create a new password for each CI job and let it expire.

pip

The index is https://packages.orkestia.dev/<namespace>/simple/. Twine uploads to https://packages.orkestia.dev/<namespace>/.

pip install \
  --index-url "https://acme:${PASSWORD}@packages.orkestia.dev/acme/simple/" \
  my-library
TWINE_USERNAME=acme \
TWINE_PASSWORD="$PASSWORD" \
twine upload --repository-url https://packages.orkestia.dev/acme/ dist/*

npm

The registry is https://packages.orkestia.dev/<namespace>/npm/. Packages are @<namespace>/<name>. The same password is the bearer token.

Name the package @acme/my-library and add this .npmrc in the project:

@acme:registry=https://packages.orkestia.dev/acme/npm/
//packages.orkestia.dev/acme/npm/:_authToken=${PASSWORD}
npm publish
npm install @acme/my-library

Git

Repligit is an addon an owner or an admin turns on with repligit.native.enable. The remote is https://git.orkestia.dev/<namespace>/<repo>.git.

An owner or an admin creates the repository with repligit.repo.create. For each session, an organization member runs repligit.credential.mint with these inputs:

  • repository_uuid: the value repligit.repo.create returned.
  • pusher_uuid: your own user id, as whoami shows it. It is an explicit input, not taken from the caller.
  • scope: read or write.
  • ttl_seconds: up to 3600.

It returns a token, shown once. Clone with your namespace as the username and that token as the password:

git clone https://git.orkestia.dev/acme/my-repo.git

A tag on that remote can publish a wheel or an npm package into the same namespace. An owner or an admin runs repligit.publish with the repository, the tag, and the format wheel or npm. A git push does not publish by itself.

What the tag must contain:

  • Wheel: a pyproject.toml with [project] name and version, and a package directory with that name (dashes become underscores). Only that directory goes into the wheel. It must be pure Python with no build step. A library with compiled code, package data rules, or declared dependencies uploads its own wheel with twine instead.
  • npm: a package.json whose name is @<namespace>/<name>.

A tag that does not exist, or a repository of another organization, is refused, and nothing is published.

A pip package and an npm package can have the same name. They are kept apart.

Usage

Package bytes share the 5 GiB registry quota. The Git addon disk is its own 10 GiB. Usage is estimated at Azure cost ×5 and is not a line on the invoice.

The Registry page shows the bytes in use and the quota. Package bytes count toward that quota.

Turn passwords off

Disable stops new passwords. An organization admin runs registry.native.disable.

Purge starts removal. An organization admin runs registry.native.purge. The namespace stays reserved.

An owner or an admin runs repligit.native.disable. New Git credentials stop.

WorkflowWhoWhat you get
registry.native.loginThe organizationA one-hour password. The username is the namespace
repligit.native.enableOwner or adminThe Git addon on your namespace
repligit.native.statusThe organizationHost, namespace, repositories, and the disk
repligit.repo.createOwner or adminA repository at https://git.orkestia.dev/<namespace>/<repo>.git
repligit.credential.mintThe organizationA read or write token for one repository, up to one hour. The username is the namespace
repligit.publishOwner or adminA tag published as a wheel or an npm package in the same namespace
registry.native.disableAdminNew passwords stop
registry.native.purgeAdminRemoval starts. The namespace stays reserved
repligit.native.disableOwner or adminNew Git credentials stop