name: 특정 저장소 체크아웃 description: Git 인증 정보를 사용해 특정 저장소와 브랜치를 수동으로 체크아웃 inputs: repository-url: required: true description: 체크아웃할 Git 저장소 URL username: required: true description: Git 인증 사용자명 access-token: required: true description: Git 인증 토큰 branch: required: false default: develop description: 체크아웃할 브랜치 path: required: false default: "." description: 저장소를 체크아웃할 경로 runs: using: composite steps: - name: 특정 저장소 체크아웃 shell: bash env: GIT_REPOSITORY_URL: ${{ inputs.repository-url }} GIT_USERNAME: ${{ inputs.username }} GIT_ACCESS_TOKEN: ${{ inputs.access-token }} GIT_BRANCH: ${{ inputs.branch }} CHECKOUT_PATH: ${{ inputs.path }} run: | set -euo pipefail SUDO="" [ "$(id -u)" -ne 0 ] && SUDO="sudo" if ! command -v git >/dev/null 2>&1; then if command -v apt-get >/dev/null 2>&1; then $SUDO apt-get update $SUDO apt-get install -y --no-install-recommends git ca-certificates else echo "git이 없습니다. git을 설치한 러너가 필요합니다." exit 1 fi fi ASKPASS_FILE="$(mktemp)" cleanup() { rm -f "$ASKPASS_FILE" } trap cleanup EXIT cat > "$ASKPASS_FILE" <<'EOF' #!/bin/sh case "$1" in *Username*) echo "$GIT_USERNAME" ;; *Password*) echo "$GIT_ACCESS_TOKEN" ;; esac EOF chmod 700 "$ASKPASS_FILE" export GIT_ASKPASS="$ASKPASS_FILE" export GIT_TERMINAL_PROMPT=0 mkdir -p "$CHECKOUT_PATH" git clone \ --branch "$GIT_BRANCH" \ --single-branch \ "$GIT_REPOSITORY_URL" \ "$CHECKOUT_PATH"