본문 바로가기

오픈소스/오픈스택(OpenStack)

openstack 컨트리뷰트 도전하기(2) - 코드 리뷰 받기

728x90

이 글은 오픈스택에 한번 컨트리뷰터가 되어보고자 여러 삽질과 감으로 작성한 글입니다.

나름.. 오픈스택에 컨트리뷰트 해보길 희망해보는 사람들에게 용기와 희망(?), 가이드를 제공하기 위해 작성하였습니다. (사실 나중에 까먹으면 다시 보려고 작성했습니다.)

 

테스트 주도 개발이나, 새로운 기능 개발과 같이 대단한 게 있는 것이 아니기 때문에 감안해주고 읽어주시면 감사하겠으며, 혹시 잘못된 용어나 이상한 곳을 알려주시면 감사하겠습니다.

 

 

epicarts.tistory.com/105

 

openstack 컨트리뷰트 도전하기 - 이슈 해결하기

이 글은 오픈스택에 한번 컨트리뷰터가 되어보고자 여러 삽질과 감으로 작성한 글입니다. 나름.. 오픈스택에 컨트리뷰트 해보길 희망해보는 사람들에게 용기와 희망(?), 가이드를 제공하기 위해

epicarts.tistory.com

위 글에서 이어집니다. 

 

첫번째 코드리뷰 결과 (12월 25일)

3개월 만에 Code-Review가 되었습니다.(크리스마스 선물인가요) 그 사이에 홈페이지가 둥글둥글하게 개편이 되었네요. 

실제로 merge되려면 2점이 되어야하는데 release note를 달라고합니다. 

 

 

release note가 뭔지 몰라서 커뮤니티에 도움을 요청했습니다.

몇몇 참고할만한 링크와 도움을 주셨습니다.

 

 

 

커뮤니티에 릴리즈 파일이 아래와 같이 추가되어 있었습니다. (깃허브 링크)

해쉬값들이 보이는것을 봐서는 내가 그냥 만드는 것은 아닌 것으로 보이고, 따로 만드는 방법이 있는듯 합니다.

 

 

 

docs.openstack.org/releasenotes/python-openstackclient/unreleased.html

python-openstackclient 릴리즈 노트도 내역들도 존재하네요. 

 

해당 정보를 토대로 어떻게 작성하는지 찾아보았습니다.  

 

Release note 작성하기

- docs.openstack.org/reno/latest/user/index.html,

- docs.openstack.org/keystone/pike/contributor/release-notes.html

- docs.openstack.org/reno/latest/

구글 검색을 통해 릴리즈 노트를 작성하는 방법을 찾았습니다. 

 

pypi.org/project/reno/

 

reno

RElease NOtes manager

pypi.org

오픈스택은 reno로 관리하는 듯 합니다. reno는 릴리즈노트를 관리해주는 패키지네요. release의 RE 와 notes의 NO를 따서 지은 듯 합니다.

pip install reno

먼저 reno 패키지를 설치해줍니다.

 

 

reno new add-image-progress-option-to-create

새로 릴리즈 노트 파일들 만들어 줍니다.

 

 

---
features:
  - |
    Add ``--progress`` option to ``image create`` command. show progressbar 
    when creating and uploading an image.

yaml 파일에는 위와 같이 적었습니다. 

 

 

origin/master로 Rebase 하기

이제 코드를 제출하려고 하려고 했으나, 생각해보니 몇개월이란 시간이 흘러서 제가 처음에 브런치를 딴 master 브런치가 바뀌었습니다. 

제가 제출한 review patch를 기준으로 현재 master로 rebase하여 다시 올려야 합니다.

 

역시 찾아보니, Rebasing a commit 이라는 좋은 문서가 있네요.

git clone https://opendev.org/openstack/python-openstackclient.git

git checkout master
git remote update

제일먼저 openstackclient git을 clone 해줍니다. 

