Skip to content

Latest commit

ย 

History

356 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿงฐ langtoolchain

macOS ํ•œ ์ค„ ๋ช…๋ น์œผ๋กœ Node.js ยท Java ยท Python ยท Rust ยท Go ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ต์งธ๋กœ ์„ค์น˜

License: MIT Platform Shell Powered by asdf Quality Gate Status

git clone๋„, ์ˆ˜๋™ ์„ค์น˜๋„ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์— ํ•œ ์ค„ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋.


curl -fsSL --proto '=https' --proto-redir '=https' --tlsv1.2 \
  https://raw.githubusercontent.com/amosQP/langtoolchain/main/install.sh | sh

โš ๏ธ macOS ์ „์šฉ, ๊ฐœ์ธ ํˆด๋ง์ž…๋‹ˆ๋‹ค. Linux/Windows(WSL ํฌํ•จ) ์ง€์› ๊ณ„ํš์ด ์—†๊ณ , ๋ฒ”์šฉ ํ”„๋กœ๋•์…˜ ๋„๊ตฌ๋กœ ๋งŒ๋“  ๊ฒŒ ์•„๋‹ˆ๋ผ ์ œ ๊ฐœ์ธ Mac ์›Œํฌํ”Œ๋กœ์šฐ์— ๋งž์ถฐ ๋งŒ๋“  ๋„๊ตฌ์ž…๋‹ˆ๋‹ค โ€” ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ์˜ ๋™์ž‘์ด๋‚˜ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์™œ ๋งŒ๋“ค์—ˆ๋‚˜

์ƒˆ Mac๋งˆ๋‹ค Homebrewยทasdf ์„ค์น˜, ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถ”๊ฐ€, .zshrc ์†๋ณด๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒŒ ์ง€๊ฒจ์›Œ์„œ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ๋Š” ํ•œ ์ค„์ด๋ฉด ๋ฉ๋‹ˆ๋‹ค. Homebrewยทasdf ์„ค์น˜๋ถ€ํ„ฐ ์–ธ์–ด ์„ ํƒ, ์…ธ ์„ค์ •๊นŒ์ง€ ์ „๋ถ€ ์ž๋™์ž…๋‹ˆ๋‹ค.

  • ๐Ÿบ Homebrew ์—†์–ด๋„ OK โ€” ์—†์œผ๋ฉด ๊ณต์‹ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ž๋™ ์„ค์น˜ (sudo ๋น„๋ฐ€๋ฒˆํ˜ธ๋งŒ ์ง์ ‘ ์ž…๋ ฅ)
  • โ˜‘๏ธ ์ฒดํฌ๋ฐ•์Šค ๊ฐ™์€ ๋Œ€ํ™”ํ˜• ์„ค์น˜ โ€” ์–ธ์–ด๋ณ„๋กœ ์„ค์น˜ ์—ฌ๋ถ€์™€ ๋ฒ„์ „์„ ํ™•์ธํ•˜๊ณ  ๊ณจ๋ผ์„œ ์„ค์น˜
  • ๐ŸŒ curl | sh ์™„์ „ ์ง€์› โ€” ๋กœ์ปฌ์— ์•„๋ฌด๊ฒƒ๋„ ์—†์–ด๋„ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์•Œ์•„์„œ cloneํ•ด์„œ ์‹คํ–‰
  • ๐ŸŒ ์ „์—ญ or ๋””๋ ‰ํ† ๋ฆฌ๋ณ„ ๋ฒ„์ „ ๊ณ ์ • โ€” ์‹œ์Šคํ…œ ์ „์ฒด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ๋„, ํŠน์ • ํ”„๋กœ์ ํŠธ์—๋งŒ๋„ ์ž์œ ๋กญ๊ฒŒ
  • ๐Ÿ”™ ๊น”๋”ํ•œ ์ œ๊ฑฐ โ€” ์„ค์น˜ํ•œ ๊ฑด ์ „๋ถ€ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Œ (.bak ๋ฐฑ์—…๊นŒ์ง€ ๋‚จ๊น€)
  • ๐Ÿ–ฅ๏ธ POSIX sh ํ˜ธํ™˜ โ€” macOS ๊ธฐ๋ณธ ์…ธ(/bin/sh)์—์„œ๋„ ๊ทธ๋Œ€๋กœ ๋™์ž‘, bash ํŠน์ˆ˜๋ฌธ๋ฒ• ์—†์Œ

๋ชฉ์ฐจ


๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

curl -fsSL --proto '=https' --proto-redir '=https' --tlsv1.2 \
  https://raw.githubusercontent.com/amosQP/langtoolchain/main/install.sh | sh

๋กœ์ปฌ์— ์ด๋ฏธ ํด๋ก ํ•ด๋’€๋‹ค๋ฉด:

git clone https://github.com/amosQP/langtoolchain.git && cd langtoolchain
./install.sh

