Skip to content

Commit 3eefac2

Browse files
committed
feat(cnb): support for .cnb files and directories in dependencies
Adds support for .cnb files and directories for dependencies, leaving them untouched during the update process. Supports cnb files from a local paths and from a http/https server alike. Extracted some of the check code (for suffix/prefix) into the uri file to be able to reuse it and make it a bit more readable (hopefully). LBNL, update the parser to keep http/https scheme around so the uri in the dependencies doesn't get the scheme stripped. Resolves: #358
1 parent 8abe680 commit 3eefac2

7 files changed

Lines changed: 536 additions & 86 deletions

File tree

commands/update_buildpack.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,16 @@ func updateBuildpackRun(flags updateBuildpackFlags) error {
7070
buildpackageID string
7171
image internal.Image
7272
err error
73-
oldVersion string
7473
)
7574

76-
if strings.HasPrefix(dependency.URI, "urn:cnb:registry") {
75+
// Skip static URIs (local paths, HTTP URLs, etc.) - only update dynamic refs
76+
if internal.IsStaticURI(dependency) {
77+
continue
78+
}
79+
80+
// Now we have either CNB registry URIs or Docker image references (bare)
81+
if internal.IsCnbRegistry(dependency) {
82+
oldVersion := ""
7783
if flags.patchOnly {
7884
oldVersion = strings.Split(dependency.URI, "@")[1]
7985
}
@@ -87,6 +93,7 @@ func updateBuildpackRun(flags updateBuildpackFlags) error {
8793
buildpackageID = image.Path
8894

8995
} else {
96+
oldVersion := ""
9097
if flags.patchOnly {
9198
oldVersionSlice := strings.Split(dependency.URI, ":")
9299
oldVersion = oldVersionSlice[len(oldVersionSlice)-1]
@@ -119,13 +126,11 @@ func updateBuildpackRun(flags updateBuildpackFlags) error {
119126
}
120127
}
121128

122-
err = internal.OverwriteBuildpackConfig(flags.buildpackFile, bp)
123-
if err != nil {
129+
if err := internal.OverwriteBuildpackConfig(flags.buildpackFile, bp); err != nil {
124130
return err
125131
}
126132

127-
err = internal.OverwritePackageConfig(flags.packageFile, pkg)
128-
if err != nil {
133+
if err := internal.OverwritePackageConfig(flags.packageFile, pkg); err != nil {
129134
return err
130135
}
131136

go.mod

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
module github.com/paketo-buildpacks/jam/v2
22

3-
go 1.24.6
3+
go 1.25.3
44

55
require (
66
github.com/BurntSushi/toml v1.5.0
77
github.com/Masterminds/semver/v3 v3.4.0
88
github.com/anchore/syft v1.38.2
9-
github.com/buildpacks/pack v0.38.2
9+
github.com/buildpacks/pack v0.39.0
1010
github.com/cenkalti/backoff/v4 v4.3.0
1111
github.com/distribution/reference v0.6.0
1212
github.com/docker/cli v29.1.2+incompatible
1313
github.com/docker/docker v28.5.2+incompatible
1414
github.com/google/go-containerregistry v0.20.7
15-
github.com/moby/buildkit v0.26.2
15+
github.com/moby/buildkit v0.26.1
1616
github.com/moby/go-archive v0.1.0
1717
github.com/onsi/gomega v1.38.3
1818
github.com/opencontainers/go-digest v1.0.0
1919
github.com/paketo-buildpacks/occam v0.31.0
20-
github.com/paketo-buildpacks/packit/v2 v2.25.3
20+
github.com/paketo-buildpacks/packit/v2 v2.25.2
2121
github.com/pelletier/go-toml v1.9.5
2222
github.com/sclevine/spec v1.4.0
2323
github.com/spf13/cobra v1.10.2
@@ -28,7 +28,7 @@ require (
2828
cloud.google.com/go v0.116.0 // indirect
2929
cloud.google.com/go/auth v0.9.9 // indirect
3030
cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
31-
cloud.google.com/go/compute/metadata v0.7.0 // indirect
31+
cloud.google.com/go/compute/metadata v0.9.0 // indirect
3232
cloud.google.com/go/iam v1.2.2 // indirect
3333
cloud.google.com/go/storage v1.43.0 // indirect
3434
cyphar.com/go-pathrs v0.2.1 // indirect
@@ -75,25 +75,26 @@ require (
7575
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
7676
github.com/aquasecurity/go-pep440-version v0.0.1 // indirect
7777
github.com/aquasecurity/go-version v0.0.1 // indirect
78-
github.com/aws/aws-sdk-go-v2 v1.39.6 // indirect
78+
github.com/aws/aws-sdk-go-v2 v1.40.0 // indirect
7979
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.0 // indirect
80-
github.com/aws/aws-sdk-go-v2/config v1.31.17 // indirect
81-
github.com/aws/aws-sdk-go-v2/credentials v1.18.21 // indirect
82-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13 // indirect
83-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13 // indirect
84-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13 // indirect
80+
github.com/aws/aws-sdk-go-v2/config v1.32.0 // indirect
81+
github.com/aws/aws-sdk-go-v2/credentials v1.19.0 // indirect
82+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14 // indirect
83+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.14 // indirect
84+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14 // indirect
8585
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect
8686
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.4 // indirect
8787
github.com/aws/aws-sdk-go-v2/service/ecr v1.51.2 // indirect
8888
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.38.2 // indirect
8989
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 // indirect
9090
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.8.4 // indirect
91-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13 // indirect
91+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 // indirect
9292
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.4 // indirect
9393
github.com/aws/aws-sdk-go-v2/service/s3 v1.87.1 // indirect
94-
github.com/aws/aws-sdk-go-v2/service/sso v1.30.1 // indirect
95-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5 // indirect
96-
github.com/aws/aws-sdk-go-v2/service/sts v1.39.1 // indirect
94+
github.com/aws/aws-sdk-go-v2/service/signin v1.0.1 // indirect
95+
github.com/aws/aws-sdk-go-v2/service/sso v1.30.4 // indirect
96+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.8 // indirect
97+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.1 // indirect
9798
github.com/aws/smithy-go v1.23.2 // indirect
9899
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.11.0 // indirect
99100
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
@@ -106,8 +107,8 @@ require (
106107
github.com/bodgit/plumbing v1.3.0 // indirect
107108
github.com/bodgit/sevenzip v1.6.1 // indirect
108109
github.com/bodgit/windows v1.0.1 // indirect
109-
github.com/buildpacks/imgutil v0.0.0-20250626173435-7c19c278f3d2 // indirect
110-
github.com/buildpacks/lifecycle v0.20.11 // indirect
110+
github.com/buildpacks/imgutil v0.0.0-20250909162057-9db16db815e3 // indirect
111+
github.com/buildpacks/lifecycle v0.20.19 // indirect
111112
github.com/cespare/xxhash/v2 v2.3.0 // indirect
112113
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
113114
github.com/charmbracelet/lipgloss v1.1.0 // indirect
@@ -189,7 +190,7 @@ require (
189190
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
190191
github.com/hashicorp/go-getter v1.8.3 // indirect
191192
github.com/hashicorp/go-multierror v1.1.1 // indirect
192-
github.com/hashicorp/go-version v1.6.0 // indirect
193+
github.com/hashicorp/go-version v1.7.0 // indirect
193194
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
194195
github.com/hashicorp/hcl/v2 v2.24.0 // indirect
195196
github.com/henvic/httpretty v0.1.4 // indirect
@@ -205,7 +206,7 @@ require (
205206
github.com/kevinburke/ssh_config v1.2.0 // indirect
206207
github.com/klauspost/compress v1.18.1 // indirect
207208
github.com/klauspost/pgzip v1.2.6 // indirect
208-
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
209+
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
209210
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect
210211
github.com/magiconair/properties v1.8.10 // indirect
211212
github.com/mattn/go-colorable v0.1.14 // indirect
@@ -286,7 +287,7 @@ require (
286287
github.com/spdx/tools-golang v0.5.5 // indirect
287288
github.com/spf13/afero v1.15.0 // indirect
288289
github.com/spf13/cast v1.7.1 // indirect
289-
github.com/spf13/pflag v1.0.9 // indirect
290+
github.com/spf13/pflag v1.0.10 // indirect
290291
github.com/spf13/viper v1.20.0 // indirect
291292
github.com/stretchr/testify v1.11.1 // indirect
292293
github.com/subosito/gotenv v1.6.0 // indirect
@@ -322,8 +323,7 @@ require (
322323
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
323324
go.opentelemetry.io/otel/trace v1.38.0 // indirect
324325
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
325-
go.uber.org/atomic v1.10.0 // indirect
326-
go.uber.org/multierr v1.9.0 // indirect
326+
go.uber.org/multierr v1.11.0 // indirect
327327
go.yaml.in/yaml/v2 v2.4.2 // indirect
328328
go.yaml.in/yaml/v3 v3.0.4 // indirect
329329
go4.org v0.0.0-20230225012048-214862532bf5 // indirect
@@ -342,7 +342,7 @@ require (
342342
google.golang.org/api v0.203.0 // indirect
343343
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect
344344
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect
345-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
345+
google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda // indirect
346346
google.golang.org/grpc v1.76.0 // indirect
347347
google.golang.org/protobuf v1.36.10 // indirect
348348
gopkg.in/warnings.v0 v0.1.2 // indirect

0 commit comments

Comments
 (0)