Skip to content

Commit 28af652

Browse files
author
Gabriel Monroy
committed
move image into build for better 12 factor compatibility
1 parent 2e0eb69 commit 28af652

4 files changed

Lines changed: 13 additions & 16 deletions

File tree

api/migrations/0001_initial.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ def forwards(self, orm):
166166
('app', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['api.App'])),
167167
('sha', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
168168
('output', self.gf('django.db.models.fields.TextField')(blank=True)),
169+
('image', self.gf('django.db.models.fields.CharField')(default=u'deis/buildstep', max_length=256)),
169170
('procfile', self.gf('api.fields.ProcfileField')(default=u'null', blank=True)),
170171
('dockerfile', self.gf('django.db.models.fields.TextField')(blank=True)),
171172
('config', self.gf('api.fields.EnvVarsField')(default=u'null', blank=True)),
@@ -187,7 +188,6 @@ def forwards(self, orm):
187188
('app', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['api.App'])),
188189
('version', self.gf('django.db.models.fields.PositiveIntegerField')()),
189190
('config', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['api.Config'])),
190-
('image', self.gf('django.db.models.fields.CharField')(default=u'deis/buildstep', max_length=256)),
191191
('build', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['api.Build'], null=True, blank=True)),
192192
))
193193
db.send_create_signal(u'api', ['Release'])
@@ -282,6 +282,7 @@ def backwards(self, orm):
282282
'config': ('api.fields.EnvVarsField', [], {'default': "u'null'", 'blank': 'True'}),
283283
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
284284
'dockerfile': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
285+
'image': ('django.db.models.fields.CharField', [], {'default': "u'deis/buildstep'", 'max_length': '256'}),
285286
'output': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
286287
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}),
287288
'procfile': ('api.fields.ProcfileField', [], {'default': "u'null'", 'blank': 'True'}),
@@ -391,7 +392,6 @@ def backwards(self, orm):
391392
'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['api.Build']", 'null': 'True', 'blank': 'True'}),
392393
'config': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['api.Config']"}),
393394
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
394-
'image': ('django.db.models.fields.CharField', [], {'default': "u'deis/buildstep'", 'max_length': '256'}),
395395
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}),
396396
'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
397397
'uuid': ('api.fields.UuidField', [], {'unique': 'True', 'max_length': '32', 'primary_key': 'True'}),

api/models.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -450,8 +450,9 @@ def flat(self):
450450
def build(self):
451451
config = Config.objects.create(
452452
version=1, owner=self.owner, app=self, values={})
453+
build = Build.objects.create(owner=self.owner, app=self)
453454
Release.objects.create(
454-
version=1, owner=self.owner, app=self, config=config)
455+
version=1, owner=self.owner, app=self, config=config, build=build)
455456
self.formation.publish()
456457
tasks.build_app.delay(self).wait()
457458

@@ -479,9 +480,8 @@ def calculate(self):
479480
release = releases[0]
480481
d['release']['version'] = release.version
481482
d['release']['config'] = release.config.values
482-
d['release']['image'] = release.image
483-
d['release']['build'] = {}
484-
if release.build:
483+
d['release']['build'] = {'image': release.build.image}
484+
if release.build.url:
485485
d['release']['build']['url'] = release.build.url
486486
d['release']['build']['procfile'] = release.build.procfile
487487
d['containers'] = {}
@@ -518,7 +518,7 @@ def run(self, command):
518518
docker_args = ' '.join(
519519
['-v',
520520
'/opt/deis/runtime/slugs/{app_id}-{version}/app:/app'.format(**locals()),
521-
release.image])
521+
release.build.image])
522522
base_cmd = "export HOME=/app; cd /app && for profile in " \
523523
"`find /app/.profile.d/*.sh -type f`; do . $profile; done"
524524
command = "/bin/sh -c '{base_cmd} && {command}'".format(**locals())
@@ -684,6 +684,8 @@ class Build(UuidAuditedModel):
684684
sha = models.CharField('SHA', max_length=255, blank=True)
685685
output = models.TextField(blank=True)
686686

687+
image = models.CharField(max_length=256, default='deis/buildstep')
688+
687689
procfile = fields.ProcfileField(blank=True)
688690
dockerfile = models.TextField(blank=True)
689691
config = fields.EnvVarsField(blank=True)
@@ -743,7 +745,6 @@ class Release(UuidAuditedModel):
743745
version = models.PositiveIntegerField()
744746

745747
config = models.ForeignKey('Config')
746-
image = models.CharField(max_length=256, default='deis/buildstep')
747748
build = models.ForeignKey('Build', blank=True, null=True)
748749

749750
class Meta:
@@ -770,7 +771,6 @@ def new_release(sender, **kwargs):
770771
"""
771772
user, app, = kwargs['user'], kwargs['app']
772773
last_release = Release.objects.filter(app=app).order_by('-created')[0]
773-
image = kwargs.get('image', last_release.image)
774774
config = kwargs.get('config', last_release.config)
775775
build = kwargs.get('build', last_release.build)
776776
# overwrite config with build.config if the keys don't exist
@@ -788,7 +788,7 @@ def new_release(sender, **kwargs):
788788
# create new release and auto-increment version
789789
new_version = last_release.version + 1
790790
release = Release.objects.create(
791-
owner=user, app=app, image=image, config=config,
791+
owner=user, app=app, config=config,
792792
build=build, version=new_version)
793793
# converge the application
794794
app.converge()

api/tests/build.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ def test_build(self):
5757
url = "/api/apps/{app_id}/builds".format(**locals())
5858
response = self.client.get(url)
5959
self.assertEqual(response.status_code, 200)
60-
self.assertEqual(response.data['count'], 0)
61-
# post a first build
60+
self.assertEqual(response.data['count'], 1)
61+
# post a new build
6262
body = {
6363
'sha': uuid.uuid4().hex,
6464
'slug_size': 4096000,

api/tests/release.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def setUp(self):
4747
def test_release(self):
4848
"""
4949
Test that a release is created when a formation is created, and
50-
that updating config, build, image, args or triggers a new release
50+
that updating config or build or triggers a new release
5151
"""
5252
url = '/api/apps'
5353
body = {'formation': 'autotest'}
@@ -63,7 +63,6 @@ def test_release(self):
6363
response = self.client.get(url)
6464
self.assertEqual(response.status_code, 200)
6565
release1 = response.data
66-
self.assertIn('image', response.data)
6766
self.assertIn('config', response.data)
6867
self.assertIn('build', response.data)
6968
self.assertEquals(release1['version'], 1)
@@ -81,7 +80,6 @@ def test_release(self):
8180
release2 = response.data
8281
self.assertNotEqual(release1['uuid'], release2['uuid'])
8382
self.assertNotEqual(release1['config'], release2['config'])
84-
self.assertEqual(release1['image'], release2['image'])
8583
self.assertEqual(release1['build'], release2['build'])
8684
self.assertEquals(release2['version'], 2)
8785
# check that updating the build rolls a new release
@@ -106,7 +104,6 @@ def test_release(self):
106104
release3 = response.data
107105
self.assertNotEqual(release2['uuid'], release3['uuid'])
108106
self.assertNotEqual(release2['build'], release3['build'])
109-
self.assertEqual(release2['image'], release3['image'])
110107
self.assertEquals(release3['version'], 3)
111108
# check that build config was respected
112109
self.assertNotEqual(release2['config'], release3['config'])

0 commit comments

Comments
 (0)