Skip to content

Commit 8c53cf0

Browse files
committed
Merge branch 'license-adjustments' of github.com:sil2100/melange into license-adjustments
2 parents 696f715 + dbedf0a commit 8c53cf0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+722
-186
lines changed

.github/workflows/wolfi-presubmit.yaml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ jobs:
7474
- py3-pyelftools # Uses license-path
7575
- cadvisor # uses cgroups
7676
- fping # uses get/setcaps
77-
- logstash-8 # uses a diff test user
77+
- fixuid # uses a diff test user
78+
- fluent-operator # uses background& process
7879
- perl-yaml-syck
7980
- postfix
8081
- ncurses
@@ -122,7 +123,7 @@ jobs:
122123
uses: ./melange-src/.github/actions/setup-bubblewrap
123124
- if: matrix.runner == 'bubblewrap'
124125
run: |
125-
make SHELL="/bin/bash" MELANGE="sudo melange" MELANGE_RUNNER="bubblewrap" package/${{ matrix.package }}
126+
make SHELL="/bin/bash" MELANGE="sudo melange" MELANGE_RUNNER="bubblewrap" MELANGE_EXTRA_OPTS="--generate-provenance" package/${{ matrix.package }}
126127
127128
- name: Download kernel for VMs
128129
if: matrix.runner == 'qemu'
@@ -153,9 +154,18 @@ jobs:
153154
QEMU_KERNEL_IMAGE=/tmp/kernel/boot/vmlinuz-virt \
154155
QEMU_KERNEL_MODULES=/tmp/kernel/lib/modules/ \
155156
MELANGE="/usr/bin/melange" \
156-
MELANGE_EXTRA_OPTS="--runner qemu" \
157+
MELANGE_EXTRA_OPTS="--runner qemu --generate-provenance" \
157158
package/${{ matrix.package }}
158159
160+
- name: Output SLSA provenance
161+
run: |
162+
for pkg in packages/x86_64/*.attest.tar.gz; do
163+
dir="$(basename "${pkg}" .attest.tar.gz)"
164+
sudo mkdir -p packages/x86_64/"${dir}"
165+
sudo tar --xattrs --xattrs-include='*.*' -xf "${pkg}" -C packages/x86_64/"${dir}"
166+
jq . packages/x86_64/"${dir}"/"${dir}.attestation"
167+
done
168+
159169
- name: Run tests to verify xattrs with bubblewrap runner
160170
if: matrix.runner == 'bubblewrap' && matrix.package == 'fping'
161171
run: |

docs/cmd/pipeline-reference-gen/main.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,7 @@ func parseFile(path string) (*config.Pipeline, error) {
110110
return out, nil
111111
}
112112

113-
var (
114-
regex = regexp.MustCompile(`(?s)<!-- start:pipeline-reference-gen -->\n(.*?)<!-- end:pipeline-reference-gen -->`)
115-
)
113+
var regex = regexp.MustCompile(`(?s)<!-- start:pipeline-reference-gen -->\n(.*?)<!-- end:pipeline-reference-gen -->`)
116114

117115
func writeFile(path string, doc []*PipelineDoc) error {
118116
out := new(bytes.Buffer)

docs/md/melange_build.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ melange build [flags]
4545
--empty-workspace whether the build workspace should be empty
4646
--env-file string file to use for preloaded environment variables
4747
--generate-index whether to generate APKINDEX.tar.gz (default true)
48+
--generate-provenance generate SLSA provenance for builds (included in a separate .attest.tar.gz file next to the APK)
4849
--git-commit string commit hash of the git repository containing the build config file (defaults to detecting HEAD)
4950
--git-repo-url string URL of the git repository containing the build config file (defaults to detecting from configured git remotes)
5051
-h, --help help for build

go.mod

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module chainguard.dev/melange
33
go 1.24.0
44

55
require (
6-
chainguard.dev/apko v0.27.9
6+
chainguard.dev/apko v0.27.10-0.20250623150342-bfcb016b5959
77
github.com/chainguard-dev/clog v1.7.0
88
github.com/chainguard-dev/go-pkgconfig v0.0.0-20240404163941-6351b37b2a10
99
github.com/chainguard-dev/yam v0.2.17
@@ -18,6 +18,7 @@ require (
1818
github.com/google/go-github/v54 v54.0.0
1919
github.com/google/licenseclassifier/v2 v2.0.0
2020
github.com/ijt/goparsify v0.0.0-20221203142333-3a5276334b8d
21+
github.com/in-toto/attestation v1.1.2
2122
github.com/invopop/jsonschema v0.13.0
2223
github.com/joho/godotenv v1.5.1
2324
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
@@ -44,7 +45,7 @@ require (
4445
golang.org/x/sys v0.33.0
4546
golang.org/x/term v0.32.0
4647
golang.org/x/text v0.25.0
47-
golang.org/x/time v0.11.0
48+
golang.org/x/time v0.12.0
4849
gopkg.in/ini.v1 v1.67.0
4950
gopkg.in/yaml.v3 v3.0.1
5051
mvdan.cc/sh/v3 v3.11.0
@@ -53,6 +54,8 @@ require (
5354
)
5455

5556
require (
57+
github.com/fatih/color v1.18.0 // indirect
58+
github.com/google/martian/v3 v3.3.3 // indirect
5659
go.opencensus.io v0.24.0 // indirect
5760
golang.org/x/tools v0.33.0 // indirect
5861
k8s.io/klog/v2 v2.130.1 // indirect
@@ -167,8 +170,8 @@ require (
167170
google.golang.org/api v0.231.0 // indirect
168171
google.golang.org/genproto/googleapis/api v0.0.0-20250414145226-207652e42e2e // indirect
169172
google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197 // indirect
170-
google.golang.org/grpc v1.72.0 // indirect
171-
google.golang.org/protobuf v1.36.6 // indirect
173+
google.golang.org/grpc v1.72.1 // indirect
174+
google.golang.org/protobuf v1.36.6
172175
gopkg.in/warnings.v0 v0.1.2 // indirect
173176
k8s.io/apimachinery v0.32.3 // indirect
174177
k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect

go.sum

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
chainguard.dev/apko v0.27.9 h1:CUKaNEScd2II4DCr1S81UgdfARrbCbDPKb80bqBcs+k=
2-
chainguard.dev/apko v0.27.9/go.mod h1:50MFlnBotxCgObuO+jWUaJAdUWdm4uheMQl5HR5U3rQ=
1+
chainguard.dev/apko v0.27.10-0.20250623150342-bfcb016b5959 h1:wv3GTnLiRbMeJXRJEqa9YUNh5+6WymjwMCWQ7+S5w0k=
2+
chainguard.dev/apko v0.27.10-0.20250623150342-bfcb016b5959/go.mod h1:rEQCXJw6JlJa9E24lhSgpVtD8TsbRnY3BdKO8bJ7ML4=
33
chainguard.dev/go-grpc-kit v0.17.10 h1:uymMNUIBgbypeIurW25XaXvx3kbS0JpfKsJEMrS0abY=
44
chainguard.dev/go-grpc-kit v0.17.10/go.mod h1:RPyCEjTxWAxrODH5V4vJOLy/gHRjEjVF9dzWN+LmIvo=
55
chainguard.dev/sdk v0.1.32 h1:pZWN2irtvKMaAkgOpM3LRhuOrlpR3UGhg4F9LVWSyA8=
@@ -114,8 +114,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
114114
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
115115
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
116116
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
117-
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
118-
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
117+
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
118+
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
119119
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
120120
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
121121
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
@@ -189,8 +189,8 @@ github.com/google/go-replayers/httpreplay v1.2.0 h1:VM1wEyyjaoU53BwrOnaf9VhAyQQE
189189
github.com/google/go-replayers/httpreplay v1.2.0/go.mod h1:WahEFFZZ7a1P4VM1qEeHy+tME4bwyqPcwWbNlUI1Mcg=
190190
github.com/google/licenseclassifier/v2 v2.0.0 h1:1Y57HHILNf4m0ABuMVb6xk4vAJYEUO0gDxNpog0pyeA=
191191
github.com/google/licenseclassifier/v2 v2.0.0/go.mod h1:cOjbdH0kyC9R22sdQbYsFkto4NGCAc+ZSwbeThazEtM=
192-
github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
193-
github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
192+
github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc=
193+
github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0=
194194
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
195195
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
196196
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
@@ -216,6 +216,8 @@ github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISH
216216
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
217217
github.com/ijt/goparsify v0.0.0-20221203142333-3a5276334b8d h1:LFOmpWrSbtolg0YqYC9hQjj5WSLtRGb6aZ3JAugLfgg=
218218
github.com/ijt/goparsify v0.0.0-20221203142333-3a5276334b8d/go.mod h1:112TOyA+aruNSUBlyBWlKBdLVYTdhjiO2CKD0j/URSU=
219+
github.com/in-toto/attestation v1.1.2 h1:MBFn6lsMq6dptQZJBhalXTcWMb/aJy3V+GX3VYj/V1E=
220+
github.com/in-toto/attestation v1.1.2/go.mod h1:gYFddHMZj3DiQ0b62ltNi1Vj5rC879bTmBbrv9CRHpM=
219221
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
220222
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
221223
github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E=
@@ -502,8 +504,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
502504
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
503505
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
504506
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
505-
golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=
506-
golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
507+
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
508+
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
507509
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
508510
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
509511
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -541,8 +543,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
541543
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
542544
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
543545
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
544-
google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM=
545-
google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
546+
google.golang.org/grpc v1.72.1 h1:HR03wO6eyZ7lknl75XlxABNVLLFc2PAb6mHlYh756mA=
547+
google.golang.org/grpc v1.72.1/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
546548
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
547549
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
548550
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=

internal/gen-jsonschema/main.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ import (
1111
"github.com/invopop/jsonschema"
1212
)
1313

14-
var (
15-
outputFlag = flag.String("o", "", "output path")
16-
)
14+
var outputFlag = flag.String("o", "", "output path")
1715

1816
func main() {
1917
flag.Parse()
@@ -33,7 +31,7 @@ func main() {
3331
if err := enc.Encode(schema); err != nil {
3432
log.Fatal(err)
3533
}
36-
if err := os.WriteFile(*outputFlag, b.Bytes(), 0644); err != nil {
34+
if err := os.WriteFile(*outputFlag, b.Bytes(), 0o644); err != nil {
3735
log.Fatal(err)
3836
}
3937
}

pkg/build/build.go

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ import (
3737
"chainguard.dev/apko/pkg/apk/apk"
3838
apkofs "chainguard.dev/apko/pkg/apk/fs"
3939
apko_build "chainguard.dev/apko/pkg/build"
40-
"chainguard.dev/apko/pkg/tarfs"
4140
apko_types "chainguard.dev/apko/pkg/build/types"
4241
"chainguard.dev/apko/pkg/options"
4342
"chainguard.dev/apko/pkg/sbom/generator/spdx"
43+
"chainguard.dev/apko/pkg/tarfs"
4444
"github.com/chainguard-dev/clog"
4545
purl "github.com/package-url/packageurl-go"
4646
"github.com/yookoala/realpath"
@@ -103,7 +103,7 @@ type Build struct {
103103
WorkspaceDir string
104104
WorkspaceDirFS apkofs.FullFS
105105
WorkspaceIgnore string
106-
GuestFS apkofs.FullFS
106+
GuestFS apkofs.FullFS
107107
// Ordered directories where to find 'uses' pipelines.
108108
PipelineDirs []string
109109
SourceDir string
@@ -149,11 +149,17 @@ type Build struct {
149149
// how we get "build-time" SBOMs!
150150
SBOMGroup *SBOMGroup
151151

152+
Start time.Time
153+
End time.Time
154+
155+
// Opt-in SLSA provenance generation for initial rollout/testing
156+
GenerateProvenance bool
157+
152158
// The package resolver associated with this build.
153159
//
154160
// This is only applicable when there's a build context. It
155161
// is filled by buildGuest.
156-
PkgResolver *apk.PkgResolver
162+
PkgResolver *apk.PkgResolver
157163
}
158164

159165
func New(ctx context.Context, opts ...Option) (*Build, error) {
@@ -164,6 +170,7 @@ func New(ctx context.Context, opts ...Option) (*Build, error) {
164170
CacheDir: "./melange-cache/",
165171
Arch: apko_types.ParseArchitecture(runtime.GOARCH),
166172
GuestFS: tarfs.New(),
173+
Start: time.Now(),
167174
}
168175

169176
for _, opt := range opts {
@@ -317,7 +324,8 @@ func (b *Build) buildGuest(ctx context.Context, imgConfig apko_types.ImageConfig
317324
// Work around LockImageConfiguration assuming multi-arch.
318325
imgConfig.Archs = []apko_types.Architecture{b.Arch}
319326

320-
opts := []apko_build.Option{apko_build.WithImageConfiguration(imgConfig),
327+
opts := []apko_build.Option{
328+
apko_build.WithImageConfiguration(imgConfig),
321329
apko_build.WithArch(b.Arch),
322330
apko_build.WithExtraKeys(b.ExtraKeys),
323331
apko_build.WithExtraBuildRepos(b.ExtraRepos),
@@ -780,6 +788,18 @@ func (b *Build) BuildPackage(ctx context.Context) error {
780788
log.Infof("retrieving workspace from builder: %s", cfg.PodID)
781789
b.WorkspaceDirFS = apkofs.DirFS(b.WorkspaceDir)
782790

791+
// Retreive the os-release information from the runner
792+
releaseData, err := b.Runner.GetReleaseData(ctx, cfg)
793+
if err != nil {
794+
log.Warnf("failed to retrieve release data from runner, OS section will be unknown: %v", err)
795+
// If we can't retrieve the release data, we will use a default 'unknown' one similar to apko.
796+
releaseData = &apko_build.ReleaseData{
797+
ID: "unknown",
798+
Name: "melange-generated package",
799+
VersionID: "unknown",
800+
}
801+
}
802+
783803
// Apply xattrs to files in the new in-memory filesystem
784804
for path, attrs := range xattrs {
785805
for attr, data := range attrs {
@@ -871,14 +891,14 @@ func (b *Build) BuildPackage(ctx context.Context) error {
871891

872892
for _, sp := range b.Configuration.Subpackages {
873893
spSBOM := b.SBOMGroup.Document(sp.Name)
874-
spdxDoc := spSBOM.ToSPDX(ctx)
894+
spdxDoc := spSBOM.ToSPDX(ctx, releaseData)
875895
log.Infof("writing SBOM for subpackage %s", sp.Name)
876896
if err := b.writeSBOM(sp.Name, &spdxDoc); err != nil {
877897
return fmt.Errorf("writing SBOM for %s: %w", sp.Name, err)
878898
}
879899
}
880900

881-
spdxDoc := pSBOM.ToSPDX(ctx)
901+
spdxDoc := pSBOM.ToSPDX(ctx, releaseData)
882902
log.Infof("writing SBOM for %s", pkg.Name)
883903
if err := b.writeSBOM(pkg.Name, &spdxDoc); err != nil {
884904
return fmt.Errorf("writing SBOM for %s: %w", pkg.Name, err)
@@ -1105,6 +1125,7 @@ func (b *Build) buildWorkspaceConfig(ctx context.Context) *container.Config {
11051125
Timeout: b.Configuration.Package.Timeout,
11061126
RunAsUID: runAsUID(b.Configuration.Environment.Accounts),
11071127
RunAs: runAs(b.Configuration.Environment.Accounts),
1128+
TestRun: false,
11081129
}
11091130

11101131
if b.Configuration.Package.Resources != nil {

pkg/build/build_integration_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ import (
99
"context"
1010
"encoding/json"
1111
"fmt"
12+
"io"
1213
"os"
1314
"path/filepath"
1415
"regexp"
1516
"testing"
1617

17-
"io"
18-
1918
"chainguard.dev/apko/pkg/sbom/generator/spdx"
2019
"chainguard.dev/melange/pkg/container"
2120
"chainguard.dev/melange/pkg/container/docker"

pkg/build/build_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ package:
300300
}
301301

302302
f := filepath.Join(t.TempDir(), "config")
303-
if err := os.WriteFile(f, []byte(contents), 0755); err != nil {
303+
if err := os.WriteFile(f, []byte(contents), 0o755); err != nil {
304304
t.Fatal(err)
305305
}
306306

pkg/build/options.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,3 +414,11 @@ func WithIgnoreSignatures(ignore bool) Option {
414414
return nil
415415
}
416416
}
417+
418+
// WithGenerateProvenance sets whether to generate SLSA provenance during the build.
419+
func WithGenerateProvenance(provenance bool) Option {
420+
return func(b *Build) error {
421+
b.GenerateProvenance = provenance
422+
return nil
423+
}
424+
}

0 commit comments

Comments
 (0)