Skip to content

Commit

Permalink
Generate label-based BOM for all API versions
Browse files Browse the repository at this point in the history
Starting with lifecycle 0.13.3, it is permitted to have both the old style label-based BOM information and the new style layer-based BOM information. If the buildpack API is 0.6 or older, label-based BOMs only is OK. If the buildpack API is 0.7, you may have both label-based BOM and layer-based BOM or just layer-based BOM. It is permitted to have just label-based BOM, however, that will generate a warning from the lifecycle.

The libpak library was adjusted to support this. This change updates to remove unnecessary if checks and updates tests to pass.

Signed-off-by: Daniel Mikusa <[email protected]>
  • Loading branch information
Daniel Mikusa committed Feb 8, 2022
1 parent 68eca9d commit 5be5c1c
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 44 deletions.
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ require (
github.com/buildpacks/libcnb v1.25.5
github.com/heroku/color v0.0.6
github.com/onsi/gomega v1.18.1
github.com/paketo-buildpacks/libjvm v1.34.0
github.com/paketo-buildpacks/libpak v1.57.1
github.com/paketo-buildpacks/libjvm v1.35.0
github.com/paketo-buildpacks/libpak v1.58.0
github.com/pavel-v-chernykh/keystore-go v2.1.0+incompatible
github.com/sclevine/spec v1.4.0
github.com/stretchr/testify v1.7.0
Expand Down
29 changes: 12 additions & 17 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU=
github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/buildpacks/libcnb v1.25.2/go.mod h1:XX0+zHW8CNLNwiiwowgydAgWWfyDt8Lj1NcuWtkkBJQ=
github.com/buildpacks/libcnb v1.25.5 h1:D8UoXv39+0jkG4M+u/pfxYjLWZMOQv1TH6dZDRFpVsg=
github.com/buildpacks/libcnb v1.25.5/go.mod h1:KUVN17jE9c+iLqz8FHwfYyCEossLkKEbz1ixPYqwFNI=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
Expand Down Expand Up @@ -41,16 +39,14 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.11 h1:nQ+aFkoE2TMGc0b68U2OKSexC+eq46+XwZzWXHRmPYs=
github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk=
github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
github.com/miekg/dns v1.1.45 h1:g5fRIhm9nx7g8osrAvgb16QJfmyMsyOCb+J7LSv+Qzk=
github.com/miekg/dns v1.1.45/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
github.com/miekg/dns v1.1.46 h1:uzwpxRtSVxtcIZmz/4Uz6/Rn7G11DvsaslXoy5LxQio=
github.com/miekg/dns v1.1.46/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4=
github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
Expand All @@ -66,14 +62,14 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
github.com/paketo-buildpacks/libjvm v1.34.0 h1:VLxEDWnCUgeqlvbO7DOVNCHKbCCAA8pVdTxt7FEqe7k=
github.com/paketo-buildpacks/libjvm v1.34.0/go.mod h1:RmaTffz3a7tut2mfK6K8BVBdbswmTuxi5Lkpi9jYjK0=
github.com/paketo-buildpacks/libpak v1.57.1 h1:Rqq25boRl95WWW10Au8/krEQqZyU8KT4AZocTQxCwBA=
github.com/paketo-buildpacks/libpak v1.57.1/go.mod h1:RqGprj975LOMoH00DjbHcOabU7fOpyVVtOTI+3jhWrU=
github.com/paketo-buildpacks/libjvm v1.35.0 h1:sWIt5sSTDYsh3gwKGKdlLjpvZQDzdemWLTqNcEQUiRM=
github.com/paketo-buildpacks/libjvm v1.35.0/go.mod h1:pPfaz2cjwWKfUDrC1oYYNp1jNKm9a+gEVmUNH2vU0h0=
github.com/paketo-buildpacks/libpak v1.58.0 h1:tId115h3SZn8IY8DQxRF36PwhMob4G9TVkWWDTD9MKY=
github.com/paketo-buildpacks/libpak v1.58.0/go.mod h1:qxRaH+WrJYWEb4FZqYkMR9mdyNEsrNOq7bE7O4dXH1k=
github.com/pavel-v-chernykh/keystore-go v2.1.0+incompatible h1:Jd6xfriVlJ6hWPvYOE0Ni0QWcNTLRehfGPFxr3eSL80=
github.com/pavel-v-chernykh/keystore-go v2.1.0+incompatible/go.mod h1:xlUlxe/2ItGlQyMTstqeDv9r3U4obH7xYd26TbDQutY=
github.com/pavel-v-chernykh/keystore-go/v4 v4.2.0 h1:SeA1Gyj3Uxl0vuNFYxN5RaIZ2AMPfCvW4HB2Ki0bYT8=
github.com/pavel-v-chernykh/keystore-go/v4 v4.2.0/go.mod h1:VxOBKEAW8/EJjil9qwfvVDSljDW0DCoZMD4ezsq9n8U=
github.com/pavel-v-chernykh/keystore-go/v4 v4.3.0 h1:TVckDDIKzWo9/cPdsvyikdmnnKIPeWgnGoekhQM5zBc=
github.com/pavel-v-chernykh/keystore-go/v4 v4.3.0/go.mod h1:VxOBKEAW8/EJjil9qwfvVDSljDW0DCoZMD4ezsq9n8U=
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand Down Expand Up @@ -127,10 +123,9 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220207234003-57398862261d h1:Bm7BNOQt2Qv7ZqysjeLjgCBanX+88Z/OtdvsrEv1Djc=
golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
Expand Down
8 changes: 2 additions & 6 deletions graalvm/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,9 +147,7 @@ func (b Build) Build(context libcnb.BuildContext) (libcnb.BuildResult, error) {

jre.Logger = b.Logger
result.Layers = append(result.Layers, jre)
if be.Name != "" {
result.BOM.Entries = append(result.BOM.Entries, be)
}
result.BOM.Entries = append(result.BOM.Entries, be)

if libjvm.IsLaunchContribution(jrePlanEntry.Metadata) {
helpers := []string{"active-processor-count", "java-opts", "jvm-heap", "link-local-dns", "memory-calculator",
Expand All @@ -167,9 +165,7 @@ func (b Build) Build(context libcnb.BuildContext) (libcnb.BuildResult, error) {
h, be := libpak.NewHelperLayer(context.Buildpack, helpers...)
h.Logger = b.Logger
result.Layers = append(result.Layers, h)
if be.Name != "" {
result.BOM.Entries = append(result.BOM.Entries, be)
}
result.BOM.Entries = append(result.BOM.Entries, be)

jsp := libjvm.NewJavaSecurityProperties(context.Buildpack.Info)
jsp.Logger = b.Logger
Expand Down
35 changes: 30 additions & 5 deletions graalvm/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,11 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
Expect(result.Layers[1].Name()).To(Equal("helper"))
Expect(result.Layers[2].Name()).To(Equal("java-security-properties"))

Expect(result.BOM.Entries).To(HaveLen(0))
Expect(result.BOM.Entries).To(HaveLen(2))
Expect(result.BOM.Entries[0].Name).To(Equal("jre"))
Expect(result.BOM.Entries[0].Launch).To(BeTrue())
Expect(result.BOM.Entries[1].Name).To(Equal("helper"))
Expect(result.BOM.Entries[1].Launch).To(BeTrue())
})

it("contributes security-providers-classpath-8 before Java 9", func() {
Expand Down Expand Up @@ -231,7 +235,11 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
Expect(result.Layers[0].Name()).To(Equal("jdk"))
Expect(result.Layers[0].(libjvm.JRE).LayerContributor.Dependency.ID).To(Equal("jdk"))

Expect(result.BOM.Entries).To(HaveLen(0))
Expect(result.BOM.Entries).To(HaveLen(2))
Expect(result.BOM.Entries[0].Name).To(Equal("jdk"))
Expect(result.BOM.Entries[0].Launch).To(BeTrue())
Expect(result.BOM.Entries[1].Name).To(Equal("helper"))
Expect(result.BOM.Entries[1].Launch).To(BeTrue())
})

it("contributes JDK when no JRE and both a JDK and JRE are wanted for API <= 0.6", func() {
Expand Down Expand Up @@ -286,7 +294,12 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
Expect(result.Layers[0].Name()).To(Equal("jdk"))
Expect(result.Layers[0].(libjvm.JRE).LayerContributor.Dependency.ID).To(Equal("jdk"))

Expect(result.BOM.Entries).To(HaveLen(0))
Expect(result.BOM.Entries).To(HaveLen(2))
Expect(result.BOM.Entries[0].Name).To(Equal("jdk"))
Expect(result.BOM.Entries[0].Launch).To(BeTrue())
Expect(result.BOM.Entries[0].Build).To(BeTrue())
Expect(result.BOM.Entries[1].Name).To(Equal("helper"))
Expect(result.BOM.Entries[1].Launch).To(BeTrue())
})

context("$BP_JVM_VERSION", func() {
Expand Down Expand Up @@ -419,7 +432,13 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
Expect(result.Layers[0].Name()).To(Equal("jdk"))
Expect(result.Layers[0].(graalvm.JDK).NativeImageDependency).NotTo(BeNil())

Expect(result.BOM.Entries).To(HaveLen(0))
Expect(result.BOM.Entries).To(HaveLen(2))
Expect(result.BOM.Entries[0].Name).To(Equal("jdk"))
Expect(result.BOM.Entries[0].Launch).To(BeFalse())
Expect(result.BOM.Entries[0].Build).To(BeTrue())
Expect(result.BOM.Entries[1].Name).To(Equal("native-image-svm"))
Expect(result.BOM.Entries[1].Launch).To(BeTrue())
Expect(result.BOM.Entries[1].Build).To(BeTrue())
})
})

Expand Down Expand Up @@ -565,8 +584,14 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
Expect(result.Layers[0].(graalvm.JDK).JDKDependency.ID).To(Equal("jdk"))
Expect(result.Layers[1].(libjvm.JRE).LayerContributor.Dependency.ID).To(Equal("jre"))

Expect(result.BOM.Entries).To(HaveLen(0))
Expect(result.BOM.Entries).To(HaveLen(3))
Expect(result.BOM.Entries[0].Name).To(Equal("jdk"))
Expect(result.BOM.Entries[0].Launch).To(BeFalse())
Expect(result.BOM.Entries[0].Build).To(BeTrue())

Expect(result.BOM.Entries[1].Name).To(Equal("jre"))
Expect(result.BOM.Entries[1].Launch).To(BeTrue())
Expect(result.BOM.Entries[1].Build).To(BeTrue())
})
})
}
24 changes: 10 additions & 14 deletions graalvm/jdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,22 +74,18 @@ func NewJDK(jdkDependency libpak.BuildpackDependency, nativeImageDependency *lib
}

var bomEntries []libcnb.BOMEntry
if jdkDependency.PURL == "" && len(jdkDependency.CPEs) == 0 {
entry := jdkDependency.AsBOMEntry()
entry.Metadata["layer"] = j.Name()
entry.Build = true
bomEntries = append(bomEntries, entry)
}
entry := jdkDependency.AsBOMEntry()
entry.Metadata["layer"] = j.Name()
entry.Build = true
bomEntries = append(bomEntries, entry)

if nativeImageDependency != nil {
if jdkDependency.PURL == "" && len(jdkDependency.CPEs) == 0 {
entry := nativeImageDependency.AsBOMEntry()
if entry.Name != "" {
entry.Metadata["layer"] = j.Name()
entry.Launch = true
entry.Build = true
bomEntries = append(bomEntries, entry)
}
entry := nativeImageDependency.AsBOMEntry()
if entry.Name != "" {
entry.Metadata["layer"] = j.Name()
entry.Launch = true
entry.Build = true
bomEntries = append(bomEntries, entry)
}
}

Expand Down

0 comments on commit 5be5c1c

Please sign in to comment.