mirror of https://github.com/apache/kafka.git
78 lines
3.4 KiB
Python
78 lines
3.4 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||
|
# contributor license agreements. See the NOTICE file distributed with
|
||
|
# this work for additional information regarding copyright ownership.
|
||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||
|
# (the "License"); you may not use this file except in compliance with
|
||
|
# the License. You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
|
||
|
"""
|
||
|
Python script to extract docker official images artifact and give it executable permissions
|
||
|
This script is used to extract docker official images artifact and give it executable permissions
|
||
|
|
||
|
Usage:
|
||
|
extract_docker_official_image_artifact.py --help
|
||
|
Get detailed description of each option
|
||
|
|
||
|
Example command:-
|
||
|
extract_docker_official_image_artifact.py --path_to_downloaded_artifact <artifact_path>
|
||
|
|
||
|
This command will build an extract the downloaded artifact, and copy the contents to the
|
||
|
docker_official_images directory. If the extracted artifact contents already exist in the
|
||
|
docker_official_images directory , they will be overwritten, else they will be created.
|
||
|
|
||
|
"""
|
||
|
import os
|
||
|
import argparse
|
||
|
import zipfile
|
||
|
import shutil
|
||
|
from pathlib import Path
|
||
|
|
||
|
def set_executable_permissions(directory):
|
||
|
for root, _, files in os.walk(directory):
|
||
|
for file in files:
|
||
|
path = os.path.join(root, file)
|
||
|
os.chmod(path, os.stat(path).st_mode | 0o111)
|
||
|
|
||
|
|
||
|
def extract_artifact(artifact_path):
|
||
|
docker_official_images_dir = Path(os.path.dirname(os.path.realpath(__file__)), "docker_official_images")
|
||
|
temp_dir = Path('temp_extracted')
|
||
|
try:
|
||
|
if temp_dir.exists():
|
||
|
shutil.rmtree(temp_dir)
|
||
|
temp_dir.mkdir()
|
||
|
with zipfile.ZipFile(artifact_path, 'r') as zip_ref:
|
||
|
zip_ref.extractall(temp_dir)
|
||
|
artifact_version_dirs = list(temp_dir.iterdir())
|
||
|
if len(artifact_version_dirs) != 1:
|
||
|
raise Exception("Unexpected contents in the artifact. Exactly one version directory is expected.")
|
||
|
artifact_version_dir = artifact_version_dirs[0]
|
||
|
target_version_dir = Path(os.path.join(docker_official_images_dir, artifact_version_dir.name))
|
||
|
target_version_dir.mkdir(parents=True, exist_ok=True)
|
||
|
for image_type_dir in artifact_version_dir.iterdir():
|
||
|
target_image_type_dir = Path(os.path.join(target_version_dir, image_type_dir.name))
|
||
|
if target_image_type_dir.exists():
|
||
|
shutil.rmtree(target_image_type_dir)
|
||
|
shutil.copytree(image_type_dir, target_image_type_dir)
|
||
|
set_executable_permissions(target_image_type_dir)
|
||
|
finally:
|
||
|
if temp_dir.exists():
|
||
|
shutil.rmtree(temp_dir)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
parser = argparse.ArgumentParser()
|
||
|
parser.add_argument("--path_to_downloaded_artifact", "-artifact_path", required=True,
|
||
|
dest="artifact_path", help="Path to zipped artifacy downloaded from github actions workflow.")
|
||
|
args = parser.parse_args()
|
||
|
extract_artifact(args.artifact_path)
|