Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | # -*- coding: utf-8 -*- |
Mike Frysinger | dceb3e4 | 2022-09-13 05:35:25 -0400 | [diff] [blame] | 3 | # Copyright 2020 The ChromiumOS Authors |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 4 | # Use of this source code is governed by a BSD-style license that can be |
| 5 | # found in the LICENSE file. |
| 6 | |
| 7 | """Uprev crostini tast data dependencies""" |
| 8 | |
| 9 | import argparse |
James Ye | d071402 | 2022-04-05 17:57:42 +1000 | [diff] [blame] | 10 | import itertools |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 11 | import json |
| 12 | import os |
James Ye | d071402 | 2022-04-05 17:57:42 +1000 | [diff] [blame] | 13 | import subprocess |
| 14 | import urllib.request |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 15 | |
James Ye | d071402 | 2022-04-05 17:57:42 +1000 | [diff] [blame] | 16 | BUCKET_NAME = 'cros-containers-staging' |
| 17 | ARCHES = ['amd64', 'arm64'] |
| 18 | CONTAINER_TYPES = ['test', 'app_test'] |
| 19 | RELEASES = ['buster', 'bullseye'] |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 20 | |
James Ye | d071402 | 2022-04-05 17:57:42 +1000 | [diff] [blame] | 21 | |
| 22 | def update_data_file(url, filepath, size, sha256sum): |
| 23 | result = {'url': url, 'size': size, 'sha256sum': sha256sum} |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 24 | |
| 25 | print(f'Updated {os.path.basename(filepath)}') |
| 26 | with open(filepath, 'w') as f: |
| 27 | json.dump(result, f, indent=4, sort_keys=True) |
| 28 | |
| 29 | def main(): |
| 30 | parser = argparse.ArgumentParser(description=__doc__) |
| 31 | parser.add_argument( |
| 32 | 'milestone', help='milestone number, e.g. 78') |
| 33 | args = parser.parse_args() |
| 34 | milestone = args.milestone |
| 35 | |
| 36 | tast_tests = subprocess.check_output( |
| 37 | ['repo', 'list', '-pf', 'chromiumos/platform/tast-tests'] |
| 38 | ).decode().strip() |
| 39 | data_dir = os.path.join(tast_tests, |
| 40 | 'src/chromiumos/tast/local/crostini/data') |
| 41 | |
James Ye | d071402 | 2022-04-05 17:57:42 +1000 | [diff] [blame] | 42 | images = json.loads(urllib.request.urlopen( |
| 43 | f'https://storage.googleapis.com/{BUCKET_NAME}/{milestone}/streams/v1/images.json' |
| 44 | ).read()) |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 45 | |
James Ye | d071402 | 2022-04-05 17:57:42 +1000 | [diff] [blame] | 46 | for arch, ctype, release in itertools.product(ARCHES, CONTAINER_TYPES, RELEASES): |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 47 | # The container URLs use 'arm64', but the tast data files use 'arm' |
| 48 | if arch == 'arm64': |
| 49 | file_arch = 'arm' |
| 50 | else: |
| 51 | file_arch = arch |
| 52 | |
James Ye | d071402 | 2022-04-05 17:57:42 +1000 | [diff] [blame] | 53 | product = images['products'][f'debian:{release}:{arch}:{ctype}'] |
| 54 | latest_container = max(product['versions'].keys()) |
| 55 | items = product['versions'][latest_container]['items'] |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 56 | |
James Ye | d071402 | 2022-04-05 17:57:42 +1000 | [diff] [blame] | 57 | base_url = f'gs://{BUCKET_NAME}/{milestone}/' |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 58 | |
James Ye | d071402 | 2022-04-05 17:57:42 +1000 | [diff] [blame] | 59 | metadata_item = items['lxd.tar.xz'] |
| 60 | metadata_file = f'crostini_{ctype}_container_metadata_{release}_{file_arch}.tar.xz.external' |
| 61 | update_data_file( |
| 62 | base_url + metadata_item['path'], |
| 63 | os.path.join(data_dir, metadata_file), |
| 64 | metadata_item['size'], |
| 65 | metadata_item['sha256'], |
| 66 | ) |
| 67 | |
| 68 | rootfs_item = items['rootfs.squashfs'] |
| 69 | rootfs_file = f'crostini_{ctype}_container_rootfs_{release}_{file_arch}.squashfs.external' |
| 70 | update_data_file( |
| 71 | base_url + rootfs_item['path'], |
| 72 | os.path.join(data_dir, rootfs_file), |
| 73 | rootfs_item['size'], |
| 74 | rootfs_item['sha256'], |
| 75 | ) |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 76 | |
Fergus Dall | 1cf3720 | 2020-10-09 16:09:59 +1100 | [diff] [blame] | 77 | print('Tast data dependencies updated') |
| 78 | print(f'Go to {data_dir} and create a CL') |
| 79 | |
| 80 | if __name__ == '__main__': |
| 81 | main() |