@@ -42,6 +42,7 @@ import (
4242 ilogging "github.com/buildpacks/pack/internal/logging"
4343 rg "github.com/buildpacks/pack/internal/registry"
4444 "github.com/buildpacks/pack/internal/style"
45+ "github.com/buildpacks/pack/project"
4546 h "github.com/buildpacks/pack/testhelpers"
4647)
4748
@@ -1230,6 +1231,36 @@ func testBuild(t *testing.T, when spec.G, it spec.S) {
12301231 {ID : "some-other-buildpack-id" , Version : "some-other-buildpack-version" },
12311232 })
12321233 })
1234+
1235+ it ("adds the buildpack from the project descriptor" , func () {
1236+ err := subject .Build (context .TODO (), BuildOptions {
1237+ Image : "some/app" ,
1238+ Builder : defaultBuilderName ,
1239+ ClearCache : true ,
1240+ ProjectDescriptor : project.Descriptor {
1241+ Build : project.Build {
1242+ Buildpacks : []project.Buildpack {{
1243+ URI : server .URL (),
1244+ }},
1245+ },
1246+ },
1247+ })
1248+
1249+ h .AssertNil (t , err )
1250+ h .AssertEq (t , fakeLifecycle .Opts .Builder .Name (), defaultBuilderImage .Name ())
1251+ bldr , err := builder .FromImage (defaultBuilderImage )
1252+ h .AssertNil (t , err )
1253+ h .AssertEq (t , bldr .Order (), dist.Order {
1254+ {Group : []dist.BuildpackRef {
1255+ {BuildpackInfo : dist.BuildpackInfo {ID : "some-other-buildpack-id" , Version : "some-other-buildpack-version" }},
1256+ }},
1257+ })
1258+ h .AssertEq (t , bldr .Buildpacks (), []dist.BuildpackInfo {
1259+ {ID : "buildpack.1.id" , Version : "buildpack.1.version" },
1260+ {ID : "buildpack.2.id" , Version : "buildpack.2.version" },
1261+ {ID : "some-other-buildpack-id" , Version : "some-other-buildpack-version" },
1262+ })
1263+ })
12331264 })
12341265
12351266 when ("added buildpack's mixins are not satisfied" , func () {
@@ -1251,6 +1282,134 @@ func testBuild(t *testing.T, when spec.G, it spec.S) {
12511282 })
12521283 })
12531284
1285+ when ("buildpack is inline" , func () {
1286+ var (
1287+ tmpDir string
1288+ )
1289+
1290+ it .Before (func () {
1291+ var err error
1292+ tmpDir , err = ioutil .TempDir ("" , "project-desc" )
1293+ h .AssertNil (t , err )
1294+ })
1295+
1296+ it .After (func () {
1297+ err := os .RemoveAll (tmpDir )
1298+ h .AssertNil (t , err )
1299+ })
1300+
1301+ it ("all buildpacks are added to ephemeral builder" , func () {
1302+ err := subject .Build (context .TODO (), BuildOptions {
1303+ Image : "some/app" ,
1304+ Builder : defaultBuilderName ,
1305+ ClearCache : true ,
1306+ ProjectDescriptor : project.Descriptor {
1307+ Build : project.Build {
1308+ Buildpacks : []project.Buildpack {{
1309+ ID : "my/inline" ,
1310+ Script : project.Script {
1311+ API : "0.4" ,
1312+ Inline : "touch foo.txt" ,
1313+ },
1314+ }},
1315+ },
1316+ },
1317+ ProjectDescriptorBaseDir : tmpDir ,
1318+ })
1319+
1320+ h .AssertNil (t , err )
1321+ h .AssertEq (t , fakeLifecycle .Opts .Builder .Name (), defaultBuilderImage .Name ())
1322+ bldr , err := builder .FromImage (defaultBuilderImage )
1323+ h .AssertNil (t , err )
1324+ h .AssertEq (t , bldr .Order (), dist.Order {
1325+ {Group : []dist.BuildpackRef {
1326+ {BuildpackInfo : dist.BuildpackInfo {ID : "my/inline" , Version : "0.0.0" }},
1327+ }},
1328+ })
1329+ h .AssertEq (t , bldr .Buildpacks (), []dist.BuildpackInfo {
1330+ {ID : "buildpack.1.id" , Version : "buildpack.1.version" },
1331+ {ID : "buildpack.2.id" , Version : "buildpack.2.version" },
1332+ {ID : "my/inline" , Version : "0.0.0" },
1333+ })
1334+ })
1335+
1336+ it ("fails if there is no API" , func () {
1337+ err := subject .Build (context .TODO (), BuildOptions {
1338+ Image : "some/app" ,
1339+ Builder : defaultBuilderName ,
1340+ ClearCache : true ,
1341+ ProjectDescriptor : project.Descriptor {
1342+ Build : project.Build {
1343+ Buildpacks : []project.Buildpack {{
1344+ ID : "my/inline" ,
1345+ Script : project.Script {
1346+ Inline : "touch foo.txt" ,
1347+ },
1348+ }},
1349+ },
1350+ },
1351+ ProjectDescriptorBaseDir : tmpDir ,
1352+ })
1353+
1354+ h .AssertEq (t , "Missing API version for inline buildpack" , err .Error ())
1355+ })
1356+
1357+ it ("fails if there is no ID" , func () {
1358+ err := subject .Build (context .TODO (), BuildOptions {
1359+ Image : "some/app" ,
1360+ Builder : defaultBuilderName ,
1361+ ClearCache : true ,
1362+ ProjectDescriptor : project.Descriptor {
1363+ Build : project.Build {
1364+ Buildpacks : []project.Buildpack {{
1365+ Script : project.Script {
1366+ API : "0.4" ,
1367+ Inline : "touch foo.txt" ,
1368+ },
1369+ }},
1370+ },
1371+ },
1372+ ProjectDescriptorBaseDir : tmpDir ,
1373+ })
1374+
1375+ h .AssertEq (t , "Invalid buildpack defined in project descriptor" , err .Error ())
1376+ })
1377+
1378+ it ("ignores script if there is an id and version" , func () {
1379+ err := subject .Build (context .TODO (), BuildOptions {
1380+ Image : "some/app" ,
1381+ Builder : defaultBuilderName ,
1382+ ClearCache : true ,
1383+ ProjectDescriptor : project.Descriptor {
1384+ Build : project.Build {
1385+ Buildpacks : []project.Buildpack {{
1386+ ID : "buildpack.1.id" ,
1387+ Version : "buildpack.1.version" ,
1388+ Script : project.Script {
1389+ Inline : "touch foo.txt" ,
1390+ },
1391+ }},
1392+ },
1393+ },
1394+ ProjectDescriptorBaseDir : tmpDir ,
1395+ })
1396+
1397+ h .AssertNil (t , err )
1398+ h .AssertEq (t , fakeLifecycle .Opts .Builder .Name (), defaultBuilderImage .Name ())
1399+ bldr , err := builder .FromImage (defaultBuilderImage )
1400+ h .AssertNil (t , err )
1401+ h .AssertEq (t , bldr .Order (), dist.Order {
1402+ {Group : []dist.BuildpackRef {
1403+ {BuildpackInfo : dist.BuildpackInfo {ID : "buildpack.1.id" , Version : "buildpack.1.version" }},
1404+ }},
1405+ })
1406+ h .AssertEq (t , bldr .Buildpacks (), []dist.BuildpackInfo {
1407+ {ID : "buildpack.1.id" , Version : "buildpack.1.version" },
1408+ {ID : "buildpack.2.id" , Version : "buildpack.2.version" },
1409+ })
1410+ })
1411+ })
1412+
12541413 when ("buildpack is from a registry" , func () {
12551414 var (
12561415 fakePackage * fakes.Image
0 commit comments