Index: visual_studio/NativeClientVSAddIn/buildbot_run.py |
diff --git a/visual_studio/NativeClientVSAddIn/buildbot_run.py b/visual_studio/NativeClientVSAddIn/buildbot_run.py |
index 4c0b929c18cd54335b965897de4d1aa99f9718eb..65463c58acbf1cea6e54e3bc3b606ed0b95c03d0 100755 |
--- a/visual_studio/NativeClientVSAddIn/buildbot_run.py |
+++ b/visual_studio/NativeClientVSAddIn/buildbot_run.py |
@@ -28,7 +28,7 @@ def Log(msg): |
sys.stdout.flush() |
-def RunCommand(cmd, env=None): |
+def RunCommand(cmd, env=None, check_return_code=True): |
Log("Running: %s" % cmd) |
Log("CWD: %s" % os.getcwd()) |
if type(cmd) == str: |
@@ -41,23 +41,19 @@ def RunCommand(cmd, env=None): |
cmd[0] = './' + cmd[0] |
rtn = subprocess.call(cmd, env=env) |
- if rtn: |
+ if check_return_code and rtn: |
Log("Command returned non-zero exit code: %s" % rtn) |
Log('@@@STEP_FAILURE@@@') |
sys.exit(1) |
+ return rtn |
-def StepBuild(): |
- Log('@@@BUILD_STEP build addin@@@') |
- rev = os.environ.get('BUILDBOT_GOT_REVISION') |
- if not rev: |
- Log('No BUILDBOT_GOT_REVISION found in environ') |
- Log('@@@STEP_FAILURE@@@') |
- sys.exit(1) |
+def StepBuild(revision): |
+ Log('@@@BUILD_STEP build addin@@@') |
- if rev[0] == 'r': |
- rev = rev[1:] |
+ if revision[0] == 'r': |
+ revision = revision[1:] |
# make a backup of AssemblyInfo.cs before we modify it |
filename = os.path.join('NativeClientVSAddIn', 'AssemblyInfo.cs') |
@@ -72,7 +68,7 @@ def StepBuild(): |
contents = f.read() |
pattern = r'(\[assembly: AssemblyInformationalVersion\("\d+\.\d+\.).*"\)\]' |
- contents = re.sub(pattern, r'\g<1>%s")]' % rev, contents) |
+ contents = re.sub(pattern, r'\g<1>%s")]' % revision, contents) |
with open(filename, 'wb') as f: |
f.write(contents) |
@@ -162,20 +158,33 @@ def _GetGsutil(): |
return gsutil |
-def StepArchive(): |
- rev = os.environ.get('BUILDBOT_GOT_REVISION') |
- if not rev: |
- Log('No BUILDBOT_GOT_REVISION found in environ') |
- Log('@@@STEP_FAILURE@@@') |
- sys.exit(1) |
- Log('@@@BUILD_STEP archive build [r%s]@@@' % rev) |
+def StepArchive(revision): |
+ # The BUILDBOT_REVISION environment variable gets set to the revsion that |
+ # triggered a given build. For periodic schedulers this will be an empty |
+ # string since they are not triggered by a particular revision. We don't |
+ # want to upload the build results to google storage for periodic schedulers |
+ # so we skip this step in that case. |
+ triggered_revision = os.environ.get('BUILDBOT_REVISION') |
+ if triggered_revision == '' or triggered_revision is None: |
+ Log('Skipping archive step: BUILDBOT_REVISION not set') |
+ return |
+ |
+ Log('@@@BUILD_STEP archive build [r%s]@@@' % revision) |
basename = 'vs_addin.tgz' |
- remote_name = '%s/%s/%s' % (GSPATH, rev, basename) |
+ remote_name = '%s/%s/%s' % (GSPATH, revision, basename) |
local_filename = os.path.join('..', '..', 'out', |
'vs_addin', basename) |
- cmd = _GetGsutil() |
- cmd += ['cp', '-a', 'public-read', local_filename, |
- 'gs://' + remote_name] |
+ gs_remote_name = 'gs://' + remote_name |
+ gsutil = _GetGsutil() |
+ |
+ # Check for existing file on google storage |
+ if RunCommand(gsutil + ['ls', gs_remote_name], check_return_code=False) == 0: |
+ Log('File already exists on google storage: %s' % gs_remote_name) |
+ Log('@@@STEP_FAILURE@@@') |
+ sys.exit(1) |
+ |
+ # Upload to google storage |
+ cmd = gsutil + ['cp', '-a', 'public-read', local_filename, gs_remote_name] |
RunCommand(cmd) |
url = "%s/%s" % (GSURL, remote_name) |
Log('@@@STEP_LINK@download@%s@@@' % url) |
@@ -188,11 +197,18 @@ def main(): |
del os.environ['BOTO_CONFIG'] |
if 'AWS_CREDENTIAL_FILE' in os.environ: |
del os.environ['AWS_CREDENTIAL_FILE'] |
- StepBuild() |
+ |
+ revision = os.environ.get('BUILDBOT_GOT_REVISION') |
+ if revision is None: |
+ Log('No BUILDBOT_GOT_REVISION found in environ') |
+ Log('@@@STEP_FAILURE@@@') |
+ sys.exit(1) |
+ |
+ StepBuild(revision) |
StepInstall() |
StepInstallSDK() |
StepTest() |
- StepArchive() |
+ StepArchive(revision) |
if __name__ == '__main__': |