Skip to content

Commit d8b8343

Browse files
author
Matthew Fisher
committed
fix(controller): revert to start proctype for buildpack images
1 parent 211361b commit d8b8343

2 files changed

Lines changed: 23 additions & 3 deletions

File tree

controller/api/models.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,8 +405,13 @@ def _get_command(self):
405405
if self.type == 'cmd':
406406
return ''
407407
try:
408-
# ensure they cannot break out and run commands on the host
409-
return "bash -c '{}'".format(self.release.build.procfile[self.type])
408+
# if this is not procfile-based app, ensure they cannot break out
409+
# and run arbitrary commands on the host
410+
# FIXME: remove slugrunner's hardcoded entrypoint
411+
if self.release.build.dockerfile or not self.release.build.sha:
412+
return "bash -c '{}'".format(self.release.build.procfile[self.type])
413+
else:
414+
return 'start {}'.format(self.type)
410415
# if the key is not present or if a parent attribute is None
411416
except (KeyError, TypeError):
412417
return 'start {}'.format(self.type)

controller/api/tests/test_container.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,11 +444,14 @@ def test_command_good(self):
444444
app_id = response.data['id']
445445
app = App.objects.get(id=app_id)
446446
user = User.objects.get(username='autotest')
447+
# Heroku Buildpack app
447448
build = Build.objects.create(owner=user,
448449
app=app,
449450
image="qwerty",
450451
procfile={'web': 'node server.js',
451-
'worker': 'node worker.js'})
452+
'worker': 'node worker.js'},
453+
sha='african-swallow',
454+
dockerfile='')
452455
# create an initial release
453456
release = Release.objects.create(version=2,
454457
owner=user,
@@ -461,10 +464,22 @@ def test_command_good(self):
461464
release=release,
462465
type='web',
463466
num=1)
467+
# use `start web` for backwards compatibility with slugrunner
468+
self.assertEqual(c._command, 'start web')
469+
c.type = 'worker'
470+
self.assertEqual(c._command, 'start worker')
471+
# switch to docker image app
472+
build.sha = None
473+
c.type = 'web'
474+
self.assertEqual(c._command, "bash -c 'node server.js'")
475+
# switch to dockerfile app
476+
build.sha = 'european-swallow'
477+
build.dockerfile = 'dockerdockerdocker'
464478
self.assertEqual(c._command, "bash -c 'node server.js'")
465479
c.type = 'worker'
466480
self.assertEqual(c._command, "bash -c 'node worker.js'")
467481
c.release.build.procfile = None
482+
# for backwards compatibility if no Procfile is supplied
468483
self.assertEqual(c._command, 'start worker')
469484
c.type = 'cmd'
470485
self.assertEqual(c._command, '')

0 commit comments

Comments
 (0)