Skip to content

Commit

Permalink
Only os and arch are truly required
Browse files Browse the repository at this point in the history
Signed-off-by: Natalie Arellano <narellano@vmware.com>
  • Loading branch information
natalieparellano committed Jul 9, 2024
1 parent 4a5aed6 commit c0dc4ac
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 9 deletions.
16 changes: 13 additions & 3 deletions platform/target_data.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package platform

import (
"fmt"
"runtime"

"github.com/buildpacks/imgutil"
Expand Down Expand Up @@ -120,21 +121,30 @@ func EnvVarsFor(d fsutil.Detector, tm files.TargetMetadata, logger log.Logger) [
logger.Info("target distro name/version labels not found, reading /etc/os-release file")
GetTargetOSFromFileSystem(d, &tm, logger)
}
// required
ret := []string{
"CNB_TARGET_OS=" + tm.OS,
"CNB_TARGET_ARCH=" + tm.Arch,
"CNB_TARGET_ARCH_VARIANT=" + tm.ArchVariant,
}
// optional
var distName, distVersion string
if tm.Distro != nil {
distName = tm.Distro.Name
distVersion = tm.Distro.Version
}
ret = append(ret, "CNB_TARGET_DISTRO_NAME="+distName)
ret = append(ret, "CNB_TARGET_DISTRO_VERSION="+distVersion)
ret = appendIfNotEmpty(ret, "CNB_TARGET_ARCH_VARIANT", tm.ArchVariant)
ret = appendIfNotEmpty(ret, "CNB_TARGET_DISTRO_NAME", distName)
ret = appendIfNotEmpty(ret, "CNB_TARGET_DISTRO_VERSION", distVersion)
return ret
}

func appendIfNotEmpty(env []string, key, val string) []string {
if val == "" {
return env
}
return append(env, fmt.Sprintf("%s=%s", key, val))
}

// TargetSatisfiedForRebase treats optional fields (ArchVariant and Distribution fields) as wildcards if empty, returns true if all populated fields match
func TargetSatisfiedForRebase(t files.TargetMetadata, appTargetMetadata files.TargetMetadata) bool {
if t.OS != appTargetMetadata.OS || t.Arch != appTargetMetadata.Arch {
Expand Down
28 changes: 22 additions & 6 deletions platform/target_data_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,12 +202,28 @@ func testTargetData(t *testing.T, when spec.G, it spec.S) {
observed := platform.EnvVarsFor(d, tm, &log.Logger{Handler: memory.New()})
h.AssertContains(t, observed, "CNB_TARGET_ARCH="+tm.Arch)
h.AssertContains(t, observed, "CNB_TARGET_OS="+tm.OS)
// note: per the spec only the ID field is optional, so I guess the others should always be set: https://github.com/buildpacks/rfcs/blob/main/text/0096-remove-stacks-mixins.md#runtime-metadata
// the empty ones:
h.AssertContains(t, observed, "CNB_TARGET_ARCH_VARIANT=")
h.AssertContains(t, observed, "CNB_TARGET_DISTRO_NAME=")
h.AssertContains(t, observed, "CNB_TARGET_DISTRO_VERSION=")
h.AssertEq(t, len(observed), 5)
h.AssertEq(t, len(observed), 2)
})

when("optional vars are empty", func() {
it("omits them", func() {
tm := files.TargetMetadata{
// required
OS: "linux",
Arch: "pentium",
// optional
ArchVariant: "",
Distro: &files.OSDistro{Name: "nix", Version: ""},
ID: "",
}
d := &mockDetector{
contents: "this is just test contents really",
t: t,
HasFile: false,
}
observed := platform.EnvVarsFor(d, tm, &log.Logger{Handler: memory.New()})
h.AssertEq(t, len(observed), 3)
})
})
})

Expand Down

0 comments on commit c0dc4ac

Please sign in to comment.