...
본문 바로가기

Xcode

브렌치 변경시 tuist generate 자동화하기

 

아래글을 작성하고서 더 찾아본 내용이다. 

https://vapor3965.tistory.com/125

 

Tuist 마이그레이션 후기

후..원래 9월부터 10월까지 Tuist공부하는게 목표였다.Tuist만 공부하기로 했었는데, 하다보니 회사의 프로젝트도 Tuist로 바꿔볼수있겠다라는 자신감이 생겼다. (?) 누군가는 한달씩이나 공부할게

vapor3965.tistory.com

 

 

 

 

tuist를 도입하자고 팀원들에게 설명했을때,

우려한 부분이 브렌치 변경할때 ( git checkout )마다 tuist generate하는게 굉장히 불편할것같다라고 의견을 주셨다.

그부분에 매우 동감했어서 추가로 찾아봤다.

 

 

처음에는 소스트리로 깃을 사용하고있어서, 팀원분이 소스트리에 액션이 있다고 귀띔을 해주셨고, 

소스트리액션으로 쉘스크립트 실행하면될것 같았는데, 그건 단축키로 이용하는거라 뭔가 더 좋은 방법이 있지않을까 해서 

GPT 느님에게 물어보니, git hook을 이용해보라고 알려주셨다. 그렇다! github도 액션들을 걸수있는데, git에도 원래부터 hook이 있었다.  ( 정말 나같은 사람은 복받았다. 궁금한게 많은데 잘 찾지못하는 나에게 gpt는 신이 주신 선물 ? )

 

git의 특정 명령어에 대해서 event를 감지하여 실행하게 해줄수 있다. 

 

Git Hooks는 특정 Git 이벤트(예: 커밋, 푸시, 체크아웃 등)가 발생할 때 자동으로 실행되는 스크립트입니다. 이를 통해 빌드 자동화, 코드 스타일 검사, 테스트 실행 등 다양한 작업을 자동화할 수 있습니다.


위치: 각 Git 리포지토리의 .git/hooks 디렉토리에 위치합니다.

파일명: 훅 스크립트는 특정 이벤트에 맞는 정확한 파일명으로 작성되어야 합니다. 예를 들어, post-checkout 훅은 파일명이 post-checkout이어야 합니다.

• pre-commit
• prepare-commit-msg
• commit-msg
• post-commit
• pre-rebase
• post-checkout
• post-merge
• pre-push

...

 

 

.git/hooks/에 post-checkout 파일을 만들고,  삽질좀 하다가, 아래처럼 코드를 완성했다. 

삽질한건, 터미널환경에서는 tuist 실행경로를 잘 찾아주는데, 아래 코드를 실행한 스크립트환경에서는 tusit 실행경로를 못찾았다.  ( which tuist )

mise 로 tuist를 설치했어서 $PATH로는 접근하지 않고, mise 가 설치한 tuist로 실행경로를 받아서,

그걸로 make파일에서 넘겨받아서 실행하게 했다. 

 

generate하는 시간이 그래도 몇초걸리므로, UI로 표해주고싶었다.

요것도 GPT에게 물어보니, osacript 명령어를 통해서 간단하게 화면에 얼럿과 알림을 보여줄수있었다. 

 

#!/bin/bash

# UTF-8 인코딩 설정
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8


cd MacTuist
echo "이동한 디렉토리: $(pwd)"


mise list tuist
TUIST_PATH=$(mise which tuist)
if [ ! -x "$TUIST_PATH" ]; then
    echo "오류: tuist를 찾을 수 없거나 실행 권한이 없습니다."
    osascript -e 'display alert "❌ Tuist 오류" message "tuist를 찾을 수 없거나 실행 권한이 없습니다."'
    exit 1
fi



# Makefile 실행 시 tuist 경로를 인자로 전달
echo "make githooks_checkout 실행 중..."
make githooks_checkout TUIST_PATH=$TUIST_PATH
exit_status=$?



# Makefile 실행 결과 확인
if [ $exit_status -ne 0 ]; then
    echo "오류: 'make checkout' 실패."
    osascript -e 'display alert "❌ Tuist 실패" message "make checkout이 실패했습니다."'
    exit 1
fi

# 성공 알림
osascript -e 'display alert "✅ Tuist 완료" message "Success"'

 

 

 

실행단계마다 이렇게 알림이 나오고,  끝나면 Tuist 완료 얼럿까지 띄우게된다! 

 

 

 

 

 

 

소스트리에서 브렌치변경해도, 터미널로 변경해도 잘 동작한다..! 

 

 

Tuist덕분에 자동화에 대해 더 매력을 느낀것 같다!!