mirror of
https://github.com/harness-community/drone-helm-chart-container-registry.git
synced 2026-06-14 22:11:56 +08:00
65 lines
1.6 KiB
Python
65 lines
1.6 KiB
Python
# z Plugin Name: Push OCI Chart to Registry
|
|
# Description: Pushes an OCI Chart to a Docker Registry
|
|
|
|
import os
|
|
import subprocess
|
|
|
|
# Environment Variables
|
|
|
|
# Helm Chart
|
|
CHART_NAME = os.getenv("PLUGIN_CHART_NAME") # ! required
|
|
CHART_VERSION = os.getenv("PLUGIN_CHART_VERSION", "1.0.0")
|
|
|
|
# Docker Repository Details
|
|
DOCKER_REGISTRY = os.getenv(
|
|
"PLUGIN_DOCKER_REGISTRY", 'registry.hub.docker.com') # ? optional
|
|
|
|
# Docker Hub Credentials
|
|
DOCKER_USERNAME = os.getenv(
|
|
"PLUGIN_DOCKER_USERNAME") # ! required
|
|
DOCKER_PASSWORD = os.getenv(
|
|
"PLUGIN_DOCKER_PASSWORD") # ! required
|
|
|
|
# Path to Chart
|
|
CHART_PATH = os.getenv("PLUGIN_CHART_PATH") # ? optional
|
|
|
|
|
|
# ? validate environment variables
|
|
|
|
if (CHART_NAME is None):
|
|
print("Please provide a chart name")
|
|
exit(1)
|
|
|
|
if (DOCKER_USERNAME is None or DOCKER_PASSWORD is None):
|
|
print("Please provide a username and a password")
|
|
exit(1)
|
|
|
|
|
|
# cd into the chart directory
|
|
if (CHART_PATH is not None):
|
|
os.chdir(CHART_PATH)
|
|
|
|
# Package the helm chart
|
|
subprocess.run(["helm", "package", "--dependency-update", "."])
|
|
|
|
# Construct the chart name
|
|
chart_filename = f"{CHART_NAME}-{CHART_VERSION}.tgz"
|
|
|
|
# Login to Docker Registry
|
|
try:
|
|
login_command = ['helm', 'registry', 'login', DOCKER_REGISTRY,
|
|
'-u', DOCKER_USERNAME, '-p', DOCKER_PASSWORD]
|
|
subprocess.run(login_command)
|
|
except:
|
|
print("Failed to login!")
|
|
exit(1)
|
|
|
|
# Push the chart to Docker Hub
|
|
try:
|
|
docker_push_command = ["helm", "push", chart_filename,
|
|
f"oci://{DOCKER_REGISTRY}/{DOCKER_USERNAME}"]
|
|
subprocess.run(docker_push_command)
|
|
except:
|
|
print("Failed to push chart!")
|
|
exit(1)
|