Skip to Content
문서GitHub ActionsTrigger Action

Trigger Action

Deplite/trigger-action@v1는 GitHub Actions에서 Deplite 트리거를 호출하는 공식 액션이에요.
호출은 항상 POST /triggers/{trigger-id}/run 한 번이며, wait 입력에 따라 즉시 반환하거나 잡 완료까지 대기해요.

한 줄 요약

- uses: Deplite/trigger-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} trigger-id: 00000000-0000-0000-0000-000000000000 params: '{"ref":"main"}' wait: sync

Inputs

이름필수기본값설명
api-tokenDeplite API 토큰. Authorization: Bearer로 전송
trigger-id호출할 트리거의 UUID
workflow-nameagent-scope 트리거의 경우 필수. 실행할 워크플로우 이름
params트리거 파라미터 JSON 객체 (문자열 형태로 전달)
ref워크플로우에 그대로 전달되는 git ref
debugfalsetrue면 verbose 실행 (debug: true로 페이로드 포함)
waitasyncasync 즉시 반환, sync 잡 완료까지 대기
idempotency-key자동 생성Idempotency-Key 헤더. 미지정 시 gha-${GITHUB_RUN_ID}-${GITHUB_JOB}-${GITHUB_RUN_ATTEMPT}
base-urlhttps://api.deplite.io/v1API 베이스 URL 오버라이드

Outputs

이름언제 채워지나설명
job-id항상디스패치된 잡의 UUID
status항상잡 상태 문자열
status-url응답에 있을 때잡 상태 페이지 URL (대시보드 콘솔)
exit-codewait: sync 에서만Agent가 보고한 exit code
outputwait: sync 에서만잡 출력 페이로드 (객체면 JSON 문자열로 직렬화)

동작 상세

호출

  • HTTP: 단 1회 — POST ${base-url}/triggers/${trigger-id}/run
  • 헤더: Authorization: Bearer <api-token>, Idempotency-Key: <key>, Content-Type: application/json
  • 바디: { workflowName?, ref?, debug, params? } (각 입력이 있을 때만 포함)
  • 응답: { jobId, status, idempotent, timedOut, exitCode?, errorMessage?, output? }

응답에서 받은 값을 그대로 step output에 매핑해요.

wait: async (기본)

호출 즉시 반환하고 액션 자체는 항상 성공(exit 0)으로 끝나요.
후속 처리는 알림 채널(Slack/Discord)이나 워크플로우 마지막 step의 콜백으로 받는 패턴이에요.

wait: sync

서버 측에서 잡 완료까지 대기한 뒤 응답을 돌려줘요(클라이언트 폴링 없음 — long-poll). step 실패 판정은 응답을 받은 뒤 다음 순서로 결정돼요.

if (wait === 'sync') { if (data.timedOut) { core.setFailed(`Job ${jobId} timed out (server-side sync wait).`) } else if (typeof data.exitCode === 'number' && data.exitCode !== 0) { core.setFailed(`Job ${jobId} exited with code ${data.exitCode}: ${data.errorMessage ?? ''}`) } else if (data.status && !['succeeded', 'success', 'completed'].includes(data.status)) { core.setFailed(`Job ${jobId} finished with status '${data.status}': ${data.errorMessage ?? ''}`) } }

요약하면 sync 모드는 다음 셋 중 하나라도 만족하면 step을 실패시켜요.

  1. timedOut === true (트리거의 responseTimeoutMs 초과)
  2. exitCode가 숫자이고 0이 아님
  3. statussucceeded·success·completed 중 하나가 아님

async 모드는 위 검사 자체를 하지 않아요.

Idempotency-Key 자동 생성

idempotency-key를 명시하지 않으면 다음 환경변수에서 조합돼요.

gha-${GITHUB_RUN_ID}-${GITHUB_JOB}-${GITHUB_RUN_ATTEMPT}
환경변수의미
GITHUB_RUN_ID워크플로우 실행 ID (동일 PR/푸시 내에서 유지)
GITHUB_JOBjob 이름
GITHUB_RUN_ATTEMPT재실행 시 증가

같은 GitHub 실행이 그대로 재시도(replay)되면 동일 키가 그대로 사용되어 서버가 중복 잡 생성을 막아줘요.
“Re-run all jobs”는 GITHUB_RUN_ATTEMPT가 증가하므로 새 잡으로 떨어져요.

직접 키를 잡고 싶다면 명시하세요:

- uses: Deplite/trigger-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} trigger-id: ${{ vars.TRIGGER_ID }} idempotency-key: release-${{ github.sha }}

에러 처리

  • presign 단계의 HTTP 4xx/5xx는 본문을 포함한 메시지로 즉시 core.setFailed() → step 실패 (exit 1)
  • 네트워크 오류·JSON 파싱 오류도 마찬가지
  • 액션 자체는 자동 재시도를 하지 않아요.
    일시적 5xx 대비가 필요하면 GitHub Actions의 step 단위 continue-on-error + 후속 retry step을 활용해주세요.

Agent-scope 트리거

workflow 스코프 트리거는 trigger-id만으로 충분하지만, 한 Agent가 여러 워크플로우를 호스팅하는 agent 스코프 트리거에서는 어떤 워크플로우를 실행할지 명시해야 해요.

- uses: Deplite/trigger-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} trigger-id: ${{ vars.DEPLITE_AGENT_TRIGGER_ID }} workflow-name: deploy-staging params: '{"ref":"main"}'

트리거 스코프 개념은 트리거에서 다뤄요.

응답 객체 형태

wait: sync 응답을 step output으로 받을 때 output 필드는 객체면 JSON 문자열로 직렬화돼서 들어와요.
후속 step에서 다시 파싱해서 쓰세요.

- id: deploy uses: Deplite/trigger-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} trigger-id: ${{ vars.TRIGGER_ID }} wait: sync - name: Read output run: | echo '${{ steps.deploy.outputs.output }}' | jq '.url'

관련 문서

최종 수정 일자: