xref: /aosp_15_r20/tools/netsim/scripts/tasks/zip_artifact_task.py (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
1*cf78ab8cSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*cf78ab8cSAndroid Build Coastguard Worker#
3*cf78ab8cSAndroid Build Coastguard Worker# Copyright 2024 - The Android Open Source Project
4*cf78ab8cSAndroid Build Coastguard Worker#
5*cf78ab8cSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the',  help="License");
6*cf78ab8cSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*cf78ab8cSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*cf78ab8cSAndroid Build Coastguard Worker#
9*cf78ab8cSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
10*cf78ab8cSAndroid Build Coastguard Worker#
11*cf78ab8cSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*cf78ab8cSAndroid Build Coastguard Worker# distributed under the License is distributed on an',  help="AS IS" BASIS,
13*cf78ab8cSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cf78ab8cSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*cf78ab8cSAndroid Build Coastguard Worker# limitations under the License.
16*cf78ab8cSAndroid Build Coastguard Worker
17*cf78ab8cSAndroid Build Coastguard Workerimport logging
18*cf78ab8cSAndroid Build Coastguard Workerfrom pathlib import Path
19*cf78ab8cSAndroid Build Coastguard Workerimport platform
20*cf78ab8cSAndroid Build Coastguard Workerimport zipfile
21*cf78ab8cSAndroid Build Coastguard Worker
22*cf78ab8cSAndroid Build Coastguard Workerfrom tasks.task import Task
23*cf78ab8cSAndroid Build Coastguard Workerfrom utils import platform_to_cmake_target
24*cf78ab8cSAndroid Build Coastguard Worker
25*cf78ab8cSAndroid Build Coastguard Worker
26*cf78ab8cSAndroid Build Coastguard Workerclass ZipArtifactTask(Task):
27*cf78ab8cSAndroid Build Coastguard Worker
28*cf78ab8cSAndroid Build Coastguard Worker  def __init__(self, args):
29*cf78ab8cSAndroid Build Coastguard Worker    super().__init__("ZipArtifact")
30*cf78ab8cSAndroid Build Coastguard Worker    self.build_id = args.build_id
31*cf78ab8cSAndroid Build Coastguard Worker    self.out = Path(args.out_dir)
32*cf78ab8cSAndroid Build Coastguard Worker    if args.target:
33*cf78ab8cSAndroid Build Coastguard Worker      self.target = args.target.lower()
34*cf78ab8cSAndroid Build Coastguard Worker    else:
35*cf78ab8cSAndroid Build Coastguard Worker      self.target = platform.system().lower()
36*cf78ab8cSAndroid Build Coastguard Worker    self.dist = Path(args.dist_dir).absolute()
37*cf78ab8cSAndroid Build Coastguard Worker
38*cf78ab8cSAndroid Build Coastguard Worker  def do_run(self):
39*cf78ab8cSAndroid Build Coastguard Worker    # Make sure the dist directory exists.
40*cf78ab8cSAndroid Build Coastguard Worker    self.dist.mkdir(exist_ok=True, parents=True)
41*cf78ab8cSAndroid Build Coastguard Worker
42*cf78ab8cSAndroid Build Coastguard Worker    # Zip results..
43*cf78ab8cSAndroid Build Coastguard Worker    zip_fname = (
44*cf78ab8cSAndroid Build Coastguard Worker        self.dist
45*cf78ab8cSAndroid Build Coastguard Worker        / f"netsim-{platform_to_cmake_target(self.target)}-{self.build_id}.zip"
46*cf78ab8cSAndroid Build Coastguard Worker    )
47*cf78ab8cSAndroid Build Coastguard Worker    search_dir = self.out / "distribution" / "emulator"
48*cf78ab8cSAndroid Build Coastguard Worker    logging.info("Creating zip file: %s", zip_fname)
49*cf78ab8cSAndroid Build Coastguard Worker    with zipfile.ZipFile(
50*cf78ab8cSAndroid Build Coastguard Worker        zip_fname, "w", zipfile.ZIP_DEFLATED, allowZip64=True
51*cf78ab8cSAndroid Build Coastguard Worker    ) as zipf:
52*cf78ab8cSAndroid Build Coastguard Worker      logging.info("Searching %s", search_dir)
53*cf78ab8cSAndroid Build Coastguard Worker      for fname in search_dir.glob("**/*"):
54*cf78ab8cSAndroid Build Coastguard Worker        arcname = fname.relative_to(search_dir)
55*cf78ab8cSAndroid Build Coastguard Worker        logging.info("Adding %s as %s", fname, arcname)
56*cf78ab8cSAndroid Build Coastguard Worker        zipf.write(fname, arcname)
57*cf78ab8cSAndroid Build Coastguard Worker    return True
58