From 68f84bbdab4429db5a77418a1176e9e40d952772 Mon Sep 17 00:00:00 2001 From: etwodev Date: Sun, 5 Oct 2025 13:06:14 +0100 Subject: [PATCH] chore: update releases [ci skip] --- main.go | 68 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/main.go b/main.go index 6472394..ffd16ce 100644 --- a/main.go +++ b/main.go @@ -36,16 +36,17 @@ type EnvVar struct { // ------------------------------- var ( - portainerURL = os.Getenv("PORTAINER_URL") // e.g. https://portainer.example.com/api - portainerToken = os.Getenv("PORTAINER_TOKEN") // API access token - endpointID = os.Getenv("PORTAINER_ENDPOINT") // Portainer endpoint ID - stackName = os.Getenv("STACK_NAME") // Name of stack to create/redeploy - repoURL = os.Getenv("REPO_URL") // Git repo URL - repoRef = os.Getenv("REPO_REF") // e.g. refs/heads/main - repoComposeFile = os.Getenv("REPO_COMPOSE_FILE") // e.g. docker-compose.yml - repoUsername = os.Getenv("REPO_USERNAME") // Git username (if needed) - repoPassword = os.Getenv("REPO_PASSWORD") // Git password/token (if needed) - tlsSkipVerify = os.Getenv("TLS_SKIP_VERIFY") // "true" / "false" + portainerURL = os.Getenv("PORTAINER_URL") // e.g. https://portainer.example.com/api + portainerToken = os.Getenv("PORTAINER_TOKEN") // API access token + endpointID = os.Getenv("PORTAINER_ENDPOINT") // Portainer endpoint ID + stackName = os.Getenv("STACK_NAME") // Name of stack to create/redeploy + repoURL = os.Getenv("REPO_URL") // Git repo URL + repoRef = os.Getenv("REPO_REF") // e.g. refs/heads/main + repoComposeFile = os.Getenv("REPO_COMPOSE_FILE") // e.g. docker-compose.yml + repoUsername = os.Getenv("REPO_USERNAME") // Git username (if needed) + repoPassword = os.Getenv("REPO_PASSWORD") // Git password/token (if needed) + tlsSkipVerify = os.Getenv("TLS_SKIP_VERIFY") // "true" / "false" + envData = os.Getenv("ENV_DATA") // Optional env vars in JSON format ) // ------------------------------- @@ -106,19 +107,28 @@ func main() { } } + // 3. Parse environment variables + var envVars []EnvVar = []EnvVar{} + if envData != "" { + if err := json.Unmarshal([]byte(envData), &envVars); err != nil { + fmt.Printf("Error parsing ENV_DATA: %v\n", err) + os.Exit(1) + } + } + if existing == nil { - // 3. Create new stack + // 4. Create new stack payload := map[string]interface{}{ - "composeFile": repoComposeFile, - "env": []EnvVar{}, - "fromAppTemplate": false, - "name": stackName, + "composeFile": repoComposeFile, + "env": envVars, + "fromAppTemplate": false, + "name": stackName, "repositoryAuthentication": repoUsername != "" && repoPassword != "", - "repositoryUsername": repoUsername, - "repositoryPassword": repoPassword, - "repositoryReferenceName": repoRef, - "repositoryURL": repoURL, - "tlsskipVerify": tlsSkipVerify == "true", + "repositoryUsername": repoUsername, + "repositoryPassword": repoPassword, + "repositoryReferenceName": repoRef, + "repositoryURL": repoURL, + "tlsskipVerify": tlsSkipVerify == "true", } url := fmt.Sprintf("%s/stacks/create/standalone/repository?endpointId=%s", portainerURL, endpointID) @@ -136,17 +146,17 @@ func main() { fmt.Printf("✅ Stack %s deployed successfully.\n", stackName) } else { - // 4. Redeploy stack + // 5. Redeploy stack payload := map[string]interface{}{ - "env": []EnvVar{}, - "prune": true, - "pullImage": true, - "repositoryAuthentication": repoUsername != "" && repoPassword != "", + "env": envVars, + "prune": true, + "pullImage": true, + "repositoryAuthentication": repoUsername != "" && repoPassword != "", "repositoryAuthorizationType": 0, - "repositoryUsername": repoUsername, - "repositoryPassword": repoPassword, - "repositoryReferenceName": repoRef, - "stackName": stackName, + "repositoryUsername": repoUsername, + "repositoryPassword": repoPassword, + "repositoryReferenceName": repoRef, + "stackName": stackName, } url := fmt.Sprintf("%s/stacks/%d/git/redeploy?endpointId=%s", portainerURL, existing.ID, endpointID)