현재 동아리 내 디자인시스템에서 Changesets으로 버전관리를 하고 있는데 잘 쓰기 위해서는 명확하게 알 필요가 있을 것 같기도 했고, 혹시나 다른 라이브러리와 더 적합한지도 보기 위해 정리해보았다.
먼저 디자인시스템의 요구사항을 알아야 비교할 수 있을 것 같다.
버전 관리 도구로 유명한 것이 Changesets와 Release 이 2개가 있는데 이 도구들을 가지고 요구사항과 비교해보자.
Changesets
<aside> 💡 Changesets are designed for mono-repos first
This means we manage dependencies within the repository, which other tools do not do.
-https://github.com/changesets/changesets/blob/main/docs/decisions.md-
</aside>
위에서도 알 수 있듯이 Changetsets 은 레포지토리 내 종속성을 관리한다. 즉 하나의 레포안에 있는 여러개의 종속성의 변경을 관리한다.
→ 즉 버저닝을 거쳐도 추가 작업을 할 수 있다.
Semantic-Release
Semantic-Releases는 단일 패키지 구조에 특화되어 설계되었다.
모노레포를 위해 만들어진 multi-semantic-release라이브러리 가 있긴 하지만 안정적이지 않다고 나와있다.
간단하게 Github Action 과정 한번만 거치고 npm 에 올라간다.
위에 요구사항들과 비교했을 때, Changesets 라이브러리가 더 프로젝트에 적합해보인다. 모노레포, 멀티 패키지 구조에 적합하다는 점과, 버저닝 전에 업데이트된 패키지를 선택하여 버저닝 할 수 있다는점에서 더 적합하다고 생각했다.
npx changesets init
을 통해 .changeset 폴더를 생성하여 이니셜라이징을 한다.
changeset 폴더에서는 fixed
, linked
, baseBranch
등과 같은 옵션들로 버저닝할 브랜치와 패키지 그룹을 지정할 수 있다.
패키지를 구성하고 각각의 패키지에 package.json을 설정해준다.
npm changeset
, npm changeset add
을 통해 패키지의 버저닝을 진행한다.
npm changeset, npm changeset add 을 해주면 패키지를 고르는 창이 뜨고 고르고 난 후에 버전 종류(major, miner, patch)를 고르게 된다. 고르게 되면 .changeset 에 버저닝된 패키지의 정보가 담긴 마크다운 파일이 생긴다. 이를 기반으로 버저닝할때 패키지의 버전이 바뀌게 된다.
npm changeset version
을 통해 버저닝을 진행한다.
버저닝을 하게되면 .changeset 에 있는 마크다운 파일을 기반으로 패키지들의 package.json 버전이 바뀌게 된다. 그리고 이를 기반으로 pr이 올려진다.
pr 을 머지하고 npm changeset release
를 통해 패키지를 배포한다.
npm changeset release
를 통해 버저닝된 패키지들이 npm에 올라간다. 보통 이과정은 github action changesets/action@v1 action을 쓰는데 깃허브 액세스 토큰과 NPM 액세스 토큰을 필요로 한다.