eldhugr/ArgoCD App

Drive the ArgoCD API (app set / diff / wait) natively in JavaScript - no argocd CLI required.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Jun 25, 2026
License
Apache 2.0

Pinned Snippet

workflow.ymlSHA-pinned
uses: eldhugr/argocd-action@187621d14b880ae23e4eb61fd79fec608d01fab2 # v1.1.0

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
commandSub-command to run: set | diff | sync | wait | deploy | get | rollback | history | terminate-opyes
applicationApplication name (e.g. app.stage.comments). Required for all commands except `deploy` when `applications` is provided.no
serverArgoCD server host, with or without scheme (defaults to $ARGOCD_SERVER)no
auth-methodAuthentication method: token | password | oidc. When unset, it is inferred (token, then username/password, then OIDC if an ID token is available).no
auth-tokenBearer auth token (defaults to $ARGOCD_AUTH_TOKEN)no
usernameUsername for password login (defaults to $ARGOCD_USERNAME). Used only when no auth-token is provided.no
passwordPassword for password login (defaults to $ARGOCD_PASSWORD).no
oidc-audienceAudience for the requested GitHub OIDC ID token. Leave empty to use the default audience.no
oidc-client-idDex/OIDC client id used for the token exchange (auth-method: oidc)noargo-cd-cli
oidc-connector-idDex connector id configured for GitHub Actions on the ArgoCD server (auth-method: oidc)nogithub-actions
insecureSkip TLS certificate verification (defaults to $ARGOCD_INSECURE, else false)no
app-namespaceNamespace of the Application CR (appNamespace query param), for apps in any namespaceno
parametersNewline-separated Helm parameters to set, each as name=value (command: set)no
unset-parametersNewline/comma-separated Helm parameter names to remove from the application. May be combined with `parameters` to set and unset in one call (command: set)no
kustomize-imagesNewline/comma-separated Kustomize image overrides to set on the application, each in `argocd app set --kustomize-image` form (e.g. nginx=nginx:1.21, web:v2, app@sha256:...). An override replaces an existing one for the same image (command: set)no
source-nameFor multi-source apps: the source name to apply parameters to (command: set)no
source-positionFor multi-source apps: 1-based source index to apply parameters to (command: set)no
prunePrune resources that are no longer defined in Git (command: sync, deploy, rollback)nofalse
forceForce apply (kubectl apply --force) during sync (command: sync, deploy)nofalse
replaceUse kubectl replace/create instead of apply (sync option Replace=true) (command: sync, deploy)nofalse
server-sideUse server-side apply (sync option ServerSideApply=true) (command: sync, deploy)nofalse
apply-out-of-sync-onlyOnly apply resources that are out of sync (sync option ApplyOutOfSyncOnly=true) (command: sync, deploy)nofalse
sync-optionsAdditional sync options, one per line or comma-separated, each as Name=value (e.g. CreateNamespace=true) (command: sync, deploy)no
strategySync strategy: "apply" (default) or "hook" (command: sync, deploy)no
dry-runPerform a dry run without applying changes (command: sync, rollback)nofalse
revisionTarget Git revision to sync to (command: sync), or the history revision to roll back to (command: rollback)no
resourcesLimit the sync to specific resources, one per line or comma-separated, each as [group:]kind:name (e.g. apps:Deployment:web or :Service:web). Mirrors `argocd app sync --resource` (command: sync, deploy)no
refreshRefresh the app before diff/wait: "false" | "normal" | "hard" (command: diff, wait)nonormal
fail-on-diffIf true, the diff command fails the step when differences are found (command: diff)nofalse
unified-diffRender a unified (+/-) field-level diff with old/new values. For `diff`: in the step summary (beneath the resource table) and the job log. For `deploy`: in the per-application job log. Values of Secret resources are masked. (command: diff, deploy)nofalse
timeoutSeconds to wait for the app to become Synced/Healthy (command: wait)no600
wait-for-syncWait for sync status to be Synced (command: wait)notrue
wait-for-healthWait for health status to be Healthy (command: wait)notrue
wait-for-operationWait for any in-flight sync operation to finish (command: wait, deploy)notrue
fail-on-rollout-failureFail fast when a rollout cannot recover, instead of waiting out the timeout. Requires wait-for-health (a sync-only wait does not check rollout health) and only fires once the sync operation has settled. Aborts on an app whose health is Degraded (debounced over a couple of polls, so a stale post-sync snapshot or a momentary blip does not trip it), and on a managed Pod stuck in an unrecoverable state (ImagePullBackOff, ErrImagePull, InvalidImageName, CreateContainerConfigError, CrashLoopBackOff, ...) - the latter catches the failure before the app itself goes Degraded. Image/config faults abort after a couple of polls; crash-loops are debounced longer to ride out a slow start. Best-effort: a resource-tree read error just skips the pod check for that poll (command: wait, deploy, sync, rollback)notrue
applicationsList of application names to deploy with the same settings - a JSON array of names (e.g. ["app.stage.comments","app.dev.comments"]) or a newline/comma-separated list. Takes precedence over `application` (command: deploy)no
restartWhen there is no rendered diff, restart these workloads instead of doing nothing. `false` (default, off) or an explicit kind / comma-separated kinds, e.g. `Deployment`, `StatefulSet`, or `Deployment,StatefulSet` (command: deploy)nofalse
parallelDeploy multiple applications concurrently instead of sequentially. Set to false to deploy one at a time (command: deploy)notrue
fail-fastStop after the first failing application in sequential mode (command: deploy). Ignored when allow-failure is true.notrue
allow-failureDo not fail the job when some applications fail to deploy - still deploy the rest and report status. Implies fail-fast=false (command: deploy)nofalse
ignore-missingDo not fail the job for applications that do not exist - reported as `missing` (404) or, since ArgoCD v2.7, a masked `forbidden` (403, "missing or no access"). Both are still reported in `summary` and the step summary; only the job-failure is suppressed. Other failures (sync errors, timeouts) still fail the job (command: deploy)nofalse
rollback-idDeployment history id to roll back to. When omitted, `revision` is used to find the entry, else the previous deployment is used (command: rollback)no
namedescription
diff"true" when the diff command found differences, otherwise "false"
sync-statusLast observed sync status (e.g. Synced, OutOfSync)
health-statusLast observed health status (e.g. Healthy, Progressing, Degraded)
revisionSynced revision of the application
imagesJSON array of container images currently deployed (command: get)
historyJSON array of deployment history entries: {id, revision, deployedAt, ...} (command: get, history)
resultsJSON array of per-application deploy results: {app, status, diff, action, syncStatus, healthStatus, revision, images} or {app, status, error}. `status` is one of updated | restarted | unchanged | missing | forbidden | failed (command: deploy)
outcome`success` (all deployed), `partial` (some failed), or `failure` (all failed) (command: deploy)
summaryJSON object grouping application names by status: {updated, restarted, unchanged, missing, forbidden, failed}. `missing` is a definitive 404; `forbidden` is a 403, which ArgoCD returns both for a non-existent app and a real RBAC denial (command: deploy)