Пример #1
0
	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)
Пример #2
0
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())
Пример #3
0
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)