blob: ede6eca2fa4da5ca58b1053a055f3018dbc23d1a [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
def _release_impl(ctx):
artifacts = []
runfiles = []
for k, v in ctx.attr.artifacts.items():
files = k[DefaultInfo].files.to_list()
if len(files) > 1:
fail("Artifacts must produce a single file")
runfiles.extend(files)
artifacts.append("'{}#{}'".format(files[0].short_path, v))
env = "\n".join(["export {}=\"{}\"".format(k, v) for k, v in ctx.attr.env.items()])
runner = ctx.actions.declare_file(ctx.label.name + ".bash")
ctx.actions.expand_template(
template = ctx.file._runner,
output = runner,
is_executable = True,
substitutions = {
"@@ARTIFACTS@@": " ".join(artifacts),
"@@ENV@@": env,
"@@FILES@@": " ".join([f.short_path for f in runfiles]),
"@@REMOTE@@": ctx.attr.remote,
"@@SCRIPT@@": ctx.attr.script,
"@@GH@@": ctx.executable._gh.path,
},
)
return DefaultInfo(
files = depset([runner]),
runfiles = ctx.runfiles(files = [ctx.executable._gh] + runfiles),
executable = runner,
)
release = rule(
implementation = _release_impl,
attrs = {
"artifacts": attr.label_keyed_string_dict(
doc = "Mapping of release artifacts to their text descriptions",
allow_files = True,
),
"remote": attr.string(
default = "origin",
doc = "The remote to push the release tag to",
),
"script": attr.string(
doc = "Script operation to perform before the github release operation",
),
"env": attr.string_dict(
doc = "Additional environment variables for the script",
),
"_gh": attr.label(
default = "@com_github_gh//:gh",
cfg = "exec",
executable = True,
),
"_runner": attr.label(
default = "//third_party/github:release.template.bash",
allow_single_file = True,
),
},
executable = True,
)