gg.cmd
gg.cmd
Release
[변경 이력 (Changelog)]
[다운로드 (Download)]
Image
Image
gg.cmd는 Gradle, JDK/JVM, Node.js 및 Java와 같은 다양한 도구들을 위한 실행 가능한 래퍼(wrapper) 역할을 하는 크로스 플랫폼(cross-platform) 및 크로스 아키텍처(cross-architecture) 명령줄 인터페이스(CLI)입니다. 외부 종속성(external dependencies)이 전혀 필요하지 않으며 - curl/wget이나 업데이트된 CA 인증서가 없는 순수 Alpine 및 Ubuntu 컨테이너에서도 작동합니다 (모든 네트워킹은 내장되어 있습니다). 초기 JDK 설치가 필요 없이 gradlew와 유사한 기능을 제공합니다.
bash로 설치하기 (wget):
wget ggcmd.io/gg.cmd && chmod +x gg.cmd
bash로 설치하기 (curl):
curl -L ggcmd.io > gg.cmd && chmod +x gg.cmd
PowerShell로 설치하기:
wget ggcmd.io -OutFile gg.cmd
[!NOTE]
PowerShell을 통해 설치하는 경우, 프로젝트에 Linux 또는 macOS의 기여자가 있는 경우에도 gg.cmd를 실행 가능하게 만들어야 합니다. 다음 git 명령어를 사용하여 수행할 수 있습니다:
git update-index --chmod=+x gg.cmd
또는
최신 릴리스 다운로드
GitHub Action
- uses: eirikb/gg/action@main
- run: gg.cmd gradle build
이 액션은 워크플로우 토큰을 GG_GITHUB_TOKEN으로 gg에 전달하여 도구 검색 시 익명 GitHub API 제한에 걸리지 않도록 합니다. github-token:으로 이를 재정의하거나 빈 문자열로 설정하여 옵트아웃할 수 있습니다.
설치 방법?
이 개념은 프로젝트의 루트 디렉토리에 gg.cmd 사본을 배치하는 것을 포함합니다. 이는 gradlew나 mvnw를 사용할 때와 유사하지만, 이 방법은 여러 도구에 적용 가능하다는 점이 다릅니다. 그 결과, 동료들이 자신의 호스트 머신에 아무것도 설치할 필요가 없습니다.
기능 (Features)
- Zero dependencies - curl/wget이나 CA 인증서 없이 최소한의 컨테이너(Alpine, Ubuntu)에서 작동합니다.
- 설정 시스템 (Configuration system) -
gg.toml 파일을 통해 버전 요구 사항 및 명령어 별칭(command aliases)을 정의할 수 있습니다.
- 프로젝트 내 다른 실행 파일 관리 간소화
- 프로젝트 설정 파일(예: Node.js 프로젝트의
package.json)을 사용하여 필요한 실행 파일 버전을 자동으로 감지하고 실행합니다.
- 여러 실행 파일을 연결하여 사용 (예:
gradle@6:java@17)
- 크로스 플랫폼 호환성 (Windows, macOS, Linux)
- 크로스 아키텍처 호환성 (x86_64 및 ARM)
- 빠르고 가볍습니다.
기본적으로 도구를 전역 캐시 디렉토리(Unix의 경우 $HOME/.cache/gg, Windows의 경우 %UserProfile%\.cachef)에 설치합니다. 대신 로컬 캐시(.cache/gg를 현재 디렉토리에 사용하려면 -l 플래그를 사용하세요.
실행하기 전에 모든 종속성(dependency)을 PATH에 추가합니다.
설정 (Configuration)
gg.cmd는 gg.toml 파일을 통해 프로젝트별 설정을 지원합니다. 이를 통해 프로젝트의 버전 요구 사항 및 명령어 별칭을 정의할 수 있습니다.
참고: 이것은 전체 태스크 러너(task runner)가 아니므로, 전체 태스크 러너가 필요하다면 just 사용을 고려해 보세요.
설정 파일 생성 (Creating a Configuration File)
프로젝트 루트에 gg.toml 설정 파일을 만드세요:
이 명령어는 다음 구조를 가진 gg.toml 파일을 생성합니다:
설정 기능 (Configuration Features)
버전 종속성 (Version Dependencies): 팀원들이 호환되는 도구 버전을 사용하도록 보장합니다.
[dependencies]
node = "^18.0.0"
java = "17"
...
명령어 별칭 (Command Aliases): 일반적인 명령어에 대한 단축키를 만듭니다.
[aliases]
build = "gradle clean build"
serve = "node@18 server.js --port 3000"
...
별칭 사용 (Using Aliases)
정의된 별칭은 직접 사용할 수 있습니다:
./gg.cmd build
./gg.cmd serve --dev
./gg.cmd test --coverage
Aliases는 순차적 실행을 위해 &&를 지원합니다:
[aliases]
clean-build = "gradle clean build"
build-and-test = "clean-build && npm test"
설정 보기 (Viewing Configuration)
현재 설정을 확인하려면 다음 명령어를 사용하세요:
이 명령어는 설정 파일의 위치, 내용, 그리고 파싱된 별칭(aliases)/종속성을 표시합니다.
사용법 (Usage)
gg.cmd를 사용하는 것은 쉽습니다. 실행 파일을 프로젝트 루트에 배치하고 다음 명령어로 실행하세요:
gg.cmd 명령어 뒤에 원하는 실행 파일과 필요한 종속성들을 순서대로 나열하면 됩니다:
./gg.cmd [gg 옵션] <실행 파일 이름>@<버전><+포함 태그><-제외 태그>:<종속 실행 파일 이름>@<버전><+포함 태그><-제외 태그> [실행 파일 인자]
예시 (Example)
사용법: ./gg.cmd [옵션] <실행 파일 이름>@<버전>:<종속 실행 파일 이름>@<버전> [프로그램 인자]
옵션:
...
Node
버전은 다음에서 가져옵니다:
package.json의 engines
.nvmrc의 내용
Gradle
버전은 다음에서 가져옵니다:
gradle/wrapper/gradle-wrapper.properties의 distributionUrl
gradle.properties의 distributionUrl
다운로드 URL은 다음에서 가져옵니다:
gradle/wrapper/gradle-wrapper.properties의 distributionUrl
gradle.properties의 distributionUrl
JBang
Java 버전은 //JAVA 매직 주석을 사용하여 JBang 스크립트에서 읽어옵니다.
Java
버전은 다음에서 가져옵니다:
gradle/wrapper/gradle-wrapper.properties의 jdkVersion
gradle.properties의 jdkVersion
Flutter
버전은 다음에서 가져옵니다:
pubspec.yaml의 environment.flutter
예시 (Examples)
gg.cmd가 여러분의 삶을 얼마나 쉽게 만들어 줄 수 있는지 몇 가지 예를 소개합니다:
gradle 실행하기 (Execute gradle)
gg.cmd로 gradlew 및 gradle JAR 대체하기
gradlew를 단일 gg.cmd와 gradle.properties로 대체할 수 있으며, 다음 파일들을 삭제할 수 있습니다:
gradle/wrapper/gradle-wrapper.jar
gradle/wrapper/gradle-wrapper.properties
gradlew
gradlew.bat
bld 실행하기
이 예시에서는 bld를 사용하여 빌드 프로세스에 앱을 실행합니다:
JBang 실행하기
./gg.cmd jbang script.java
특정 버전의 Node.js 실행하기
특정 버전의 Gradle 및 필요한 JVM/JDK 버전 실행하기
./gg.cmd gradle@6:java@17 clean build
새로운 Node 프로젝트 생성하기
새로운 React 프로젝트 생성하기
./gg.cmd npx create-react-app my-app
cp gg.cmd my-app
cd my-app
...
GitHub에 호스팅된 코드 실행하기
gg.cmd는 GitHub executor를 제공합니다.
이는 콘텐츠와 사용 가능한 릴리스 파일을 스마트하게 확인합니다.
예를 들어, GitHub의 CLI 도구를 실행할 수 있습니다:
> sh ./gg.cmd gh/cli/cli --version
gh version 2.73.0 (2025-05-19)
설정 및 별칭 사용하기
gg.toml 설정 파일을 생성합니다:
일부 별칭(alias)과 의존성(dependency)을 추가합니다:
[dependencies]
node = "^18.0.0"
gradle = "~7.6.0"
...
이제 별칭을 사용합니다:
./gg.cmd dev
./gg.cmd build --parallel
./gg.cmd test
캐시 관리 (Cache Management)
gg.cmd는 전역(global) 및 로컬(local) 캐시 모드를 모두 지원합니다:
전역 캐시 (Global Cache, 기본값)
기본적으로 도구들은 전역으로 캐싱되며 모든 프로젝트에서 공유됩니다:
- Unix/Linux/macOS:
$HOME/.cache/gg
- Windows:
%UserProfile%\.cacheb
./gg.cmd node -v
./gg.cmd gradle build
로컬 캐시 (Local Cache)
-l 플래그를 사용하여 도구를 현재 프로젝트에 로컬로 캐시할 수 있습니다:
./gg.cmd -l node -v
./gg.cmd -l gradle build
사용자 지정 캐시 위치 (Custom Cache Location)
GG_CACHE_DIR 환경 변수를 설정하여 사용자 지정 캐시 위치를 사용할 수 있습니다:
export GG_CACHE_DIR="/path/to/custom/cache"
./gg.cmd node -v
./gg.cmd -l node -v
참고: GG_CACHE_DIR이 설정되면, 글로벌 캐시 모드와 로컬 캐시 모드 모두보다 우선합니다.
조용한 다운로드 (Quiet downloads)
다운로드 진행률 출력을 생략하려면 GG_HIDE_DOWNLOAD_PROGRESS를 비어있지 않은 값으로 설정하십시오. gg.cmd가 출력하는 내용을 파싱해야 할 때 유용합니다:
export GG_HIDE_DOWNLOAD_PROGRESS=1
./gg.cmd node -v
이것은 플래그가 아니라 환경 변수입니다. 왜냐하면 부트스트랩(bootstrap)이 단 하나의 인수를 보기 전에 자체 런타임을 다운로드하기 때문입니다.
GitHub API 접근 (GitHub API access)
GitHub에 호스팅된 도구는 GitHub API를 통해 해결됩니다. 인증되지 않은 액세스는 시간당 60회 요청으로 제한되므로, gg는 다음 순서로 토큰을 찾습니다:
GG_GITHUB_TOKEN, GITHUB_TOKEN 또는 GH_TOKEN 환경 변수
- 설치 및 로그인된 GitHub CLI (
gh auth token)
- 익명 액세스
속도 제한(rate limit)에 도달하면, 토큰을 설정하거나 gh auth login으로 로그인하십시오. 오류 메시지에도 힌트가 있을 수 있습니다.
GitHub Actions에서는 내장된 토큰만으로 충분합니다. gg를 실행하는 단계에 전달하십시오:
- run: ./gg.cmd node -v
env:
GITHUB_TOKEN: ${{ github.token }}
GG_GITHUB_API_URL은 gg가 모든 GitHub API와 호환되는 엔드포인트(예: 기업 네트워크의 자체 프록시)를 가리키도록 할 수 있습니다. 오직 gg 전용인 GG_GITHUB_TOKEN만이 사용자 지정 엔드포인트로 전송되며, GITHUB_TOKEN, GH_TOKEN, 그리고 gh CLI에서 빌린 토큰은 항상 api.github.com으로만 전송됩니다.
기여 (Contributing)
저희는 gg.cmd에 대한 기여를 환영합니다. 새로운 기능 아이디어가 있거나 버그를 발견했다면, GitHub 저장소에서 이슈를 열어주세요.
라이선스
gg.cmd는 MIT License 하에 라이선스가 부여되었습니다. 자세한 내용은 [LICENSE]를 참고해주세요.