famous-xylophone-36532
11/08/2023, 11:49 AMfamous-xylophone-36532
11/08/2023, 12:21 PM@rule(level=LogLevel.DEBUG)
async def download_external_tool(request: ExternalToolRequest) -> DownloadedExternalTool:
# Download and extract.
maybe_archive_digest = await Get(Digest, DownloadFile, request.download_file_request)
extracted_archive = await Get(ExtractedArchive, Digest, maybe_archive_digest)
# Confirm executable.
exe_path = request.exe.lstrip("./")
digest = extracted_archive.digest
is_not_executable = False
digest_entries = []
for entry in await Get(DigestEntries, Digest, digest):
if isinstance(entry, FileEntry) and entry.path == exe_path and not entry.is_executable:
# We should recreate the digest with the executable bit set.
is_not_executable = True
entry = dataclasses.replace(entry, is_executable=True)
digest_entries.append(entry)
if is_not_executable:
digest = await Get(Digest, CreateDigest(digest_entries))
return DownloadedExternalTool(digest, request.exe)
famous-xylophone-36532
11/08/2023, 12:22 PMgorgeous-winter-99296
11/08/2023, 1:24 PMfamous-xylophone-36532
11/08/2023, 1:24 PMfamous-xylophone-36532
11/08/2023, 1:24 PMgorgeous-winter-99296
11/08/2023, 1:30 PMfamous-xylophone-36532
11/08/2023, 1:35 PMgorgeous-winter-99296
11/08/2023, 1:44 PMfamous-xylophone-36532
11/08/2023, 1:45 PM