From c8eb3e95ff667d8284bedadc127b35136197a461 Mon Sep 17 00:00:00 2001 From: Stephen Levine Date: Wed, 10 Jul 2019 21:43:53 -0400 Subject: [PATCH 1/6] build plan RFC wip Signed-off-by: Stephen Levine --- buildpack.md | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/buildpack.md b/buildpack.md index 9ae2f1bf..95216ca7 100644 --- a/buildpack.md +++ b/buildpack.md @@ -48,7 +48,8 @@ This is accomplished in two phases: 1. [buildpack.toml (TOML)](#buildpack.toml-toml) 2. [launch.toml (TOML)](#launch.toml-toml) 4. [Build Plan (TOML)](#build-plan-toml) - 5. [Layer Content Metadata (TOML)](#layer-content-metadata-toml) + 5. [Bill-of-Materials (TOML)](#bill-of-materials-toml) + 6. [Layer Content Metadata (TOML)](#layer-content-metadata-toml) ## Buildpack Interface @@ -74,7 +75,6 @@ Executable: `/bin/detect `, Working Dir: `` | Input | Description |-------------------|---------------------------------------------- | `$0` | Absolute path of `/bin/detect` executable -| `/dev/stdin` | Merged build plan from previous detections (TOML) | `/env/` | User-provided environment variables for build | `/#` | Platform-specific extensions @@ -93,7 +93,7 @@ Executable: `/bin/build `, Working Dir: `< | Input | Description |-------------------|---------------------------------------------- | `$0` | Absolute path of `/bin/build` executable -| `/dev/stdin` | Build plan from detection (TOML) +| `` | Relevant build plan entries from detection (TOML) | `/env/` | User-provided environment variables for build | `/#` | Platform-specific extensions @@ -102,7 +102,7 @@ Executable: `/bin/build `, Working Dir: `< | [exit status] | Success (0) or failure (1+) | `/dev/stdout` | Logs (info) | `/dev/stderr` | Logs (warnings, errors) -| `` | Claims of contributions to the build plan (TOML) +| `` | Refinements to the build plan (TOML) | `/launch.toml` | App metadata (see [launch.toml](#launch.toml-toml)) | `/store.toml` | Persistent metadata (see [store.toml](#store.toml-toml)) | `/.toml` | Layer metadata (see [Layer Content Metadata](#layer-content-metadata-toml)) @@ -123,7 +123,7 @@ Executable: `/bin/develop `, Working Dir: ` | Input | Description |-------------------|---------------------------------------------- | `$0` | Absolute path of `/bin/detect` executable -| `/dev/stdin` | Build plan from detection (TOML) +| `` | Build plan from detection (TOML) | `/env/` | User-provided environment variables for build | `/#` | Platform-specific extensions @@ -132,7 +132,7 @@ Executable: `/bin/develop `, Working Dir: ` | [exit status] | Success (0) or failure (1+) | `/dev/stdout` | Logs (info) | `/dev/stderr` | Logs (warnings, errors) -| `` | Claims of contributions to the build plan (TOML) +| `` | Refinements to the build plan (TOML) | `/launch.toml` | App metadata (see [launch.toml](#launch.toml-toml)) | `/store.toml` | Persistent metadata (see [store.toml](#store.toml-toml)) | `/.toml` | Layer metadata (see [Layer Content Metadata](#layer-content-metadata-toml)) @@ -808,17 +808,35 @@ The lifecycle MUST include all unmatched files in the app directory in any numbe ### Build Plan (TOML) ```toml -[] +[[provides]] +name = "" + +[provides.metadata] +# buildpack-specific data + +[[requires]] +name = "" version = "" -[.metadata] +[requires.metadata] # buildpack-specific data ``` -For a given dependency, the buildpack MAY specify: +### Bill-of-Materials (TOML) + +```toml +[[entries]] +name = "" +version = "" -- The dependency version. If a version range is needed, semver notation SHOULD be used to specify the range. -- The ID of the buildpack that will provide the dependency. +[[entries.buildpacks]] +id = "" +version = "" +optional = false + +[entries.metadata] +# buildpack-specific data +``` ### Layer Content Metadata (TOML) From 4526d1194abfe05ef0291ce68b1ca2b27ec9a1c1 Mon Sep 17 00:00:00 2001 From: Stephen Levine Date: Wed, 10 Jul 2019 23:35:28 -0400 Subject: [PATCH 2/6] wip Signed-off-by: Stephen Levine --- buildpack.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/buildpack.md b/buildpack.md index 95216ca7..037a19d5 100644 --- a/buildpack.md +++ b/buildpack.md @@ -245,12 +245,25 @@ The `/bin/detect` executable in each buildpack, when executed: - MAY read the app directory. - MAY read the detect environment as defined in the [Environment](#environment) section. - MAY emit error, warning, or debug messages to `stderr`. -- MAY receive a TOML-formatted [Build Plan](#build-plan-toml) on `stdin`. -- MAY contribute to the Build Plan by writing TOML to ``. +- MAY augment the Build Plan by writing TOML to ``. - MUST set an exit status code as described in the [Buildpack Interface](#buildpack-interface) section. -For each `/bin/detect`, the Build Plan received on `stdin` MUST be a map derived from the combined Build Plan contributions of all previous `/bin/detect` executables. -In order to make contributions to the Build Plan, a `/bin/detect` executable MUST write entries to `` as top-level, TOML-formatted objects. +In order to make contributions to the Build Plan, a `/bin/detect` executable MUST write entries to `` in two sections: `requires` and `provides`. +Each section MUST be a list of entries as described in the [Build Plan](#build-plan-toml) format section. + +For a given buildpack group, +- If a required buildpack provides a dependency that is not required, the group MUST fail to detect. +- If a required buildpack requires a dependency that is not provided, the group MUST fail to detect. +- If an optional buildpack provides a dependency that is not required, it MUST be excluded from the build phase and its requires and provides MUST be excluded from the build plan. +- If an optional buildpack requires a dependency that is not provided, it MUST be excluded from the build phase and its requires and provides MUST be excluded from the build plan. +- Multiple buildpacks MAY require or provide the same dependency. + +####### +- `/bin/build`'s build plan argument contains required dependencies that it provides. +- `/bin/build` may refine its build plan to contain additional dependency metadata. +- `/bin/build` may remove all entries for a dependency in its build plan to allow a subsequent buildpack to provide that dependency. +####### + The lifecycle MUST construct this map such that the top-level values from later buildpacks override the entire top-level values from earlier buildpacks. The lifecycle MUST NOT include any changes in this map that are contributed by optional buildpacks that returned non-zero exit statuses. From 235fec983ccd5b7cbcf583ff4153431e1cbf0555 Mon Sep 17 00:00:00 2001 From: Stephen Levine Date: Thu, 11 Jul 2019 00:58:36 -0400 Subject: [PATCH 3/6] Specify Contractual Build Plan RFC Signed-off-by: Stephen Levine --- buildpack.md | 100 +++++++++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 55 deletions(-) diff --git a/buildpack.md b/buildpack.md index 037a19d5..21f8bf44 100644 --- a/buildpack.md +++ b/buildpack.md @@ -83,7 +83,7 @@ Executable: `/bin/detect `, Working Dir: `` | [exit status] | Pass (0), fail (100), or error (1-99, 101+) | `/dev/stdout` | Logs (info) | `/dev/stderr` | Logs (warnings, errors) -| `` | Contributions to the the build plan (TOML) +| `` | Contributions to the the Build Plan (TOML) ### Build @@ -93,7 +93,7 @@ Executable: `/bin/build `, Working Dir: `< | Input | Description |-------------------|---------------------------------------------- | `$0` | Absolute path of `/bin/build` executable -| `` | Relevant build plan entries from detection (TOML) +| `` | Relevant Build Plan entries from detection (TOML) | `/env/` | User-provided environment variables for build | `/#` | Platform-specific extensions @@ -102,7 +102,7 @@ Executable: `/bin/build `, Working Dir: `< | [exit status] | Success (0) or failure (1+) | `/dev/stdout` | Logs (info) | `/dev/stderr` | Logs (warnings, errors) -| `` | Refinements to the build plan (TOML) +| `` | Refinements to the Build Plan (TOML) | `/launch.toml` | App metadata (see [launch.toml](#launch.toml-toml)) | `/store.toml` | Persistent metadata (see [store.toml](#store.toml-toml)) | `/.toml` | Layer metadata (see [Layer Content Metadata](#layer-content-metadata-toml)) @@ -132,7 +132,7 @@ Executable: `/bin/develop `, Working Dir: ` | [exit status] | Success (0) or failure (1+) | `/dev/stdout` | Logs (info) | `/dev/stderr` | Logs (warnings, errors) -| `` | Refinements to the build plan (TOML) +| `` | Refinements to the Build Plan (TOML) | `/launch.toml` | App metadata (see [launch.toml](#launch.toml-toml)) | `/store.toml` | Persistent metadata (see [store.toml](#store.toml-toml)) | `/.toml` | Layer metadata (see [Layer Content Metadata](#layer-content-metadata-toml)) @@ -249,28 +249,16 @@ The `/bin/detect` executable in each buildpack, when executed: - MUST set an exit status code as described in the [Buildpack Interface](#buildpack-interface) section. In order to make contributions to the Build Plan, a `/bin/detect` executable MUST write entries to `` in two sections: `requires` and `provides`. -Each section MUST be a list of entries as described in the [Build Plan](#build-plan-toml) format section. +Each section MUST be a list of entries formatted as described in the [Build Plan](#build-plan-toml) format section. For a given buildpack group, -- If a required buildpack provides a dependency that is not required, the group MUST fail to detect. -- If a required buildpack requires a dependency that is not provided, the group MUST fail to detect. -- If an optional buildpack provides a dependency that is not required, it MUST be excluded from the build phase and its requires and provides MUST be excluded from the build plan. -- If an optional buildpack requires a dependency that is not provided, it MUST be excluded from the build phase and its requires and provides MUST be excluded from the build plan. +- If a required buildpack provides a dependency that is not required by the same buildpack or a subsequent buildpack, the group MUST fail to detect. +- If a required buildpack requires a dependency that is not provided by the same buildpack or a previous buildpack, the group MUST fail to detect. +- If an optional buildpack provides a dependency that is not required by the same buildpack or a subsequent buildpack, it MUST be excluded from the build phase and its requires and provides MUST be excluded from the Build Plan. +- If an optional buildpack requires a dependency that is not provided by the same buildpack or a previous buildpack, it MUST be excluded from the build phase and its requires and provides MUST be excluded from the Build Plan. - Multiple buildpacks MAY require or provide the same dependency. -####### -- `/bin/build`'s build plan argument contains required dependencies that it provides. -- `/bin/build` may refine its build plan to contain additional dependency metadata. -- `/bin/build` may remove all entries for a dependency in its build plan to allow a subsequent buildpack to provide that dependency. -####### - - -The lifecycle MUST construct this map such that the top-level values from later buildpacks override the entire top-level values from earlier buildpacks. -The lifecycle MUST NOT include any changes in this map that are contributed by optional buildpacks that returned non-zero exit statuses. -The final Build Plan is the fully-merged map that includes the contributions of the final `/bin/detect` executable. - The lifecycle MAY execute each `/bin/detect` within a group in parallel. -Therefore, reading from `stdin` in `/bin/detect` MUST block until the previous `/bin/detect` finishes executing. The lifecycle MUST run `/bin/detect` for all buildpacks in a group in a container using common stack with a common set of mixins. The lifecycle MUST fail detection if any of those buildpacks does not list that stack in `buildpack.toml`. @@ -297,7 +285,7 @@ The lifecycle MUST skip analysis and proceed to the build phase if no such image **GIVEN:** - A reference to the previously created OCI image described above and -- The final ordered group of buildpacks determined during detection, +- The final ordered group of buildpacks determined during the detection phase, For each buildpack in the group, @@ -319,12 +307,13 @@ The purpose of build is to transform application source code into runnable artif During the build phase, typical buildpacks might: -1. Read the Build Plan to determine what dependencies to provide. +1. Read the Build Plan in `` to determine what dependencies to provide. 2. Provide the application with dependencies for launch in `/`. 3. Provide subsequent buildpacks with dependencies in `/`. 4. Compile the application source code into object code. 5. Remove application source code that is not necessary for launch. 6. Provide start command in `/launch.toml`. +7. Refine the Build Plan in `` with more exact metadata. The purpose of separate `/` directories is to: @@ -341,9 +330,9 @@ This is achieved by: ### Process **GIVEN:** -- The final ordered group of buildpacks determined during detection, +- The final ordered group of buildpacks determined during the detection phase, - A directory containing application source code, -- A Build Plan processed by previous `/bin/detect` and `/bin/build` executions, +- The Build Plan, - Any `/.toml` files placed on the filesystem during the analysis phase, - Any locally cached `/` directories, and - Bash version 3 or greater, @@ -362,16 +351,18 @@ For each buildpack in the group in order, the lifecycle MUST execute `/bin/build For each `/bin/build` executable in each buildpack, the lifecycle: -- MUST provide a Build Plan to `stdin` of `/bin/build` that is the final Build Plan from the detection phase without any top-level entries that were claimed by previous `/bin/build` executables during the build phase. -- MUST configure the build environment as defined in the [Environment](#environment) section. - MUST provide path arguments to `/bin/build` as defined in the [Buildpack Interface](#buildpack-interface) section. +- MUST configure the build environment as defined in the [Environment](#environment) section. +- MUST provide all `` entries that were required by any buildpack in the group during the detection phase with names matching the names that the buildpack provided. Correspondingly, each `/bin/build` executable: - MAY read or write to the `` directory. - MAY read the build environment as defined in the [Environment](#environment) section. -- MAY read a Build Plan from `stdin`. -- MAY claim entries in the Build Plan so that they are not received by subsequent `/bin/build` executables during the build phase. +- MAY read the Build Plan. +- MAY augment the Build Plan with more refined metadata. +- MAY remove entries with duplicate names in the Build Plan to refine the metadata. +- MAY remove all entries of the same name from the Build Plan to defer those entries to subsequent `/bin/build` executables. - MAY log output from the build process to `stdout`. - MAY emit error, warning, or debug messages to `stderr`. - MAY write a list of possible commands for launch to `/launch.toml`. @@ -384,22 +375,19 @@ Correspondingly, each `/bin/build` executable: - MAY name any new `/` directories without restrictions except those imposed by the filesystem. - SHOULD NOT use the `` directory to store provided dependencies. -#### Build Plan Entry Claims +#### Build Plan Entry Refinements + +A buildpack MAY refine entries in `` by replacing any entries of the same name with a single entry of that name. +The single entry MAY include additional metadata that could not be determined during the detection phase. -A buildpack MAY claim entries in the Build Plan by writing claims to `` that correspond to entries in the original Build Plan generated during the detection phase. -When an entry is claimed, the lifecycle MUST remove the entry from the Build Plan that is provided via `stdin` to subsequent `/bin/build` executables. +A buildpack MAY add extra entries to `` that do not correspond to entries added during the detection phase. -A buildpack MAY write replacement TOML metadata in the entry contents that refines the original contents of the Build Plan entry with information that could not be determined during the detection phase. -The lifecycle MUST NOT make this replacement TOML metadata accessible to subsequent buildpacks. +The lifecycle MUST NOT allow any entries with names matching those in `` at the end of `/bin/build` to be available in subsequent buildpacks' ``s. -A buildpack MAY write a Build Plan claim entry that does not correspond to an entry in the original Build Plan. -The lifecycle MUST NOT make this replacement TOML metadata accessible to subsequent buildpacks. +The lifecycle MUST defer any entries whose names were entirely removed from `` to the next buildpack that provided entries with those names during the detection phase. -When the build is complete, a BOM (bill-of-materials) MAY be generated for auditing purposes. -If generated, this BOM MUST contain -- All entries from the original Build Plan generated during the detection phase, -- All non-empty entry claims created by `/bin/build` executables such that they override corresponding the Build Plan entries from the detection phase, and -- All entry claims that do not correspond to original Build Plan entries. +When the build is complete, a BOM (Bill-of-Materials) MAY be generated for auditing purposes. +If generated, this BOM MUST contain all entries in each `` at the end of each `/bin/build` execution. #### Layers @@ -535,7 +523,7 @@ During the development setup phase, typical buildpacks might: ### Process **GIVEN:** -- The final ordered group of buildpacks determined during detection, +- The final ordered group of buildpacks determined during the detection phase, - A directory containing application source code, - A Build Plan processed by previous `/bin/detect` and `/bin/develop` executions, - The most recent local cached `//` directories from a development setup of a version of the application source code, and @@ -555,17 +543,19 @@ For each buildpack in the group in order, the lifecycle MUST execute `/bin/devel For each `/bin/develop` executable in each buildpack, the lifecycle: -- MUST provide a Build Plan to `stdin` of `/bin/develop` that is the final Build Plan from the detection phase without any top-level entries that were claimed by previous `/bin/develop` executables during the build phase. - MUST configure the build environment as defined in the [Environment](#environment) section. - MUST provide path arguments to `/bin/develop` as defined in the [Buildpack Interface](#buildpack-interface) section. +- MUST provide all `` entries that were required by any buildpack in the group during the detection phase with names matching the names that the buildpack provided. Correspondingly, each `/bin/develop` executable: - MAY read from the app directory. - MAY write files to the app directory in an idempotent manner. - MAY read the build environment as defined in the [Environment](#environment) section. -- MAY read a Build Plan from `stdin`. -- MAY claim entries in the Build Plan so that they are not received by subsequent `/bin/develop` executables during the development setup. +- MAY read the Build Plan. +- MAY augment the Build Plan with more refined metadata. +- MAY remove entries with duplicate names in the Build Plan to refine the metadata. +- MAY remove all entries of the same name from the Build Plan to defer those entries to subsequent `/bin/develop` executables. - MAY log output from the build process to `stdout`. - MAY emit error, warning, or debug messages to `stderr`. - MAY write a list of possible commands for launch to `/launch.toml`. @@ -578,19 +568,19 @@ Correspondingly, each `/bin/develop` executable: - SHOULD NOT use the `` directory to store provided dependencies. - SHOULD NOT specify any slices within `launch.toml`, as they are only used to generate OCI image layers. -#### Build Plan Entry Claims +#### Build Plan Entry Refinements + +A buildpack MAY refine entries in `` by replacing any entries of the same name with a single entry of that name. +The single entry MAY include additional metadata that could not be determined during the detection phase. + +A buildpack MAY add extra entries to `` that do not correspond to entries added during the detection phase. -In order to claim entries in the Build Plan, a buildpack MUST write an entry claim file `/` such that `` matches the name of the desired Build Plan entry. -When an entry is claimed, the lifecycle MUST remove the entry from the build plan that is provided via `stdin` to subsequent `/bin/develop` executables. +The lifecycle MUST NOT allow any entries with names matching those in `` at the end of `/bin/develop` to be available in subsequent buildpacks' ``s. -A buildpack MAY write replacement TOML metadata to an entry claim file that refines the original contents of the build plan entry with information that could not be determined during the detection phase. -However, the lifecycle MUST NOT make this replacement TOML metadata accessible to subsequent buildpacks. +The lifecycle MUST defer any entries whose names were entirely removed from `` to the next buildpack that provided entries with those names during the detection phase. -When the build is complete, a BOM (bill-of-materials) MAY be generated for auditing purposes. -If generated, this BOM MUST contain -- All entries from the original build plan generated during the detection phase and -- All non-empty entry claim files created by `/bin/develop` executables -such that the non-empty entry claims override the original build plan entries from the detection phase. +When the build is complete, a BOM (Bill-of-Materials) MAY be generated for auditing purposes. +If generated, this BOM MUST contain all entries in each `` at the end of each `/bin/develop` execution. #### Layers From 75932aa16df1aa4010852d3ffd75ec10f4306b81 Mon Sep 17 00:00:00 2001 From: Stephen Levine Date: Wed, 24 Jul 2019 19:38:08 -0400 Subject: [PATCH 4/6] Update to make RFC PR #15 viable Signed-off-by: Stephen Levine --- buildpack.md | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/buildpack.md b/buildpack.md index 21f8bf44..2e48b108 100644 --- a/buildpack.md +++ b/buildpack.md @@ -249,11 +249,17 @@ The `/bin/detect` executable in each buildpack, when executed: - MUST set an exit status code as described in the [Buildpack Interface](#buildpack-interface) section. In order to make contributions to the Build Plan, a `/bin/detect` executable MUST write entries to `` in two sections: `requires` and `provides`. -Each section MUST be a list of entries formatted as described in the [Build Plan](#build-plan-toml) format section. +Additionally, these two sections MAY be repeated together inside of an `or` array at the top-level. +Each `requires` and `provides` section MUST be a list of entries formatted as described in the [Build Plan](#build-plan-toml) format section. -For a given buildpack group, -- If a required buildpack provides a dependency that is not required by the same buildpack or a subsequent buildpack, the group MUST fail to detect. -- If a required buildpack requires a dependency that is not provided by the same buildpack or a previous buildpack, the group MUST fail to detect. +Each pairing of `requires` and `provides` sections (at the top level, or inside of an `or` array) is a potential Build Plan. + +For a given buildpack group, a sequence of trials is generated by selecting a single potential Build Plan from each buildpack in a left-to-right, depth-first order. +The group fails to detect if all trials fail to detect. + +For each trial, +- If a required buildpack provides a dependency that is not required by the same buildpack or a subsequent buildpack, the trial MUST fail to detect. +- If a required buildpack requires a dependency that is not provided by the same buildpack or a previous buildpack, the trial MUST fail to detect. - If an optional buildpack provides a dependency that is not required by the same buildpack or a subsequent buildpack, it MUST be excluded from the build phase and its requires and provides MUST be excluded from the Build Plan. - If an optional buildpack requires a dependency that is not provided by the same buildpack or a previous buildpack, it MUST be excluded from the build phase and its requires and provides MUST be excluded from the Build Plan. - Multiple buildpacks MAY require or provide the same dependency. @@ -823,6 +829,22 @@ version = "" [requires.metadata] # buildpack-specific data + +[[or]] + +[[or.provides]] +name = "" + +[or.provides.metadata] +# buildpack-specific data + +[[or.requires]] +name = "" +version = "" + +[or.requires.metadata] +# buildpack-specific data + ``` ### Bill-of-Materials (TOML) From 32dd22ec6df028eb2e88da66c208b38c72e51e54 Mon Sep 17 00:00:00 2001 From: Stephen Levine Date: Thu, 25 Jul 2019 21:14:02 -0400 Subject: [PATCH 5/6] Clarify optional buildpack excludes Signed-off-by: Stephen Levine --- buildpack.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildpack.md b/buildpack.md index 2e48b108..852c5b00 100644 --- a/buildpack.md +++ b/buildpack.md @@ -260,8 +260,8 @@ The group fails to detect if all trials fail to detect. For each trial, - If a required buildpack provides a dependency that is not required by the same buildpack or a subsequent buildpack, the trial MUST fail to detect. - If a required buildpack requires a dependency that is not provided by the same buildpack or a previous buildpack, the trial MUST fail to detect. -- If an optional buildpack provides a dependency that is not required by the same buildpack or a subsequent buildpack, it MUST be excluded from the build phase and its requires and provides MUST be excluded from the Build Plan. -- If an optional buildpack requires a dependency that is not provided by the same buildpack or a previous buildpack, it MUST be excluded from the build phase and its requires and provides MUST be excluded from the Build Plan. +- If an optional buildpack provides a dependency that is not required by the same buildpack or a subsequent buildpack, the optional buildpack MUST be excluded from the build phase and its requires and provides MUST be excluded from the Build Plan. +- If an optional buildpack requires a dependency that is not provided by the same buildpack or a previous buildpack, the optional buildpack MUST be excluded from the build phase and its requires and provides MUST be excluded from the Build Plan. - Multiple buildpacks MAY require or provide the same dependency. The lifecycle MAY execute each `/bin/detect` within a group in parallel. From 34d23b056b530c6f4da6487009e8707b7d5910ad Mon Sep 17 00:00:00 2001 From: Stephen Levine Date: Fri, 26 Jul 2019 12:38:04 -0400 Subject: [PATCH 6/6] Remove incorrect field from provides Signed-off-by: Stephen Levine --- buildpack.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/buildpack.md b/buildpack.md index 852c5b00..6064a485 100644 --- a/buildpack.md +++ b/buildpack.md @@ -820,9 +820,6 @@ The lifecycle MUST include all unmatched files in the app directory in any numbe [[provides]] name = "" -[provides.metadata] -# buildpack-specific data - [[requires]] name = "" version = "" @@ -835,9 +832,6 @@ version = "" [[or.provides]] name = "" -[or.provides.metadata] -# buildpack-specific data - [[or.requires]] name = "" version = ""