@@ -42,6 +42,7 @@ import (
42
42
ilogging "github.com/buildpacks/pack/internal/logging"
43
43
rg "github.com/buildpacks/pack/internal/registry"
44
44
"github.com/buildpacks/pack/internal/style"
45
+ "github.com/buildpacks/pack/project"
45
46
h "github.com/buildpacks/pack/testhelpers"
46
47
)
47
48
@@ -1230,6 +1231,36 @@ func testBuild(t *testing.T, when spec.G, it spec.S) {
1230
1231
{ID : "some-other-buildpack-id" , Version : "some-other-buildpack-version" },
1231
1232
})
1232
1233
})
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
+ })
1233
1264
})
1234
1265
1235
1266
when ("added buildpack's mixins are not satisfied" , func () {
@@ -1251,6 +1282,134 @@ func testBuild(t *testing.T, when spec.G, it spec.S) {
1251
1282
})
1252
1283
})
1253
1284
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
+
1254
1413
when ("buildpack is from a registry" , func () {
1255
1414
var (
1256
1415
fakePackage * fakes.Image
0 commit comments