Secure Image Build
SkillMediaUse whenever an NPA container image is built, tagged, pushed, copied, or promoted, including public full-SHA development builds, release publication, build scripts, and image-producing GitHub Actions workflows. Enforce mandatory safety gates and refuse insecure or restricted publication.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Secure Image Build skill
What this skill tells your AI
The instructions your AI receives, as published by nebius/nebius-physical-ai in skills/atomic/secure-image-build/SKILL.md and read by ahel’s review.
Treat every official development push as public and irreversible. Use one
official namespace: ghcr.io/nebius/nebius-physical-ai/<image>. Tag reviewed
development bytes dev-<full-git-sha> and promote only that exact digest to the
supported release tag.
Load The Governing Procedures
Read and follow these before acting; do not duplicate their detailed commands:
skills/atomic/solution-licensing/SKILL.mdskills/atomic/build-and-push-image/SKILL.mdskills/workflows/contribute-workbench-image/SKILL.mdskills/atomic/third-party-eula-preflight/SKILL.mdskills/atomic/testing-conventions/SKILL.mddocs/workbench/container-packaging.md
For live validation also load skills/atomic/gpu-selection/SKILL.md,
skills/atomic/submit-workflow/SKILL.md, and
skills/atomic/protect-nebius-infra-details/SKILL.md.
Mandatory Sequence
- Resolve the exact checked-out commit. Require a full 40-character Git SHA
and the immutable tag
dev-<full-git-sha>; refuse moving or abbreviated development tags. - Require
redistribution: publicinnpa/docker/workbench/packaging-contract.yamland check the current restriction inventories innpa/src/npa/deploy/images.py. Hard-refuserestrictedimages from every official GHCR tag; resolve any disagreement between those sources before publication. Read current eligibility and quarantine state from those sources, rather than treating a historical product example as a fixed inventory. The supportedcosmos3-servingrelease is bound to its accepted, payload-scanned and GPU-validated digest; historical restricted bytes remain prohibited. Future development bytes must pass the sequence below. - Before any public push, run the repository packaging/license guards and inspect the locally built artifact, including layers, history, and OCI config. Refuse credentials, secrets, customer data, live infrastructure identifiers, gated weights/data, proprietary SDK/runtime payloads, or cached EULA acceptance anywhere in the artifact.
- Require policy-approved, digest-pinned bases/dependencies or an existing documented packaging exception. Enforce the non-root runtime and packaging contract. When SkyPilot needs the bootstrap contract, prove the behavior and exact OCI attestation; never add the label without the proof.
- Produce the SBOM and run the repository-supported vulnerability, secret, license, payload, revision/provenance, and bootstrap checks. Do not push the public development tag until every pre-publication gate passes.
- Push with explicit
packages: write, then resolve the tag once to its OCI digest. Verify revision/provenance and SBOM attestations, rerun exact-digest payload/security checks, and prove an anonymous pull without ambient auth. - Run the real functional workflow on a compatible physical GPU using the immutable development digest. An import, startup, or CUDA-availability check is not functional evidence.
- Promote only the validated digest to the supported public release tag through
npa.deploy.publish_public. Verify anonymous pullability and exact digest identity independently after promotion; record the exact digest identity inpublic_release_manifest.json. Scheduled health must compare the release tag anonymously with thatpublished_digest, without depending on dev-tag retention. - On failure, delete only the exact run-owned development version after matching package, tag, and digest. Never infer ownership from a name or delete a shared/release digest. Record that deletion cannot revoke prior downloads. Retain a successful dev tag only when the documented release policy requires it to preserve the release's shared digest/provenance.
Verify What A Scanner Actually Reads
A successful scanner exit proves only its configured coverage. Check the pinned implementation for base-layer, binary, extension, size, and chunk exclusions. Trivy's secret scanner can exclude base layers and binary files; a file-oriented Gitleaks invocation is not automatically a complete-byte check either. Keep the mandatory vulnerability, secret, license, and payload gates, and record their limits accurately.
For an additional complete-byte check, bind the exact saved-image hash, OCI config and ordered layers, scanner policy and dependencies, and observed byte and file counts. Read every ancestor layer, including files deleted later, plus archive metadata and padding. Unaccounted bytes, malformed archives, missing confidentiality configuration, unfinished child processes, and incomplete counts must fail the check. Keep matches and input policy private; investigate each finding against exact bytes and provenance before publication. A public upstream filename alone is not proof that a match is harmless.
Refusal Conditions
Stop before publication if any mandatory evidence is missing, a scan is unavailable or inconclusive, the source commit/tag is mutable, redistribution is not public, the pushed digest differs from the inspected artifact, anonymous pull verification fails, or real GPU validation has not passed. Never weaken a gate or substitute a label, unit test, or deletion promise for artifact evidence.
Signals
- GitHub stars
- 28
- Forks
- 15
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
secure-image-build- Source
- github.com/nebius/nebius-physical-ai