Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 34 additions & 10 deletions .github/workflows/portainer-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,12 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
java-version: '8'
cache: maven

- name: Make Maven wrapper executable
run: chmod +x mvnw

- name: Build application
run: ./mvnw -B package -DskipTests

Expand Down Expand Up @@ -58,26 +61,47 @@ jobs:
import json
import os
import sys
from urllib import request
from urllib import error, request

def exit_with_http_details(exc: error.HTTPError) -> None:
body = exc.read().decode(errors="replace") if exc.fp else ""
sys.exit(f"HTTP {exc.code} when calling {exc.url}: {body}")

url = os.environ.get("PORTAINER_URL")
username = os.environ.get("PORTAINER_USERNAME")
password = os.environ.get("PORTAINER_PASSWORD")
stack_id = os.environ.get("PORTAINER_STACK_ID")
if not all([url, username, password, stack_id]):
sys.exit("Portainer secrets are not configured")
data = json.dumps({"Username": username, "Password": password}).encode()
req = request.Request(f"{url}/api/auth", data=data, headers={"Content-Type": "application/json"})
with request.urlopen(req) as resp:
token = json.loads(resp.read().decode()).get("jwt")

auth_request = request.Request(
f"{url.rstrip('/')}/api/auth",
data=json.dumps({"Username": username, "Password": password}).encode(),
headers={"Content-Type": "application/json"},
)
try:
with request.urlopen(auth_request) as resp:
token = json.loads(resp.read().decode()).get("jwt")
except error.HTTPError as exc:
exit_with_http_details(exc)
except error.URLError as exc:
sys.exit(f"Failed to reach Portainer auth endpoint: {exc.reason}")

if not token:
sys.exit("Failed to obtain Portainer JWT token")

deploy_request = request.Request(
f"{url}/api/stacks/{stack_id}/deploy",
f"{url.rstrip('/')}/api/stacks/{stack_id}/deploy",
data=json.dumps({"prune": True, "pullImage": True}).encode(),
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
method="POST",
)
with request.urlopen(deploy_request) as resp:
print(f"Deploy response status: {resp.status}")
print(resp.read().decode())
try:
with request.urlopen(deploy_request) as resp:
print(f"Deploy response status: {resp.status}")
print(resp.read().decode())
except error.HTTPError as exc:
exit_with_http_details(exc)
except error.URLError as exc:
sys.exit(f"Failed to reach Portainer deploy endpoint: {exc.reason}")
PY
12 changes: 9 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
FROM openjdk:8-jdk-alpine
FROM eclipse-temurin:8-jdk

VOLUME /tmp
COPY target/botplatform-0.0.1-SNAPSHOT.jar app.jar
RUN apk update && apk add fontconfig ttf-dejavu && rm -rf /var/cache/apk/*
ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates fontconfig fonts-dejavu-core \
&& update-ca-certificates \
&& rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Empty file modified mvnw
100644 → 100755
Empty file.