diff --git a/docker/Dockerfile.linux.amd64 b/docker/Dockerfile.linux.amd64 index 7f97eed..2eb895d 100644 --- a/docker/Dockerfile.linux.amd64 +++ b/docker/Dockerfile.linux.amd64 @@ -11,6 +11,8 @@ RUN apk --no-cache add ca-certificates curl && \ rm -rf linux-amd64 helm-v3.7.0-linux-amd64.tar.gz && \ chmod +x /usr/local/bin/helm -COPY ./main.sh /app/ +RUN apk add --no-cache python3 -CMD ["sh", "/app/main.sh"] +COPY ./main.py /app/ + +CMD ["python", "/app/main.py"] diff --git a/docker/Dockerfile.linux.arm64 b/docker/Dockerfile.linux.arm64 index 57c768b..2d11141 100644 --- a/docker/Dockerfile.linux.arm64 +++ b/docker/Dockerfile.linux.arm64 @@ -1,4 +1,3 @@ -# Dockerfile for linux/arm64 FROM --platform=linux/arm64 alpine:3.18 as base WORKDIR /app @@ -12,6 +11,8 @@ RUN apk --no-cache add ca-certificates curl && \ rm -rf linux-arm64 helm-v3.7.0-linux-arm64.tar.gz && \ chmod +x /usr/local/bin/helm -COPY ./main.sh /app/ +RUN apk add --no-cache python3 -CMD ["sh", "/app/main.sh"] \ No newline at end of file +COPY ./main.py /app/ + +CMD ["python", "/app/main.py"] diff --git a/docker/Dockerfile.windows.amd64 b/docker/Dockerfile.windows.amd64 index e48689e..5f059cb 100644 --- a/docker/Dockerfile.windows.amd64 +++ b/docker/Dockerfile.windows.amd64 @@ -10,18 +10,11 @@ ENV chocolateyVersion=1.4.0 SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) -RUN set-ExecutionPolicy RemoteSigned -Scope CurrentUser -RUN choco install -y kubernetes-helm +RUN choco install -y kubernetes-helm -RUN choco install -y git.install +RUN choco install -y python3 -ENV PATH="C:\\Program Files\\Git\\bin;$PATH" +COPY ./main.py /app/ -COPY ./main.sh ./ - -# ENTRYPOINT ["python", "C:\\app\\main.py"] -# CMD ["C:\\Program Files\\Git\\bin\\bash.exe", "-c", "./main.sh"] - -# Execute main.sh in powershell -ENTRYPOINT ["bash", "C:\\app\\main.sh"] \ No newline at end of file +ENTRYPOINT ["python", "C:\\app\\main.py"] \ No newline at end of file diff --git a/docker/Dockerfile.windows.arm64 b/docker/Dockerfile.windows.arm64 index f2a890d..5f059cb 100644 --- a/docker/Dockerfile.windows.arm64 +++ b/docker/Dockerfile.windows.arm64 @@ -1,4 +1,4 @@ -FROM --platform=windows/arm64 mcr.microsoft.com/windows/servercore:ltsc2022 +FROM --platform=windows/amd64 mcr.microsoft.com/windows/servercore:ltsc2022 USER ContainerAdministrator @@ -7,14 +7,14 @@ WORKDIR C:\\app ENV HELM_EXPERIMENTAL_OCI=1 ENV chocolateyVersion=1.4.0 - SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] RUN Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) -RUN choco install -y kubernetes-helm +RUN choco install -y kubernetes-helm -COPY ./main.sh ./ +RUN choco install -y python3 -# ENTRYPOINT ["python", "C:\\app\\main.py"] -CMD ["bash", "C:\\app\\main.sh"] \ No newline at end of file +COPY ./main.py /app/ + +ENTRYPOINT ["python", "C:\\app\\main.py"] \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..353f37b --- /dev/null +++ b/main.py @@ -0,0 +1,62 @@ +# Plugin Name: Push OCI Chart to Registry +# Description: Pushes an Helm Chart to a Docker Registry + +import os +import subprocess + +# Environment Variables + +CHART_NAME = os.getenv("PLUGIN_CHART_NAME") +CHART_VERSION = os.getenv("PLUGIN_CHART_VERSION", "1.0.0") + +DOCKER_REGISTRY = os.getenv( + "PLUGIN_DOCKER_REGISTRY", 'registry.hub.docker.com') + +DOCKER_USERNAME = os.getenv( + "PLUGIN_DOCKER_USERNAME") +DOCKER_PASSWORD = os.getenv( + "PLUGIN_DOCKER_PASSWORD") + +CHART_PATH = os.getenv("PLUGIN_CHART_PATH") + +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) + + +if (CHART_PATH is not None): + os.chdir(CHART_PATH) + +try: + subprocess.run(["helm", "package", "--dependency-update", "."]) + if (subprocess.run(["helm", "package", "--dependency-update", "."]).returncode != 0): + raise Exception("Failed to package chart!") +except: + print("Failed to package chart!") + exit(1) + +chart_filename = f"{CHART_NAME}-{CHART_VERSION}.tgz" + +try: + login_command = ['helm', 'registry', 'login', DOCKER_REGISTRY, + '-u', DOCKER_USERNAME, '-p', DOCKER_PASSWORD] + subprocess.run(login_command) + if (subprocess.run(login_command).returncode != 0): + raise Exception("Failed to login!") +except: + print("Failed to login!") + exit(1) + +try: + docker_push_command = ["helm", "push", chart_filename, + f"oci://{DOCKER_REGISTRY}/{DOCKER_USERNAME}"] + subprocess.run(docker_push_command) + if (subprocess.run(docker_push_command).returncode != 0): + raise Exception("Failed to push chart!") +except: + print("Failed to push chart!") + exit(1) \ No newline at end of file diff --git a/main.sh b/main.sh deleted file mode 100644 index 680c59e..0000000 --- a/main.sh +++ /dev/null @@ -1,43 +0,0 @@ -# environment variables - -if [ -z "$PLUGIN_CHART_NAME" ]; then - echo "chart name is required" - exit 1 -fi - -if [ -z "$PLUGIN_CHART_VERSION" ]; then - echo "chart version is required" - exit 1 -fi - -if [ -z "$PLUGIN_DOCKER_USERNAME" ]; then - echo "docker username is required" - exit 1 -fi - -if [ -z "$PLUGIN_DOCKER_PASSWORD" ]; then - echo "docker password is required" - exit 1 -fi - -# Set docker registry to docker hub if not set -if [ -z "$PLUGIN_DOCKER_REGISTRY" ]; then - PLUGIN_DOCKER_REGISTRY="registry.hub.docker.com" -fi - -if [ -z "$PLUGIN_CHART_PATH" ]; then - PLUGIN_PATH="." -fi - -# plugin script - -echo $PLUGIN_CHART_PATH -cd "$PLUGIN_CHART_PATH" -helm package --dependency-update . || exit 1 - -CHART_FILENAME="$PLUGIN_CHART_NAME-$PLUGIN_CHART_VERSION.tgz" || exit 1 - -helm registry login $PLUGIN_DOCKER_REGISTRY -u $PLUGIN_DOCKER_USERNAME -p $PLUGIN_DOCKER_PASSWORD || exit 1 - -helm push $CHART_FILENAME oci://$PLUGIN_DOCKER_REGISTRY/$PLUGIN_DOCKER_USERNAME || exit 1 -echo "Chart pushed to $PLUGIN_DOCKER_REGISTRY/$PLUGIN_DOCKER_USERNAME" \ No newline at end of file