Skip to main content
Glama
rootfs.bzl4.05 kB
load("@prelude//python:toolchain.bzl", "PythonToolchainInfo") load("//artifact:toolchain.bzl", "ArtifactToolchainInfo") load("//artifact.bzl", "ArtifactInfo") load("//platform.bzl", "get_host_platform") load("//rootfs:toolchain.bzl", "RootfsToolchainInfo") def rootfs_tarball_impl(ctx: AnalysisContext) -> list[[ DefaultInfo, ArtifactInfo, ]]: artifact_toolchain = ctx.attrs._artifact_toolchain[ArtifactToolchainInfo] rootfs_toolchain = ctx.attrs._rootfs_toolchain[RootfsToolchainInfo] name = ctx.attrs.rootfs_name or ctx.atrs.name artifact = ctx.actions.declare_output("{}.rootfs.ext4".format(name)) git_metadata_file = ctx.attrs.git_metadata[DefaultInfo].default_outputs[0] # Get host platform information host_os, host_arch = get_host_platform() # Get target platform information from host platform (i.e. not yet cross-compilation aware) target_os = host_os target_arch = host_arch variant = "rootfs" # Build artifact build_metadata_old = ctx.actions.declare_output("build_metadata-old.json") build_cmd = cmd_args( "/bin/bash", rootfs_toolchain.rootfs_build[DefaultInfo].default_outputs, git_metadata_file, target_arch, build_metadata_old.as_output(), artifact.as_output(), ) for dep in ctx.attrs.build_deps or []: build_cmd.add(dep) ctx.actions.run(build_cmd, category = "build_rootfs_tarball") # Generate build metadata build_metadata = ctx.actions.declare_output("build_metadata.json") metadata_cmd = cmd_args( ctx.attrs._python_toolchain[PythonToolchainInfo].interpreter, artifact_toolchain.generate_build_metadata[DefaultInfo].default_outputs, "--artifact-file", artifact, "--git-info-json", git_metadata_file, "--build-metadata-out-file", build_metadata.as_output(), "--name", name, "--variant", variant, "--arch", target_arch, "--os", target_os, "--author", ctx.attrs.author, "--source-url", ctx.attrs.source_url, "--license", ctx.attrs.license, ) ctx.actions.run(metadata_cmd, category = "build_artifact_metadata") return [ DefaultInfo( default_output = artifact, sub_targets = { "metadata": [DefaultInfo(default_output = build_metadata)], }, ), ArtifactInfo( artifact = artifact, metadata = build_metadata, family = name, variant = variant, ), ] rootfs_tarball = rule( impl = rootfs_tarball_impl, attrs = { "rootfs_name": attrs.option( attrs.string(), default = None, doc = """The rootfs output filename.""", ), "build_deps": attrs.list( attrs.source(), default = [], doc = """Buck2 targets that could be built into a rootfs.""", ), "author": attrs.string( doc = """Image author to be used in artifact metadata.""", ), "source_url": attrs.string( doc = """Source code URL to be used in artifact metadata.""", ), "license": attrs.string( doc = """Image license string to be used in artifact metadata.""", ), "git_metadata": attrs.dep( default = "prelude-si//build_metadata:git", doc = """Git metadata target providing repository information.""", ), "_rootfs_toolchain": attrs.toolchain_dep( default = "toolchains//:rootfs", providers = [RootfsToolchainInfo], ), "_python_toolchain": attrs.toolchain_dep( default = "toolchains//:python", providers = [PythonToolchainInfo], ), "_artifact_toolchain": attrs.toolchain_dep( default = "toolchains//:artifact", providers = [ArtifactToolchainInfo], ), }, )

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server