์–ธ์–ด๋ณ„ ์„ค์น˜ ์—ฌ๋ถ€(โ†‘/โ†“๋กœ ๊ณ ๋ฅด๊ณ  Enter๋กœ ํ™•์ •, ์ˆซ์ž ํ‚ค๋กœ ๋ฐ”๋กœ ์„ ํƒ๋„ ๊ฐ€๋Šฅ)์™€ ๋ฒ„์ „์„ ํ™•์ธํ•œ ๋’ค, ๋งˆ์ง€๋ง‰ ํ™•์ธ์„ ๊ฑฐ์ณ ์„ค์น˜๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์งˆ๋ฌธ์— ๋‹ตํ•˜๋ฉด ๊ทธ ์ž๋ฆฌ์—์„œ ํ•œ ์ค„๋กœ ์ ‘ํ˜€์„œ ๋‹ค์Œ ์งˆ๋ฌธ์œผ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค โ€” ์•„๋ž˜๋Š” ์‹ค์ œ ์‹คํ–‰ ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.

== Select languages to install ==

โœ” Install nodejs (node)? Yes
โœ” Version: lts (default)
โœ” Also install pnpm (companion to nodejs)? Yes
โœ” Version: 10.33.0 (default)

โœ” Install java (java)? No
...
== Install list ==
  nodejs  lts
  pnpm    10.33.0
  python  3.12.13
  rust    1.94.0
  golang  1.26.1

โœ” Pin these versions: Globally
โœ” Install? Yes

๋งˆ์ง€๋ง‰ ํ”„๋กฌํ”„ํŠธ๋Š” ์ด๋ฒˆ์— ์„ค์น˜ํ•œ ๋ฒ„์ „์„ ์ „์—ญ(~/.tool-versions)์— ๊ณ ์ •ํ• ์ง€, ์ง€๊ธˆ ๋””๋ ‰ํ† ๋ฆฌ์—๋งŒ ๋กœ์ปฌ๋กœ ๊ณ ์ •ํ• ์ง€ ๊ณ ๋ฆ…๋‹ˆ๋‹ค(asdf์˜ ํ‘œ์ค€ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ทธ๋Œ€๋กœ โ€” nvm์˜ .nvmrc ๊ฐ™์€ ๊ฑธ ์–ธ์–ด ์ƒ๊ด€์—†์ด .tool-versions ํ•˜๋‚˜๋กœ ํ†ต์ผํ•œ ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค).

๋™๋ฐ˜ ๋„๊ตฌ(pnpm/gradle) ์งˆ๋ฌธ์€ ๊ทธ ๋ถ€๋ชจ ์–ธ์–ด(nodejs/java)๋ฅผ ์ˆ˜๋ฝํ–ˆ์„ ๋•Œ๋งŒ ๋”ฐ๋ผ ๋‚˜์˜ต๋‹ˆ๋‹ค โ€” ์œ„ ์˜ˆ์‹œ์—์„œ java๋ฅผ n์œผ๋กœ ๊ฑฐ์ ˆํ•˜๋‹ˆ gradle ์งˆ๋ฌธ ์ž์ฒด๊ฐ€ ์•ˆ ๋œจ๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ ํ”Œ๋ž˜๊ทธ (curl | sh -s -- <์˜ต์…˜> ํ˜•ํƒœ๋กœ ์ „๋‹ฌ ๊ฐ€๋Šฅ)
ํ”Œ๋ž˜๊ทธ ๋Œ€์ƒ ๋™์ž‘
--all install ์–ธ์–ด ์„ ํƒ ํ™”๋ฉด ์—†์ด .tool-versions์— ์žˆ๋Š” ๊ฑธ ์ „๋ถ€ ์„ค์น˜
--yes install / uninstall ๋งˆ์ง€๋ง‰ ํ™•์ธ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ฑด๋„ˆ๋œ€
--dry-run install / uninstall ์‹ค์ œ๋กœ ์•„๋ฌด๊ฒƒ๋„ ๋ฐ”๊พธ์ง€ ์•Š๊ณ , ๋ญ˜ ํ• ์ง€๋งŒ ์ถœ๋ ฅ
--local / --local=<dir> install ์ „์—ญ ๋Œ€์‹  ํ˜„์žฌ(๋˜๋Š” ์ง€์ •ํ•œ) ๋””๋ ‰ํ† ๋ฆฌ์—๋งŒ ๋ฒ„์ „ ๊ณ ์ •

์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: curl ... | sh -s -- --all --yes --dry-run์ฒ˜๋Ÿผ. ํ„ฐ๋ฏธ๋„(tty)์ด ์—†๋Š” ํ™˜๊ฒฝ(CI ๋“ฑ)์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ž๋™์œผ๋กœ --all์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค โ€” ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋‹ค ๋ฉˆ์ถ”์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๐Ÿ“‹ ์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

ํ•„์š”ํ•œ ๊ฒƒ ์—†์œผ๋ฉด?
macOS ์ด ๋„๊ตฌ๋Š” macOS ์ „์šฉ์ž…๋‹ˆ๋‹ค
git (์›๊ฒฉ ์„ค์น˜ ์‹œ) Xcode Command Line Tools์— ๊ธฐ๋ณธ ํฌํ•จ
Homebrew ์—†์œผ๋ฉด ์„ค์น˜๊ธฐ๊ฐ€ ์•Œ์•„์„œ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค (sudo ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ง์ ‘ ์ž…๋ ฅ ํ•„์š”)
asdf ์—†์œผ๋ฉด brew install asdf๋กœ ์•Œ์•„์„œ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค

๐Ÿ“ฆ ์„ค์น˜/์ œ๊ฑฐ๋˜๋Š” ๊ฒƒ

.tool-versions์— ์ •์˜๋œ ๊ธฐ๋ณธ ์–ธ์–ด/๋ฒ„์ „ โ€” ์„ค์น˜ ํ™”๋ฉด์—์„œ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ผœ๊ณ  ๋„๊ฑฐ๋‚˜ ๋ฒ„์ „์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™๋ฐ˜ ๋„๊ตฌ(pnpm/gradle)๋Š” ๊ฐ๊ฐ ๊ทธ ๋ถ€๋ชจ ์–ธ์–ด๋ฅผ ์„ค์น˜ํ•  ๋•Œ๋งŒ ๋ฌผ์–ด๋ณด๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

์–ธ์–ด / ๋™๋ฐ˜ ๋„๊ตฌ ๊ธฐ๋ณธ ๋ฒ„์ „
๐ŸŸฉ Node.js lts
ย ย โ”” pnpm (๋™๋ฐ˜) 10.33.0
โ˜• Java (Temurin) temurin-25.0.2+10.0.LTS
ย ย โ”” gradle (๋™๋ฐ˜) 9.4.1
๐Ÿ Python 3.12.13
๐Ÿฆ€ Rust 1.94.0
๐Ÿน Go 1.26.1

Python ์ปดํŒŒ์ผ์— ํ•„์š”ํ•œ Homebrew ํŒจํ‚ค์ง€(openssl, readline, sqlite3, xz, zlib, tcl-tk)๋„ ํ•จ๊ป˜ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

์ด ๋„๊ตฌ๋Š” ์œ„ ์–ธ์–ด(+๋™๋ฐ˜ ๋„๊ตฌ)์™€ ๊ทธ๊ฑธ ์œ„ํ•œ Homebrew ํŒจํ‚ค์ง€ 6๊ฐœ๋งŒ ๊ฑด๋“œ๋ฆฝ๋‹ˆ๋‹ค โ€” ์ด๋ฏธ ์žˆ๊ฑฐ๋‚˜ ์•ž์œผ๋กœ ์„ค์น˜ํ•  ๋‹ค๋ฅธ brew ํŒจํ‚ค์ง€, ์ด ๋„๊ตฌ๊ฐ€ ๊น”์ง€ ์•Š์€ ๋‹ค๋ฅธ asdf ํ”Œ๋Ÿฌ๊ทธ์ธ์€ install ์ชฝ์—์„œ๋“  uninstall ์ชฝ์—์„œ๋“  ์†๋Œ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. uninstall์€ langtoolchain์ด ์„ค์น˜ํ•˜์ง€ ์•Š์€ asdf ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐ๊ฐ๋„, asdf ์ž์ฒด์™€ ~/.asdf/(asdf ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ) ์ „์ฒด ์‚ญ์ œ๋„ ๋ชจ๋‘ ์„ค์น˜ ์‹œ์  ์Šค๋ƒ…์ƒท์„ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค โ€” ๊ฐœ๋ณ„ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋“  ~/.asdf/ ์ „์ฒด๋“ , ์„ค์น˜ ์‹œ์ ์— ์ด๋ฏธ ์žˆ์—ˆ๋‹ค๋Š” ๊ฒŒ ํ™•์ธ๋˜๋ฉด(๋˜๋Š” ํ™•์ธํ•  ์ˆ˜ ์—†์œผ๋ฉด) ์‚ญ์ œ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๊ฒฝ๊ณ ๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค โ€” ๋‹ค๋ฅธ asdf ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์–ด๋„ ๋ฌด์กฐ๊ฑด ํ•จ๊ป˜ ์ง€์›Œ์ง€๋˜ ์˜ˆ์ „ ๋™์ž‘๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. uninstall์ด phase ์ „์ฒด๋ฅผ ์—๋Ÿฌ ์—†์ด ๋งˆ์น˜๋ฉด ์ด ์„ค์น˜ ์‹œ์  ์Šค๋ƒ…์ƒท ์ž์ฒด๋„ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค โ€” ๋‹ค์Œ install์ด ๊ทธ ์‹œ์ ์˜ ์‹ค์ œ ์ƒํƒœ๋กœ ์ƒˆ ๊ธฐ์ค€์„ ์„ ์žก์Šต๋‹ˆ๋‹ค.

โš ๏ธ ๋™์ž‘ ๋ณ€๊ฒฝ ์•ˆ๋‚ด(m-13): ์ด ๋ณ€๊ฒฝ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ์ด๋ฏธ ์„ค์น˜ํ•ด ๋‘” ์ƒํƒœ์—์„œ langtoolchain์„ ์—…๋ฐ์ดํŠธ๋งŒ ํ•œ ๊ฒฝ์šฐ, install ์‹œ์  ์Šค๋ƒ…์ƒท์ด ์—†์œผ๋ฏ€๋กœ uninstall์„ ์‹คํ–‰ํ•ด๋„ ์•ˆ์ „์„ ์œ„ํ•ด asdf ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ณ„ ์‚ญ์ œ์™€ ~/.asdf/ ์ „์ฒด ์‚ญ์ œ๊ฐ€ ๋ชจ๋‘ ๊ธฐ๋ณธ์ ์œผ๋กœ ์Šคํ‚ต๋ฉ๋‹ˆ๋‹ค(์„ค์น˜ ์ „๋ถ€ํ„ฐ ์žˆ๋˜ ์ƒํƒœ์ธ์ง€ ํŒ๋‹จํ•  ๊ทผ๊ฑฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ โ€” "๋ชจ๋ฅด๋ฉด ์ง€์šฐ์ง€ ์•Š๋Š”๋‹ค"๋Š” ์›์น™). langtoolchain์ด ์„ค์น˜ํ•œ ๋Ÿฐํƒ€์ž„๊นŒ์ง€ ํฌํ•จํ•ด ์™„์ „ํžˆ ์ง€์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด, uninstall ์‹คํ–‰ ํ›„ ํ™”๋ฉด์— ์•ˆ๋‚ด๋˜๋Š” ๋Œ€๋กœ rm -rf ~/.asdf๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜์„ธ์š”.

curl -fsSL --proto '=https' --proto-redir '=https' --tlsv1.2 \
  https://raw.githubusercontent.com/amosQP/langtoolchain/main/uninstall.sh | sh

์‹คํ–‰ ์ „ ํ•œ ๋ฒˆ ํ™•์ธ์„ ๋ฌผ์œผ๋ฉฐ(--yes๋กœ ์ƒ๋žต ๊ฐ€๋Šฅ), --dry-run๋„ ๋™์ผํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜/์ œ๊ฑฐ ํ›„์—๋Š” exec $SHELL๋กœ ์ƒˆ ์…ธ ์„ธ์…˜์„ ์—ด์–ด์•ผ PATH ๋“ฑ ์บ์‹œ๋œ ์ƒํƒœ๊ฐ€ ์™„์ „ํžˆ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.


๐Ÿ—บ๏ธ ์•„ํ‚คํ…์ฒ˜

install.sh/uninstall.sh๊ฐ€ ๊ฐ๊ฐ ์–ด๋–ค phase๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊ฑฐ์น˜๋Š”์ง€, uninstall์˜ ์•ˆ์ „์žฅ์น˜ (์„ค์น˜ ์ „๋ถ€ํ„ฐ ์žˆ๋˜ asdf ์ƒํƒœ๋Š” ์•ˆ ์ง€์šด๋‹ค)๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋А ์ง€์ ์—์„œ ๊ฐœ์ž…ํ•˜๋Š”์ง€๋ฅผ ๋‹ค์ด์–ด๊ทธ๋žจ ์œผ๋กœ ์ •๋ฆฌํ•ด๋’€์Šต๋‹ˆ๋‹ค โ€” docs/architecture.md.


๐Ÿงญ ์•Œ๋ ค์ง„ ํ•œ๊ณ„ / ๊ธฐ์ˆ ์  ํ•œ๊ณ„

