| # 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, | 
 | ) |