많은 기능들이 추가가 됐는데 그 중에서 중요한 부분만 정리할게요
1. 여러 프로젝트를 하나로 — 모노레포/워크스페이스
프로젝트가 하나둘 늘어나면 결국 같은 저장소 안에 여러 서비스가 들어가게 돼요. stoke는 이걸 "여러 타겟을 파일 하나에 몰아넣는" 방식 대신, 디렉토리마다 독립된 stoke.toml을 두고 루트에서 묶어서 보는 방식으로 풀었어요. 락 파일이 서로 충돌하지 않는 게 핵심이에요.



stoke build --all은 워크스페이스 멤버를 전부 빌드해요. stoke test --all도 마찬가지로 전부 테스트를 도는데, 방금 stoke new로 막 만든 서비스처럼 테스트 코드가 아직 하나도 없는 상태에서 돌리면 "2/3 failed"처럼 실패로 뜰 수 있어요. 이건 stoke의 버그가 아니라 Python 표준 unittest의 원래 동작이에요 -- python -m unittest discover는 테스트가 0개면 "NO TESTS RAN"과 함께 exit code 5를 내고, stoke test --all은 그 종료 코드를 그대로 전달할 뿐이거든요. 실제로 빈 디렉토리에서 python -m unittest discover만 단독으로 돌려봐도 똑같이 exit 5가 나요. 그러니까 이 결과를 보고 "어 뭔가 잘못됐나" 싶을 필요는 없고, 테스트를 아직 안 짰다는 뜻으로 읽으면 돼요.
2. 뒤처진 의존성 확인 — stoke outdated
stoke audit이 "위험한가"를 본다면, stoke outdated는 "낡았는가"를 봐요. 둘은 서로 다른 질문이라 명령어도 나눴어요. 언어별로 PyPI, Maven Central, npm, Composer, NuGet, go list -u, cargo-outdated, Bundler 등 표준 도구/API를 그대로 씀.

3. 프로젝트 상태 한눈에 — stoke doctor
툴체인 버전 안 맞음, lock 파일 깨짐, 설정 실수 같은 걸 미리 잡아주는 명령어예요. 버전 비교할 때 단순 문자열 startswith 비교로는 1.10이 1.9보다 낮다고 잘못 판단하는 버그가 있었는데, . 기준으로 쪼개서 숫자로 비교하도록 고쳤어요.

4. 스크립트에서 쓰기 좋게 — --json
stoke audit, stoke outdated, stoke sbom 같은 명령어에 --json을 붙이면 사람이 읽는 출력 대신 구조화된 JSON을 뱉어요. CI 스크립트나 다른 도구에 파이프로 연결할 때 필요해서 넣었어요.

5. 타이핑 줄이기 — 셸 자동완성
stoke completions bash|zsh|fish로 각 셸용 스크립트를 뽑아낼 수 있어요. 언어/타겟 이름까지 동적으로 완성되게 만드는 게 은근히 까다로웠어요.
6. git이랑 처음부터 같이 — stoke init / stoke git
stoke init으로 새 프로젝트를 만들 때 git init과 GitHub 원격 저장소 생성까지 이어서 할 수 있게 만들었고, 별도로 stoke git이라는 대화형 명령어도 만들었어요. add(다중 선택/전체 선택), commit(메시지 입력), push(브랜치 선택) — 딱 이 세 가지만, 매번 git status 보고 파일 고르고 하는 루틴을 줄이려고요.




7. 파일 경로로 바로 실행 — ad hoc stoke run
타겟으로 선언 안 해도, stoke run src/sim.cpp나 stoke run cmd/tool/main.go처럼 파일 경로를 바로 주면 즉석에서 빌드/실행해요. C/C++는 같은 언어의 기존 타겟 설정을 빌려서, Go는 go run <디렉토리>로 위임해서 — 언어마다 이미 있는 관례를 최대한 활용해서 stoke가 새로 검사하는 걸 최소화했어요.

기능 쪽에서 더 다룰 만한 건 이 정도예요. 여기까지 하고 나면, 다음 글에서 실무 쪽으로 채워 넣은 것들(취약점 스캔, SBOM, CI attestation, 원격 캐시, self-update)로 넘어갈게요.
아직 댓글이 없어요. 첫 댓글을 남겨보세요.