@@ -107,8 +107,8 @@ def _log(self, msg):
107
107
version = self .version .slug ,
108
108
msg = msg ))
109
109
110
- def run (self , pk , version_pk = None , build_pk = None , record = True , docker = False ,
111
- search = True , force = False , localmedia = True , ** kwargs ):
110
+ def run (self , pk , version_pk = None , build_pk = None , record = True ,
111
+ docker = False , search = True , force = False , localmedia = True , ** __ ):
112
112
113
113
self .project = self .get_project (pk )
114
114
self .version = self .get_version (self .project , version_pk )
@@ -118,9 +118,22 @@ def run(self, pk, version_pk=None, build_pk=None, record=True, docker=False,
118
118
self .build_force = force
119
119
self .config = None
120
120
121
- env_cls = LocalEnvironment
122
- self .setup_env = env_cls (project = self .project , version = self .version ,
123
- build = self .build , record = record )
121
+ setup_successful = self .run_setup (record = record )
122
+ if setup_successful :
123
+ self .run_build (record = record , docker = docker )
124
+
125
+ def run_setup (self , record = True ):
126
+ """Run setup in the local environment.
127
+
128
+ Return True if successful.
129
+
130
+ """
131
+ self .setup_env = LocalEnvironment (
132
+ project = self .project ,
133
+ version = self .version ,
134
+ build = self .build ,
135
+ record = record
136
+ )
124
137
125
138
# Environment used for code checkout & initial configuration reading
126
139
with self .setup_env :
@@ -145,16 +158,34 @@ def run(self, pk, version_pk=None, build_pk=None, record=True, docker=False,
145
158
146
159
if self .setup_env .failure or self .config is None :
147
160
self ._log ('Failing build because of setup failure: %s' % self .setup_env .failure )
148
- self .send_notifications ()
161
+
162
+ # Send notification to users only if the build didn't fail because of
163
+ # LockTimeout: this exception occurs when a build is triggered before the previous
164
+ # one has finished (e.g. two webhooks, one after the other)
165
+ if not isinstance (self .setup_env .failure , vcs_support_utils .LockTimeout ):
166
+ self .send_notifications ()
167
+
149
168
self .setup_env .update_build (state = BUILD_STATE_FINISHED )
150
- return None
169
+ return False
151
170
152
171
if self .setup_env .successful and not self .project .has_valid_clone :
153
172
self .set_valid_clone ()
154
173
174
+ return True
175
+
176
+ def run_build (self , docker = False , record = True ):
177
+ """Build the docs in an environment.
178
+
179
+ If `docker` is True, or Docker is enabled by the settings.DOCKER_ENABLE
180
+ setting, then build in a Docker environment. Otherwise build locally.
181
+
182
+ """
155
183
env_vars = self .get_env_vars ()
184
+
156
185
if docker or settings .DOCKER_ENABLE :
157
186
env_cls = DockerEnvironment
187
+ else :
188
+ env_cls = LocalEnvironment
158
189
self .build_env = env_cls (project = self .project , version = self .version ,
159
190
build = self .build , record = record , environment = env_vars )
160
191
@@ -502,7 +533,7 @@ def update_imported_docs(version_pk):
502
533
try :
503
534
api_v2 .project (project .pk ).sync_versions .post (version_post_data )
504
535
except HttpClientError as e :
505
- log .error ("Sync Versions Exception: %s" % e .content )
536
+ log .error ("Sync Versions Exception: %s" , e .content )
506
537
except Exception as e :
507
538
log .error ("Unknown Sync Versions Exception" , exc_info = True )
508
539
return ret_dict
@@ -740,8 +771,8 @@ def _manage_imported_files(version, path, commit):
740
771
).exclude (commit = commit ).delete ()
741
772
# Purge Cache
742
773
changed_files = [resolve_path (
743
- version .project , filename = file , version_slug = version .slug ,
744
- ) for file in changed_files ]
774
+ version .project , filename = fname , version_slug = version .slug ,
775
+ ) for fname in changed_files ]
745
776
cdn_ids = getattr (settings , 'CDN_IDS' , None )
746
777
if cdn_ids :
747
778
if version .project .slug in cdn_ids :
0 commit comments