mirror of
https://github.com/esphome/esphome.git
synced 2025-02-12 08:47:08 +01:00
93 lines
2.4 KiB
Python
Executable File
93 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import re
|
|
import argparse
|
|
|
|
CHANNEL_DEV = "dev"
|
|
CHANNEL_BETA = "beta"
|
|
CHANNEL_RELEASE = "release"
|
|
|
|
GHCR = "ghcr"
|
|
DOCKERHUB = "dockerhub"
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
"--tag",
|
|
type=str,
|
|
required=True,
|
|
help="The main docker tag to push to. If a version number also adds latest and/or beta tag",
|
|
)
|
|
parser.add_argument(
|
|
"--suffix",
|
|
type=str,
|
|
required=True,
|
|
help="The suffix of the tag.",
|
|
)
|
|
parser.add_argument(
|
|
"--registry",
|
|
type=str,
|
|
choices=[GHCR, DOCKERHUB],
|
|
required=False,
|
|
action="append",
|
|
help="The registry to build tags for.",
|
|
)
|
|
|
|
|
|
def main():
|
|
args = parser.parse_args()
|
|
|
|
# detect channel from tag
|
|
match = re.match(r"^(\d+\.\d+)(?:\.\d+)(?:(b\d+)|(-dev\d+))?$", args.tag)
|
|
major_minor_version = None
|
|
if match is None: # eg 2023.12.0-dev20231109-testbranch
|
|
channel = None # Ran with custom tag for a branch etc
|
|
elif match.group(3) is not None: # eg 2023.12.0-dev20231109
|
|
channel = CHANNEL_DEV
|
|
elif match.group(2) is not None: # eg 2023.12.0b1
|
|
channel = CHANNEL_BETA
|
|
else: # eg 2023.12.0
|
|
major_minor_version = match.group(1)
|
|
channel = CHANNEL_RELEASE
|
|
|
|
tags_to_push = [args.tag]
|
|
if channel == CHANNEL_DEV:
|
|
tags_to_push.append("dev")
|
|
elif channel == CHANNEL_BETA:
|
|
tags_to_push.append("beta")
|
|
elif channel == CHANNEL_RELEASE:
|
|
# Additionally push to beta
|
|
tags_to_push.append("beta")
|
|
tags_to_push.append("latest")
|
|
|
|
if major_minor_version:
|
|
tags_to_push.append("stable")
|
|
tags_to_push.append(major_minor_version)
|
|
|
|
suffix = f"-{args.suffix}" if args.suffix else ""
|
|
|
|
image_name = f"esphome/esphome{suffix}"
|
|
|
|
print(f"channel={channel}")
|
|
|
|
if args.registry is None:
|
|
args.registry = [GHCR, DOCKERHUB]
|
|
elif len(args.registry) == 1:
|
|
if GHCR in args.registry:
|
|
print(f"image=ghcr.io/{image_name}")
|
|
if DOCKERHUB in args.registry:
|
|
print(f"image=docker.io/{image_name}")
|
|
|
|
print(f"image_name={image_name}")
|
|
|
|
full_tags = []
|
|
|
|
for tag in tags_to_push:
|
|
if GHCR in args.registry:
|
|
full_tags += [f"ghcr.io/{image_name}:{tag}"]
|
|
if DOCKERHUB in args.registry:
|
|
full_tags += [f"docker.io/{image_name}:{tag}"]
|
|
print(f"tags={','.join(full_tags)}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|