๋ฒ”์œ„์ƒ ํ•œ๊ณ„

  • macOS ์ „์šฉ โ€” Linux/Windows ๋ฏธ์ง€์›.
  • ์–ธ์–ด 5๊ฐœ ๊ณ ์ • โ€” Node.js/Java/Python/Rust/Go ์™ธ ์–ธ์–ด๋Š” ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๊ณ ์ณ์•ผ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ. ์ˆœ์ˆ˜ asdf์ฒ˜๋Ÿผ ์ž„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ž์œ ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์—†์Œ.
  • ๋™๋ฐ˜ ๋„๊ตฌ๋Š” nodejs/java/python ์…‹๋ฟ โ€” pnpm(nodejs), gradle(java), uv(python, poetry ๋Œ€์‹  ์ฑ„ํƒ โ€” decision-5) ์™ธ ์–ธ์–ด๋Š” ๋™๋ฐ˜ ๋„๊ตฌ ๊ฐœ๋…์ด ์—†์Œ(Rust/Go๋Š” cargo/๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด ์ด๋ฏธ ๋‚ด์žฅ์ด๋ผ ํ•„์š” ์—†๋‹ค๊ณ  ํŒ๋‹จ). ์–ธ์–ด๋‹น ๋™๋ฐ˜ ๋„๊ตฌ๋Š” ํ•ญ์ƒ 1๊ฐœ๋งŒ ์ œ์•ˆํ•˜๋Š” UX๋ผ poetry๋ฅผ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด "์ง์ ‘ ์ž…๋ ฅ" ๊ฒฝ๋กœ๋กœ pinํ•˜๊ฑฐ๋‚˜ ์ €์žฅ์†Œ ๋ฐ–์—์„œ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•จ.
  • ํ•ต์‹ฌ ๋ชฉ์ ("์ปดํŒŒ์ผ๋Ÿฌ ์„ค์น˜")๋ณด๋‹ค ๋„“์€ ๊ธฐ๋Šฅ์ด ์žˆ์Œ โ€” ์ „์—ญ/๋กœ์ปฌ ๋ฒ„์ „ ๊ณ ์ •, ๋Œ€ํ™”ํ˜• ์„ ํƒ๊ธฐ๋Š” ์‚ฌ์‹ค asdf ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ๊ฐ์‹ผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ. ํ•œ ๋ฒˆ ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์ณ "์œ ์ง€"๋กœ ๊ฒฐ์ •ํ–ˆ๊ณ , ๊ฑท์–ด๋‚ผ ๊ณ„ํš์€ ์—†์Œ.
  • Homebrew/asdf ์™ธ ๋„๊ตฌ์ฒด์ธ์€ ์ง€์› ๋Œ€์ƒ ์•„๋‹˜ โ€” MacPorts(/opt/local)๋Š” ๊ฒฝ๋กœ ์ž์ฒด๊ฐ€ ๊ฒน์น˜์ง€ ์•Š์•„ ํŒŒ์ผ ์ถฉ๋Œ์€ ์—†์ง€๋งŒ, ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊น”์•˜๋‹ค๋ฉด rc ํŒŒ์ผ์—์„œ ๋‚˜์ค‘์— ์†Œ์‹ฑ๋˜๋Š” ์ชฝ์ด ์ด๊ธด๋‹ค. mise์ฒ˜๋Ÿผ .tool-versions๋ฅผ ์ง์ ‘ ์ฝ๊ณ  ์ž์ฒด PATH ํ›…์œผ๋กœ ์…ธ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋„๊ตฌ๋Š” ๋” ์‹ค์งˆ์ ์ธ ์œ„ํ—˜ โ€” rc ํŒŒ์ผ์—์„œ langtoolchain๋ณด๋‹ค ๋‚˜์ค‘์— ๋กœ๋“œ๋˜๋ฉด asdf shim์„ ์กฐ์šฉํžˆ ๊ฐ€๋ฆด ์ˆ˜ ์žˆ์Œ. ๋‘˜ ๋‹ค ๊ฐ์ง€/๊ฒฝ๊ณ  ๋กœ์ง์€ ์—†์Œ.
  • ๋™์  ๊ธฐ๋ณธ๊ฐ’์ด asdf๊ฐ€ ์•„์ง ๋ชป ๋”ฐ๋ผ์žก์€ ์ตœ์‹  ๋ฒ„์ „์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Œ โ€” ์–ธ์–ด ๋ฒ„์ „ ๊ธฐ๋ณธ๊ฐ’์„ ์–ธ์–ด ๊ณต์‹ ์†Œ์Šค(์˜ˆ: cpython ํƒœ๊ทธ)์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ(m-12), asdf ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๊ทธ ๋ฒ„์ „์„ ์•„์ง ์ง€์› ์•ˆ ํ•˜๋ฉด ์„ค์น˜๊ฐ€ "version not installable"๋กœ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Œ(decision-12). m-15(์‹ค์ œ ์„ค์น˜ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „ ๋ชฉ๋ก ๊ธฐ๋ฐ˜ ์„ ํƒ UI)๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์• ์ดˆ์— asdf ๋ฏธ์ง€์› ๋ฒ„์ „์€ ์„ ํƒ์ง€์—๋„ ์•ˆ ๋œจ๊ฒŒ ๋˜์–ด ๊ตฌ์กฐ์ ์œผ๋กœ ํ•ด์†Œ๋  ์˜ˆ์ •.

๋‹ค์šด๋กœ๋“œ/์„ค์น˜ ์ฒด์ธ ์‹ ๋ขฐ ๊ฒฝ๊ณ„ (m-11)

์ด ์ €์žฅ์†Œ๊ฐ€ ์‹ค์ œ๋กœ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ์ง€์ ๊ณผ, Homebrew/asdf ๊ฐ™์€ ์ƒ์œ„ ๋„๊ตฌ์— ์‹ ๋ขฐ๋ฅผ ์œ„์ž„ํ–ˆ๊ฑฐ๋‚˜ ์ €์žฅ์†Œ๊ฐ€ ์ง์ ‘ ์†๋Œˆ ์ˆ˜ ์—†๋Š” ์ง€์ ์„ ๊ตฌ๋ถ„ํ•ด ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์ง€์ ๋ณ„ ์ƒ์„ธ(ํŒŒ์ผ:๋ผ์ธ, ํ˜„์žฌ ๊ฒ€์ฆ ์ˆ˜์ค€)๋Š” docs/download-points-inventory.md, ๊ฒ€์ฆ ๊ธฐ๋ฒ• ์ž์ฒด์˜ ์กฐ์‚ฌ๋Š” docs/download-integrity-techniques.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ด ์ €์žฅ์†Œ๊ฐ€ ์ง์ ‘ ๊ฒ€์ฆํ•˜๋Š” ์ง€์ 

