def do_build_success(self, data, project, build): # Prepare tmp dir if os.path.exists(TMP_PATH): shutil.rmtree(TMP_PATH) os.makedirs(TMP_PATH) # Download and extract archive to tmp dir archive = BytesIO() archive.write(build.artifacts()) archive = zipfile.ZipFile(archive) archive.extractall(TMP_PATH) # Build target dir format_data = { 'unsafe_received_data': data, 'project': project, 'build': build, 'slug_build_ref': slugify(build.ref, to_lower=True), 'slug_project_name': slugify(project.name, to_lower=True) } target_dir = os.environ.get('TARGET_DIR').format(**format_data) # Move to target dir (and remove old) artifact_files = list(os.scandir(TMP_PATH)) # No files if (len(artifact_files) == 0): print('Not deployed build #{0} because in artifacts are no files.'.format(build.id)) self.send_response(500) return False # One item and is directory elif (len(artifact_files) == 1 and artifact_files[0].is_dir()): if os.path.exists(target_dir): shutil.rmtree(target_dir) shutil.move(artifact_files[0].path, target_dir) # Multiple items (files or directories) else: if os.path.exists(target_dir): shutil.rmtree(target_dir) shutil.move(TMP_PATH, target_dir) # Respond to client self.send_response(200) print('Artifact deployed: ', target_dir)
def extract_files(target_path, zip_data): files = BytesIO(zip_data) files = zipfile.ZipFile(files, mode='r', compression=zipfile.ZIP_LZMA) files.extractall(path=target_path) return set(files.namelist())
name = sys.argv[1] if len(sys.argv) == 2: version = crate_max_version(name) elif len(sys.argv) == 3: version = sys.argv[2] if len(sys.argv) == 4: version = sys.argv[2] lockfile = toml.load(sys.argv[3]) else: tar = crate_download(name, version).content tar = BytesIO(tar) tar = tarfile.open(fileobj=tar) tar.extractall("crates_downloads/") crate_dir = "crates_downloads/" + name + "-" + version subprocess.run(["cargo", "generate-lockfile"], cwd=crate_dir) lockfile = toml.load(crate_dir + "/Cargo.lock") def guix_name(name, version): return name + "_" + version.replace(".", "_") def gen_package(package, packages): print(package, file=sys.stderr)