Artifact Server includes workflow, dependency, package, and container integrity in its security model. This page documents the controls available in the repository today. It separates continuous-integration evidence from public release proof.
Changes are tested
Pull requests run five parallel product jobs and the macOS job. Changes to main run the complete Linux iteration gate.
Secrets are scanned
Gitleaks scans the complete Git history. The workflow verifies the checksum of the downloaded binary. A synthetic token proves the detector before the repository scan.
Workflows are audited
zizmor audits GitHub workflows and Dependabot settings in strict offline mode. A synthetic unsafe workflow proves the detector first.
Dependencies are reviewed
Dependabot scans pnpm and GitHub Actions each week. Routine version updates wait seven days before opening a pull request.
Pull-request verification
The CI workflow uses read-only repository permissions. It pins third-party actions to complete commit SHAs. Checkout does not persist credentials. Dependencies install from the committed lockfile.
The pull-request workflow runs these required jobs:
- Build and static policy.
- Unit and conformance behavior.
- Browser behavior.
- Cloudflare deployment behavior.
- macOS portability.
The complete Linux gate runs after a change reaches main. It also runs each day, during a manual full run, and before a release.
The complete gate uses pnpm verify:iteration. It includes package, storage, Compose, Helm, OIDC, coverage, and bounded performance verification.
The separate security workflow runs on the same change events and every Monday:
- Gitleaks scans all repository history with findings redacted from logs.
- zizmor audits workflow and Dependabot files without sending source to a hosted scanner.
- The workflow downloads both scanners at pinned versions and verifies them with SHA-256 before use.
- Both scanners must detect a synthetic problem before their real analysis can pass.
See the Actions history for individual runs and logs.
Evidence in package outputs
Artifact Server creates two package formats. Each package includes a machine-readable manifest next to the archive.
| Package | Command | Evidence |
|---|---|---|
| Portable Node archive | pnpm package:local |
Archive SHA-256, size, package name and version, Node.js requirement, and native-extension status. |
| Multi-platform OCI archive | pnpm package:oci |
Archive SHA-256, image-index digest, source revision, source-tree status, linux/amd64 and linux/arm64 manifests, and the embedded attestation predicate types. |
The OCI builder requests maximum-mode BuildKit provenance and an SPDX software bill of materials for each platform. Before it writes the package manifest, Artifact Server verifies every OCI blob digest and requires both of these predicates:
https://slsa.dev/provenance/v1
https://spdx.dev/DocumentIt also verifies the image entry point, non-root runtime user, working directory, product version, source revision, and source-tree status. The build fails if any required platform, digest, runtime property, or attestation is missing.
Verify an archive checksum
Build either package from a source checkout:
pnpm install --frozen-lockfile
pnpm package:local
# or: pnpm package:ociThen compare the archive with its adjacent manifest. This Node.js command works for both package formats:
node -e '
const crypto = require("node:crypto");
const fs = require("node:fs");
const [archive, manifestPath] = process.argv.slice(1);
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
const expected = manifest.sha256 ?? manifest.archiveSha256;
const actual = crypto.createHash("sha256")
.update(fs.readFileSync(archive))
.digest("hex");
if (actual !== expected) throw new Error("Archive checksum mismatch");
console.log(actual);
' release/<archive> release/<archive>.manifest.jsonFor an OCI build, pnpm package:oci also runs the repository’s attestation and image-layout verifier before returning. Open the generated .manifest.json to inspect the verified revision, platforms, and attestationPredicates values.
Public release verification
No tagged public Artifact Server release exists. The release workflow passed private qualification. No public archive or image is available for external verification.
The team will add release commands after the public assets exist. These commands will download checksums and verify GitHub attestations and the immutable GHCR image. Until then, source-build evidence is the available verification boundary.
Reporting and product boundaries
Supply-chain controls complement the product’s two-origin security boundary. They do not replace authentication, authorization, content isolation, or deployment hardening.
Read the repository’s security policy before reporting a vulnerability. Do not include real credentials, private artifact contents, or personal data in a report.