Merge pull request 'feat: v1.6.1 custom_pre_commit 해시 분기 지원' (#12) from feature/v1.6.1-custom-precommit into develop
This commit is contained in:
커밋
d176cf194c
@ -38,16 +38,28 @@ CAN_PUSH=$(echo "$PERMISSIONS" | python3 -c "import sys,json; print(json.load(sy
|
||||
# 로컬 설정 읽기
|
||||
GITEA_URL=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('gitea_url', 'https://gitea.gc-si.dev'))" 2>/dev/null)
|
||||
PROJECT_TYPE=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('project_type', ''))" 2>/dev/null)
|
||||
CUSTOM_PRECOMMIT=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('custom_pre_commit', False))" 2>/dev/null)
|
||||
|
||||
# 서버 해시 조회
|
||||
# 서버 해시 조회 (custom_pre_commit이면 pre-commit 제외 해시 사용)
|
||||
SERVER_VER=$(curl -sf --max-time 5 "${GITEA_URL}/gc/template-common/raw/branch/develop/workflow-version.json")
|
||||
SERVER_HASH=$(echo "$SERVER_VER" | python3 -c "import sys,json; print(json.load(sys.stdin).get('content_hashes',{}).get('${PROJECT_TYPE}',''))" 2>/dev/null)
|
||||
if [ "$CUSTOM_PRECOMMIT" = "True" ]; then
|
||||
SERVER_HASH=$(echo "$SERVER_VER" | python3 -c "import sys,json; print(json.load(sys.stdin).get('content_hashes_custom_precommit',{}).get('${PROJECT_TYPE}',''))" 2>/dev/null)
|
||||
else
|
||||
SERVER_HASH=$(echo "$SERVER_VER" | python3 -c "import sys,json; print(json.load(sys.stdin).get('content_hashes',{}).get('${PROJECT_TYPE}',''))" 2>/dev/null)
|
||||
fi
|
||||
|
||||
# 로컬 해시 계산
|
||||
LOCAL_HASH=$(find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1)
|
||||
# 로컬 해시 계산 (custom_pre_commit이면 .githooks/pre-commit 제외)
|
||||
if [ "$CUSTOM_PRECOMMIT" = "True" ]; then
|
||||
LOCAL_HASH=$(find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f ! -path '.githooks/pre-commit' 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1)
|
||||
else
|
||||
LOCAL_HASH=$(find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1)
|
||||
fi
|
||||
```
|
||||
|
||||
**비교 결과 처리**:
|
||||
|
||||
@ -38,16 +38,28 @@ CAN_PUSH=$(echo "$PERMISSIONS" | python3 -c "import sys,json; print(json.load(sy
|
||||
# 로컬 설정 읽기
|
||||
GITEA_URL=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('gitea_url', 'https://gitea.gc-si.dev'))" 2>/dev/null)
|
||||
PROJECT_TYPE=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('project_type', ''))" 2>/dev/null)
|
||||
CUSTOM_PRECOMMIT=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('custom_pre_commit', False))" 2>/dev/null)
|
||||
|
||||
# 서버 해시 조회
|
||||
# 서버 해시 조회 (custom_pre_commit이면 pre-commit 제외 해시 사용)
|
||||
SERVER_VER=$(curl -sf --max-time 5 "${GITEA_URL}/gc/template-common/raw/branch/develop/workflow-version.json")
|
||||
SERVER_HASH=$(echo "$SERVER_VER" | python3 -c "import sys,json; print(json.load(sys.stdin).get('content_hashes',{}).get('${PROJECT_TYPE}',''))" 2>/dev/null)
|
||||
if [ "$CUSTOM_PRECOMMIT" = "True" ]; then
|
||||
SERVER_HASH=$(echo "$SERVER_VER" | python3 -c "import sys,json; print(json.load(sys.stdin).get('content_hashes_custom_precommit',{}).get('${PROJECT_TYPE}',''))" 2>/dev/null)
|
||||
else
|
||||
SERVER_HASH=$(echo "$SERVER_VER" | python3 -c "import sys,json; print(json.load(sys.stdin).get('content_hashes',{}).get('${PROJECT_TYPE}',''))" 2>/dev/null)
|
||||
fi
|
||||
|
||||
# 로컬 해시 계산
|
||||
LOCAL_HASH=$(find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1)
|
||||
# 로컬 해시 계산 (custom_pre_commit이면 .githooks/pre-commit 제외)
|
||||
if [ "$CUSTOM_PRECOMMIT" = "True" ]; then
|
||||
LOCAL_HASH=$(find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f ! -path '.githooks/pre-commit' 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1)
|
||||
else
|
||||
LOCAL_HASH=$(find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1)
|
||||
fi
|
||||
```
|
||||
|
||||
**비교 결과 처리**:
|
||||
|
||||
@ -37,16 +37,28 @@ IS_ADMIN=$(echo "$PERMISSIONS" | python3 -c "import sys,json; print(json.load(sy
|
||||
# 로컬 설정 읽기
|
||||
GITEA_URL=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('gitea_url', 'https://gitea.gc-si.dev'))" 2>/dev/null)
|
||||
PROJECT_TYPE=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('project_type', ''))" 2>/dev/null)
|
||||
CUSTOM_PRECOMMIT=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('custom_pre_commit', False))" 2>/dev/null)
|
||||
|
||||
# 서버 해시 조회
|
||||
# 서버 해시 조회 (custom_pre_commit이면 pre-commit 제외 해시 사용)
|
||||
SERVER_VER=$(curl -sf --max-time 5 "${GITEA_URL}/gc/template-common/raw/branch/develop/workflow-version.json")
|
||||
SERVER_HASH=$(echo "$SERVER_VER" | python3 -c "import sys,json; print(json.load(sys.stdin).get('content_hashes',{}).get('${PROJECT_TYPE}',''))" 2>/dev/null)
|
||||
if [ "$CUSTOM_PRECOMMIT" = "True" ]; then
|
||||
SERVER_HASH=$(echo "$SERVER_VER" | python3 -c "import sys,json; print(json.load(sys.stdin).get('content_hashes_custom_precommit',{}).get('${PROJECT_TYPE}',''))" 2>/dev/null)
|
||||
else
|
||||
SERVER_HASH=$(echo "$SERVER_VER" | python3 -c "import sys,json; print(json.load(sys.stdin).get('content_hashes',{}).get('${PROJECT_TYPE}',''))" 2>/dev/null)
|
||||
fi
|
||||
|
||||
# 로컬 해시 계산
|
||||
LOCAL_HASH=$(find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1)
|
||||
# 로컬 해시 계산 (custom_pre_commit이면 .githooks/pre-commit 제외)
|
||||
if [ "$CUSTOM_PRECOMMIT" = "True" ]; then
|
||||
LOCAL_HASH=$(find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f ! -path '.githooks/pre-commit' 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1)
|
||||
else
|
||||
LOCAL_HASH=$(find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1)
|
||||
fi
|
||||
```
|
||||
|
||||
**비교 결과 처리**:
|
||||
|
||||
@ -58,7 +58,9 @@ echo "Common 파일: ${COMMON_COUNT}개"
|
||||
|
||||
# 2. 각 타입별 해시 계산 → 파일로 저장
|
||||
HASH_FILE="$WORK_TMPDIR/hashes.json"
|
||||
HASH_NO_PC_FILE="$WORK_TMPDIR/hashes_no_pc.json"
|
||||
echo "{" > "$HASH_FILE"
|
||||
echo "{" > "$HASH_NO_PC_FILE"
|
||||
|
||||
FIRST=true
|
||||
for TYPE in $TYPES; do
|
||||
@ -84,25 +86,36 @@ for TYPE in $TYPES; do
|
||||
fi
|
||||
done
|
||||
|
||||
# 해시 계산 (find | sort | xargs cat | shasum — 로컬 계산과 동일한 방식)
|
||||
# 해시 계산 — 전체 (find | sort | xargs cat | shasum)
|
||||
HASH=$(cd "$WORK_TMPDIR/combined" && find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f 2>/dev/null | sort | xargs cat 2>/dev/null | $SHA_CMD | cut -d' ' -f1)
|
||||
|
||||
# 해시 계산 — pre-commit 제외 (custom_pre_commit 프로젝트용)
|
||||
HASH_NO_PC=$(cd "$WORK_TMPDIR/combined" && find .claude/rules .claude/agents .claude/scripts .githooks \
|
||||
.claude/skills/push .claude/skills/mr .claude/skills/create-mr \
|
||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
||||
-type f ! -path '.githooks/pre-commit' 2>/dev/null | sort | xargs cat 2>/dev/null | $SHA_CMD | cut -d' ' -f1)
|
||||
|
||||
if [ "$FIRST" = true ]; then
|
||||
FIRST=false
|
||||
else
|
||||
echo "," >> "$HASH_FILE"
|
||||
echo "," >> "$HASH_NO_PC_FILE"
|
||||
fi
|
||||
printf ' "%s": "%s"' "$TYPE" "$HASH" >> "$HASH_FILE"
|
||||
printf ' "%s": "%s"' "$TYPE" "$HASH_NO_PC" >> "$HASH_NO_PC_FILE"
|
||||
|
||||
echo " 타입별 파일: ${TYPE_COUNT}개 추가"
|
||||
echo " 해시: $HASH"
|
||||
echo " 해시(전체): $HASH"
|
||||
echo " 해시(pre-commit 제외): $HASH_NO_PC"
|
||||
done
|
||||
|
||||
echo "" >> "$HASH_FILE"
|
||||
echo "}" >> "$HASH_FILE"
|
||||
echo "" >> "$HASH_NO_PC_FILE"
|
||||
echo "}" >> "$HASH_NO_PC_FILE"
|
||||
|
||||
# 3. workflow-version.json 갱신
|
||||
echo ""
|
||||
@ -114,10 +127,14 @@ import json
|
||||
with open('$HASH_FILE', 'r') as f:
|
||||
hashes = json.load(f)
|
||||
|
||||
with open('$HASH_NO_PC_FILE', 'r') as f:
|
||||
hashes_no_pc = json.load(f)
|
||||
|
||||
with open('workflow-version.json', 'r') as f:
|
||||
data = json.load(f)
|
||||
|
||||
data['content_hashes'] = hashes
|
||||
data['content_hashes_custom_precommit'] = hashes_no_pc
|
||||
|
||||
with open('workflow-version.json', 'w') as f:
|
||||
json.dump(data, f, indent=2, ensure_ascii=False)
|
||||
@ -126,6 +143,10 @@ with open('workflow-version.json', 'w') as f:
|
||||
print('content_hashes 갱신 완료:')
|
||||
for t, h in hashes.items():
|
||||
print(f' {t}: {h}')
|
||||
print()
|
||||
print('content_hashes_custom_precommit 갱신 완료:')
|
||||
for t, h in hashes_no_pc.items():
|
||||
print(f' {t}: {h}')
|
||||
"
|
||||
|
||||
echo ""
|
||||
|
||||
@ -1,14 +1,37 @@
|
||||
{
|
||||
"version": "1.6.0",
|
||||
"version": "1.6.1",
|
||||
"updated": "2026-03-06",
|
||||
"gitea_url": "https://gitea.gc-si.dev",
|
||||
"nexus_url": "https://nexus.gc-si.dev",
|
||||
"content_hashes": {
|
||||
"java-maven": "1456f972fb250ba60fa6331d5fad81155c9992bf80947867e34a7178293513db",
|
||||
"java-gradle": "0f7afc70942888cd2f98e01ef2eef0fcb815c0a68704d27b970a528081710d22",
|
||||
"react-ts": "2a3a5b6ce9e2c6080c79b78be92c4967ed2418c3efff6082038b3f270c3b7e18"
|
||||
"java-maven": "",
|
||||
"java-gradle": "",
|
||||
"react-ts": ""
|
||||
},
|
||||
"content_hashes_custom_precommit": {
|
||||
"java-maven": "",
|
||||
"java-gradle": "",
|
||||
"react-ts": ""
|
||||
},
|
||||
"changes": [
|
||||
{
|
||||
"version": "1.6.1",
|
||||
"date": "2026-03-06",
|
||||
"description": "custom_pre_commit 프로젝트 해시 불일치 해결",
|
||||
"items": [
|
||||
"content_hashes_custom_precommit: pre-commit 제외 해시 필드 추가",
|
||||
"push/mr/release Step 0.5: custom_pre_commit 플래그에 따라 해시 비교 분기",
|
||||
"update-hash.sh: 두 세트 해시 동시 계산 (전체 + pre-commit 제외)",
|
||||
"적용: 자동 (기존 v1.6.0 프로젝트는 /push 시 해시 차이로 자동 동기화)"
|
||||
],
|
||||
"affected_files": [
|
||||
".claude/skills/push/SKILL.md",
|
||||
".claude/skills/mr/SKILL.md",
|
||||
".claude/skills/release/SKILL.md",
|
||||
"update-hash.sh",
|
||||
"workflow-version.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.6.0",
|
||||
"date": "2026-03-06",
|
||||
|
||||
불러오는 중...
Reference in New Issue
Block a user