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:
addprompts 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, andremovework from filename or free-text query, not just an opaque ID
Commands
artifact-locker initartifact-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|--allartifact-locker push [tag]artifact-locker pullartifact-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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed44075f1393fe4e1db7d078774f18035717361cfa197d296eac447d1190c6df
|
|
| MD5 |
258c86f2e5479c1ace90a4146bcfa4ad
|
|
| BLAKE2b-256 |
dd64853526de8263e9a794f7e080a04c16ff621fafb874f0cb064d5b0060dc0e
|
Provenance
The following attestation bundles were made for artifact_locker-0.1.0.tar.gz:
Publisher:
publish-pypi.yml on CameronCandau/Artifact-Locker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
artifact_locker-0.1.0.tar.gz -
Subject digest:
ed44075f1393fe4e1db7d078774f18035717361cfa197d296eac447d1190c6df - Sigstore transparency entry: 1447404365
- Sigstore integration time:
-
Permalink:
CameronCandau/Artifact-Locker@35e46c2e84e2524e104d7f570a239ee240f03f50 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/CameronCandau
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@35e46c2e84e2524e104d7f570a239ee240f03f50 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file artifact_locker-0.1.0-py3-none-any.whl.
File metadata
- Download URL: artifact_locker-0.1.0-py3-none-any.whl
- Upload date:
- Size: 28.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a12678e56c313519e1d480f7e6d6b458b35f7fe011d17aa56e0afcd0a61b4ef3
|
|
| MD5 |
916130f9a7c29c77da7fd26b02d35bb6
|
|
| BLAKE2b-256 |
fb140764e7371eb1d8928dee58a03bed1e36d733eecf4d3942a30981d5938f46
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
artifact_locker-0.1.0-py3-none-any.whl -
Subject digest:
a12678e56c313519e1d480f7e6d6b458b35f7fe011d17aa56e0afcd0a61b4ef3 - Sigstore transparency entry: 1447404439
- Sigstore integration time:
-
Permalink:
CameronCandau/Artifact-Locker@35e46c2e84e2524e104d7f570a239ee240f03f50 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/CameronCandau
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@35e46c2e84e2524e104d7f570a239ee240f03f50 -
Trigger Event:
workflow_dispatch
-
Statement type: