Deploy Dokploy applications from GitHub and Gitea Actions

A dependency-free node20 action that triggers application.deploy or
compose.deploy, then follows the deployment to a terminal status so a
failed build fails the CI run. Snapshots the deployment list before
triggering, so a concurrent deployment is never mistaken for this one.

Optionally points the application at a freshly built image first, which
is what lets a workflow lint, test, push and deploy the same artifact.
This commit is contained in:
2026-08-09 03:37:35 +03:00
commit c23b44983b
20 changed files with 2778 additions and 0 deletions

127
action.yml Normal file
View File

@@ -0,0 +1,127 @@
name: Dokploy Deploy
description: Trigger a Dokploy application or Compose deployment and wait for it to finish.
author: maxvojtkov
branding:
icon: upload-cloud
color: purple
inputs:
host:
description: >-
Base URL of the Dokploy instance, e.g. https://dokploy.example.com.
A trailing /api is tolerated. Falls back to $DOKPLOY_HOST.
required: false
api-key:
description: >-
API token from Settings → Profile → API/CLI.
Falls back to $DOKPLOY_API_KEY.
required: false
# --- what to deploy: an id, or a name to look up -------------------------
application-id:
description: Application to act on.
required: false
compose-id:
description: Compose stack to act on.
required: false
project:
description: Project name, when looking the service up by name.
required: false
service:
description: >-
Application or Compose stack name, when looking it up by name.
Matches either the display name or the Docker service name.
required: false
environment:
description: Environment name. Defaults to the project's default environment.
required: false
# --- what to do ----------------------------------------------------------
action:
description: One of deploy, redeploy, start, stop, reload.
required: false
default: deploy
docker-image:
description: >-
Image to point the application at before deploying, e.g.
ghcr.io/acme/api:1.4.0. Switches the application's source type to Docker.
Applications only.
required: false
registry-username:
description: Username for a private registry, alongside docker-image.
required: false
registry-password:
description: Password or token for a private registry, alongside docker-image.
required: false
registry-url:
description: Registry URL for a private registry, alongside docker-image.
required: false
title:
description: Deployment title shown in Dokploy. Defaults to the short commit SHA.
required: false
description:
description: Deployment description. Defaults to repository, ref, actor and a link to the run.
required: false
# --- how to wait ---------------------------------------------------------
wait:
description: Wait for the deployment to reach a terminal status and fail the step if it errored.
required: false
default: "true"
timeout:
description: Seconds to wait for the deployment to finish.
required: false
default: "600"
poll-interval:
description: Seconds between deployment status checks.
required: false
default: "5"
request-timeout:
description: Seconds before a single API request is abandoned.
required: false
default: "60"
cancel-on-timeout:
description: Ask Dokploy to cancel the deployment when the timeout is hit.
required: false
default: "false"
logs:
description: When to print deployment logs — on-failure, always or never.
required: false
default: on-failure
log-tail:
description: Number of log lines to print.
required: false
default: "200"
insecure:
description: Skip TLS certificate verification. Only for self-signed certificates.
required: false
default: "false"
outputs:
status:
description: Terminal deployment status — done, error, cancelled, timed-out or triggered.
succeeded:
description: '"true" when the deployment finished successfully.'
deployment-id:
description: Id of the deployment this run started, when one was watched.
service-kind:
description: application or compose.
service-id:
description: Id of the resolved service.
application-id:
description: Resolved application id, empty for a Compose stack.
compose-id:
description: Resolved Compose id, empty for an application.
app-name:
description: Docker service name of the resolved service.
duration:
description: Seconds the step spent triggering and waiting.
runs:
using: node20
main: src/index.js