74 lines
1.9 KiB
YAML
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"
|