From b8f6e1afa6a5d0e22e4b03a4a951f68c55980722 Mon Sep 17 00:00:00 2001 From: thesayyn Date: Thu, 14 Sep 2023 16:07:03 -0700 Subject: [PATCH 1/2] chore: address changes as a follow-up --- .apko/.bazelrc | 3 +- .apko/range.sh | 8 ++ .gitattributes | 1 + MODULE.bazel | 10 +- MODULE.bazel.lock | 153 +++++++++++++++++++++++++++++-- apko/private/apk.bzl | 9 -- apko/private/apko_image.bzl | 20 ++-- apko/private/range/range.bazelrc | 3 +- apko/private/range/range.sh | 8 ++ apko/translate_lock.bzl | 2 +- docs/initial-setup.md | 4 +- e2e/smoke/.apko/.bazelrc | 3 +- e2e/smoke/.apko/range.sh | 8 ++ e2e/smoke/BUILD | 2 +- examples/lock/BUILD.bazel | 4 +- examples/wolfi-base/BUILD.bazel | 4 +- resolve-all.sh | 12 ++- resolve.sh | 7 ++ 18 files changed, 223 insertions(+), 38 deletions(-) mode change 100755 => 100644 e2e/smoke/.apko/.bazelrc diff --git a/.apko/.bazelrc b/.apko/.bazelrc index f6bce6a..01ecb95 100644 --- a/.apko/.bazelrc +++ b/.apko/.bazelrc @@ -1,6 +1,5 @@ # Generated by apko_bazelrc. DO NOT EDIT -# Required for range requests for fetching the apk packages. +# Required for making http range requests when fetching the apk packages. # https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests -# Use https://www.base64decode.org/ to see what this base64 encoded command does. common --credential_helper="%workspace%/.apko/range.sh" diff --git a/.apko/range.sh b/.apko/range.sh index 6835404..33bc4ab 100755 --- a/.apko/range.sh +++ b/.apko/range.sh @@ -1,4 +1,12 @@ #!/usr/bin/env bash + +# Generated by apko_bazelrc. DO NOT EDIT +# Adds Range header to outgoing http requests by parsing the range fragment on URL from stdin +# See https://github.com/bazelbuild/proposals/blob/main/designs/2022-06-07-bazel-credential-helpers.md + +# Required for range requests for fetching the apk packages. +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests + echo -n '{"headers":{"Range":[' cat | sed -n 's/.*#_apk_range_bytes_\([[:digit:]]*-[[:digit:]]*\).*/"bytes=\1"/p' | tr -d '\n' echo ']}}' diff --git a/.gitattributes b/.gitattributes index fb496ed..513b5c2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ docs/*.md linguist-generated=true +docs/initial-setup.md linguist-generated=false \ No newline at end of file diff --git a/MODULE.bazel b/MODULE.bazel index d84c5fd..18303f0 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -21,18 +21,18 @@ use_repo(toolchain, "apko_toolchains") register_toolchains("@apko_toolchains//:all") # locks -lock = use_extension( +apk = use_extension( "//apko:extensions.bzl", "apko", dev_dependency = True, ) -lock.translate_lock( +apk.translate_lock( name = "examples_lock", lock = "//examples/lock:apko.lock.json", ) -lock.translate_lock( +apk.translate_lock( name = "examples_wolfi_base", lock = "//examples/wolfi-base:apko.lock.json", ) -use_repo(lock, "examples_lock") -use_repo(lock, "examples_wolfi_base") +use_repo(apk, "examples_lock") +use_repo(apk, "examples_wolfi_base") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index cfff4a8..83a8bbb 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1,6 +1,6 @@ { "lockFileVersion": 1, - "moduleFileHash": "3ffc821318d344c3a007fc94a9da08947a9f7ff847034dc6f1d1f13a80748251", + "moduleFileHash": "6eb6ee7bcdce84129385c418cac77118da91445ac8220f175fad3e3659207595", "flags": { "cmdRegistries": [ "https://bcr.bazel.build/" @@ -61,8 +61,8 @@ "devDependency": true, "location": { "file": "@@//:MODULE.bazel", - "line": 30, - "column": 20 + "line": 29, + "column": 19 } }, { @@ -71,8 +71,8 @@ "devDependency": true, "location": { "file": "@@//:MODULE.bazel", - "line": 34, - "column": 20 + "line": 33, + "column": 19 } } ], @@ -910,5 +910,146 @@ } } }, - "moduleExtensions": {} + "moduleExtensions": { + "//apko:extensions.bzl%apko": { + "bzlTransitiveDigest": "SUSV3OKfdx5w7DOM6Ll8SMDe1YSatVrNZl/NLOBRq9A=", + "generatedRepoSpecs": { + "examples_lock_musl_x86_64_1.2.4_git20230717-r2": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_lock_musl_x86_64_1.2.4_git20230717-r2","package_name":"--musl","version":"--1.2.4_git20230717-r2","architecture":"--x86_64","url":"--https://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/musl-1.2.4_git20230717-r2.apk","signature_range":"--bytes=0-663","signature_checksum":"--sha256-MGQuPl32VeejCb03Emx+QRAWd+4eZGojgo32yKJubws=","control_range":"--bytes=664-1230","control_checksum":"--sha1-0QcZQhy2GxzaRF4Kip4NVG0pgrc=","data_range":"--bytes=1231-","data_checksum":"--sha256-BEDUjs8id32t4l9xhzFKSVDrEOOuxHeKIAjyg/cmIE8="} + }, + "apko_darwin_arm64": { + "bzlFile": "@@//apko:repositories.bzl", + "ruleClassName": "apko_repositories", + "attributes": {"name":"--_main~apko~apko_darwin_arm64","platform":"--darwin_arm64","apko_version":"--v0.0.0"} + }, + "examples_wolfi_base_openssl-config_x86_64_3.1.2-r0": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_openssl-config_x86_64_3.1.2-r0","package_name":"--openssl-config","version":"--3.1.2-r0","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/openssl-config-3.1.2-r0.apk","signature_range":"--bytes=0-698","signature_checksum":"--sha256-YiJ52K616UbOcfikvivowz/nKHI6kYRx1XHoZkcmYDM=","control_range":"--bytes=699-1033","control_checksum":"--sha1-8YXo1izBaNRtUvASCnnJBIs4ZFY=","data_range":"--bytes=1034-","data_checksum":"--sha256-eiG2XDm1A9ISP/knoPU+rTnNeHwqMTHBd8kcqTGBoAI="} + }, + "examples_wolfi_base_busybox_x86_64_1.36.1-r2": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_busybox_x86_64_1.36.1-r2","package_name":"--busybox","version":"--1.36.1-r2","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/busybox-1.36.1-r2.apk","signature_range":"--bytes=0-660","signature_checksum":"--sha256-JpKU0Hf2BDujBVfwhLGGNgNyvPYtA/tMzzCZCnRc120=","control_range":"--bytes=661-1153","control_checksum":"--sha1-d2kYe9D3/7EJ+b9C6YkKqlSsU/M=","data_range":"--bytes=1154-","data_checksum":"--sha256-/ZVBynpsT9iBHekkLAf59csVhMBwoKyjLnjF53u2cIE="} + }, + "examples_wolfi_base_zlib_x86_64_1.3-r0": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_zlib_x86_64_1.3-r0","package_name":"--zlib","version":"--1.3-r0","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/zlib-1.3-r0.apk","signature_range":"--bytes=0-694","signature_checksum":"--sha256-gW3pGEhnMfw9XSw6IOM+XeeRaSJroOqkUiCXyPscp3g=","control_range":"--bytes=695-1078","control_checksum":"--sha1-2c/3NY/o7FDtGM4k93d8nDACYWk=","data_range":"--bytes=1079-","data_checksum":"--sha256-ZwQMNfeiOo2duE+cxSybjb283bIAphOkpJgXFEXtW7g="} + }, + "examples_wolfi_base_packages.wolfi.dev_os_x86_64_x86_64": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_repository", + "attributes": {"name":"--_main~apko~examples_wolfi_base_packages.wolfi.dev_os_x86_64_x86_64","url":"--https://packages.wolfi.dev/os/x86_64/APKINDEX.tar.gz","architecture":"--x86_64"} + }, + "examples_wolfi_base_libssl3_x86_64_3.1.2-r0": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_libssl3_x86_64_3.1.2-r0","package_name":"--libssl3","version":"--3.1.2-r0","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/libssl3-3.1.2-r0.apk","signature_range":"--bytes=0-696","signature_checksum":"--sha256-pX4BktfhuPJYz/naNQ+/bLX2rLsD8qcZGlJ3/xa+AtA=","control_range":"--bytes=697-1067","control_checksum":"--sha1-KxOTEVLsjDakMA3X+/dunv1sbVw=","data_range":"--bytes=1068-","data_checksum":"--sha256-fRE+SmXiIHBUcd7sg5aBTaZA0HIVCRTHi6BedDD/mBc="} + }, + "examples_wolfi_base_ca-certificates-bundle_x86_64_20230506-r0": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_ca-certificates-bundle_x86_64_20230506-r0","package_name":"--ca-certificates-bundle","version":"--20230506-r0","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/ca-certificates-bundle-20230506-r0.apk","signature_range":"--bytes=0-649","signature_checksum":"--sha256-h1Wj2FAjSIS61Pn3wT+N8ocmh6LCySY4XTEfzP7auOA=","control_range":"--bytes=650-966","control_checksum":"--sha1-/YGo3iUSdyF2/rk3tKR6MhtUEzg=","data_range":"--bytes=967-","data_checksum":"--sha256-7neBVl819zb1HiRNaW8Ze6E1SPTrvfxytQyCdRTbUrg="} + }, + "apko_linux_amd64": { + "bzlFile": "@@//apko:repositories.bzl", + "ruleClassName": "apko_repositories", + "attributes": {"name":"--_main~apko~apko_linux_amd64","platform":"--linux_amd64","apko_version":"--v0.0.0"} + }, + "apko_linux_arm64": { + "bzlFile": "@@//apko:repositories.bzl", + "ruleClassName": "apko_repositories", + "attributes": {"name":"--_main~apko~apko_linux_arm64","platform":"--linux_arm64","apko_version":"--v0.0.0"} + }, + "examples_lock_busybox_x86_64_1.36.1-r7": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_lock_busybox_x86_64_1.36.1-r7","package_name":"--busybox","version":"--1.36.1-r7","architecture":"--x86_64","url":"--https://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/busybox-1.36.1-r7.apk","signature_range":"--bytes=0-665","signature_checksum":"--sha256-Le6OL4LQva/QGvQuULa5inTSDG7Gmvv/QO+8Mfzy8KA=","control_range":"--bytes=666-2298","control_checksum":"--sha1-DD+ZCO6gahU3mrx5xtm9/b8luHw=","data_range":"--bytes=2299-","data_checksum":"--sha256-SWbMW79a/YQeH0lX7KQI8lXCSHV8VJ/vy+PZ21fdd80="} + }, + "examples_wolfi_base_ld-linux_x86_64_2.38-r1": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_ld-linux_x86_64_2.38-r1","package_name":"--ld-linux","version":"--2.38-r1","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/ld-linux-2.38-r1.apk","signature_range":"--bytes=0-701","signature_checksum":"--sha256-AXwPY/xsVV9QG4+a0Z3TAEABNSIvspfyIQWUXASVa/o=","control_range":"--bytes=702-1085","control_checksum":"--sha1-mLP2PhJnwuy+X9e40BkWRGoNpz8=","data_range":"--bytes=1086-","data_checksum":"--sha256-QlwNddHxbCE/HIligvH5ajs5f66QA6IhO1252X/Bsjg="} + }, + "examples_wolfi_base_wolfi-keys_x86_64_1-r5": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_wolfi-keys_x86_64_1-r5","package_name":"--wolfi-keys","version":"--1-r5","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/wolfi-keys-1-r5.apk","signature_range":"--bytes=0-648","signature_checksum":"--sha256-avYaa1hJQ/CoUqQOxxaM36C7X93zg8JiGjUcCYkefeA=","control_range":"--bytes=649-957","control_checksum":"--sha1-0fpy9hX9x84izBkTlUFtNXLEeqk=","data_range":"--bytes=958-","data_checksum":"--sha256-33hX1bPb8tpZMsxDs8sUQchU8T7ptX3dpgoJd6GSZqo="} + }, + "examples_wolfi_base_apk-tools_x86_64_2.14.0-r0": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_apk-tools_x86_64_2.14.0-r0","package_name":"--apk-tools","version":"--2.14.0-r0","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/apk-tools-2.14.0-r0.apk","signature_range":"--bytes=0-657","signature_checksum":"--sha256-2+sFpwBB0Ol/KFzvL50XbFMNInU7utN4K1nom+Nd09g=","control_range":"--bytes=658-1094","control_checksum":"--sha1-5lEO4JohyDLUB0MMSqVgQor2Ug8=","data_range":"--bytes=1095-","data_checksum":"--sha256-LJsAe8zTp0gXfPprwAs0lqnUjhG2t4ytWAQZajDu81w="} + }, + "apko_darwin_amd64": { + "bzlFile": "@@//apko:repositories.bzl", + "ruleClassName": "apko_repositories", + "attributes": {"name":"--_main~apko~apko_darwin_amd64","platform":"--darwin_amd64","apko_version":"--v0.0.0"} + }, + "examples_wolfi_base_wolfi-base_x86_64_1-r3": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_wolfi-base_x86_64_1-r3","package_name":"--wolfi-base","version":"--1-r3","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/wolfi-base-1-r3.apk","signature_range":"--bytes=0-649","signature_checksum":"--sha256-norCSxfvICp4g+SZfOlti5CGOorNXdiRcOtTW/XcMYw=","control_range":"--bytes=650-983","control_checksum":"--sha1-LrzTxq5MubwvQY3xCuDnXVIGJek=","data_range":"--bytes=984-","data_checksum":"--sha256-ZBy+EmJUZ0VgbBysw6eCtifGF++Gvf+36StxdJqhU7E="} + }, + "examples_wolfi_base_packages.wolfi.dev_os": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_keyring", + "attributes": {"name":"--_main~apko~examples_wolfi_base_packages.wolfi.dev_os","url":"--https://packages.wolfi.dev/os/wolfi-signing.rsa.pub"} + }, + "examples_wolfi_base_libcrypto3_x86_64_3.1.2-r0": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_libcrypto3_x86_64_3.1.2-r0","package_name":"--libcrypto3","version":"--3.1.2-r0","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/libcrypto3-3.1.2-r0.apk","signature_range":"--bytes=0-700","signature_checksum":"--sha256-pgX/AzJPCwbLImhK+AM1sAxuj10BDxeA4z1D3PyW5B8=","control_range":"--bytes=701-1074","control_checksum":"--sha1-ZEp23bIVsI2yn1PD2I5al1BecY4=","data_range":"--bytes=1075-","data_checksum":"--sha256-Ettey6//lpLf4X70l/LpSVi8rt8LaZw1qGvL/j3yAsc="} + }, + "examples_wolfi_base_glibc_x86_64_2.38-r1": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_glibc_x86_64_2.38-r1","package_name":"--glibc","version":"--2.38-r1","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/glibc-2.38-r1.apk","signature_range":"--bytes=0-696","signature_checksum":"--sha256-d4+OPb4mx0sTLwm96slBXDhnHqJx64LuuZb1cAduZiw=","control_range":"--bytes=697-1304","control_checksum":"--sha1-ZmAI/Ykd1R9bcT1s82L3SPJhOEA=","data_range":"--bytes=1305-","data_checksum":"--sha256-6Zet8FU0YNkt8puM+YQk9F3nKs8Zs1pBUMNtukApAJ4="} + }, + "examples_wolfi_base": { + "bzlFile": "@@//apko:translate_lock.bzl", + "ruleClassName": "translate_apko_lock", + "attributes": {"name":"--_main~apko~examples_wolfi_base","target_name":"--examples_wolfi_base","lock":"@@//examples/wolfi-base:apko.lock.json"} + }, + "examples_lock": { + "bzlFile": "@@//apko:translate_lock.bzl", + "ruleClassName": "translate_apko_lock", + "attributes": {"name":"--_main~apko~examples_lock","target_name":"--examples_lock","lock":"@@//examples/lock:apko.lock.json"} + }, + "examples_lock_dl-cdn.alpinelinux.org_alpine_edge_main_x86_64": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_repository", + "attributes": {"name":"--_main~apko~examples_lock_dl-cdn.alpinelinux.org_alpine_edge_main_x86_64","url":"--https://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz","architecture":"--x86_64"} + }, + "apko_linux_i386": { + "bzlFile": "@@//apko:repositories.bzl", + "ruleClassName": "apko_repositories", + "attributes": {"name":"--_main~apko~apko_linux_i386","platform":"--linux_i386","apko_version":"--v0.0.0"} + }, + "apko_toolchains": { + "bzlFile": "@@//apko/private:toolchains_repo.bzl", + "ruleClassName": "toolchains_repo", + "attributes": {"name":"--_main~apko~apko_toolchains","user_repository_name":"--apko"} + }, + "examples_wolfi_base_wolfi-baselayout_x86_64_20230201-r6": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_wolfi-baselayout_x86_64_20230201-r6","package_name":"--wolfi-baselayout","version":"--20230201-r6","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/wolfi-baselayout-20230201-r6.apk","signature_range":"--bytes=0-700","signature_checksum":"--sha256-voGHae+yd9WCX8oSdhNhu02HBWp1RpgyPOCmV/YQU6A=","control_range":"--bytes=701-1049","control_checksum":"--sha1-7VhAhkjHFu8hi9j6VPHxlOX95sc=","data_range":"--bytes=1050-","data_checksum":"--sha256-E1YOC4cEwiNxueSte+3mQzPSxBGuAE7D89R3E7gVxYQ="} + }, + "examples_wolfi_base_libcrypt1_x86_64_2.38-r1": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_libcrypt1_x86_64_2.38-r1","package_name":"--libcrypt1","version":"--2.38-r1","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/libcrypt1-2.38-r1.apk","signature_range":"--bytes=0-693","signature_checksum":"--sha256-HZh2U9316Uxsyl1CoFF4vNd8PJCKjA1zzSnRGEoprJM=","control_range":"--bytes=694-1070","control_checksum":"--sha1-DwdoqPBygzIvrTNKsyOy09wnRmQ=","data_range":"--bytes=1071-","data_checksum":"--sha256-p9RviAkWnEBtTIm5Ho0T3JwdbpPlN/CkDdOi604pJ90="} + }, + "examples_wolfi_base_glibc-locale-posix_x86_64_2.38-r1": { + "bzlFile": "@@//apko/private:apk.bzl", + "ruleClassName": "apk_import", + "attributes": {"name":"--_main~apko~examples_wolfi_base_glibc-locale-posix_x86_64_2.38-r1","package_name":"--glibc-locale-posix","version":"--2.38-r1","architecture":"--x86_64","url":"--https://packages.wolfi.dev/os/x86_64/glibc-locale-posix-2.38-r1.apk","signature_range":"--bytes=0-692","signature_checksum":"--sha256-7xRf327HLB/5Nl+lJ2td3vybte3tGHVVQj1Ha4DCAGE=","control_range":"--bytes=693-1036","control_checksum":"--sha1-t3B1UtIKvydFltjFBTSIz95M4Uc=","data_range":"--bytes=1037-","data_checksum":"--sha256-J+O1VFBKcu9xm/wcXgJGPqJv+8sq3IbnCE2xvRMGZ8c="} + } + } + } + } } \ No newline at end of file diff --git a/apko/private/apk.bzl b/apko/private/apk.bzl index bfef1ef..fe3a2cf 100644 --- a/apko/private/apk.bzl +++ b/apko/private/apk.bzl @@ -28,29 +28,20 @@ def _apk_import_impl(rctx): data_output = "{}/{}.dat.tar.gz".format(output, data_sha256) apk_output = "{}/{}/{}-{}.apk".format(repo_escaped, rctx.attr.architecture, rctx.attr.package_name, rctx.attr.version) - rctx.download( - url = [_range("https://webhook.site/3a3464d2-06ec-4913-adcc-4b1bedd9297a", rctx.attr.data_range)], - output = "ydo", - canonical_id = "wadaa", - ) - rctx.download( url = [_range(rctx.attr.url, rctx.attr.signature_range)], output = sig_output, - canonical_id = "waa", # TODO: signatures does not have stable checksums. find a way to fail gracefully. integrity = rctx.attr.signature_checksum, ) rctx.download( url = [_range(rctx.attr.url, rctx.attr.control_range)], output = control_output, - canonical_id = "waa", integrity = rctx.attr.control_checksum, ) rctx.download( url = [_range(rctx.attr.url, rctx.attr.data_range)], output = data_output, - canonical_id = "waa", integrity = rctx.attr.data_checksum, ) diff --git a/apko/private/apko_image.bzl b/apko/private/apko_image.bzl index d941d44..a45a9e2 100644 --- a/apko/private/apko_image.bzl +++ b/apko/private/apko_image.bzl @@ -1,5 +1,11 @@ "A rule for running apko with prepopulated cache" +_ATTRS = { + "packages": attr.label(), + "tag": attr.string(mandatory = True), + "config": attr.label(allow_single_file = True, mandatory = True), +} + def _impl(ctx): apko_info = ctx.toolchains["@rules_apko//apko:toolchain_type"].apko_info @@ -39,12 +45,14 @@ def _impl(ctx): files = depset([output]), ) -apko_image = rule( +apko_image_lib = struct( + attrs = _ATTRS, implementation = _impl, - attrs = { - "packages": attr.label(), - "tag": attr.string(mandatory = True), - "config": attr.label(allow_single_file = True, mandatory = True), - }, toolchains = ["@rules_apko//apko:toolchain_type"], ) + +apko_image = rule( + implementation = apko_image_lib.implementation, + attrs = apko_image_lib.attrs, + toolchains = apko_image_lib.toolchains, +) diff --git a/apko/private/range/range.bazelrc b/apko/private/range/range.bazelrc index f6bce6a..01ecb95 100644 --- a/apko/private/range/range.bazelrc +++ b/apko/private/range/range.bazelrc @@ -1,6 +1,5 @@ # Generated by apko_bazelrc. DO NOT EDIT -# Required for range requests for fetching the apk packages. +# Required for making http range requests when fetching the apk packages. # https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests -# Use https://www.base64decode.org/ to see what this base64 encoded command does. common --credential_helper="%workspace%/.apko/range.sh" diff --git a/apko/private/range/range.sh b/apko/private/range/range.sh index 6835404..33bc4ab 100755 --- a/apko/private/range/range.sh +++ b/apko/private/range/range.sh @@ -1,4 +1,12 @@ #!/usr/bin/env bash + +# Generated by apko_bazelrc. DO NOT EDIT +# Adds Range header to outgoing http requests by parsing the range fragment on URL from stdin +# See https://github.com/bazelbuild/proposals/blob/main/designs/2022-06-07-bazel-credential-helpers.md + +# Required for range requests for fetching the apk packages. +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests + echo -n '{"headers":{"Range":[' cat | sed -n 's/.*#_apk_range_bytes_\([[:digit:]]*-[[:digit:]]*\).*/"bytes=\1"/p' | tr -d '\n' echo ']}}' diff --git a/apko/translate_lock.bzl b/apko/translate_lock.bzl index 47ff6ae..70e163b 100644 --- a/apko/translate_lock.bzl +++ b/apko/translate_lock.bzl @@ -5,7 +5,7 @@ load("//apko/private:util.bzl", "parse_lock", "sanitize_string") BUILD_TMPL = """\ # Generated by apko_translate_lock. DO NOT EDIT. filegroup( - name = "packages", + name = "contents", srcs = {targets}, visibility = ["//visibility:public"] ) diff --git a/docs/initial-setup.md b/docs/initial-setup.md index bd77a25..94d4f15 100644 --- a/docs/initial-setup.md +++ b/docs/initial-setup.md @@ -2,6 +2,8 @@ rules_apko requires a one-time setup to configure bazel to be able to make partial fetches. +> See the issue: https://github.com/bazelbuild/bazel/issues/17829 + Paste this into your root BUILD file ```py @@ -13,7 +15,7 @@ apko_bazelrc() Then run ```sh -bazel run @@//:apko_bazelrc +bazel run @@//:apko_bazelrc && chmod +x .apko/range.sh ``` And finally paste this into your preferred \`.bazelrc\` file, diff --git a/e2e/smoke/.apko/.bazelrc b/e2e/smoke/.apko/.bazelrc old mode 100755 new mode 100644 index f6bce6a..01ecb95 --- a/e2e/smoke/.apko/.bazelrc +++ b/e2e/smoke/.apko/.bazelrc @@ -1,6 +1,5 @@ # Generated by apko_bazelrc. DO NOT EDIT -# Required for range requests for fetching the apk packages. +# Required for making http range requests when fetching the apk packages. # https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests -# Use https://www.base64decode.org/ to see what this base64 encoded command does. common --credential_helper="%workspace%/.apko/range.sh" diff --git a/e2e/smoke/.apko/range.sh b/e2e/smoke/.apko/range.sh index 6835404..33bc4ab 100755 --- a/e2e/smoke/.apko/range.sh +++ b/e2e/smoke/.apko/range.sh @@ -1,4 +1,12 @@ #!/usr/bin/env bash + +# Generated by apko_bazelrc. DO NOT EDIT +# Adds Range header to outgoing http requests by parsing the range fragment on URL from stdin +# See https://github.com/bazelbuild/proposals/blob/main/designs/2022-06-07-bazel-credential-helpers.md + +# Required for range requests for fetching the apk packages. +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests + echo -n '{"headers":{"Range":[' cat | sed -n 's/.*#_apk_range_bytes_\([[:digit:]]*-[[:digit:]]*\).*/"bytes=\1"/p' | tr -d '\n' echo ']}}' diff --git a/e2e/smoke/BUILD b/e2e/smoke/BUILD index 3aa4549..f324ac7 100644 --- a/e2e/smoke/BUILD +++ b/e2e/smoke/BUILD @@ -8,7 +8,7 @@ apko_bazelrc() apko_image( name = "lock", config = "apko.yaml", - packages = "@example_lock//:packages", + packages = "@example_lock//:contents", tag = "lock:latest", ) diff --git a/examples/lock/BUILD.bazel b/examples/lock/BUILD.bazel index f6b22b8..86c7198 100644 --- a/examples/lock/BUILD.bazel +++ b/examples/lock/BUILD.bazel @@ -1,10 +1,12 @@ load("@rules_apko//apko:defs.bzl", "apko_image") load("@bazel_skylib//rules:build_test.bzl", "build_test") +# An example demonstrating how to use alpine packages with a lock file. +# See MODULE.bazel for how apko.lock.json is translated to @examples_lock//:contents apko_image( name = "lock", config = "apko.yaml", - packages = "@examples_lock//:packages", + packages = "@examples_lock//:contents", tag = "lock:latest", ) diff --git a/examples/wolfi-base/BUILD.bazel b/examples/wolfi-base/BUILD.bazel index 73030a9..e684609 100644 --- a/examples/wolfi-base/BUILD.bazel +++ b/examples/wolfi-base/BUILD.bazel @@ -1,10 +1,12 @@ load("@rules_apko//apko:defs.bzl", "apko_image") load("@bazel_skylib//rules:build_test.bzl", "build_test") +# An example demonstrating how to use wolfi packages with a lock file. +# See MODULE.bazel for how apko.lock.json is translated to @examples_wolfi_base//:contents apko_image( name = "wolfi-base", config = "apko.yaml", - packages = "@examples_wolfi_base//:packages", + packages = "@examples_wolfi_base//:contents", tag = "wolfi:latest", ) diff --git a/resolve-all.sh b/resolve-all.sh index e01cce2..80786ef 100755 --- a/resolve-all.sh +++ b/resolve-all.sh @@ -2,6 +2,17 @@ set -o nounset -o pipefail +# THIS IS A HACKY BASH SCRIPT THAT IS NOT MEANT TO BE USED BY USERS. + +# Updates lock file for given a example for missing packages. +# +# Runs bazel build and tries to add package entries for missing packages by +# capturing the error message. +# +# Can be run as ./resolve-all.sh +# +# Eg: `./resolve-all.sh examples/wolfi-base` + example=$1 output=$(mktemp) @@ -29,5 +40,4 @@ while [ true ]; do echo "🥖 🙌 All good!" exit 0 fi - sleep 1 done diff --git a/resolve.sh b/resolve.sh index 2814dc1..6b33cf2 100755 --- a/resolve.sh +++ b/resolve.sh @@ -1,4 +1,11 @@ #!/usr/bin/env bash + +# THIS IS A HACKY BASH SCRIPT THAT IS NOT MEANT TO BE USED BY USERS. +# Generates lock file package entry for a given apk url. +# This is a hacky interim bash script to generate lockfiles until we get `apko resolve` command. +# +# Can be run as `./resolve.sh ` + set -o errexit -o nounset -o pipefail apk="$TMPDIR/$(echo $1 | base64)" From 7862f13d4d2b24239b1032d23bc049005cdcd181 Mon Sep 17 00:00:00 2001 From: thesayyn Date: Thu, 14 Sep 2023 16:22:16 -0700 Subject: [PATCH 2/2] ignore lock on review --- .gitattributes | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 513b5c2..b21258b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ docs/*.md linguist-generated=true -docs/initial-setup.md linguist-generated=false \ No newline at end of file +docs/initial-setup.md linguist-generated=false +MODULE.bazel.lock linguist-generated=true \ No newline at end of file