Skip to main content

pinexq CLI

A minimal command-line interface for creating and running pinexq workers.

Install (editable):

  • Using uv or pip, from the project root:
    • uv pip install -e . or pip install -e .

Usage:

  • Global options must precede the subcommand.
  • Authentication: Provide --api-key or set the PINEXQ_API_KEY environment variable. The CLI prefers the flag over the env var.

Deploying on Docker Desktop (containerd image store)

Fresh Docker Desktop installs since version 4.34.0 default to the containerd image store. This changes what a local image looks like, and both differences are expected and supported by pinexq deploy:

  • An image ID is the manifest (or index) digest rather than the config digest.
  • A docker build produces an OCI image index that also carries provenance and SBOM attestation manifests. This is normal; the deploy pushes it and registers the digest the registry reports.

Check which store is active:

docker info --format '{{ .DriverStatus }}'   # containerd store shows "io.containerd..."

Note that docker system prune without -a does not remove tagged images — so if a bad deploy is fixed by "prune and retry", it is the retry's fresh push that fixes it, not the prune.

Troubleshooting: ImagePullBackOff right after a deploy

If a function pod fails to pull the image you just deployed, work through this checklist. The full analysis is in docs/research/2026-08-28-imagepullbackoff-after-successful-push.md.

  1. Re-run the deploy with --verbose. The push stream is printed chunk by chunk, so a swallowed registry error (denied, unauthorized, blob upload unknown) becomes visible. Since the fix in this repo, a failed push aborts the deploy instead of registering an unpullable digest.

  2. Read the pod events and map the error text to a cause:

    kubectl describe pod <pod>
    
    • failed to resolve reference ... not found → the registered digest is not a manifest the registry holds for this repository (the classic bug).
    • failed to authorize ... 401 Unauthorized → registry token / pull-secret problem, not a missing image.
    • could not fetch content descriptor ... not found / httpReadSeeker: failed open → the manifest exists but a referenced blob is missing.
    • A localhost:6443 / mirror address in the message is the k3s Spegel mirror being tried first; the upstream registry error follows it.
  3. Inspect the local image digests (compare against what was registered):

    docker image inspect --format '{{json .RepoDigests}}' <name:tag>
    docker image inspect --format '{{ .Id }}' <name:tag>
    docker buildx imagetools inspect <registry>/<context>/<function>:<version>
    
  4. Ask the registry directly whether the digest is present:

    # with a token from the registry realm
    curl -sI -H "Authorization: Bearer $TOKEN" \
      https://<registry>/v2/<context>/<function>/manifests/<digest>
    # or, if available:
    skopeo inspect --raw docker://<registry>/<context>/<function>@<digest>
    crane manifest <registry>/<context>/<function>@<digest>
    
  5. Check the registry pod for restarts or manifest unknown log lines around the time of the deploy:

    kubectl -n <ns> logs deploy/registry --since=1h | grep -iE 'manifest|blob|unknown'
    kubectl -n <ns> get pod -l app.kubernetes.io/name=registry
    

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

pinexq_cli-0.3.11-py3-none-any.whl (22.3 kB view details)

Uploaded Python 3

File details

Details for the file pinexq_cli-0.3.11-py3-none-any.whl.

File metadata

  • Download URL: pinexq_cli-0.3.11-py3-none-any.whl
  • Upload date:
  • Size: 22.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for pinexq_cli-0.3.11-py3-none-any.whl
Algorithm Hash digest
SHA256 b7e9d4dca5db9efe7e55f583a374cfe638080b44949d5930ded9db9eefc95dcc
MD5 1b7e897bf6373866f04546ce155f4455
BLAKE2b-256 cf672faf7f8161778a73f7b6b20790e0829e7e43f1f4e23e4dd4e3d2670ad971

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.3

1 file

0.4.2

1 file

0.4.1

1 file

0.4.0

1 file

0.3.12

1 file

This release

0.3.11 This release

1 file

0.3.10

1 file

0.3.9

1 file

0.3.8

1 file

0.3.7

1 file

0.3.6

1 file

0.3.5

1 file

0.3.4

1 file

0.3.3

1 file

0.3.2

1 file

0.3.1

1 file

0.3.0

1 file

0.2.4

1 file

0.2.3

1 file

0.2.2

1 file

0.2.1

1 file

0.2.0

1 file

0.1.7

1 file

0.1.6

1 file

0.1.5

1 file

0.1.4

1 file

0.1.3

1 file

0.1.2

1 file

0.1.1

1 file

0.1.0

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page