| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Entry point for the AddIn build bot. | 6 """Entry point for the AddIn build bot. |
| 7 | 7 |
| 8 Perform build steps and output results using the buildbot | 8 Perform build steps and output results using the buildbot |
| 9 annootator syntax | 9 annootator syntax |
| 10 """ | 10 """ |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 GSPATH = 'nativeclient-mirror/nacl/nacl_sdk/sdk' | 21 GSPATH = 'nativeclient-mirror/nacl/nacl_sdk/sdk' |
| 22 SDKROOT = os.path.join('..', '..', 'out', 'sdk') | 22 SDKROOT = os.path.join('..', '..', 'out', 'sdk') |
| 23 SDK_VERSIONS = ['pepper_31', 'pepper_32', 'pepper_canary'] | 23 SDK_VERSIONS = ['pepper_31', 'pepper_32', 'pepper_canary'] |
| 24 | 24 |
| 25 | 25 |
| 26 def Log(msg): | 26 def Log(msg): |
| 27 sys.stdout.write(msg + '\n') | 27 sys.stdout.write(msg + '\n') |
| 28 sys.stdout.flush() | 28 sys.stdout.flush() |
| 29 | 29 |
| 30 | 30 |
| 31 def RunCommand(cmd, env=None): | 31 def RunCommand(cmd, env=None, check_return_code=True): |
| 32 Log("Running: %s" % cmd) | 32 Log("Running: %s" % cmd) |
| 33 Log("CWD: %s" % os.getcwd()) | 33 Log("CWD: %s" % os.getcwd()) |
| 34 if type(cmd) == str: | 34 if type(cmd) == str: |
| 35 cmd = cmd.split() | 35 cmd = cmd.split() |
| 36 | 36 |
| 37 if sys.platform == 'cygwin': | 37 if sys.platform == 'cygwin': |
| 38 # allow bat files in the current working directory to | 38 # allow bat files in the current working directory to |
| 39 # be executed on cygwin as they are on win32 | 39 # be executed on cygwin as they are on win32 |
| 40 if not os.path.dirname(cmd[0]) and os.path.exists(cmd[0]): | 40 if not os.path.dirname(cmd[0]) and os.path.exists(cmd[0]): |
| 41 cmd[0] = './' + cmd[0] | 41 cmd[0] = './' + cmd[0] |
| 42 | 42 |
| 43 rtn = subprocess.call(cmd, env=env) | 43 rtn = subprocess.call(cmd, env=env) |
| 44 if rtn: | 44 if check_return_code and rtn: |
| 45 Log("Command returned non-zero exit code: %s" % rtn) | 45 Log("Command returned non-zero exit code: %s" % rtn) |
| 46 Log('@@@STEP_FAILURE@@@') | 46 Log('@@@STEP_FAILURE@@@') |
| 47 sys.exit(1) | 47 sys.exit(1) |
| 48 | 48 |
| 49 return rtn |
| 49 | 50 |
| 50 def StepBuild(): | 51 |
| 52 def StepBuild(revision): |
| 51 Log('@@@BUILD_STEP build addin@@@') | 53 Log('@@@BUILD_STEP build addin@@@') |
| 52 | 54 |
| 53 rev = os.environ.get('BUILDBOT_GOT_REVISION') | 55 if revision[0] == 'r': |
| 54 if not rev: | 56 revision = revision[1:] |
| 55 Log('No BUILDBOT_GOT_REVISION found in environ') | |
| 56 Log('@@@STEP_FAILURE@@@') | |
| 57 sys.exit(1) | |
| 58 | |
| 59 if rev[0] == 'r': | |
| 60 rev = rev[1:] | |
| 61 | 57 |
| 62 # make a backup of AssemblyInfo.cs before we modify it | 58 # make a backup of AssemblyInfo.cs before we modify it |
| 63 filename = os.path.join('NativeClientVSAddIn', 'AssemblyInfo.cs') | 59 filename = os.path.join('NativeClientVSAddIn', 'AssemblyInfo.cs') |
| 64 backup = filename + '.orig' | 60 backup = filename + '.orig' |
| 65 shutil.copyfile(filename, backup) | 61 shutil.copyfile(filename, backup) |
| 66 | 62 |
| 67 try: | 63 try: |
| 68 # Before we do the build, insert the revsion information | 64 # Before we do the build, insert the revsion information |
| 69 # info AssemblyInfo.cs. Thie will then be reported as | 65 # info AssemblyInfo.cs. Thie will then be reported as |
| 70 # the addin version in visual studio. | 66 # the addin version in visual studio. |
| 71 with open(filename, 'rb') as f: | 67 with open(filename, 'rb') as f: |
| 72 contents = f.read() | 68 contents = f.read() |
| 73 | 69 |
| 74 pattern = r'(\[assembly: AssemblyInformationalVersion\("\d+\.\d+\.).*"\)\]' | 70 pattern = r'(\[assembly: AssemblyInformationalVersion\("\d+\.\d+\.).*"\)\]' |
| 75 contents = re.sub(pattern, r'\g<1>%s")]' % rev, contents) | 71 contents = re.sub(pattern, r'\g<1>%s")]' % revision, contents) |
| 76 | 72 |
| 77 with open(filename, 'wb') as f: | 73 with open(filename, 'wb') as f: |
| 78 f.write(contents) | 74 f.write(contents) |
| 79 | 75 |
| 80 RunCommand('build.bat') | 76 RunCommand('build.bat') |
| 81 finally: | 77 finally: |
| 82 # Once build is done restore original file | 78 # Once build is done restore original file |
| 83 os.remove(filename) | 79 os.remove(filename) |
| 84 os.rename(backup, filename) | 80 os.rename(backup, filename) |
| 85 | 81 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 gsutil = [gsutil] | 151 gsutil = [gsutil] |
| 156 else: | 152 else: |
| 157 if os.name == 'nt': | 153 if os.name == 'nt': |
| 158 gsutil = [sys.executable, _FindInPath('gsutil')] | 154 gsutil = [sys.executable, _FindInPath('gsutil')] |
| 159 else: | 155 else: |
| 160 gsutil = ['gsutil'] | 156 gsutil = ['gsutil'] |
| 161 | 157 |
| 162 return gsutil | 158 return gsutil |
| 163 | 159 |
| 164 | 160 |
| 165 def StepArchive(): | 161 def StepArchive(revision): |
| 166 rev = os.environ.get('BUILDBOT_GOT_REVISION') | 162 # The BUILDBOT_REVISION environment variable gets set to the revsion that |
| 167 if not rev: | 163 # triggered a given build. For periodic schedulers this will be an empty |
| 168 Log('No BUILDBOT_GOT_REVISION found in environ') | 164 # string since they are not triggered by a particular revision. We don't |
| 165 # want to upload the build results to google storage for periodic schedulers |
| 166 # so we skip this step in that case. |
| 167 triggered_revision = os.environ.get('BUILDBOT_REVISION') |
| 168 if triggered_revision == '' or triggered_revision is None: |
| 169 Log('Skipping archive step: BUILDBOT_REVISION not set') |
| 170 return |
| 171 |
| 172 Log('@@@BUILD_STEP archive build [r%s]@@@' % revision) |
| 173 basename = 'vs_addin.tgz' |
| 174 remote_name = '%s/%s/%s' % (GSPATH, revision, basename) |
| 175 local_filename = os.path.join('..', '..', 'out', |
| 176 'vs_addin', basename) |
| 177 gs_remote_name = 'gs://' + remote_name |
| 178 gsutil = _GetGsutil() |
| 179 |
| 180 # Check for existing file on google storage |
| 181 if RunCommand(gsutil + ['ls', gs_remote_name], check_return_code=False) == 0: |
| 182 Log('File already exists on google storage: %s' % gs_remote_name) |
| 169 Log('@@@STEP_FAILURE@@@') | 183 Log('@@@STEP_FAILURE@@@') |
| 170 sys.exit(1) | 184 sys.exit(1) |
| 171 Log('@@@BUILD_STEP archive build [r%s]@@@' % rev) | 185 |
| 172 basename = 'vs_addin.tgz' | 186 # Upload to google storage |
| 173 remote_name = '%s/%s/%s' % (GSPATH, rev, basename) | 187 cmd = gsutil + ['cp', '-a', 'public-read', local_filename, gs_remote_name] |
| 174 local_filename = os.path.join('..', '..', 'out', | |
| 175 'vs_addin', basename) | |
| 176 cmd = _GetGsutil() | |
| 177 cmd += ['cp', '-a', 'public-read', local_filename, | |
| 178 'gs://' + remote_name] | |
| 179 RunCommand(cmd) | 188 RunCommand(cmd) |
| 180 url = "%s/%s" % (GSURL, remote_name) | 189 url = "%s/%s" % (GSURL, remote_name) |
| 181 Log('@@@STEP_LINK@download@%s@@@' % url) | 190 Log('@@@STEP_LINK@download@%s@@@' % url) |
| 182 | 191 |
| 183 | 192 |
| 184 def main(): | 193 def main(): |
| 185 # Remove BOTO_CONFIG from the environment -- we want to use the NaCl .boto | 194 # Remove BOTO_CONFIG from the environment -- we want to use the NaCl .boto |
| 186 # file that has access to gs://nativeclient-mirror. | 195 # file that has access to gs://nativeclient-mirror. |
| 187 if 'BOTO_CONFIG' in os.environ: | 196 if 'BOTO_CONFIG' in os.environ: |
| 188 del os.environ['BOTO_CONFIG'] | 197 del os.environ['BOTO_CONFIG'] |
| 189 if 'AWS_CREDENTIAL_FILE' in os.environ: | 198 if 'AWS_CREDENTIAL_FILE' in os.environ: |
| 190 del os.environ['AWS_CREDENTIAL_FILE'] | 199 del os.environ['AWS_CREDENTIAL_FILE'] |
| 191 StepBuild() | 200 |
| 201 revision = os.environ.get('BUILDBOT_GOT_REVISION') |
| 202 if revision is None: |
| 203 Log('No BUILDBOT_GOT_REVISION found in environ') |
| 204 Log('@@@STEP_FAILURE@@@') |
| 205 sys.exit(1) |
| 206 |
| 207 StepBuild(revision) |
| 192 StepInstall() | 208 StepInstall() |
| 193 StepInstallSDK() | 209 StepInstallSDK() |
| 194 StepTest() | 210 StepTest() |
| 195 StepArchive() | 211 StepArchive(revision) |
| 196 | 212 |
| 197 | 213 |
| 198 if __name__ == '__main__': | 214 if __name__ == '__main__': |
| 199 main() | 215 main() |
| OLD | NEW |