OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 3 # Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
4 # for details. All rights reserved. Use of this source code is governed by a | 4 # for details. All rights reserved. Use of this source code is governed by a |
5 # BSD-style license that can be found in the LICENSE file. | 5 # BSD-style license that can be found in the LICENSE file. |
6 | 6 |
7 import hashlib | 7 import hashlib |
8 import imp | 8 import imp |
9 import optparse | 9 import optparse |
10 import os | 10 import os |
11 import subprocess | 11 import subprocess |
12 import sys | 12 import sys |
13 | 13 |
14 DART_DIR = os.path.dirname(os.path.dirname(__file__)) | 14 DART_DIR = os.path.dirname(os.path.dirname(__file__)) |
15 GSUTIL = os.path.join(DART_DIR, 'third_party', 'gsutil', 'gsutil') | 15 GSUTIL = os.path.join(DART_DIR, 'third_party', 'gsutil', 'gsutil') |
16 BOT_UTILS = os.path.join(DART_DIR, 'tools', 'bots', 'bot_utils.py') | 16 BOT_UTILS = os.path.join(DART_DIR, 'tools', 'bots', 'bot_utils.py') |
17 BASENAME_PATTERN = 'darteditor-%(system)s-%(bits)s' | 17 BASENAME_PATTERN = 'darteditor-%(system)s-%(bits)s' |
18 FILENAME_PATTERN = BASENAME_PATTERN + '.zip' | 18 FILENAME_PATTERN = BASENAME_PATTERN + '.zip' |
19 BUCKET_PATTERN = ( | |
20 'gs://dart-editor-archive-trunk/%(revision)s/' + FILENAME_PATTERN) | |
21 | 19 |
22 DRY_RUN = False | 20 DRY_RUN = False |
23 | 21 |
24 bot_utils = imp.load_source('bot_utils', BOT_UTILS) | 22 bot_utils = imp.load_source('bot_utils', BOT_UTILS) |
25 | 23 |
26 class ChangedWorkingDirectory(object): | 24 class ChangedWorkingDirectory(object): |
27 def __init__(self, working_directory): | 25 def __init__(self, working_directory): |
28 self._working_directory = working_directory | 26 self._working_directory = working_directory |
29 | 27 |
30 def __enter__(self): | 28 def __enter__(self): |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 with ChangedWorkingDirectory(os.path.dirname(to_dir)): | 105 with ChangedWorkingDirectory(os.path.dirname(to_dir)): |
108 run(['zip', '-r9', dirname + '.zip', dirname]) | 106 run(['zip', '-r9', dirname + '.zip', dirname]) |
109 | 107 |
110 def unzip_and_copy(extracted_zipfiledir, to_dir): | 108 def unzip_and_copy(extracted_zipfiledir, to_dir): |
111 rm_tree(extracted_zipfiledir) | 109 rm_tree(extracted_zipfiledir) |
112 run(['unzip', extracted_zipfiledir + '.zip', '-d', | 110 run(['unzip', extracted_zipfiledir + '.zip', '-d', |
113 os.path.dirname(extracted_zipfiledir)]) | 111 os.path.dirname(extracted_zipfiledir)]) |
114 rm_tree(to_dir) | 112 rm_tree(to_dir) |
115 copy_tree(extracted_zipfiledir, to_dir) | 113 copy_tree(extracted_zipfiledir, to_dir) |
116 | 114 |
117 def download_from_old_location(config, destination): | |
118 bucket = BUCKET_PATTERN % config | |
119 run([GSUTIL, 'cp', bucket, destination]) | |
120 | |
121 def upload_to_old_location(config, source_zip): | |
122 if not DRY_RUN: | |
123 bot_utils.CreateChecksumFile( | |
124 source_zip, mangled_filename=os.path.basename(source_zip)) | |
125 md5_zip_file = source_zip + '.md5sum' | |
126 | |
127 bucket = BUCKET_PATTERN % config | |
128 run([GSUTIL, 'cp', source_zip, bucket]) | |
129 run([GSUTIL, 'cp', md5_zip_file, bucket + '.md5sum']) | |
130 run([GSUTIL, 'setacl', 'public-read', bucket]) | |
131 run([GSUTIL, 'setacl', 'public-read', bucket + '.md5sum']) | |
132 | |
133 def download_from_new_location(channel, config, destination): | 115 def download_from_new_location(channel, config, destination): |
134 namer = bot_utils.GCSNamer(channel, | 116 namer = bot_utils.GCSNamer(channel, |
135 bot_utils.ReleaseType.RAW) | 117 bot_utils.ReleaseType.RAW) |
136 bucket = namer.editor_zipfilepath(config['revision'], config['system'], | 118 bucket = namer.editor_zipfilepath(config['revision'], config['system'], |
137 config['bits']) | 119 config['bits']) |
138 run([GSUTIL, 'cp', bucket, destination]) | 120 run([GSUTIL, 'cp', bucket, destination]) |
139 | 121 |
140 def upload_to_new_location(channel, config, source_zip): | 122 def upload_to_new_location(channel, config, source_zip): |
141 namer = bot_utils.GCSNamer(channel, | 123 namer = bot_utils.GCSNamer(channel, |
142 bot_utils.ReleaseType.SIGNED) | 124 bot_utils.ReleaseType.SIGNED) |
143 zipfilename = namer.editor_zipfilename(config['system'], config['bits']) | 125 zipfilename = namer.editor_zipfilename(config['system'], config['bits']) |
144 bucket = namer.editor_zipfilepath(config['revision'], config['system'], | 126 bucket = namer.editor_zipfilepath(config['revision'], config['system'], |
145 config['bits']) | 127 config['bits']) |
146 | 128 |
147 if not DRY_RUN: | 129 if not DRY_RUN: |
148 bot_utils.CreateChecksumFile(source_zip, mangled_filename=zipfilename) | 130 bot_utils.CreateChecksumFile(source_zip, mangled_filename=zipfilename) |
149 md5_zip_file = source_zip + '.md5sum' | 131 md5_zip_file = source_zip + '.md5sum' |
150 | 132 |
151 run([GSUTIL, 'cp', source_zip, bucket]) | 133 run([GSUTIL, 'cp', source_zip, bucket]) |
152 run([GSUTIL, 'cp', md5_zip_file, bucket + '.md5sum']) | 134 run([GSUTIL, 'cp', md5_zip_file, bucket + '.md5sum']) |
153 run([GSUTIL, 'setacl', 'public-read', bucket]) | 135 run([GSUTIL, 'setacl', 'public-read', bucket]) |
154 run([GSUTIL, 'setacl', 'public-read', bucket + '.md5sum']) | 136 run([GSUTIL, 'setacl', 'public-read', bucket + '.md5sum']) |
155 | 137 |
156 def main(): | 138 def main(): |
157 if sys.platform != 'linux2': | 139 if sys.platform != 'linux2': |
158 print "This script was only tested on linux. Please run it on linux!" | 140 print "This script was only tested on linux. Please run it on linux!" |
159 sys.exit(1) | 141 sys.exit(1) |
160 | 142 |
161 parser = GetOptionsParser() | 143 parser = GetOptionsParser() |
162 (options, args) = parser.parse_args() | 144 (options, args) = parser.parse_args() |
163 | 145 |
164 if not options.scratch_dir: | 146 if not options.scratch_dir: |
165 die("No scratch directory given.") | 147 die("No scratch directory given.") |
166 if not options.revision: | 148 if not options.revision: |
167 die("No revision given.") | 149 die("No revision given.") |
168 if not options.prepare and not options.deploy: | 150 if not options.prepare and not options.deploy: |
169 die("No prepare/deploy parameter given.") | 151 die("No prepare/deploy parameter given.") |
170 if options.prepare and options.deploy: | 152 if options.prepare and options.deploy: |
171 die("Can't have prepare and deploy parameters at the same time.") | 153 die("Can't have prepare and deploy parameters at the same time.") |
172 if len(args) > 0: | 154 if len(args) > 0: |
173 die("Invalid additional arguments: %s." % args) | 155 die("Invalid additional arguments: %s." % args) |
174 | 156 |
175 if options.channel: | 157 if not options.channel: |
176 assert options.channel in bot_utils.Channel.ALL_CHANNELS | 158 die("You need to specify a channel with --channel.") |
177 | 159 |
178 global DRY_RUN | 160 global DRY_RUN |
179 DRY_RUN = options.dry_run | 161 DRY_RUN = options.dry_run |
180 | 162 |
181 downloads_dir = os.path.join(options.scratch_dir, 'downloads') | 163 downloads_dir = os.path.join(options.scratch_dir, 'downloads') |
182 presign_dir = os.path.join(options.scratch_dir, 'presign') | 164 presign_dir = os.path.join(options.scratch_dir, 'presign') |
183 postsign_dir = os.path.join(options.scratch_dir, 'postsign') | 165 postsign_dir = os.path.join(options.scratch_dir, 'postsign') |
184 uploads_dir = os.path.join(options.scratch_dir, 'uploads') | 166 uploads_dir = os.path.join(options.scratch_dir, 'uploads') |
185 | 167 |
186 if options.prepare: | 168 if options.prepare: |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 } | 213 } |
232 | 214 |
233 destination = os.path.join(downloads_dir, FILENAME_PATTERN % config) | 215 destination = os.path.join(downloads_dir, FILENAME_PATTERN % config) |
234 destination_dir = os.path.join(downloads_dir, BASENAME_PATTERN % config) | 216 destination_dir = os.path.join(downloads_dir, BASENAME_PATTERN % config) |
235 | 217 |
236 deploy = os.path.join(uploads_dir, FILENAME_PATTERN % config) | 218 deploy = os.path.join(uploads_dir, FILENAME_PATTERN % config) |
237 deploy_dir = os.path.join(uploads_dir, BASENAME_PATTERN % config) | 219 deploy_dir = os.path.join(uploads_dir, BASENAME_PATTERN % config) |
238 | 220 |
239 if options.prepare: | 221 if options.prepare: |
240 # Download *.zip files from GCS buckets | 222 # Download *.zip files from GCS buckets |
241 if options.channel: | 223 download_from_new_location(options.channel, config, destination) |
242 download_from_new_location(options.channel, config, destination) | |
243 else: | |
244 download_from_old_location(config, destination) | |
245 | 224 |
246 run(['unzip', destination, '-d', destination_dir]) | 225 run(['unzip', destination, '-d', destination_dir]) |
247 | 226 |
248 for name in ['editor', 'chrome', 'content_shell']: | 227 for name in ['editor', 'chrome', 'content_shell']: |
249 from_path = os.path.join(destination_dir, locations[system][name]) | 228 from_path = os.path.join(destination_dir, locations[system][name]) |
250 to_path = os.path.join( | 229 to_path = os.path.join( |
251 presign_dir, locations[system]['%s_scratch' % name] % config) | 230 presign_dir, locations[system]['%s_scratch' % name] % config) |
252 | 231 |
253 if locations[system]['zip']: | 232 if locations[system]['zip']: |
254 # We copy a .app directory directory and zip it | 233 # We copy a .app directory directory and zip it |
(...skipping 14 matching lines...) Expand all Loading... |
269 unzip_and_copy(from_path, to_path) | 248 unzip_and_copy(from_path, to_path) |
270 else: | 249 else: |
271 # We copy the signed .exe file | 250 # We copy the signed .exe file |
272 copy_file(from_path, to_path) | 251 copy_file(from_path, to_path) |
273 | 252 |
274 deploy_zip_file = os.path.abspath(deploy) | 253 deploy_zip_file = os.path.abspath(deploy) |
275 with ChangedWorkingDirectory(deploy_dir): | 254 with ChangedWorkingDirectory(deploy_dir): |
276 run(['zip', '-r9', deploy_zip_file, 'dart']) | 255 run(['zip', '-r9', deploy_zip_file, 'dart']) |
277 | 256 |
278 # Upload *.zip/*.zip.md5sum and set 'public-read' ACL | 257 # Upload *.zip/*.zip.md5sum and set 'public-read' ACL |
279 if options.channel: | 258 upload_to_new_location(options.channel, config, deploy_zip_file) |
280 upload_to_new_location(options.channel, config, deploy_zip_file) | |
281 else: | |
282 upload_to_old_location(config, deploy_zip_file) | |
283 | 259 |
284 if __name__ == '__main__': | 260 if __name__ == '__main__': |
285 main() | 261 main() |
286 | 262 |
OLD | NEW |