Files

74 lines
1.9 KiB
YAML

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"