#!/usr/bin/env bash # ============================================================================ # koax 배포 플랫폼 - Git 로그인 1회 설정 (macOS / Linux) # # git.koces.com 에 "브라우저 로그인"으로 push 할 수 있게 해줍니다. # # 실행 방법 - 둘 중 아무거나: # (1) 웹에서 바로 : curl -fsSL https://setup.koax.site/koax-git-setup.sh | bash # (2) 파일로 받아서 : bash ./koax-git-setup.sh # # 아래 CLIENT_ID / CLIENT_SECRET 은 "공개 클라이언트(public client)" 값입니다. # 비밀번호가 아니며, 모든 사용자가 동일한 값을 사용합니다. # # ※ Windows 는 koax-git-setup.ps1 을 쓰세요. # ============================================================================ set -u GIT_HOST="git.koces.com" CLIENT_ID="97f5027b22011ae2dadd9db983a09bbfeb7452f5840afc0c7314c3932de58de2" CLIENT_SECRET="gloas-405db5408006c96b1828e04b5baf23fc7e2be20a6ed21ee41dabe523e56a51cc" # curl | bash 로 실행될 때도 안전하도록 전체를 함수로 감싸고, 마지막 줄에서 호출한다. # (파일이 잘린 채 전달되면 함수 호출까지 도달하지 않아 아무것도 실행되지 않는다.) koax_git_setup() { local uname_s prefix store gcm_version removed=0 echo echo "=== koax Git 로그인 설정 시작 ===" # 1) Git 설치 확인 if ! command -v git >/dev/null 2>&1; then echo "[X] Git 이 설치돼 있지 않습니다." echo " macOS : brew install git (또는 xcode-select --install)" echo " Ubuntu: sudo apt install git" echo " Rocky : sudo dnf install git" return 1 fi echo "[OK] Git 발견: $(git --version)" uname_s="$(uname -s)" # 2) Git Credential Manager 확인 # Windows 와 달리 mac/Linux 는 git 에 GCM 이 포함돼 있지 않다. 없으면 설치 안내 후 중단. # PATH 에 없어도 git exec-path 에 있을 수 있으므로 git 을 통해서도 확인한다. gcm_version="$(git credential-manager --version 2>/dev/null | head -1 || true)" if [ -z "$gcm_version" ] && ! command -v git-credential-manager >/dev/null 2>&1; then echo echo "[X] Git Credential Manager(GCM) 가 없습니다. 브라우저 로그인에 필요합니다." echo case "$uname_s" in Darwin) echo " 설치: brew install --cask git-credential-manager" ;; Linux) echo " 설치: https://github.com/git-ecosystem/git-credential-manager/releases" echo " 에서 최신 .deb / .rpm / tar.gz 를 받아 설치한 뒤" echo " git-credential-manager configure" ;; *) echo " 설치: https://github.com/git-ecosystem/git-credential-manager/releases" ;; esac echo echo " 설치 후 이 스크립트를 다시 실행하세요." echo " (GCM 없이 쓰려면 git.koces.com 에서 개인 액세스 토큰(PAT)을 발급받아" echo " push 시 비밀번호 대신 입력하는 방법도 있습니다.)" return 1 fi echo "[OK] Credential Manager 발견: ${gcm_version:-설치됨}" git config --global credential.helper manager # 2.5) Linux 는 자격증명 저장소를 명시하지 않으면 GCM 이 실행을 거부한다. # macOS 는 keychain 이 기본이라 설정이 필요 없다. if [ "$uname_s" = "Linux" ]; then store="$(git config --global --get credential.credentialStore || true)" if [ -z "$store" ]; then if command -v secret-tool >/dev/null 2>&1; then store="secretservice" else store="cache" fi git config --global credential.credentialStore "$store" echo "[OK] 자격증명 저장소를 '$store' 로 설정했습니다." if [ "$store" = "cache" ]; then echo " (cache 는 재부팅하면 지워집니다. 계속 유지하려면 libsecret 설치 후" echo " git config --global credential.credentialStore secretservice 로 바꾸세요.)" fi else echo "[OK] 자격증명 저장소: $store (기존 설정 유지)" fi fi # 3) git.koces.com 을 브라우저 OAuth 로그인으로 설정 prefix="credential.https://${GIT_HOST}" git config --global "${prefix}.provider" "gitlab" git config --global "${prefix}.gitLabDevClientId" "$CLIENT_ID" git config --global "${prefix}.gitLabDevClientSecret" "$CLIENT_SECRET" git config --global "${prefix}.gitLabAuthModes" "browser" echo echo "[OK] ${GIT_HOST} 브라우저 로그인 설정 완료" # 3.5) 낡은 자격증명 제거 # 저장된 자격증명이 남아 있으면 GCM 이 OAuth 를 시작하지 않고 그걸 그대로 돌려줘 # "HTTP Basic: Access denied" 로 막힌다. 그래서 미리 지운다. echo echo "이전에 저장된 ${GIT_HOST} 자격증명을 정리합니다(있으면)..." printf 'protocol=https\nhost=%s\n\n' "$GIT_HOST" | git credential reject 2>/dev/null && removed=1 if [ "$uname_s" = "Darwin" ]; then # keychain 에 직접 남은 항목도 정리(없으면 조용히 실패) security delete-internet-password -s "$GIT_HOST" >/dev/null 2>&1 && removed=1 fi echo "[OK] 정리 완료 - 다음 push 때 브라우저 로그인이 새로 뜹니다" # 4) 확인 출력 echo echo "--- 현재 설정 ---" git config --global --get-urlmatch credential "https://${GIT_HOST}" cat </<저장소>.git git push <- 처음 한 번 브라우저가 떠서 로그인하면, 이후 자동입니다. 저장소를 미리 안 만들어도 됩니다(push 하면 자동 생성): git remote add origin https://${GIT_HOST}/<본인계정>/<저장소>.git git push -u origin main 배포하려면 저장소 루트에 deploy.json 을 두세요: { "buildPack": "static" } (정적 사이트) { "buildPack": "nixpacks", "port": 3000 } (Node 등) -> 약 1분 뒤 https://<저장소명>.koax.site 로 뜹니다. 사용설명서: https://setup.koax.site/manual.html [문제 해결] push 시 브라우저가 안 뜨고 'Access denied' 가 나오면 다시 실행하세요: curl -fsSL https://setup.koax.site/koax-git-setup.sh | bash [참고] 서버·CI 처럼 브라우저가 없는 환경은 OAuth 를 쓸 수 없습니다. 그런 곳은 배포 키나 PAT 를 사용하세요. EOF } koax_git_setup