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