혹시 모르니 master로 브런치로 변경한 뒤 remote도 정보도 업데이트 해줍니다.

 

git log

현재 Dec 22 19:20:49에 업데이트된 커밋이 제일 위에 있네요.

 

 

git review -d 750111

git review -d '내가 올린 gerrit_id' 를 입력해줍니다.

 

'내가 올린 gerrit_id'는 페이지에서 확인해볼 수 있습니다.

 

     -d change, --download=change
             Download change from Gerrit into a local branch. The branch will be
             named after the patch author and the name of a topic.  If the local
             branch already exists, it will attempt to update with the latest patch-
             set for this change.

-d 옵션은 내가 마지막으로 올린 patch-set으로 변경해줍니다. 

 

다시 로그를 보면 내가 마지막에 올린 커밋 내역을 볼 수 있습니다.

 

git rebase origin/master

리베이스를 해줍니다.

 

git log를 보면 Dec 22 19:20:49에 업데이트된 커밋 위에 내가 만든 커밋이 올라가 있는 것을 볼 수 있습니다.

저는 충돌난 코드가 없어서 이 위에 진행하면 됩니다.

 

Ammend commit 하기

tox

rebase를 했으니 커밋하기 전에 전체 테스트를 진행해줍니다.

 

통과~

 

git add .
git commit --amend

특별히 변경된 부분은 없기 때문에 commit 메시지는 그대로 두고 저장을 했습니다. 

 

git review 를 하여 두번째 patch set을 올려주었습니다. 

 

 

이제 다시 기다리면 되겠네요. 내년에는 Merge되지 않을까 싶습니다.

 

 

두번째 코드리뷰 결과 (12월 27일)

오, 드디어 두번째 패치셋에 대해 코드리뷰 2점을 받았습니다!! 리뷰어는 처음 1점을 주신 분과 다른 리뷰어였습니다. 

 

근데, master로 병합은 언제될까요. 2점만 받고 묻힌 이슈들도 있었던 거 같았는데 걱정됩니다.

 

 

세번째 코드리뷰 결과 (1월 5일)

마음의 여유를 가지고 까먹고 기다리니 다시한번 메일이 왔네요.

 

메일 한통이 왔습니다. whoops라고 써져 있네요... 응?

 

 

좌: 내가 올린 패치셋 2 / 우: 리뷰어가 수정해주신 패치셋 3

gerrit에는 위와 같은 기능이 있습니다. 이전에 패치셋 두개를 한 화면에서 비교할 수 있습니다.

코드 확인결과 개행전에 제가 스페이스를 한게 문제였나보네요. 하면 안되나 봅니다. 

 

그리고 추가로 메인테이너 리뷰어께서 문법도 수정해 주셨네요. 친절하십니다. 외국인이라 겁먹었었는데 하핳..

 

 

추가로 메일이 몇개 더 왔는데, Code-Review +2점과 workflow +1점을 받았다는 메일이었습니다.

LGTM(Look Good To Me)라니 감사할 따름입니다.

 

 

Workflow +1 점을 받은 덕분에 Zuul에서 최종으로 빌드를 받고, Master로 병합이 되었네요. 

 

 

opendev.org/openstack/python-openstackclient/commits/branch/master

github.com/openstack/python-openstackclient/commit/6f616a29b300238c004b676edd98a5337be38193

opendev에서도 확인할 수 있고, 미러링 되고 있는 깃허브에서도 확인할 수 있습니다. 

 

처음에는 이슈 해결해서 올린것만으로도 매우 만족스러웠지만, 꿈에 그리던 Merge까지 되니까 기분이 너무 좋네요. 묻히는 이슈들도 많은데 운도 많이 좋았던 거 같습니다.

 

다른 누군가에게 좋은 기능으로 쓰여졌으면 좋겠네요. 

 

 

여기까지 openstack 컨트리뷰트 도전하기 였습니다. 부족하지만 읽어주셔서 감사합니다. 

 

728x90