If a buildpack does not specify targets, but DOES specify stack with ID io.buildpacks.stacks.bionic, only translate that to a target if the buildpack is on a newer Buildpack API (where stacks are deprecated, and we expect targets) OR if the buildpack only ever declared one stack. When multiple stacks are declared, specifying only one target actually reduces the number of builds that can succeed. Older Buildpack APIs don't actually specify stack -> target translation so we should do the thing that will work in the maximum number of builds.
If a buildpack fails to specify os/arch (but specifies distro) still check targets
If the run image fails to specify os/arch (this should not happen actually as we will fail during analyze) still check targets
Fix typo in buildpack descriptor struct ~so that we actually get stack information~ (we still see it because of the struct field name)
If we get distro information from /etc/os-release, persist this information to later invocations so that the log message printed when errors are encountered will be accurate
Don't override inner i in loop (this should not actually affect the outer loop but is confusing)
Release notes
If a buildpack does not specify targets, but DOES specify stack with ID io.buildpacks.stacks.bionic, the lifecycle will only translate that to a target if the buildpack is on a newer Buildpack API (where stacks are deprecated, and we expect targets) OR if the buildpack only ever declared one stack
The detector, when checking target compatibility, will still perform the check if buildpacks fail to declare os/arch information in targets
Summary
i
in loop (this should not actually affect the outer loop but is confusing)Release notes
detector
, when checking target compatibility, will still perform the check if buildpacks fail to declare os/arch information in targets