From 0173317f1bfc2a183896ee704e8a8a4ed97f87dc Mon Sep 17 00:00:00 2001 From: "kihwan.song" Date: Thu, 18 Jun 2026 11:41:58 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9B=B9=EC=84=9C=EB=B9=84=EC=8A=A4=20?= =?UTF-8?q?=ED=97=AC=EC=8A=A4=EC=B2=B4=ED=81=AC=20=EA=B3=B5=ED=86=B5=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wait-http/action.yml | 59 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 wait-http/action.yml diff --git a/wait-http/action.yml b/wait-http/action.yml new file mode 100644 index 0000000..b9b7d64 --- /dev/null +++ b/wait-http/action.yml @@ -0,0 +1,59 @@ +name: HTTP 응답 대기 +description: 지정한 호스트:포트가 HTTP 응답을 줄 때까지 대기 (서비스 기동 확인) + +inputs: + host: + required: true + description: 확인할 호스트/IP + port: + required: true + description: 확인할 포트 + timeout: + required: false + default: "60" + description: 최대 대기 시간(초) + interval: + required: false + default: "2" + description: 재시도 간격(초) + path: + required: false + default: "/" + description: 요청 경로 + scheme: + required: false + default: "http" + description: 프로토콜 (http 또는 https) + +runs: + using: composite + steps: + - shell: bash + env: + HOST: ${{ inputs.host }} + PORT: ${{ inputs.port }} + TIMEOUT: ${{ inputs.timeout }} + INTERVAL: ${{ inputs.interval }} + REQ_PATH: ${{ inputs.path }} + SCHEME: ${{ inputs.scheme }} + run: | + set -eu + + URL="${SCHEME}://${HOST}:${PORT}${REQ_PATH}" + echo "응답 대기 중: ${URL} (최대 ${TIMEOUT}초)" + + ELAPSED=0 + while [ "$ELAPSED" -lt "$TIMEOUT" ]; do + # 연결만 되면(상태코드 무엇이든) 통과. 404/500이어도 서버는 살아있는 것. + CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time "$INTERVAL" "$URL" || echo "000") + if [ "$CODE" != "000" ]; then + echo "응답 확인 (HTTP ${CODE}) — ${ELAPSED}초 경과" + exit 0 + fi + echo " ...대기 (${ELAPSED}/${TIMEOUT}초)" + sleep "$INTERVAL" + ELAPSED=$((ELAPSED + INTERVAL)) + done + + echo "${TIMEOUT}초 내에 응답하지 않음: ${URL}" + exit 1