Skip to main content
Glama
artifact.bzl5.63 kB
load("@prelude//python:toolchain.bzl", "PythonToolchainInfo") load("//artifact:toolchain.bzl", "ArtifactToolchainInfo") ArtifactInfo = provider(fields = { "artifact": provider_field(typing.Any, default = None), "metadata": provider_field(typing.Any, default = None), "family": str, "variant": str, }) def artifact_publish_impl(ctx: AnalysisContext) -> list[[DefaultInfo, RunInfo]]: cli_args = ctx.actions.declare_output("args.txt") artifact_toolchain = ctx.attrs._artifact_toolchain[ArtifactToolchainInfo] cmd = cmd_args( ctx.attrs._python_toolchain[PythonToolchainInfo].interpreter, artifact_toolchain.publish[DefaultInfo].default_outputs, "--destination", ctx.attrs.destination, "--artifact-file", ctx.attrs.artifact[ArtifactInfo].artifact, "--metadata-file", ctx.attrs.artifact[ArtifactInfo].metadata, ) if ctx.attrs.cname: cmd.add("--cname") cmd.add(ctx.attrs.cname) ctx.actions.write(cli_args.as_output(), cmd) return [ DefaultInfo(default_output = cli_args), RunInfo(args = cmd), ] artifact_publish = rule( impl = artifact_publish_impl, attrs = { "destination": attrs.string( doc = """Destination [examples: {}].""".format(", ".join([ "s3://my-bucket", "gcs://bucket-name", "docker://docker.io", ])), ), "artifact": attrs.dep( providers = [ArtifactInfo], doc = """The `artifact` to publish.""", ), "cname": attrs.option( attrs.string(), default = None, doc = """Hostname used when calculating canonical URLs.""", ), "_python_toolchain": attrs.toolchain_dep( default = "toolchains//:python", providers = [PythonToolchainInfo], ), "_artifact_toolchain": attrs.toolchain_dep( default = "toolchains//:artifact", providers = [ArtifactToolchainInfo], ), }, ) def artifact_promote_impl(ctx: AnalysisContext) -> list[[DefaultInfo, RunInfo]]: cli_args = ctx.actions.declare_output("args.txt") artifact_toolchain = ctx.attrs._artifact_toolchain[ArtifactToolchainInfo] cmd = cmd_args( ctx.attrs._python_toolchain[PythonToolchainInfo].interpreter, artifact_toolchain.promote[DefaultInfo].default_outputs, "--destination", ctx.attrs.destination, "--channel", ctx.attrs.channel, "--family", ctx.attrs.family, "--variant", ctx.attrs.variant, ) if ctx.attrs.cname: cmd.add("--cname") cmd.add(ctx.attrs.cname) ctx.actions.write(cli_args.as_output(), cmd) return [ DefaultInfo(default_output = cli_args), RunInfo(args = cmd), ] artifact_promote = rule( impl = artifact_promote_impl, attrs = { "destination": attrs.string( doc = """Destination [examples: {}].""".format(", ".join([ "s3://my-bucket", "gcs://bucket-name", "docker://docker.io", ])), ), "channel": attrs.string( doc = """Release channel.""", default = "stable", ), "family": attrs.string( doc = """Artifact family.""", ), "variant": attrs.string( doc = """Artifact variant.""", ), "cname": attrs.option( attrs.string(), default = None, doc = """Hostname used when calculating canonical URLs.""", ), "_python_toolchain": attrs.toolchain_dep( default = "toolchains//:python", providers = [PythonToolchainInfo], ), "_artifact_toolchain": attrs.toolchain_dep( default = "toolchains//:artifact", providers = [ArtifactToolchainInfo], ), }, ) def artifact_download_impl(ctx: AnalysisContext) -> list[Provider]: """Download an artifact from S3 without extraction.""" # Construct S3 URL filename = "{}-{}-{}-{}.tar.gz".format( ctx.attrs.family, ctx.attrs.version, ctx.attrs.os, ctx.attrs.arch ) url = "{}/{}/{}/{}/{}/{}".format( ctx.attrs.destination.rstrip("/"), ctx.attrs.family, ctx.attrs.version, ctx.attrs.os, ctx.attrs.arch, filename ) # Download file output_file = ctx.actions.declare_output("{}-{}-{}-{}.tar.gz".format( ctx.attrs.family, ctx.attrs.version, ctx.attrs.os, ctx.attrs.arch )) ctx.actions.download_file(output_file.as_output(), url, sha256 = ctx.attrs.sha256) return [DefaultInfo(default_output = output_file)] artifact_download = rule( impl = artifact_download_impl, attrs = { "destination": attrs.string( doc = """Destination base URL (e.g., https://artifacts.systeminit.com/toolchains).""", default = "https://artifacts.systeminit.com/toolchains", ), "family": attrs.string( doc = """Artifact family (rust, python, clang, deno).""", ), "version": attrs.string( doc = """Artifact version.""", ), "os": attrs.string( doc = """Operating system (linux, darwin).""", ), "arch": attrs.string( doc = """Architecture (x86_64, aarch64).""", ), "sha256": attrs.string( doc = """SHA256 checksum.""", ), }, )

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