์ง€์  ๋ฐฉ์‹
install.sh/uninstall.sh์˜ self-clone ํ”Œ๋กœํŒ… ๋ธŒ๋žœ์น˜ ๋Œ€์‹  ๊ณ ์ • ์ปค๋ฐ‹ SHA๋กœ pin โ€” ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ•์ œ push๋ผ๋„ ์ด๋ฏธ pin๋œ ์ปค๋ฐ‹๋งŒ ๋ฐ›์Œ
Homebrew ๊ณต์‹ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ(curl | bash) ๊ณ ์ • ์ปค๋ฐ‹์œผ๋กœ pin + ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง์ ‘ ๊ณ„์‚ฐํ•œ SHA-256 ์ฒดํฌ์„ฌ์„ fetch ์งํ›„ ๋Œ€์กฐ, ๋ถˆ์ผ์น˜ ์‹œ ์‹คํ–‰ ๊ฑฐ๋ถ€

์œ„์ž„/ํ†ต์ œ ๋ฐ– ์ง€์  (์ด ์ €์žฅ์†Œ๊ฐ€ ์ง์ ‘ ๊ฒ€์ฆํ•˜์ง€ ์•Š์Œ)

์ง€์  ์œ„์ž„ ๋Œ€์ƒ / ํ†ต์ œ ๋ฐ–์ธ ์ด์œ 
brew install asdf, brew install <์‹œ์Šคํ…œ ์˜์กด์„ฑ 6๊ฐœ> Homebrew ์ž์ฒด์˜ bottle ์„œ๋ช…/์ฒดํฌ์„ฌ ์ฒด๊ณ„์— ์œ„์ž„
asdf plugin add(asdf-nodejs/asdf-python ๋“ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ ์†Œ์Šค) asdf CLI(0.20.0)๊ฐ€ ์ปค๋ฐ‹ ๊ณ ์ •์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ โ€” ๊ฒ€ํ†  ํ›„ ๋ฏธ๊ณ ์ • ๊ฒฐ์ •, ๋งค install ์‹คํ–‰๋งˆ๋‹ค ๊ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ €์žฅ์†Œ์˜ ์ตœ์‹  HEAD๋กœ ๊ฐฑ์‹ ๋จ
asdf install(์‹ค์ œ ์–ธ์–ด ๋Ÿฐํƒ€์ž„ ๋‹ค์šด๋กœ๋“œ) ๊ฐ asdf ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‚ด๋ถ€ ๋กœ์ง โ€” ์ด ์ €์žฅ์†Œ๊ฐ€ ์ง์ ‘ ๊ด€์—ฌํ•  ์ˆ˜ ์—†์Œ

