Skip to main content

OCI-only artifact catalog CLI

Project description

artifact-locker

artifact-locker is a Python CLI for maintaining a local catalog of curated artifacts and publishing or pulling that catalog through OCI with oras.

The CLI is designed to be operator-friendly:

  • add prompts for missing fields instead of forcing you to remember flags
  • most metadata fields are optional
  • artifacts can be staged from a local file or tracked as a URL-only reference
  • find, show, and remove work from filename or free-text query, not just an opaque ID

Commands

  • artifact-locker init
  • artifact-locker add [source-or-url]
  • artifact-locker list [query]
  • artifact-locker find <query>
  • artifact-locker show <query>
  • artifact-locker remove <query>
  • artifact-locker verify --catalog|--local|--all
  • artifact-locker push [tag]
  • artifact-locker pull
  • artifact-locker doctor

Repo Layout

.
├── catalog/
│   ├── artifacts.json
│   └── checksums.txt
├── config.json
├── staging/
│   └── release-assets/
└── .artifact-locker/
    └── state.json

config.json stores non-secret defaults such as the OCI repository name and the managed local artifact directory. The default managed path is:

~/.local/share/artifact-locker/artifacts

Registry authentication is intentionally external to the application; use oras login when pushes require credentials.

For ECR Public repositories, a typical login flow is:

aws ecr-public get-login-password --region us-east-1 | \
  oras login -u AWS --password-stdin public.ecr.aws

By default, commands use the managed catalog under ~/.local/share/artifact-locker/. Use --catalog /path/to/dir only when you want an alternate catalog location.

Usage

Interactive add:

artifact-locker add
artifact-locker add ./Seatbelt.exe
artifact-locker add https://example.test/tool.zip

Non-interactive add:

artifact-locker add ./Seatbelt.exe \
  --platform windows \
  --category bin \
  --version v1.0.0 \
  --no-input

Find and manage artifacts without remembering the generated ID:

artifact-locker find seatbelt
artifact-locker show Seatbelt.exe
artifact-locker remove seatbelt

Push with an automatic date tag:

artifact-locker push

When omitted, the push tag defaults to the current date in vYYYY-MM-DD format.

Development

python -m pytest
python -m build

For local commit-time linting, install the pre-commit hook once:

pip install -e .[dev]
pre-commit install

Then before each commit, the hook will run Ruff automatically. You can also run it manually:

pre-commit run --all-files

For local push-time test gating, install the repo pre-push hook:

ln -sf ../../scripts/pre-push .git/hooks/pre-push

That hook runs pytest from venv/bin/pytest when available.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

artifact_locker-0.1.0.tar.gz (29.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

artifact_locker-0.1.0-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

Details for the file artifact_locker-0.1.0.tar.gz.

File metadata

  • Download URL: artifact_locker-0.1.0.tar.gz
  • Upload date:
  • Size: 29.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for artifact_locker-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ed44075f1393fe4e1db7d078774f18035717361cfa197d296eac447d1190c6df
MD5 258c86f2e5479c1ace90a4146bcfa4ad
BLAKE2b-256 dd64853526de8263e9a794f7e080a04c16ff621fafb874f0cb064d5b0060dc0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for artifact_locker-0.1.0.tar.gz:

Publisher: publish-pypi.yml on CameronCandau/Artifact-Locker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file artifact_locker-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for artifact_locker-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a12678e56c313519e1d480f7e6d6b458b35f7fe011d17aa56e0afcd0a61b4ef3
MD5 916130f9a7c29c77da7fd26b02d35bb6
BLAKE2b-256 fb140764e7371eb1d8928dee58a03bed1e36d733eecf4d3942a30981d5938f46

See more details on using hashes here.

Provenance

The following attestation bundles were made for artifact_locker-0.1.0-py3-none-any.whl:

Publisher: publish-pypi.yml on CameronCandau/Artifact-Locker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page