Build Pipelines
Enterprise: build packages from source across the supported package formats, each passing through scanning, SBOM, and signing before publish.
Common Pipeline
Every ecosystem follows the same pipeline after the ecosystem-specific build step:
1. Clone source
Git clone at specified ref
2. Validate
Check config files match identity
3. Build
Ecosystem-specific build commands
4. Scan
Vulnerability + license checks
5. SBOM
Generate software bill of materials
6. Sign
Sigstore cryptographic signing
7. Publish
Available for installation
Security checks happen after every build
Ecosystems
Set Up Source Packages
Source package builds keep install scripts constrained
Config File
go.mod
Artifact
.tar.gz (source archive)
Build Steps
go mod tidy
go mod verify
tar czf artifact.tar.gz .Requirements
- go.mod must be present at project root
- Module path last segment must match your package name
- Version in go.mod must match the submitted version
Usage
Go module proxy also uploads go.mod separately for the GOPROXY .mod endpoint.
Config File
package.json
Artifact
.tgz (npm tarball)
Build Steps
npm install --ignore-scripts
npm packRequirements
- package.json must be present at project root
- Package name must be scoped: @{owner}/{name}
- Version in package.json must match the submitted version
Usage
Scripts are not executed during install (--ignore-scripts) for security.
Config File
pyproject.toml / setup.cfg / setup.py
Artifact
.whl (wheel) preferred, .tar.gz (sdist) fallback
Build Steps
python -m buildRequirements
- One of pyproject.toml, setup.cfg, or setup.py must be present
- Package name (PEP 503 normalized) must match your package name
- Version must match the submitted version
Usage
Names are normalized per PEP 503 (lowercase, hyphens to underscores). Extracts author, license, homepage, and dependencies as metadata.
Config File
.gemspec
Artifact
.gem (Ruby gem package)
Build Steps
gem build {gemspec}Requirements
- A .gemspec file must be present at project root
- Gem name and version extracted from the gemspec must match
Usage
Extracts dependencies, authors, license, and homepage from the gemspec.
Config File
Cargo.toml
Artifact
.crate (gzipped tar archive)
Build Steps
cargo package --no-verify --allow-dirtyRequirements
- Cargo.toml must be present at project root
- [package] name must match your package name
- [package] version must match the submitted version
Usage
Uses --no-verify and --allow-dirty since the build runs in a clean clone environment.
Build Distribution Artifacts
Distribution formats have ecosystem-specific validation
Config File
Dockerfile
Artifact
image.tar (OCI image)
Build Steps
kaniko executor --context=. --dockerfile=Dockerfile --no-push --tarPath=image.tarRequirements
- Dockerfile must be present at project root
- No name/version validation on source (provided at submission time)
Usage
Built using Kaniko (no Docker daemon required). Docker images are scanned as a merged filesystem for Grype/OSV CVEs, while per-layer ClamAV and LLM findings are attributed to build steps, including COPY --from provenance, and surfaced as advisory.
Config File
Chart.yaml
Artifact
.tgz (Helm chart archive)
Build Steps
helm lint .
helm package .Requirements
- Chart.yaml must be present at project root
- Chart name and version must match the submitted values
Usage
Chart is linted before packaging. Any lint errors will fail the build.
Config File
pom.xml
Artifact
.jar (Java Archive)
Build Steps
mvn clean package -DskipTests -qRequirements
- pom.xml must be present at project root
- <artifactId> must match your package name
- <groupId> must match your owner/namespace
- <version> must match the submitted version
Usage
Tests are skipped during the build (-DskipTests). The first .jar in target/ is used (excluding -sources.jar and -javadoc.jar).
Config File
*.csproj / *.fsproj
Artifact
.nupkg (NuGet package)
Build Steps
dotnet build -c Release
dotnet pack -c Release --no-build -o .Requirements
- A .csproj or .fsproj file must be present at project root
- <PackageId> (or project filename) must match your package name
- <Version> must match the submitted version
Usage
Supports both C# (.csproj) and F# (.fsproj) projects. Package ID falls back to the project filename if <PackageId> is not set.
Config File
Package.swift
Artifact
.zip (source archive with compiled artifacts)
Build Steps
swift build
zip -r artifact.zip . -x ".git/*" -x ".build/*"Requirements
- Package.swift must be present at project root
- Package name (from name: "..." in Package initializer) must match
- Version is not validated from source (provided at submission time)
Usage
The Swift package registry follows SE-0292. The full source is archived as a .zip after building.
Config File
composer.json
Artifact
.zip (source archive)
Build Steps
composer install --no-dev --no-scripts --no-interaction
zip -r artifact.zip . -x ".git/*" -x "vendor/*"Requirements
- composer.json must be present at project root
- "name" must be in vendor/package format
- Vendor must match your owner/namespace
- Package must match your package name
Usage
Dependencies are installed to verify they resolve, but vendor/ is excluded from the artifact. Scripts are disabled for security.
Config File
pubspec.yaml
Artifact
.tar.gz (source archive)
Build Steps
dart pub get
tar czf artifact.tar.gz --exclude=.git --exclude=.dart_tool .Requirements
- pubspec.yaml must be present at project root
- "name" must match your package name
- "version" must match the submitted version
Usage
Dependencies are fetched (dart pub get) to verify they resolve before packaging.
Publish Infrastructure & Agents
Infrastructure packages are source-first
Config File
*.tf (any Terraform file)
Artifact
.zip (source archive)
Build Steps
zip -r artifact.zip . -x ".git/*"Requirements
- At least one .tf file must be present at project root
- No name/version validation on source (modules do not encode these)
Usage
Terraform modules are source archives. No compilation is needed. The module is packaged as-is.
Config File
main.go + go.mod
Artifact
.zip (provider binary for linux_amd64)
Build Steps
go build -o terraform-provider-{name} (GOOS=linux GOARCH=amd64)
zip terraform-provider-{name}_{version}_linux_amd64.zip terraform-provider-{name}Requirements
- main.go and go.mod must be present at project root
- Module path in go.mod must contain "terraform-provider-"
- Provider name is extracted from the module path
Usage
Currently builds for linux/amd64 only. The provider is a Go binary compiled with cross-compilation flags.
Config File
agent.yaml
Artifact
.tar.gz (agent bundle)
Build Steps
tar czf artifact.tar.gz .Requirements
- agent.yaml manifest must be present at project root
- Manifest must declare name, version, kind, and entry points
- All declared entry point files must exist in the project
Usage
Agents include skills, MCP servers, and agent bundles. The manifest declares permissions, entry points, and compatibility metadata. Publisher verification status is tracked.