You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
현재 쿠링은 API 요청시 반드시 필요한 host 주소 값을 .plist 파일에 저장하고 이를 KuringLink 에서 사용하는 형태입니다.
publicstructKuringLink{staticvarsatellite:Satellite{
// plist 에서 정보 가져오기
letplistURL=Bundle.module.url(forResource:"KuringLink-Info", withExtension:"plist")!
letdict=try!NSDictionary(contentsOf: plistURL, error:())letsatellite=Satellite(
host:(dict["API_HOST"]as?String)??"",
scheme:(dict["USING_HTTPS"]as?Bool)?? true ?.https : .http
)return satellite
}}
이 때, 공동 작업을 위해 .plist 에 어떤 키가 존재하는 지(예: "API_HOST")가 원격 저장소에 있어야 하지만 각 키의 값은 원격 저장소에 있으면 절대로 안됩니다.
하지만 이미 원격저장소에 올라가 있는 파일은 .gitignore 에 추가해도 무시가 되지 않기 때문에 그동안 커밋할 때마다 항상 커밋에 포함되지 않도록 수동으로 체크해줘야 했습니다.
PR 이 생성되고 업데이트가 있을 때마다 깃헙 액션 워크플로우를 동작시켜 커밋된 파일 중 .plist 에 커밋 사항이 있는지 체크하고 만약 커밋이 발생하면 PR 머지가 불가능 하도록 test fail 처리를 하는 것입니다.
PR 생성 / 업데이트
깃헙 액션 실행
base 브랜치와 PR 브랜치 비교하여 .plist 에 커밋이 발생했는지 확인
있으면 fail & merge 불가능
하지만 이를 스크립트로 작성하는 과정에서 로컬과 깃헙 워크플로우의 동작에 차이가 발생하고 head^ 와 같은 깃 관련 옵션이 먹히지 않아 base 브랜치와 PR 브랜치 비교에 어려움을 겪었습니다.
또한 이미 커밋이 푸시된 것을 가지고 비교하기 때문에 "커밋이 되면 안된다"는 목표에 이미 어긋난 방법이었습니다.
2.2. 캐시 제거 (git rm --cached)
두번째 방법으로, git rm --cached {파일명} 명령어를 사용하여 gitignore와 같은 효과를 얻고자 했습니다.
하지만 이 방법은 로컬 저장소에 파일은 그대로 두지만 원격저장소에 올라간 파일은 제거하기 때문에 공동 작업 시 레포지토리를 clone 할 때마다 매번 .plist 파일을 직접 추가해줘야 하는 불편함이 있습니다.
이 방법 역시 목표에 맞는 방법은 아니라고 판단하였습니다.
2.3. unchanged 로 간주하기 (--assume-unchanged)
diff 를 무시하는 명령어 옵션을 찾아보던 중 --assume-unchanged 옵션을 알게되었습니다. --assume-unchanged 은 말 그대로 특정 파일에 변화가 없다고 간주하는 옵션입니다.
git update-index --assume-unchanged $TARGET_FILE
이렇게 특정 파일의 변화를 무시할 수 있습니다.
2.4. 쉘스크립트 작성
이를 "Commit_Guardian.sh" 쉘스크립트 파일로 만들어 패키지 빌드할 때마다 실행시키고자 했습니다.
하지만 패키지 빌드 시 스크립트를 실행하는 방법에 대해 아직 지식이 없어 clone 후 최초 1회 실행해야하는 스크립트를 작성하였습니다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
1. 배경
현재 쿠링은 API 요청시 반드시 필요한 host 주소 값을
.plist
파일에 저장하고 이를KuringLink
에서 사용하는 형태입니다.이 때, 공동 작업을 위해
.plist
에 어떤 키가 존재하는 지(예:"API_HOST"
)가 원격 저장소에 있어야 하지만 각 키의 값은 원격 저장소에 있으면 절대로 안됩니다.하지만 이미 원격저장소에 올라가 있는 파일은
.gitignore
에 추가해도 무시가 되지 않기 때문에 그동안 커밋할 때마다 항상 커밋에 포함되지 않도록 수동으로 체크해줘야 했습니다.이에 대한 스크립트를 작업을 어떻게 진행했는지 기록으로 남깁니다.
참고로, PR #98 에서 삽질 기록을 확인할 수 있습니다.
2. 진행 방법과 결과 데이터
2.1.
처음엔 swift-cinema 레포지토리에서 사용했던 방식을 도입하고자 했습니다.
PR 이 생성되고 업데이트가 있을 때마다 깃헙 액션 워크플로우를 동작시켜 커밋된 파일 중
.plist
에 커밋 사항이 있는지 체크하고 만약 커밋이 발생하면 PR 머지가 불가능 하도록 test fail 처리를 하는 것입니다..plist
에 커밋이 발생했는지 확인하지만 이를 스크립트로 작성하는 과정에서 로컬과 깃헙 워크플로우의 동작에 차이가 발생하고 head^ 와 같은 깃 관련 옵션이 먹히지 않아 base 브랜치와 PR 브랜치 비교에 어려움을 겪었습니다.
또한 이미 커밋이 푸시된 것을 가지고 비교하기 때문에 "커밋이 되면 안된다"는 목표에 이미 어긋난 방법이었습니다.
2.2. 캐시 제거 (
git rm --cached
)두번째 방법으로,
git rm --cached {파일명}
명령어를 사용하여 gitignore와 같은 효과를 얻고자 했습니다.하지만 이 방법은 로컬 저장소에 파일은 그대로 두지만 원격저장소에 올라간 파일은 제거하기 때문에 공동 작업 시 레포지토리를 clone 할 때마다 매번
.plist
파일을 직접 추가해줘야 하는 불편함이 있습니다.이 방법 역시 목표에 맞는 방법은 아니라고 판단하였습니다.
2.3. unchanged 로 간주하기 (
--assume-unchanged
)diff 를 무시하는 명령어 옵션을 찾아보던 중
--assume-unchanged
옵션을 알게되었습니다.--assume-unchanged
은 말 그대로 특정 파일에 변화가 없다고 간주하는 옵션입니다.git update-index --assume-unchanged $TARGET_FILE
이렇게 특정 파일의 변화를 무시할 수 있습니다.
2.4. 쉘스크립트 작성
이를 "Commit_Guardian.sh" 쉘스크립트 파일로 만들어 패키지 빌드할 때마다 실행시키고자 했습니다.
하지만 패키지 빌드 시 스크립트를 실행하는 방법에 대해 아직 지식이 없어 clone 후 최초 1회 실행해야하는 스크립트를 작성하였습니다.
이렇게 스크립트를 작성하고 레포지토리 clone 후 다음과 같이 쉘스크립트를 실행하면 됩니다.
3. 결론
Beta Was this translation helpful? Give feedback.
All reactions