Merge lp:~allanlesage/helipad/kill-jenkinsrun into lp:helipad/ci
- kill-jenkinsrun
- Merge into ci
Status: | Merged |
---|---|
Approved by: | Chris Johnston |
Approved revision: | 41 |
Merged at revision: | 38 |
Proposed branch: | lp:~allanlesage/helipad/kill-jenkinsrun |
Merge into: | lp:helipad/ci |
Diff against target: |
952 lines (+0/-587) 9 files modified
admin.py (+0/-5) migrations/0001_initial.py (+0/-285) models.py (+0/-20) tests/unit/__init__.py (+0/-2) tests/unit/test_jenkins_build_import.py (+0/-4) tests/unit/test_jenkins_run.py (+0/-46) tests/unit/test_jenkins_run_import.py (+0/-130) util/jenkins_build.py (+0/-11) util/jenkins_run.py (+0/-84) |
To merge this branch: | bzr merge lp:~allanlesage/helipad/kill-jenkinsrun |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot | continuous-integration | Approve | |
Chris Johnston | Approve | ||
Francis Ginther | Pending | ||
Review via email: mp+179065@code.launchpad.net |
This proposal supersedes a proposal from 2013-08-02.
Commit message
Eliminate JenkinsRun.
Description of the change
While we were re-rolling the initial migration cjohnston suggested getting rid of JenkinsRun; fginther confirmed that we're no longer doing the multi-configuration builds at all and no longer need to support JenkinsRuns; this branch eliminates and fixes relevant tests.
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
Francis Ginther (fginther) wrote : Posted in a previous version of this proposal | # |
LGTM
Chris Johnston (cjohnston) wrote : | # |
Conflicts
- 40. By Allan LeSage
-
Merge trunk, resolving migration conflict.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:40
http://
Executed test runs:
Click here to trigger a rebuild:
http://
- 41. By Allan LeSage
-
Re-removed last_build members from migration.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:41
http://
Executed test runs:
Click here to trigger a rebuild:
http://
Chris Johnston (cjohnston) : | # |
PS Jenkins bot (ps-jenkins) : | # |
Preview Diff
1 | === modified file 'admin.py' | |||
2 | --- admin.py 2013-07-16 17:11:09 +0000 | |||
3 | +++ admin.py 2013-08-07 23:29:27 +0000 | |||
4 | @@ -16,7 +16,6 @@ | |||
5 | 16 | from ci.models import (CiProject, | 16 | from ci.models import (CiProject, |
6 | 17 | JenkinsJob, | 17 | JenkinsJob, |
7 | 18 | JenkinsBuild, | 18 | JenkinsBuild, |
8 | 19 | JenkinsRun, | ||
9 | 20 | JenkinsTestReport, | 19 | JenkinsTestReport, |
10 | 21 | JenkinsCoverageReport, | 20 | JenkinsCoverageReport, |
11 | 22 | JenkinsFlavor, | 21 | JenkinsFlavor, |
12 | @@ -45,9 +44,6 @@ | |||
13 | 45 | list_display = ('url',) | 44 | list_display = ('url',) |
14 | 46 | filter_horizontal = ("downstream_builds",) | 45 | filter_horizontal = ("downstream_builds",) |
15 | 47 | 46 | ||
16 | 48 | class JenkinsRunAdmin(admin.ModelAdmin): | ||
17 | 49 | list_display = ('url',) | ||
18 | 50 | |||
19 | 51 | class JenkinsFlavorAdmin(admin.ModelAdmin): | 47 | class JenkinsFlavorAdmin(admin.ModelAdmin): |
20 | 52 | list_display = ('name',) | 48 | list_display = ('name',) |
21 | 53 | 49 | ||
22 | @@ -66,7 +62,6 @@ | |||
23 | 66 | admin.site.register(CiProject, CiProjectAdmin) | 62 | admin.site.register(CiProject, CiProjectAdmin) |
24 | 67 | admin.site.register(JenkinsJob, JenkinsJobAdmin) | 63 | admin.site.register(JenkinsJob, JenkinsJobAdmin) |
25 | 68 | admin.site.register(JenkinsBuild, JenkinsBuildAdmin) | 64 | admin.site.register(JenkinsBuild, JenkinsBuildAdmin) |
26 | 69 | admin.site.register(JenkinsRun, JenkinsRunAdmin) | ||
27 | 70 | admin.site.register(JenkinsFlavor, JenkinsFlavorAdmin) | 65 | admin.site.register(JenkinsFlavor, JenkinsFlavorAdmin) |
28 | 71 | admin.site.register(Series, SeriesAdmin) | 66 | admin.site.register(Series, SeriesAdmin) |
29 | 72 | admin.site.register(JenkinsResult, JenkinsResultAdmin) | 67 | admin.site.register(JenkinsResult, JenkinsResultAdmin) |
30 | 73 | 68 | ||
31 | === added file 'migrations/0001_initial.py' | |||
32 | --- migrations/0001_initial.py 1970-01-01 00:00:00 +0000 | |||
33 | +++ migrations/0001_initial.py 2013-08-07 23:29:27 +0000 | |||
34 | @@ -0,0 +1,250 @@ | |||
35 | 1 | # -*- coding: utf-8 -*- | ||
36 | 2 | import datetime | ||
37 | 3 | from south.db import db | ||
38 | 4 | from south.v2 import SchemaMigration | ||
39 | 5 | from django.db import models | ||
40 | 6 | |||
41 | 7 | |||
42 | 8 | class Migration(SchemaMigration): | ||
43 | 9 | |||
44 | 10 | def forwards(self, orm): | ||
45 | 11 | # Adding model 'JenkinsJob' | ||
46 | 12 | db.create_table('ci_jenkinsjob', ( | ||
47 | 13 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
48 | 14 | ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=256)), | ||
49 | 15 | ('url', self.gf('django.db.models.fields.URLField')(max_length=200)), | ||
50 | 16 | ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jenkins_jobs', null=True, to=orm['ci.CiProject'])), | ||
51 | 17 | ('upstream_job', self.gf('django.db.models.fields.related.ForeignKey')(related_name='downstream_jobs', null=True, to=orm['ci.JenkinsJob'])), | ||
52 | 18 | ('buildable', self.gf('django.db.models.fields.BooleanField')(default=False)), | ||
53 | 19 | ('in_queue', self.gf('django.db.models.fields.BooleanField')(default=False)), | ||
54 | 20 | )) | ||
55 | 21 | db.send_create_signal('ci', ['JenkinsJob']) | ||
56 | 22 | |||
57 | 23 | # Adding model 'CiProject' | ||
58 | 24 | db.create_table('ci_ciproject', ( | ||
59 | 25 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
60 | 26 | ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=256)), | ||
61 | 27 | ('release', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.Release'], null=True)), | ||
62 | 28 | ('stack', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.Cu2dStack'], null=True)), | ||
63 | 29 | ('ci_primary_job', self.gf('django.db.models.fields.related.ForeignKey')(related_name='ci_primary', null=True, to=orm['ci.JenkinsJob'])), | ||
64 | 30 | ('autolanding_primary_job', self.gf('django.db.models.fields.related.ForeignKey')(related_name='autolanding_primary', null=True, to=orm['ci.JenkinsJob'])), | ||
65 | 31 | ('launchpad_project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.LaunchpadProject'], null=True)), | ||
66 | 32 | )) | ||
67 | 33 | db.send_create_signal('ci', ['CiProject']) | ||
68 | 34 | |||
69 | 35 | # Adding model 'LaunchpadProject' | ||
70 | 36 | db.create_table('ci_launchpadproject', ( | ||
71 | 37 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
72 | 38 | ('name', self.gf('django.db.models.fields.CharField')(max_length=256)), | ||
73 | 39 | )) | ||
74 | 40 | db.send_create_signal('ci', ['LaunchpadProject']) | ||
75 | 41 | |||
76 | 42 | # Adding model 'Cu2dStack' | ||
77 | 43 | db.create_table('ci_cu2dstack', ( | ||
78 | 44 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
79 | 45 | ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), | ||
80 | 46 | ('series', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.Series'], null=True)), | ||
81 | 47 | ('ppa', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)), | ||
82 | 48 | ('release', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.Release'], null=True)), | ||
83 | 49 | ('integration_job', self.gf('django.db.models.fields.related.ForeignKey')(related_name='integration', null=True, to=orm['ci.JenkinsJob'])), | ||
84 | 50 | )) | ||
85 | 51 | db.send_create_signal('ci', ['Cu2dStack']) | ||
86 | 52 | |||
87 | 53 | # Adding model 'JenkinsTestReport' | ||
88 | 54 | db.create_table('ci_jenkinstestreport', ( | ||
89 | 55 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
90 | 56 | ('fail_count', self.gf('django.db.models.fields.IntegerField')()), | ||
91 | 57 | ('pass_count', self.gf('django.db.models.fields.IntegerField')()), | ||
92 | 58 | ('skip_count', self.gf('django.db.models.fields.IntegerField')()), | ||
93 | 59 | ('duration', self.gf('django.db.models.fields.IntegerField')()), | ||
94 | 60 | )) | ||
95 | 61 | db.send_create_signal('ci', ['JenkinsTestReport']) | ||
96 | 62 | |||
97 | 63 | # Adding model 'JenkinsCoverageReport' | ||
98 | 64 | db.create_table('ci_jenkinscoveragereport', ( | ||
99 | 65 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
100 | 66 | ('jenkins_build', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsBuild'], unique=True, null=True)), | ||
101 | 67 | ('line_count', self.gf('django.db.models.fields.IntegerField')()), | ||
102 | 68 | ('hit_count', self.gf('django.db.models.fields.IntegerField')()), | ||
103 | 69 | ('branch_count', self.gf('django.db.models.fields.IntegerField')()), | ||
104 | 70 | ('taken_count', self.gf('django.db.models.fields.IntegerField')()), | ||
105 | 71 | ('total_count', self.gf('django.db.models.fields.IntegerField')()), | ||
106 | 72 | )) | ||
107 | 73 | db.send_create_signal('ci', ['JenkinsCoverageReport']) | ||
108 | 74 | |||
109 | 75 | # Adding model 'JenkinsFlavor' | ||
110 | 76 | db.create_table('ci_jenkinsflavor', ( | ||
111 | 77 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
112 | 78 | ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), | ||
113 | 79 | )) | ||
114 | 80 | db.send_create_signal('ci', ['JenkinsFlavor']) | ||
115 | 81 | |||
116 | 82 | # Adding model 'Release' | ||
117 | 83 | db.create_table('ci_release', ( | ||
118 | 84 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
119 | 85 | ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), | ||
120 | 86 | )) | ||
121 | 87 | db.send_create_signal('ci', ['Release']) | ||
122 | 88 | |||
123 | 89 | # Adding model 'Series' | ||
124 | 90 | db.create_table('ci_series', ( | ||
125 | 91 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
126 | 92 | ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), | ||
127 | 93 | )) | ||
128 | 94 | db.send_create_signal('ci', ['Series']) | ||
129 | 95 | |||
130 | 96 | # Adding model 'JenkinsResult' | ||
131 | 97 | db.create_table('ci_jenkinsresult', ( | ||
132 | 98 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
133 | 99 | ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), | ||
134 | 100 | )) | ||
135 | 101 | db.send_create_signal('ci', ['JenkinsResult']) | ||
136 | 102 | |||
137 | 103 | # Adding model 'JenkinsBuild' | ||
138 | 104 | db.create_table('ci_jenkinsbuild', ( | ||
139 | 105 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
140 | 106 | ('jenkins_job', self.gf('django.db.models.fields.related.ForeignKey')(related_name='builds', null=True, to=orm['ci.JenkinsJob'])), | ||
141 | 107 | ('number', self.gf('django.db.models.fields.IntegerField')()), | ||
142 | 108 | ('timestamp', self.gf('django.db.models.fields.DateTimeField')()), | ||
143 | 109 | ('url', self.gf('django.db.models.fields.URLField')(unique=True, max_length=200)), | ||
144 | 110 | ('result', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsResult'])), | ||
145 | 111 | ('coverage_report', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsCoverageReport'], null=True)), | ||
146 | 112 | ('test_report', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsTestReport'], null=True)), | ||
147 | 113 | )) | ||
148 | 114 | db.send_create_signal('ci', ['JenkinsBuild']) | ||
149 | 115 | |||
150 | 116 | # Adding M2M table for field downstream_builds on 'JenkinsBuild' | ||
151 | 117 | db.create_table('ci_jenkinsbuild_downstream_builds', ( | ||
152 | 118 | ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), | ||
153 | 119 | ('from_jenkinsbuild', models.ForeignKey(orm['ci.jenkinsbuild'], null=False)), | ||
154 | 120 | ('to_jenkinsbuild', models.ForeignKey(orm['ci.jenkinsbuild'], null=False)) | ||
155 | 121 | )) | ||
156 | 122 | db.create_unique('ci_jenkinsbuild_downstream_builds', ['from_jenkinsbuild_id', 'to_jenkinsbuild_id']) | ||
157 | 123 | |||
158 | 124 | |||
159 | 125 | def backwards(self, orm): | ||
160 | 126 | # Deleting model 'JenkinsJob' | ||
161 | 127 | db.delete_table('ci_jenkinsjob') | ||
162 | 128 | |||
163 | 129 | # Deleting model 'CiProject' | ||
164 | 130 | db.delete_table('ci_ciproject') | ||
165 | 131 | |||
166 | 132 | # Deleting model 'LaunchpadProject' | ||
167 | 133 | db.delete_table('ci_launchpadproject') | ||
168 | 134 | |||
169 | 135 | # Deleting model 'Cu2dStack' | ||
170 | 136 | db.delete_table('ci_cu2dstack') | ||
171 | 137 | |||
172 | 138 | # Deleting model 'JenkinsTestReport' | ||
173 | 139 | db.delete_table('ci_jenkinstestreport') | ||
174 | 140 | |||
175 | 141 | # Deleting model 'JenkinsCoverageReport' | ||
176 | 142 | db.delete_table('ci_jenkinscoveragereport') | ||
177 | 143 | |||
178 | 144 | # Deleting model 'JenkinsFlavor' | ||
179 | 145 | db.delete_table('ci_jenkinsflavor') | ||
180 | 146 | |||
181 | 147 | # Deleting model 'Release' | ||
182 | 148 | db.delete_table('ci_release') | ||
183 | 149 | |||
184 | 150 | # Deleting model 'Series' | ||
185 | 151 | db.delete_table('ci_series') | ||
186 | 152 | |||
187 | 153 | # Deleting model 'JenkinsResult' | ||
188 | 154 | db.delete_table('ci_jenkinsresult') | ||
189 | 155 | |||
190 | 156 | # Deleting model 'JenkinsBuild' | ||
191 | 157 | db.delete_table('ci_jenkinsbuild') | ||
192 | 158 | |||
193 | 159 | # Removing M2M table for field downstream_builds on 'JenkinsBuild' | ||
194 | 160 | db.delete_table('ci_jenkinsbuild_downstream_builds') | ||
195 | 161 | |||
196 | 162 | |||
197 | 163 | models = { | ||
198 | 164 | 'ci.ciproject': { | ||
199 | 165 | 'Meta': {'object_name': 'CiProject'}, | ||
200 | 166 | 'autolanding_primary_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'autolanding_primary'", 'null': 'True', 'to': "orm['ci.JenkinsJob']"}), | ||
201 | 167 | 'ci_primary_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ci_primary'", 'null': 'True', 'to': "orm['ci.JenkinsJob']"}), | ||
202 | 168 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
203 | 169 | 'launchpad_project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.LaunchpadProject']", 'null': 'True'}), | ||
204 | 170 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}), | ||
205 | 171 | 'release': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.Release']", 'null': 'True'}), | ||
206 | 172 | 'stack': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.Cu2dStack']", 'null': 'True'}) | ||
207 | 173 | }, | ||
208 | 174 | 'ci.cu2dstack': { | ||
209 | 175 | 'Meta': {'object_name': 'Cu2dStack'}, | ||
210 | 176 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
211 | 177 | 'integration_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'integration'", 'null': 'True', 'to': "orm['ci.JenkinsJob']"}), | ||
212 | 178 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), | ||
213 | 179 | 'ppa': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), | ||
214 | 180 | 'release': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.Release']", 'null': 'True'}), | ||
215 | 181 | 'series': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.Series']", 'null': 'True'}) | ||
216 | 182 | }, | ||
217 | 183 | 'ci.jenkinsbuild': { | ||
218 | 184 | 'Meta': {'object_name': 'JenkinsBuild'}, | ||
219 | 185 | 'coverage_report': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsCoverageReport']", 'null': 'True'}), | ||
220 | 186 | 'downstream_builds': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ci.JenkinsBuild']", 'symmetrical': 'False'}), | ||
221 | 187 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
222 | 188 | 'jenkins_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'builds'", 'null': 'True', 'to': "orm['ci.JenkinsJob']"}), | ||
223 | 189 | 'number': ('django.db.models.fields.IntegerField', [], {}), | ||
224 | 190 | 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsResult']"}), | ||
225 | 191 | 'test_report': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsTestReport']", 'null': 'True'}), | ||
226 | 192 | 'timestamp': ('django.db.models.fields.DateTimeField', [], {}), | ||
227 | 193 | 'url': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '200'}) | ||
228 | 194 | }, | ||
229 | 195 | 'ci.jenkinscoveragereport': { | ||
230 | 196 | 'Meta': {'object_name': 'JenkinsCoverageReport'}, | ||
231 | 197 | 'branch_count': ('django.db.models.fields.IntegerField', [], {}), | ||
232 | 198 | 'hit_count': ('django.db.models.fields.IntegerField', [], {}), | ||
233 | 199 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
234 | 200 | 'jenkins_build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsBuild']", 'unique': 'True', 'null': 'True'}), | ||
235 | 201 | 'line_count': ('django.db.models.fields.IntegerField', [], {}), | ||
236 | 202 | 'taken_count': ('django.db.models.fields.IntegerField', [], {}), | ||
237 | 203 | 'total_count': ('django.db.models.fields.IntegerField', [], {}) | ||
238 | 204 | }, | ||
239 | 205 | 'ci.jenkinsflavor': { | ||
240 | 206 | 'Meta': {'object_name': 'JenkinsFlavor'}, | ||
241 | 207 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
242 | 208 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) | ||
243 | 209 | }, | ||
244 | 210 | 'ci.jenkinsjob': { | ||
245 | 211 | 'Meta': {'object_name': 'JenkinsJob'}, | ||
246 | 212 | 'buildable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
247 | 213 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
248 | 214 | 'in_queue': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
249 | 215 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}), | ||
250 | 216 | 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jenkins_jobs'", 'null': 'True', 'to': "orm['ci.CiProject']"}), | ||
251 | 217 | 'upstream_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'downstream_jobs'", 'null': 'True', 'to': "orm['ci.JenkinsJob']"}), | ||
252 | 218 | 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}) | ||
253 | 219 | }, | ||
254 | 220 | 'ci.jenkinsresult': { | ||
255 | 221 | 'Meta': {'object_name': 'JenkinsResult'}, | ||
256 | 222 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
257 | 223 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) | ||
258 | 224 | }, | ||
259 | 225 | 'ci.jenkinstestreport': { | ||
260 | 226 | 'Meta': {'object_name': 'JenkinsTestReport'}, | ||
261 | 227 | 'duration': ('django.db.models.fields.IntegerField', [], {}), | ||
262 | 228 | 'fail_count': ('django.db.models.fields.IntegerField', [], {}), | ||
263 | 229 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
264 | 230 | 'pass_count': ('django.db.models.fields.IntegerField', [], {}), | ||
265 | 231 | 'skip_count': ('django.db.models.fields.IntegerField', [], {}) | ||
266 | 232 | }, | ||
267 | 233 | 'ci.launchpadproject': { | ||
268 | 234 | 'Meta': {'object_name': 'LaunchpadProject'}, | ||
269 | 235 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
270 | 236 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}) | ||
271 | 237 | }, | ||
272 | 238 | 'ci.release': { | ||
273 | 239 | 'Meta': {'object_name': 'Release'}, | ||
274 | 240 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
275 | 241 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) | ||
276 | 242 | }, | ||
277 | 243 | 'ci.series': { | ||
278 | 244 | 'Meta': {'object_name': 'Series'}, | ||
279 | 245 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
280 | 246 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) | ||
281 | 247 | } | ||
282 | 248 | } | ||
283 | 249 | |||
284 | 250 | complete_apps = ['ci'] | ||
285 | 0 | 251 | ||
286 | === removed file 'migrations/0001_initial.py' | |||
287 | --- migrations/0001_initial.py 2013-08-01 19:02:22 +0000 | |||
288 | +++ migrations/0001_initial.py 1970-01-01 00:00:00 +0000 | |||
289 | @@ -1,285 +0,0 @@ | |||
290 | 1 | # -*- coding: utf-8 -*- | ||
291 | 2 | import datetime | ||
292 | 3 | from south.db import db | ||
293 | 4 | from south.v2 import SchemaMigration | ||
294 | 5 | from django.db import models | ||
295 | 6 | |||
296 | 7 | |||
297 | 8 | class Migration(SchemaMigration): | ||
298 | 9 | |||
299 | 10 | def forwards(self, orm): | ||
300 | 11 | # Adding model 'JenkinsJob' | ||
301 | 12 | db.create_table('ci_jenkinsjob', ( | ||
302 | 13 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
303 | 14 | ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=256)), | ||
304 | 15 | ('url', self.gf('django.db.models.fields.URLField')(max_length=200)), | ||
305 | 16 | ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jenkins_jobs', null=True, to=orm['ci.CiProject'])), | ||
306 | 17 | ('upstream_job', self.gf('django.db.models.fields.related.ForeignKey')(related_name='downstream_jobs', null=True, to=orm['ci.JenkinsJob'])), | ||
307 | 18 | ('buildable', self.gf('django.db.models.fields.BooleanField')(default=False)), | ||
308 | 19 | ('in_queue', self.gf('django.db.models.fields.BooleanField')(default=False)), | ||
309 | 20 | )) | ||
310 | 21 | db.send_create_signal('ci', ['JenkinsJob']) | ||
311 | 22 | |||
312 | 23 | # Adding model 'CiProject' | ||
313 | 24 | db.create_table('ci_ciproject', ( | ||
314 | 25 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
315 | 26 | ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=256)), | ||
316 | 27 | ('release', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.Release'], null=True)), | ||
317 | 28 | ('stack', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.Cu2dStack'], null=True)), | ||
318 | 29 | ('ci_primary_job', self.gf('django.db.models.fields.related.ForeignKey')(related_name='ci_primary', null=True, to=orm['ci.JenkinsJob'])), | ||
319 | 30 | ('autolanding_primary_job', self.gf('django.db.models.fields.related.ForeignKey')(related_name='autolanding_primary', null=True, to=orm['ci.JenkinsJob'])), | ||
320 | 31 | ('launchpad_project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.LaunchpadProject'], null=True)), | ||
321 | 32 | )) | ||
322 | 33 | db.send_create_signal('ci', ['CiProject']) | ||
323 | 34 | |||
324 | 35 | # Adding model 'LaunchpadProject' | ||
325 | 36 | db.create_table('ci_launchpadproject', ( | ||
326 | 37 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
327 | 38 | ('name', self.gf('django.db.models.fields.CharField')(max_length=256)), | ||
328 | 39 | )) | ||
329 | 40 | db.send_create_signal('ci', ['LaunchpadProject']) | ||
330 | 41 | |||
331 | 42 | # Adding model 'Cu2dStack' | ||
332 | 43 | db.create_table('ci_cu2dstack', ( | ||
333 | 44 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
334 | 45 | ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), | ||
335 | 46 | ('series', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.Series'], null=True)), | ||
336 | 47 | ('ppa', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)), | ||
337 | 48 | ('release', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.Release'], null=True)), | ||
338 | 49 | ('integration_job', self.gf('django.db.models.fields.related.ForeignKey')(related_name='integration', null=True, to=orm['ci.JenkinsJob'])), | ||
339 | 50 | )) | ||
340 | 51 | db.send_create_signal('ci', ['Cu2dStack']) | ||
341 | 52 | |||
342 | 53 | # Adding model 'JenkinsTestReport' | ||
343 | 54 | db.create_table('ci_jenkinstestreport', ( | ||
344 | 55 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
345 | 56 | ('fail_count', self.gf('django.db.models.fields.IntegerField')()), | ||
346 | 57 | ('pass_count', self.gf('django.db.models.fields.IntegerField')()), | ||
347 | 58 | ('skip_count', self.gf('django.db.models.fields.IntegerField')()), | ||
348 | 59 | ('duration', self.gf('django.db.models.fields.IntegerField')()), | ||
349 | 60 | )) | ||
350 | 61 | db.send_create_signal('ci', ['JenkinsTestReport']) | ||
351 | 62 | |||
352 | 63 | # Adding model 'JenkinsCoverageReport' | ||
353 | 64 | db.create_table('ci_jenkinscoveragereport', ( | ||
354 | 65 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
355 | 66 | ('jenkins_build', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsBuild'], unique=True, null=True)), | ||
356 | 67 | ('line_count', self.gf('django.db.models.fields.IntegerField')()), | ||
357 | 68 | ('hit_count', self.gf('django.db.models.fields.IntegerField')()), | ||
358 | 69 | ('branch_count', self.gf('django.db.models.fields.IntegerField')()), | ||
359 | 70 | ('taken_count', self.gf('django.db.models.fields.IntegerField')()), | ||
360 | 71 | ('total_count', self.gf('django.db.models.fields.IntegerField')()), | ||
361 | 72 | )) | ||
362 | 73 | db.send_create_signal('ci', ['JenkinsCoverageReport']) | ||
363 | 74 | |||
364 | 75 | # Adding model 'JenkinsFlavor' | ||
365 | 76 | db.create_table('ci_jenkinsflavor', ( | ||
366 | 77 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
367 | 78 | ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), | ||
368 | 79 | )) | ||
369 | 80 | db.send_create_signal('ci', ['JenkinsFlavor']) | ||
370 | 81 | |||
371 | 82 | # Adding model 'Release' | ||
372 | 83 | db.create_table('ci_release', ( | ||
373 | 84 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
374 | 85 | ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), | ||
375 | 86 | )) | ||
376 | 87 | db.send_create_signal('ci', ['Release']) | ||
377 | 88 | |||
378 | 89 | # Adding model 'Series' | ||
379 | 90 | db.create_table('ci_series', ( | ||
380 | 91 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
381 | 92 | ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), | ||
382 | 93 | )) | ||
383 | 94 | db.send_create_signal('ci', ['Series']) | ||
384 | 95 | |||
385 | 96 | # Adding model 'JenkinsResult' | ||
386 | 97 | db.create_table('ci_jenkinsresult', ( | ||
387 | 98 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
388 | 99 | ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), | ||
389 | 100 | )) | ||
390 | 101 | db.send_create_signal('ci', ['JenkinsResult']) | ||
391 | 102 | |||
392 | 103 | # Adding model 'JenkinsRun' | ||
393 | 104 | db.create_table('ci_jenkinsrun', ( | ||
394 | 105 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
395 | 106 | ('jenkins_build', self.gf('django.db.models.fields.related.ForeignKey')(related_name='runs', null=True, to=orm['ci.JenkinsBuild'])), | ||
396 | 107 | ('number', self.gf('django.db.models.fields.IntegerField')(null=True)), | ||
397 | 108 | ('name', self.gf('django.db.models.fields.CharField')(max_length=256)), | ||
398 | 109 | ('url', self.gf('django.db.models.fields.URLField')(unique=True, max_length=200)), | ||
399 | 110 | ('duration', self.gf('django.db.models.fields.IntegerField')()), | ||
400 | 111 | ('flavor', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsFlavor'])), | ||
401 | 112 | ('series', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.Series'])), | ||
402 | 113 | ('result', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsResult'])), | ||
403 | 114 | ('coverage_report', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsCoverageReport'], null=True)), | ||
404 | 115 | ('test_report', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsTestReport'], null=True)), | ||
405 | 116 | ('timestamp', self.gf('django.db.models.fields.DateTimeField')()), | ||
406 | 117 | )) | ||
407 | 118 | db.send_create_signal('ci', ['JenkinsRun']) | ||
408 | 119 | |||
409 | 120 | # Adding model 'JenkinsBuild' | ||
410 | 121 | db.create_table('ci_jenkinsbuild', ( | ||
411 | 122 | ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
412 | 123 | ('jenkins_job', self.gf('django.db.models.fields.related.ForeignKey')(related_name='builds', null=True, to=orm['ci.JenkinsJob'])), | ||
413 | 124 | ('number', self.gf('django.db.models.fields.IntegerField')()), | ||
414 | 125 | ('timestamp', self.gf('django.db.models.fields.DateTimeField')()), | ||
415 | 126 | ('url', self.gf('django.db.models.fields.URLField')(unique=True, max_length=200)), | ||
416 | 127 | ('result', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsResult'])), | ||
417 | 128 | ('coverage_report', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsCoverageReport'], null=True)), | ||
418 | 129 | ('test_report', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ci.JenkinsTestReport'], null=True)), | ||
419 | 130 | )) | ||
420 | 131 | db.send_create_signal('ci', ['JenkinsBuild']) | ||
421 | 132 | |||
422 | 133 | # Adding M2M table for field downstream_builds on 'JenkinsBuild' | ||
423 | 134 | db.create_table('ci_jenkinsbuild_downstream_builds', ( | ||
424 | 135 | ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), | ||
425 | 136 | ('from_jenkinsbuild', models.ForeignKey(orm['ci.jenkinsbuild'], null=False)), | ||
426 | 137 | ('to_jenkinsbuild', models.ForeignKey(orm['ci.jenkinsbuild'], null=False)) | ||
427 | 138 | )) | ||
428 | 139 | db.create_unique('ci_jenkinsbuild_downstream_builds', ['from_jenkinsbuild_id', 'to_jenkinsbuild_id']) | ||
429 | 140 | |||
430 | 141 | |||
431 | 142 | def backwards(self, orm): | ||
432 | 143 | # Deleting model 'JenkinsJob' | ||
433 | 144 | db.delete_table('ci_jenkinsjob') | ||
434 | 145 | |||
435 | 146 | # Deleting model 'CiProject' | ||
436 | 147 | db.delete_table('ci_ciproject') | ||
437 | 148 | |||
438 | 149 | # Deleting model 'LaunchpadProject' | ||
439 | 150 | db.delete_table('ci_launchpadproject') | ||
440 | 151 | |||
441 | 152 | # Deleting model 'Cu2dStack' | ||
442 | 153 | db.delete_table('ci_cu2dstack') | ||
443 | 154 | |||
444 | 155 | # Deleting model 'JenkinsTestReport' | ||
445 | 156 | db.delete_table('ci_jenkinstestreport') | ||
446 | 157 | |||
447 | 158 | # Deleting model 'JenkinsCoverageReport' | ||
448 | 159 | db.delete_table('ci_jenkinscoveragereport') | ||
449 | 160 | |||
450 | 161 | # Deleting model 'JenkinsFlavor' | ||
451 | 162 | db.delete_table('ci_jenkinsflavor') | ||
452 | 163 | |||
453 | 164 | # Deleting model 'Release' | ||
454 | 165 | db.delete_table('ci_release') | ||
455 | 166 | |||
456 | 167 | # Deleting model 'Series' | ||
457 | 168 | db.delete_table('ci_series') | ||
458 | 169 | |||
459 | 170 | # Deleting model 'JenkinsResult' | ||
460 | 171 | db.delete_table('ci_jenkinsresult') | ||
461 | 172 | |||
462 | 173 | # Deleting model 'JenkinsRun' | ||
463 | 174 | db.delete_table('ci_jenkinsrun') | ||
464 | 175 | |||
465 | 176 | # Deleting model 'JenkinsBuild' | ||
466 | 177 | db.delete_table('ci_jenkinsbuild') | ||
467 | 178 | |||
468 | 179 | # Removing M2M table for field downstream_builds on 'JenkinsBuild' | ||
469 | 180 | db.delete_table('ci_jenkinsbuild_downstream_builds') | ||
470 | 181 | |||
471 | 182 | |||
472 | 183 | models = { | ||
473 | 184 | 'ci.ciproject': { | ||
474 | 185 | 'Meta': {'object_name': 'CiProject'}, | ||
475 | 186 | 'autolanding_primary_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'autolanding_primary'", 'null': 'True', 'to': "orm['ci.JenkinsJob']"}), | ||
476 | 187 | 'ci_primary_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ci_primary'", 'null': 'True', 'to': "orm['ci.JenkinsJob']"}), | ||
477 | 188 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
478 | 189 | 'launchpad_project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.LaunchpadProject']", 'null': 'True'}), | ||
479 | 190 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}), | ||
480 | 191 | 'release': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.Release']", 'null': 'True'}), | ||
481 | 192 | 'stack': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.Cu2dStack']", 'null': 'True'}) | ||
482 | 193 | }, | ||
483 | 194 | 'ci.cu2dstack': { | ||
484 | 195 | 'Meta': {'object_name': 'Cu2dStack'}, | ||
485 | 196 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
486 | 197 | 'integration_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'integration'", 'null': 'True', 'to': "orm['ci.JenkinsJob']"}), | ||
487 | 198 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), | ||
488 | 199 | 'ppa': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), | ||
489 | 200 | 'release': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.Release']", 'null': 'True'}), | ||
490 | 201 | 'series': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.Series']", 'null': 'True'}) | ||
491 | 202 | }, | ||
492 | 203 | 'ci.jenkinsbuild': { | ||
493 | 204 | 'Meta': {'object_name': 'JenkinsBuild'}, | ||
494 | 205 | 'coverage_report': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsCoverageReport']", 'null': 'True'}), | ||
495 | 206 | 'downstream_builds': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ci.JenkinsBuild']", 'symmetrical': 'False'}), | ||
496 | 207 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
497 | 208 | 'jenkins_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'builds'", 'null': 'True', 'to': "orm['ci.JenkinsJob']"}), | ||
498 | 209 | 'number': ('django.db.models.fields.IntegerField', [], {}), | ||
499 | 210 | 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsResult']"}), | ||
500 | 211 | 'test_report': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsTestReport']", 'null': 'True'}), | ||
501 | 212 | 'timestamp': ('django.db.models.fields.DateTimeField', [], {}), | ||
502 | 213 | 'url': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '200'}) | ||
503 | 214 | }, | ||
504 | 215 | 'ci.jenkinscoveragereport': { | ||
505 | 216 | 'Meta': {'object_name': 'JenkinsCoverageReport'}, | ||
506 | 217 | 'branch_count': ('django.db.models.fields.IntegerField', [], {}), | ||
507 | 218 | 'hit_count': ('django.db.models.fields.IntegerField', [], {}), | ||
508 | 219 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
509 | 220 | 'jenkins_build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsBuild']", 'unique': 'True', 'null': 'True'}), | ||
510 | 221 | 'line_count': ('django.db.models.fields.IntegerField', [], {}), | ||
511 | 222 | 'taken_count': ('django.db.models.fields.IntegerField', [], {}), | ||
512 | 223 | 'total_count': ('django.db.models.fields.IntegerField', [], {}) | ||
513 | 224 | }, | ||
514 | 225 | 'ci.jenkinsflavor': { | ||
515 | 226 | 'Meta': {'object_name': 'JenkinsFlavor'}, | ||
516 | 227 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
517 | 228 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) | ||
518 | 229 | }, | ||
519 | 230 | 'ci.jenkinsjob': { | ||
520 | 231 | 'Meta': {'object_name': 'JenkinsJob'}, | ||
521 | 232 | 'buildable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
522 | 233 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
523 | 234 | 'in_queue': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
524 | 235 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}), | ||
525 | 236 | 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jenkins_jobs'", 'null': 'True', 'to': "orm['ci.CiProject']"}), | ||
526 | 237 | 'upstream_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'downstream_jobs'", 'null': 'True', 'to': "orm['ci.JenkinsJob']"}), | ||
527 | 238 | 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}) | ||
528 | 239 | }, | ||
529 | 240 | 'ci.jenkinsresult': { | ||
530 | 241 | 'Meta': {'object_name': 'JenkinsResult'}, | ||
531 | 242 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
532 | 243 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) | ||
533 | 244 | }, | ||
534 | 245 | 'ci.jenkinsrun': { | ||
535 | 246 | 'Meta': {'object_name': 'JenkinsRun'}, | ||
536 | 247 | 'coverage_report': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsCoverageReport']", 'null': 'True'}), | ||
537 | 248 | 'duration': ('django.db.models.fields.IntegerField', [], {}), | ||
538 | 249 | 'flavor': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsFlavor']"}), | ||
539 | 250 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
540 | 251 | 'jenkins_build': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'runs'", 'null': 'True', 'to': "orm['ci.JenkinsBuild']"}), | ||
541 | 252 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), | ||
542 | 253 | 'number': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), | ||
543 | 254 | 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsResult']"}), | ||
544 | 255 | 'series': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.Series']"}), | ||
545 | 256 | 'test_report': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ci.JenkinsTestReport']", 'null': 'True'}), | ||
546 | 257 | 'timestamp': ('django.db.models.fields.DateTimeField', [], {}), | ||
547 | 258 | 'url': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '200'}) | ||
548 | 259 | }, | ||
549 | 260 | 'ci.jenkinstestreport': { | ||
550 | 261 | 'Meta': {'object_name': 'JenkinsTestReport'}, | ||
551 | 262 | 'duration': ('django.db.models.fields.IntegerField', [], {}), | ||
552 | 263 | 'fail_count': ('django.db.models.fields.IntegerField', [], {}), | ||
553 | 264 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
554 | 265 | 'pass_count': ('django.db.models.fields.IntegerField', [], {}), | ||
555 | 266 | 'skip_count': ('django.db.models.fields.IntegerField', [], {}) | ||
556 | 267 | }, | ||
557 | 268 | 'ci.launchpadproject': { | ||
558 | 269 | 'Meta': {'object_name': 'LaunchpadProject'}, | ||
559 | 270 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
560 | 271 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}) | ||
561 | 272 | }, | ||
562 | 273 | 'ci.release': { | ||
563 | 274 | 'Meta': {'object_name': 'Release'}, | ||
564 | 275 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
565 | 276 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) | ||
566 | 277 | }, | ||
567 | 278 | 'ci.series': { | ||
568 | 279 | 'Meta': {'object_name': 'Series'}, | ||
569 | 280 | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
570 | 281 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) | ||
571 | 282 | } | ||
572 | 283 | } | ||
573 | 284 | |||
574 | 285 | complete_apps = ['ci'] | ||
575 | 286 | \ No newline at end of file | 0 | \ No newline at end of file |
576 | 287 | 1 | ||
577 | === modified file 'models.py' | |||
578 | --- models.py 2013-08-07 22:49:36 +0000 | |||
579 | +++ models.py 2013-08-07 23:29:27 +0000 | |||
580 | @@ -439,26 +439,6 @@ | |||
581 | 439 | return self.name | 439 | return self.name |
582 | 440 | 440 | ||
583 | 441 | 441 | ||
584 | 442 | class JenkinsRun(models.Model): | ||
585 | 443 | |||
586 | 444 | jenkins_build = models.ForeignKey('JenkinsBuild', | ||
587 | 445 | related_name='runs', | ||
588 | 446 | null=True) | ||
589 | 447 | number = models.IntegerField(null=True) | ||
590 | 448 | name = models.CharField(max_length=256) | ||
591 | 449 | url = models.URLField(unique=True) | ||
592 | 450 | duration = models.IntegerField() # seconds | ||
593 | 451 | flavor = models.ForeignKey('JenkinsFlavor') | ||
594 | 452 | series = models.ForeignKey('Series') | ||
595 | 453 | result = models.ForeignKey('JenkinsResult') | ||
596 | 454 | coverage_report = models.ForeignKey('JenkinsCoverageReport', null=True) | ||
597 | 455 | test_report = models.ForeignKey('JenkinsTestReport', null=True) | ||
598 | 456 | timestamp = models.DateTimeField() | ||
599 | 457 | |||
600 | 458 | def __unicode__(self): | ||
601 | 459 | return self.name | ||
602 | 460 | |||
603 | 461 | |||
604 | 462 | class JenkinsBuild(models.Model): | 442 | class JenkinsBuild(models.Model): |
605 | 463 | """A Jenkins build.""" | 443 | """A Jenkins build.""" |
606 | 464 | 444 | ||
607 | 465 | 445 | ||
608 | === modified file 'tests/unit/__init__.py' | |||
609 | --- tests/unit/__init__.py 2013-07-25 00:00:00 +0000 | |||
610 | +++ tests/unit/__init__.py 2013-08-07 23:29:27 +0000 | |||
611 | @@ -27,8 +27,6 @@ | |||
612 | 27 | from test_jenkins_job_import import * | 27 | from test_jenkins_job_import import * |
613 | 28 | from test_jenkins_job import * | 28 | from test_jenkins_job import * |
614 | 29 | from test_jenkins_result import * | 29 | from test_jenkins_result import * |
615 | 30 | from test_jenkins_run_import import * | ||
616 | 31 | from test_jenkins_run import * | ||
617 | 32 | from test_jenkins_test_report_import import * | 30 | from test_jenkins_test_report_import import * |
618 | 33 | from test_launchpad_project_import import * | 31 | from test_launchpad_project_import import * |
619 | 34 | from test_launchpad_project import * | 32 | from test_launchpad_project import * |
620 | 35 | 33 | ||
621 | === modified file 'tests/unit/test_jenkins_build_import.py' | |||
622 | --- tests/unit/test_jenkins_build_import.py 2013-07-26 01:50:54 +0000 | |||
623 | +++ tests/unit/test_jenkins_build_import.py 2013-08-07 23:29:27 +0000 | |||
624 | @@ -45,9 +45,6 @@ | |||
625 | 45 | 45 | ||
626 | 46 | def setUp(self): | 46 | def setUp(self): |
627 | 47 | super(TestCreateFromUrl, self).setUp() | 47 | super(TestCreateFromUrl, self).setUp() |
628 | 48 | self.create_downstream_runs_patch = patch( | ||
629 | 49 | 'ci.util.jenkins_build.create_downstream_runs') | ||
630 | 50 | self.create_downstream_runs_patch.start() | ||
631 | 51 | self.create_downstream_builds_patch = patch( | 48 | self.create_downstream_builds_patch = patch( |
632 | 52 | 'ci.util.jenkins_build.create_downstream_builds') | 49 | 'ci.util.jenkins_build.create_downstream_builds') |
633 | 53 | self.create_downstream_builds_patch.start() | 50 | self.create_downstream_builds_patch.start() |
634 | @@ -65,7 +62,6 @@ | |||
635 | 65 | self.aggregate_test_report_patch.start() | 62 | self.aggregate_test_report_patch.start() |
636 | 66 | 63 | ||
637 | 67 | def tearDown(self): | 64 | def tearDown(self): |
638 | 68 | self.create_downstream_runs_patch.stop() | ||
639 | 69 | self.create_downstream_builds_patch.stop() | 65 | self.create_downstream_builds_patch.stop() |
640 | 70 | self.create_cobertura_report_patch.stop() | 66 | self.create_cobertura_report_patch.stop() |
641 | 71 | self.create_jenkins_test_report_patch.stop() | 67 | self.create_jenkins_test_report_patch.stop() |
642 | 72 | 68 | ||
643 | === removed file 'tests/unit/test_jenkins_run.py' | |||
644 | --- tests/unit/test_jenkins_run.py 2013-07-16 17:29:47 +0000 | |||
645 | +++ tests/unit/test_jenkins_run.py 1970-01-01 00:00:00 +0000 | |||
646 | @@ -1,46 +0,0 @@ | |||
647 | 1 | # QA Dashboard | ||
648 | 2 | # Copyright 2012-2013 Canonical Ltd. | ||
649 | 3 | |||
650 | 4 | # This program is free software: you can redistribute it and/or modify it | ||
651 | 5 | # under the terms of the GNU Affero General Public License version 3, as | ||
652 | 6 | # published by the Free Software Foundation. | ||
653 | 7 | |||
654 | 8 | # This program is distributed in the hope that it will be useful, but | ||
655 | 9 | # WITHOUT ANY WARRANTY; without even the implied warranties of | ||
656 | 10 | # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR | ||
657 | 11 | # PURPOSE. See the GNU Affero General Public License for more details. | ||
658 | 12 | |||
659 | 13 | # You should have received a copy of the GNU Affero General Public License | ||
660 | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
661 | 15 | |||
662 | 16 | from mock import MagicMock, patch | ||
663 | 17 | from django.test import TestCase | ||
664 | 18 | from django.db import IntegrityError | ||
665 | 19 | from ci.models import JenkinsRun | ||
666 | 20 | import ci.util.extractor as extractor | ||
667 | 21 | |||
668 | 22 | |||
669 | 23 | class TestJenkinsRun(TestCase): | ||
670 | 24 | |||
671 | 25 | def setUp(self): | ||
672 | 26 | jenkins_run_mock = MagicMock( | ||
673 | 27 | spec=JenkinsRun, | ||
674 | 28 | return_value=None) | ||
675 | 29 | self.jenkins_run_patch = patch.object( | ||
676 | 30 | JenkinsRun, | ||
677 | 31 | '__init__', | ||
678 | 32 | new=jenkins_run_mock) | ||
679 | 33 | self.jenkins_run_patch.start() | ||
680 | 34 | self.jenkins_run = \ | ||
681 | 35 | JenkinsRun() | ||
682 | 36 | self.logger_patch = patch('ci.models.logger') | ||
683 | 37 | self.logger_patch.start() | ||
684 | 38 | |||
685 | 39 | def tearDown(self): | ||
686 | 40 | self.jenkins_run_patch.stop() | ||
687 | 41 | self.logger_patch.stop() | ||
688 | 42 | |||
689 | 43 | def test_unicode(self): | ||
690 | 44 | self.jenkins_run.name = 'indicator-sync-i386-raring-autolanding' | ||
691 | 45 | self.assertEqual('indicator-sync-i386-raring-autolanding', | ||
692 | 46 | str(self.jenkins_run)) | ||
693 | 47 | 0 | ||
694 | === removed file 'tests/unit/test_jenkins_run_import.py' | |||
695 | --- tests/unit/test_jenkins_run_import.py 2013-07-16 17:29:47 +0000 | |||
696 | +++ tests/unit/test_jenkins_run_import.py 1970-01-01 00:00:00 +0000 | |||
697 | @@ -1,130 +0,0 @@ | |||
698 | 1 | # QA Dashboard | ||
699 | 2 | # Copyright 2012-2013 Canonical Ltd. | ||
700 | 3 | |||
701 | 4 | # This program is free software: you can redistribute it and/or modify it | ||
702 | 5 | # under the terms of the GNU Affero General Public License version 3, as | ||
703 | 6 | # published by the Free Software Foundation. | ||
704 | 7 | |||
705 | 8 | # This program is distributed in the hope that it will be useful, but | ||
706 | 9 | # WITHOUT ANY WARRANTY; without even the implied warranties of | ||
707 | 10 | # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR | ||
708 | 11 | # PURPOSE. See the GNU Affero General Public License for more details. | ||
709 | 12 | |||
710 | 13 | # You should have received a copy of the GNU Affero General Public License | ||
711 | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
712 | 15 | |||
713 | 16 | from mock import MagicMock, patch | ||
714 | 17 | from django.test import TestCase | ||
715 | 18 | from django.db import IntegrityError | ||
716 | 19 | from ci.models import JenkinsJob, JenkinsRun | ||
717 | 20 | import ci.util.extractor as extractor | ||
718 | 21 | from ci.util.jenkins_run import create_jenkins_run_from_url | ||
719 | 22 | |||
720 | 23 | |||
721 | 24 | class TestCreateFromUrl(TestCase): | ||
722 | 25 | |||
723 | 26 | def setUp(self): | ||
724 | 27 | self.logger_patch = patch('ci.models.logger') | ||
725 | 28 | self.logger_patch.start() | ||
726 | 29 | self.fake_url = "http://this.string.is.actually.a.URL/no/kidding" | ||
727 | 30 | self.fake_jenkins_build = "a Django representation of a Jenkins job" | ||
728 | 31 | |||
729 | 32 | def tearDown(self): | ||
730 | 33 | self.logger_patch.stop() | ||
731 | 34 | |||
732 | 35 | def test_vanilla(self): | ||
733 | 36 | extractor_jenkins_run = MagicMock() | ||
734 | 37 | jenkins_flavor_get_or_create = MagicMock(return_value=( | ||
735 | 38 | 'fake_jenkins_flavor', False)) | ||
736 | 39 | series_get_or_create = MagicMock(return_value=( | ||
737 | 40 | 'fake_series', False)) | ||
738 | 41 | jenkins_result_get_or_create = MagicMock(return_value=( | ||
739 | 42 | 'fake_jenkins_result', False)) | ||
740 | 43 | with patch('ci.util.extractor.JenkinsRun', extractor_jenkins_run), \ | ||
741 | 44 | patch('ci.models.JenkinsFlavor.objects.get_or_create', | ||
742 | 45 | jenkins_flavor_get_or_create), \ | ||
743 | 46 | patch('ci.models.Series.objects.get_or_create', | ||
744 | 47 | series_get_or_create), \ | ||
745 | 48 | patch('ci.models.JenkinsResult.objects.get_or_create', | ||
746 | 49 | jenkins_result_get_or_create), \ | ||
747 | 50 | patch('ci.models.JenkinsRun.objects.create') as jenkins_run_objects_create: | ||
748 | 51 | extractor_jenkins_run.return_value.number = 42 | ||
749 | 52 | extractor_jenkins_run.return_value.name = 'fake_jenkins_run_name' | ||
750 | 53 | duration_mock = MagicMock() | ||
751 | 54 | duration_mock.seconds = 3.1415 | ||
752 | 55 | extractor_jenkins_run.return_value.duration = duration_mock | ||
753 | 56 | extractor_jenkins_run.return_value.timestamp = 'fake_timestamp' | ||
754 | 57 | extractor_jenkins_run.return_value.parameters = 'fake_parameters' | ||
755 | 58 | result = create_jenkins_run_from_url( | ||
756 | 59 | self.fake_url, self.fake_jenkins_build) | ||
757 | 60 | jenkins_run_objects_create.assert_called_with( | ||
758 | 61 | jenkins_build=self.fake_jenkins_build, | ||
759 | 62 | number=42, | ||
760 | 63 | name='fake_jenkins_run_name', | ||
761 | 64 | url=self.fake_url, | ||
762 | 65 | duration=3.1415, | ||
763 | 66 | timestamp='fake_timestamp', | ||
764 | 67 | flavor='fake_jenkins_flavor', | ||
765 | 68 | series='fake_series', | ||
766 | 69 | result='fake_jenkins_result') | ||
767 | 70 | |||
768 | 71 | def test_extractor_build_result_is_none(self): | ||
769 | 72 | """Weird but extractor returns None for result b/c no runs at all.""" | ||
770 | 73 | |||
771 | 74 | self.fake_url = "http://this.string.is.actually.a.URL/no/kidding" | ||
772 | 75 | self.fake_jenkins_build = "a Django representation of a Jenkins build" | ||
773 | 76 | extractor_jenkins_run = MagicMock() | ||
774 | 77 | jenkins_flavor_get_or_create = MagicMock(return_value=( | ||
775 | 78 | 'fake_jenkins_flavor', False)) | ||
776 | 79 | series_get_or_create = MagicMock(return_value=( | ||
777 | 80 | 'fake_series', False)) | ||
778 | 81 | jenkins_result_get_or_create = MagicMock(side_effect=IntegrityError) | ||
779 | 82 | with patch('ci.util.extractor.JenkinsRun', extractor_jenkins_run), \ | ||
780 | 83 | patch('ci.models.JenkinsFlavor.objects.get_or_create', | ||
781 | 84 | jenkins_flavor_get_or_create), \ | ||
782 | 85 | patch('ci.models.Series.objects.get_or_create', series_get_or_create), \ | ||
783 | 86 | patch('ci.models.JenkinsResult.objects.get_or_create', jenkins_result_get_or_create), \ | ||
784 | 87 | patch('ci.models.JenkinsRun.objects.create') as jenkins_run_objects_create: | ||
785 | 88 | result = create_jenkins_run_from_url( | ||
786 | 89 | self.fake_url, self.fake_jenkins_build) | ||
787 | 90 | self.assertIsNone(result) | ||
788 | 91 | |||
789 | 92 | def test_run_duplicate_integrity_error(self): | ||
790 | 93 | self.fake_url = "http://this.string.is.actually.a.URL/no/kidding" | ||
791 | 94 | self.fake_jenkins_build = "a Django representation of a Jenkins job" | ||
792 | 95 | extractor_jenkins_run = MagicMock() | ||
793 | 96 | jenkins_flavor_get_or_create = MagicMock(return_value=( | ||
794 | 97 | 'fake_jenkins_flavor', False)) | ||
795 | 98 | series_get_or_create = MagicMock(return_value=( | ||
796 | 99 | 'fake_series', False)) | ||
797 | 100 | jenkins_result_get_or_create = MagicMock(return_value=( | ||
798 | 101 | 'fake_jenkins_result', False)) | ||
799 | 102 | with patch('ci.util.extractor.JenkinsRun', extractor_jenkins_run), \ | ||
800 | 103 | patch('ci.models.JenkinsFlavor.objects.get_or_create', | ||
801 | 104 | jenkins_flavor_get_or_create), \ | ||
802 | 105 | patch('ci.models.Series.objects.get_or_create', | ||
803 | 106 | series_get_or_create), \ | ||
804 | 107 | patch('ci.models.JenkinsResult.objects.get_or_create', | ||
805 | 108 | jenkins_result_get_or_create), \ | ||
806 | 109 | patch('ci.models.JenkinsRun.objects.create') as jenkins_run_objects_create: | ||
807 | 110 | jenkins_run_objects_create.side_effect = IntegrityError | ||
808 | 111 | extractor_jenkins_run.return_value.number = 42 | ||
809 | 112 | extractor_jenkins_run.return_value.name = 'fake_jenkins_run_name' | ||
810 | 113 | duration_mock = MagicMock() | ||
811 | 114 | duration_mock.seconds = 3.1415 | ||
812 | 115 | extractor_jenkins_run.return_value.duration = duration_mock | ||
813 | 116 | extractor_jenkins_run.return_value.timestamp = 'fake_timestamp' | ||
814 | 117 | extractor_jenkins_run.return_value.parameters = 'fake_parameters' | ||
815 | 118 | result = create_jenkins_run_from_url( | ||
816 | 119 | self.fake_url, self.fake_jenkins_build) | ||
817 | 120 | jenkins_run_objects_create.assert_called_with( | ||
818 | 121 | jenkins_build=self.fake_jenkins_build, | ||
819 | 122 | number=42, | ||
820 | 123 | name='fake_jenkins_run_name', | ||
821 | 124 | url=self.fake_url, | ||
822 | 125 | duration=3.1415, | ||
823 | 126 | timestamp='fake_timestamp', | ||
824 | 127 | flavor='fake_jenkins_flavor', | ||
825 | 128 | series='fake_series', | ||
826 | 129 | result='fake_jenkins_result') | ||
827 | 130 | self.assertIsNone(result) | ||
828 | 131 | 0 | ||
829 | === modified file 'util/jenkins_build.py' | |||
830 | --- util/jenkins_build.py 2013-07-20 19:28:08 +0000 | |||
831 | +++ util/jenkins_build.py 2013-08-07 23:29:27 +0000 | |||
832 | @@ -23,7 +23,6 @@ | |||
833 | 23 | import ci.util.extractor as extractor | 23 | import ci.util.extractor as extractor |
834 | 24 | from ci.util.coverage_report import create_coverage_report_from_url | 24 | from ci.util.coverage_report import create_coverage_report_from_url |
835 | 25 | from ci.util.jenkins_test_report import create_jenkins_test_report_from_url | 25 | from ci.util.jenkins_test_report import create_jenkins_test_report_from_url |
836 | 26 | from ci.util.jenkins_run import create_jenkins_run_from_url | ||
837 | 27 | 26 | ||
838 | 28 | logger = logging.getLogger('qa_dashboard') | 27 | logger = logging.getLogger('qa_dashboard') |
839 | 29 | 28 | ||
840 | @@ -81,15 +80,6 @@ | |||
841 | 81 | ci_jenkins_build.save() | 80 | ci_jenkins_build.save() |
842 | 82 | 81 | ||
843 | 83 | 82 | ||
844 | 84 | # FIXME: restore support for multi-configuration builds | ||
845 | 85 | def create_downstream_runs(ci_jenkins_build, extractor_build): | ||
846 | 86 | logger.debug("importing runs associated with JenkinsBuild at {}".format(extractor_build.url)) | ||
847 | 87 | for run in extractor_build.runs: | ||
848 | 88 | pass | ||
849 | 89 | # FIXME: retore this, it breaks within | ||
850 | 90 | #jenkins_run = create_jenkins_run_from_url(run.url, | ||
851 | 91 | # ci_jenkins_build) | ||
852 | 92 | |||
853 | 93 | def create_cobertura_report(jenkins_build, extractor_build): | 83 | def create_cobertura_report(jenkins_build, extractor_build): |
854 | 94 | """Get a Cobertura coverage report associated with a build url. | 84 | """Get a Cobertura coverage report associated with a build url. |
855 | 95 | 85 | ||
856 | @@ -248,7 +238,6 @@ | |||
857 | 248 | logger.info("Duplicate Jenkins build found at {}".format(url)) | 238 | logger.info("Duplicate Jenkins build found at {}".format(url)) |
858 | 249 | return None | 239 | return None |
859 | 250 | 240 | ||
860 | 251 | create_downstream_runs(jenkins_build, extractor_build) | ||
861 | 252 | create_downstream_builds(jenkins_build, extractor_build) | 241 | create_downstream_builds(jenkins_build, extractor_build) |
862 | 253 | create_cobertura_report(jenkins_build, extractor_build) | 242 | create_cobertura_report(jenkins_build, extractor_build) |
863 | 254 | create_jenkins_test_report(jenkins_build, extractor_build) | 243 | create_jenkins_test_report(jenkins_build, extractor_build) |
864 | 255 | 244 | ||
865 | === removed file 'util/jenkins_run.py' | |||
866 | --- util/jenkins_run.py 2013-07-16 17:29:47 +0000 | |||
867 | +++ util/jenkins_run.py 1970-01-01 00:00:00 +0000 | |||
868 | @@ -1,84 +0,0 @@ | |||
869 | 1 | # QA Dashboard | ||
870 | 2 | # Copyright 2012-2013 Canonical Ltd. | ||
871 | 3 | |||
872 | 4 | # This program is free software: you can redistribute it and/or modify it | ||
873 | 5 | # under the terms of the GNU Affero General Public License version 3, as | ||
874 | 6 | # published by the Free Software Foundation. | ||
875 | 7 | |||
876 | 8 | # This program is distributed in the hope that it will be useful, but | ||
877 | 9 | # WITHOUT ANY WARRANTY; without even the implied warranties of | ||
878 | 10 | # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR | ||
879 | 11 | # PURPOSE. See the GNU Affero General Public License for more details. | ||
880 | 12 | |||
881 | 13 | # You should have received a copy of the GNU Affero General Public License | ||
882 | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
883 | 15 | |||
884 | 16 | import logging | ||
885 | 17 | from django.db import IntegrityError, transaction | ||
886 | 18 | from ci.models import (JenkinsFlavor, | ||
887 | 19 | JenkinsRun, | ||
888 | 20 | Series, | ||
889 | 21 | JenkinsResult) | ||
890 | 22 | import ci.util.extractor as extractor | ||
891 | 23 | |||
892 | 24 | logger = logging.getLogger("qa_dashboard") | ||
893 | 25 | |||
894 | 26 | |||
895 | 27 | def create_jenkins_run_from_url(url, jenkins_build): | ||
896 | 28 | extractor_run = extractor.JenkinsRun(url) | ||
897 | 29 | flavor, created = JenkinsFlavor.objects.get_or_create(name=extractor_run.flavor) | ||
898 | 30 | series, created = Series.objects.get_or_create(name=extractor_run.series) | ||
899 | 31 | try: | ||
900 | 32 | result, created = JenkinsResult.objects.get_or_create(name=extractor_run.result) | ||
901 | 33 | except IntegrityError, e: | ||
902 | 34 | # no builds yet, IntegrityError on None name | ||
903 | 35 | transaction.rollback() | ||
904 | 36 | return None | ||
905 | 37 | try: | ||
906 | 38 | logger.debug("creating JenkinsRun at {}".format(url)) | ||
907 | 39 | jenkins_run = JenkinsRun.objects.create( | ||
908 | 40 | jenkins_build=jenkins_build, | ||
909 | 41 | number=extractor_run.number, | ||
910 | 42 | name=extractor_run.name, | ||
911 | 43 | url=url, | ||
912 | 44 | duration=extractor_run.duration.seconds, | ||
913 | 45 | timestamp=extractor_run.timestamp, | ||
914 | 46 | flavor=flavor, | ||
915 | 47 | series=series, | ||
916 | 48 | result=result) | ||
917 | 49 | except IntegrityError: | ||
918 | 50 | transaction.rollback() | ||
919 | 51 | logger.debug("Duplicate Jenkins run found at {}.".format(url)) | ||
920 | 52 | # TODO make it possible to update a run | ||
921 | 53 | return None | ||
922 | 54 | except TypeError, e: | ||
923 | 55 | logger.debug("Error creating JenkinsRun: {}".format(e)) | ||
924 | 56 | return None | ||
925 | 57 | # Disabling this until we have a JenkinsRun-specific JenkinsReport create | ||
926 | 58 | #logger.debug("Importing coverage reports associated with JenkinsRun at {}.".format(url)) | ||
927 | 59 | # TODO FJG Fix this | ||
928 | 60 | #try: | ||
929 | 61 | # jenkins_run.coverage_report = JenkinsCoverageReport.objects.create( | ||
930 | 62 | # # FIXME: restore | ||
931 | 63 | # # run = jenkins_run, | ||
932 | 64 | # xml_text=extractor_run.coverage_report.xml_text, | ||
933 | 65 | # line_rate=extractor_run.coverage_report.line_rate, | ||
934 | 66 | # branch_rate=extractor_run.coverage_report.branch_rate) | ||
935 | 67 | # jenkins_run.save() | ||
936 | 68 | #except EnvironmentError: | ||
937 | 69 | # # no data was found at the coverage report url | ||
938 | 70 | # pass | ||
939 | 71 | #logger.debug("importing test reports associated with JenkinsRun at {}".format(url)) | ||
940 | 72 | #try: | ||
941 | 73 | # jenkins_run.test_report = JenkinsTestReport.objects.create( | ||
942 | 74 | # fail_count=extractor_run.test_report.fail_count, | ||
943 | 75 | # pass_count=extractor_run.test_report.pass_count, | ||
944 | 76 | # skip_count=extractor_run.test_report.skip_count, | ||
945 | 77 | # duration=extractor_run.test_report.duration.seconds) | ||
946 | 78 | # jenkins_run.save() | ||
947 | 79 | #except EnvironmentError: | ||
948 | 80 | # # no data was found at the test report url | ||
949 | 81 | # pass | ||
950 | 82 | #except EnvironmentError, e: | ||
951 | 83 | # logger.error(e) | ||
952 | 84 | return jenkins_run |
PASSED: Continuous integration, rev:39 s-jenkins: 8080/job/ helipad- ci-ci/58/
http://
Executed test runs:
Click here to trigger a rebuild: s-jenkins: 8080/job/ helipad- ci-ci/58/ rebuild
http://