๋ช…์‹œ์ ์œผ๋กœ ๋ฒ”์œ„ ๋ฐ–: GitHub ์ €์žฅ์†Œ/๊ณ„์ • ์ž์ฒด์˜ ํƒˆ์ทจ. ๊ณต๊ฒฉ์ž๊ฐ€ ์ €์žฅ์†Œ๋‚˜ ๋ฉ”์ธํ…Œ์ด๋„ˆ ๊ณ„์ •์„ ์™„์ „ํžˆ ์žฅ์•…ํ•˜๋ฉด install.sh์— ๋ฐ•ํžŒ ๊ณ ์ • ์ปค๋ฐ‹ SHA ์ž์ฒด๋„ ํ•จ๊ป˜ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด, ์œ„ pin๋“ค๋กœ๋Š” ๋ง‰์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฑด GitHub ์ชฝ ๊ณ„์ • ๋ ˆ๋ฒจ ํ†ต์ œ(๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™, ์„œ๋ช…๋œ ์ปค๋ฐ‹ ์š”๊ตฌ, 2FA)์˜ ์˜์—ญ์ด๋ฉฐ, ์…ธ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ํ•˜๋‚˜๊ฐ€ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ•ด ์ด ๋งˆ์ผ์Šคํ†ค์˜ ๋ฒ”์œ„ ๋ฐ–์œผ๋กœ ๋’€์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๊ฒ€์ฆ์˜ ํ•œ๊ณ„

  • ๋กœ์ปฌ shellspec์€ ์‹ค์ œ Homebrew/asdf๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Œ โ€” spec/์˜ 183๊ฐœ ์˜ˆ์ œ๋Š” ์ „๋ถ€ ์‹ค์ œ brew/asdf ๋ช…๋ น์„ ๋ชจํ‚นํ•˜๊ฑฐ๋‚˜ DRY_RUN=true๋กœ ์‹คํ–‰๋˜๋„๋ก ์„ค๊ณ„๋จ(์ง„์งœ ์ปดํŒŒ์ผ/์„ค์น˜๋Š” ๋А๋ฆฌ๊ณ  ๊ฐœ๋ฐœ ๋จธ์‹ ์„ ์˜ค์—ผ์‹œํ‚ค๋ฏ€๋กœ). ๊ทธ๋ž˜์„œ "์ง„์งœ๋กœ ์„ค์น˜๊ฐ€ ๋˜๋Š”๊ฐ€" ์ž์ฒด๋Š” ๋กœ์ปฌ ์Šค์œ„ํŠธ๊ฐ€ ๋ณด์žฅํ•˜์ง€ ์•Š๊ณ , .github/workflows/e2e-verify.yml(GitHub ํ˜ธ์ŠคํŒ… macOS ๋Ÿฌ๋„ˆ, arm64+Intel)์ด ์œ ์ผํ•œ ์‹ค๊ธฐ๊ธฐ ๊ฒ€์ฆ ๊ฒฝ๋กœ์ž„ โ€” main ๋ธŒ๋žœ์น˜์— scripts/**/install.sh/uninstall.sh/.tool-versions๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งŒ push/PR๋กœ ์ž๋™ ์‹คํ–‰(๊ทธ ์™ธ ์ปค๋ฐ‹์€ workflow_dispatch๋กœ ์ˆ˜๋™ ์‹คํ–‰).
  • ํ™”์‚ดํ‘œ ํ‚ค TUI๋Š” ํ‘œ์ค€ ํ„ฐ๋ฏธ๋„ ๊ธฐ์ค€์œผ๋กœ๋งŒ ๊ฒ€์ฆ โ€” stty/dd๋กœ raw ๋ชจ๋“œ๋ฅผ ์ฝ๋Š” lt_arrow_menu()๋Š” expect๋กœ ๊ตฌ๋™ํ•œ ์‹ค์ œ pty(๋ฐ ์ผ๋ฐ˜ ํ„ฐ๋ฏธ๋„ ์•ฑ)์—์„œ๋Š” ํ™•์ธํ–ˆ์ง€๋งŒ, ๋ชจ๋“  ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐยท๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ(tmux/screen ๋“ฑ)ยทSSH ๊ฒฝ์œ  ์„ธ์…˜ ์กฐํ•ฉ๊นŒ์ง€ ๋‹ค ๊ฒ€์ฆํ•˜์ง€๋Š” ์•Š์Œ โ€” ํ‘œ์ค€ 3๋ฐ”์ดํŠธ ANSI ์ด์Šค์ผ€์ดํ”„(ESC [ A/B)๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๋น„ํ‘œ์ค€ ํ‚ค ์ „์†ก ๋ฐฉ์‹์—์„œ๋Š” ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Œ.
  • curl | sh์˜ "๊ธฐ๋ณธ" ์›๊ฒฉ clone ๊ฒฝ๋กœ(์ง„์งœ GitHub ๋Œ€์ƒ)๋Š” ๋กœ์ปฌ์—์„œ ์žฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์›€ โ€” LANGTOOLCHAIN_REPO_URL/LANGTOOLCHAIN_BRANCH ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ fork/๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌ์ผœ overrideํ•˜๋Š” ๊ฒฝ๋กœ ์ž์ฒด๋Š” TASK-117.6 ์ดํ›„ ๋กœ์ปฌ bare ์ €์žฅ์†Œ(file://)๋ฅผ ๋Œ€์ƒ์œผ๋กœ spec/repo_override_spec.sh๊ฐ€ ์ปค๋ฒ„ํ•จ(pinned-fetch ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ exact-ref ๋™์ž‘๊นŒ์ง€ ํฌํ•จ). ๋‹ค๋งŒ override ์—†์ด ๊ธฐ๋ณธ๊ฐ’(๊ณ ์ • ์ปค๋ฐ‹ SHA, ์‹ค์ œ GitHub)์„ ํƒ€๋Š” ๊ฒฝ๋กœ ์ž์ฒด๋Š” ์—ฌ์ „ํžˆ ๋กœ์ปฌ ์Šค์œ„ํŠธ ๋Œ€์ƒ์ด ์•„๋‹ˆ๋ฉฐ, ์‹ค์ œ curl | sh๋กœ ์ด ์ €์žฅ์†Œ๋ฅผ ์ง์ ‘ ๋‹น๊ฒจ ๊ฒ€์ฆํ•œ ๊ฒƒ๊ณผ .github/workflows/e2e-verify.yml์˜ no-git-curl-pipe ์žก(์‹ค์ œ GitHub์˜ main raw ํŒŒ์ผ์„ ๋‹น๊น€)์ด ์œ ์ผํ•œ ๊ฒ€์ฆ ๊ฒฝ๋กœ.

์•ž์œผ๋กœ ์‚ดํŽด๋ณผ ๋งŒํ•œ ๊ฒƒ

  • MacPorts/mise ๊ฐ™์€ ๊ฒฝ์Ÿ ๋„๊ตฌ์ฒด์ธ์— ๋Œ€ํ•œ ๊ฐ์ง€ยท๊ฒฝ๊ณ  ๋กœ์ง(์ง€๊ธˆ์€ ๋ฌธ์„œํ™”๋งŒ ํ•˜๊ณ  ์ž๋™ ๊ฐ์ง€๋Š” ์—†์Œ).
  • Linux ์ง€์› โ€” ์ง€๊ธˆ์€ ๊ณ„ํš์ด ์—†์ง€๋งŒ, ๋งŒ์•ฝ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด Homebrew macOS ์ „์šฉ ๊ฒฝ๋กœ ํŒ๋‹จ ๋กœ์ง๊ณผ rc ํŒŒ์ผ ๋ชฉ๋ก๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ด์•ผ ํ•จ.

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  • ์–ธ์–ด/๋ฒ„์ „์„ ๋ฐ”๊พธ๋ ค๋ฉด .tool-versions ํ•œ ์ค„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ์„ค์น˜/์ œ๊ฑฐ ๋‹จ๊ณ„๋Š” scripts/install/, scripts/uninstall/ ์•„๋ž˜ ์—ญํ• ๋ณ„๋กœ ๋ถ„๋ฆฌ๋ผ ์žˆ๊ณ , ๊ฐœ๋ณ„ ์‹คํ–‰๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค: DRY_RUN=true sh scripts/install/05_install_runtimes.sh
  • ์ฝ”๋“œ๋ฅผ ๊ณ ์ณค์œผ๋ฉด: shellcheck -s sh โ†’ dash -n(macOS ๊ธฐ๋ณธ /bin/sh๋Š” posix ๋ชจ๋“œ bash๋ผ ์ง„์งœ POSIX ์œ„๋ฐ˜์„ ๋†“์นจ) โ†’ shellspec/shellspec --shell dash๋กœ spec/ ์Šค์œ„ํŠธ ์‹คํ–‰.
  • ์Šคํƒ€์ผ ๊ทœ์น™(๋“ค์—ฌ์“ฐ๊ธฐ/๋„ค์ด๋ฐ/๋”ฐ์˜ดํ‘œ ๋“ฑ)์€ docs/shell-style-guide.md ์ฐธ๊ณ  โ€” Google Shell Style Guide๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด ์ €์žฅ์†Œ์˜ POSIX sh ์ œ์•ฝ์— ๋งž๊ฒŒ ์กฐ์ •ํ•œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
  • ์ „์ฒด ํ๋ฆ„๋งŒ ํ™•์ธ: ./install.sh --dry-run --all --yes, ./uninstall.sh --dry-run --yes
  • ์‹ค๊ธฐ๊ธฐ ๊ฒ€์ฆ(Homebrew ๋ถ€ํŠธ์ŠคํŠธ๋žฉ, Intel Mac ๋“ฑ)์€ .github/workflows/e2e-verify.yml โ€” scripts/**/install.sh/uninstall.sh/.tool-versions๊ฐ€ ๋ฐ”๋€ ์ฑ„๋กœ main์— push/PR๋˜๋ฉด ์ž๋™ ์‹คํ–‰๋˜๊ณ , ๊ทธ ์™ธ์—๋Š” workflow_dispatch๋กœ ์ˆ˜๋™ ์‹คํ–‰. GitHub ํ˜ธ์ŠคํŒ… macOS ๋Ÿฌ๋„ˆ(arm64+Intel)์—์„œ ๊ฒ€์ฆ, ๊ณต๊ฐœ ์ €์žฅ์†Œ๋ผ ๋ฌด๋ฃŒ.
  • ์ฝ”๋“œ ํ’ˆ์งˆ ์ •์ ๋ถ„์„์€ SonarCloud(decision-13)๊ฐ€ push/PR๋งˆ๋‹ค ๋•๋‹ˆ๋‹ค โ€” ์‹ค์ œ๋กœ ๋ถ„์„์ด ๋Œ๋ ค๋ฉด ์ €์žฅ์†Œ Settings โ†’ Secrets and variables โ†’ Actions์— SONAR_TOKEN์„ ๋“ฑ๋กํ•ด์•ผ ํ•˜๊ณ , SonarCloud ํ”„๋กœ์ ํŠธ ์„ค์ •์˜ Automatic Analysis๋Š” ๊บผ์•ผ ํ•ฉ๋‹ˆ๋‹ค(CI ๊ธฐ๋ฐ˜ ๋ถ„์„๊ณผ ๋™์‹œ์— ๋ชป ์”€). ๋ฐœ๊ฒฌ๋œ ์ด์Šˆ๋Š” ๋งค์ผ ํ•œ ๋ฒˆ sonarcloud ๋ผ๋ฒจ์„ ๋‹ฌ๊ณ  GitHub Issues๋กœ ์ž๋™ ๋ฐœํ–‰๋ฉ๋‹ˆ๋‹ค(decision-14) โ€” backlog ํƒœ์Šคํฌ์™€๋Š” ๋ณ„๊ฐœ์˜ ์•Œ๋ฆผ ์ฑ„๋„์ž…๋‹ˆ๋‹ค.

๐Ÿ“ License

MIT โ€” ๋ˆ„๊ตฌ๋‚˜ ์ž์œ ๋กญ๊ฒŒ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ  ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด ์ €์žฅ์†Œ์˜ LICENSE ํŒŒ์ผ๋„ ๋™์ผํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.)

Made with ๐Ÿง‰ by amosQP

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages