Merge pull request 'chore: content_hashes 갱신 + bash3 호환' (#10) from feature/v1.6.0-hashes into develop
This commit is contained in:
커밋
85a4dff304
@ -9,10 +9,20 @@
|
|||||||
# 사용법:
|
# 사용법:
|
||||||
# cd template-common && bash update-hash.sh
|
# cd template-common && bash update-hash.sh
|
||||||
#
|
#
|
||||||
# 의존성: curl, python3, shasum
|
# 의존성: curl, python3, shasum (macOS) 또는 sha256sum (Linux)
|
||||||
#==============================================================================
|
#==============================================================================
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# shasum 호환 (macOS: shasum, Linux: sha256sum)
|
||||||
|
if command -v shasum &>/dev/null; then
|
||||||
|
SHA_CMD="shasum -a 256"
|
||||||
|
elif command -v sha256sum &>/dev/null; then
|
||||||
|
SHA_CMD="sha256sum"
|
||||||
|
else
|
||||||
|
echo "ERROR: shasum 또는 sha256sum이 필요합니다."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Gitea URL 읽기
|
# Gitea URL 읽기
|
||||||
GITEA_URL=$(python3 -c "import json; print(json.load(open('workflow-version.json')).get('gitea_url', 'https://gitea.gc-si.dev'))" 2>/dev/null)
|
GITEA_URL=$(python3 -c "import json; print(json.load(open('workflow-version.json')).get('gitea_url', 'https://gitea.gc-si.dev'))" 2>/dev/null)
|
||||||
if [ -z "$GITEA_URL" ]; then
|
if [ -z "$GITEA_URL" ]; then
|
||||||
@ -20,12 +30,12 @@ if [ -z "$GITEA_URL" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
TYPES=("java-maven" "java-gradle" "react-ts")
|
TYPES="java-maven java-gradle react-ts"
|
||||||
TYPE_SPECIFIC_FILES=(".claude/rules/code-style.md" ".claude/rules/naming.md" ".claude/rules/testing.md" ".githooks/pre-commit")
|
TYPE_SPECIFIC_FILES=".claude/rules/code-style.md .claude/rules/naming.md .claude/rules/testing.md .githooks/pre-commit"
|
||||||
|
|
||||||
# 임시 디렉토리
|
# 임시 디렉토리
|
||||||
TMPDIR=$(mktemp -d)
|
WORK_TMPDIR=$(mktemp -d)
|
||||||
trap "rm -rf $TMPDIR" EXIT
|
trap "rm -rf $WORK_TMPDIR" EXIT
|
||||||
|
|
||||||
echo "=== 팀 워크플로우 해시 갱신 ==="
|
echo "=== 팀 워크플로우 해시 갱신 ==="
|
||||||
echo "Gitea URL: $GITEA_URL"
|
echo "Gitea URL: $GITEA_URL"
|
||||||
@ -35,33 +45,35 @@ echo ""
|
|||||||
MANAGED_DIRS=".claude/rules .claude/agents .claude/scripts .githooks"
|
MANAGED_DIRS=".claude/rules .claude/agents .claude/scripts .githooks"
|
||||||
MANAGED_SKILLS=".claude/skills/push .claude/skills/mr .claude/skills/create-mr .claude/skills/release .claude/skills/version .claude/skills/fix-issue"
|
MANAGED_SKILLS=".claude/skills/push .claude/skills/mr .claude/skills/create-mr .claude/skills/release .claude/skills/version .claude/skills/fix-issue"
|
||||||
|
|
||||||
mkdir -p "$TMPDIR/common"
|
mkdir -p "$WORK_TMPDIR/common"
|
||||||
for dir in $MANAGED_DIRS $MANAGED_SKILLS; do
|
for dir in $MANAGED_DIRS $MANAGED_SKILLS; do
|
||||||
if [ -d "$dir" ]; then
|
if [ -d "$dir" ]; then
|
||||||
mkdir -p "$TMPDIR/common/$dir"
|
mkdir -p "$WORK_TMPDIR/common/$dir"
|
||||||
find "$dir" -type f -exec sh -c 'cp "$1" "'"$TMPDIR/common"'/$1"' _ {} \;
|
find "$dir" -type f -exec sh -c 'cp "$1" "'"$WORK_TMPDIR/common"'/$1"' _ {} \;
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
COMMON_COUNT=$(cd "$TMPDIR/common" && find . -type f | wc -l | tr -d ' ')
|
COMMON_COUNT=$(cd "$WORK_TMPDIR/common" && find . -type f | wc -l | tr -d ' ')
|
||||||
echo "Common 파일: ${COMMON_COUNT}개"
|
echo "Common 파일: ${COMMON_COUNT}개"
|
||||||
|
|
||||||
# 2. 각 타입별 해시 계산
|
# 2. 각 타입별 해시 계산 → 파일로 저장
|
||||||
declare -A HASHES
|
HASH_FILE="$WORK_TMPDIR/hashes.json"
|
||||||
|
echo "{" > "$HASH_FILE"
|
||||||
|
|
||||||
for TYPE in "${TYPES[@]}"; do
|
FIRST=true
|
||||||
|
for TYPE in $TYPES; do
|
||||||
echo ""
|
echo ""
|
||||||
echo "--- $TYPE ---"
|
echo "--- $TYPE ---"
|
||||||
|
|
||||||
# common 파일 복사
|
# common 파일 복사
|
||||||
rm -rf "$TMPDIR/combined"
|
rm -rf "$WORK_TMPDIR/combined"
|
||||||
cp -r "$TMPDIR/common" "$TMPDIR/combined"
|
cp -r "$WORK_TMPDIR/common" "$WORK_TMPDIR/combined"
|
||||||
|
|
||||||
# 타입별 파일 다운로드
|
# 타입별 파일 다운로드
|
||||||
TYPE_COUNT=0
|
TYPE_COUNT=0
|
||||||
for FILE in "${TYPE_SPECIFIC_FILES[@]}"; do
|
for FILE in $TYPE_SPECIFIC_FILES; do
|
||||||
URL="${GITEA_URL}/gc/template-${TYPE}/raw/branch/develop/${FILE}"
|
URL="${GITEA_URL}/gc/template-${TYPE}/raw/branch/develop/${FILE}"
|
||||||
TARGET="$TMPDIR/combined/$FILE"
|
TARGET="$WORK_TMPDIR/combined/$FILE"
|
||||||
mkdir -p "$(dirname "$TARGET")"
|
mkdir -p "$(dirname "$TARGET")"
|
||||||
|
|
||||||
if curl -sf --max-time 10 "$URL" -o "$TARGET" 2>/dev/null; then
|
if curl -sf --max-time 10 "$URL" -o "$TARGET" 2>/dev/null; then
|
||||||
@ -73,29 +85,34 @@ for TYPE in "${TYPES[@]}"; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
# 해시 계산 (find | sort | xargs cat | shasum — 로컬 계산과 동일한 방식)
|
# 해시 계산 (find | sort | xargs cat | shasum — 로컬 계산과 동일한 방식)
|
||||||
HASH=$(cd "$TMPDIR/combined" && find .claude/rules .claude/agents .claude/scripts .githooks \
|
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/push .claude/skills/mr .claude/skills/create-mr \
|
||||||
.claude/skills/release .claude/skills/version .claude/skills/fix-issue \
|
.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)
|
-type f 2>/dev/null | sort | xargs cat 2>/dev/null | $SHA_CMD | cut -d' ' -f1)
|
||||||
|
|
||||||
|
if [ "$FIRST" = true ]; then
|
||||||
|
FIRST=false
|
||||||
|
else
|
||||||
|
echo "," >> "$HASH_FILE"
|
||||||
|
fi
|
||||||
|
printf ' "%s": "%s"' "$TYPE" "$HASH" >> "$HASH_FILE"
|
||||||
|
|
||||||
HASHES[$TYPE]=$HASH
|
|
||||||
echo " 타입별 파일: ${TYPE_COUNT}개 추가"
|
echo " 타입별 파일: ${TYPE_COUNT}개 추가"
|
||||||
echo " 해시: $HASH"
|
echo " 해시: $HASH"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
echo "" >> "$HASH_FILE"
|
||||||
|
echo "}" >> "$HASH_FILE"
|
||||||
|
|
||||||
# 3. workflow-version.json 갱신
|
# 3. workflow-version.json 갱신
|
||||||
echo ""
|
echo ""
|
||||||
echo "=== workflow-version.json 갱신 ==="
|
echo "=== workflow-version.json 갱신 ==="
|
||||||
|
|
||||||
# Python으로 직접 갱신 (bash 변수 전달)
|
|
||||||
python3 -c "
|
python3 -c "
|
||||||
import json
|
import json
|
||||||
|
|
||||||
hashes = {
|
with open('$HASH_FILE', 'r') as f:
|
||||||
$(for TYPE in "${TYPES[@]}"; do
|
hashes = json.load(f)
|
||||||
echo " '${TYPE}': '${HASHES[$TYPE]}',"
|
|
||||||
done)
|
|
||||||
}
|
|
||||||
|
|
||||||
with open('workflow-version.json', 'r') as f:
|
with open('workflow-version.json', 'r') as f:
|
||||||
data = json.load(f)
|
data = json.load(f)
|
||||||
|
|||||||
@ -4,9 +4,9 @@
|
|||||||
"gitea_url": "https://gitea.gc-si.dev",
|
"gitea_url": "https://gitea.gc-si.dev",
|
||||||
"nexus_url": "https://nexus.gc-si.dev",
|
"nexus_url": "https://nexus.gc-si.dev",
|
||||||
"content_hashes": {
|
"content_hashes": {
|
||||||
"java-maven": "",
|
"java-maven": "1456f972fb250ba60fa6331d5fad81155c9992bf80947867e34a7178293513db",
|
||||||
"java-gradle": "",
|
"java-gradle": "0f7afc70942888cd2f98e01ef2eef0fcb815c0a68704d27b970a528081710d22",
|
||||||
"react-ts": ""
|
"react-ts": "2a3a5b6ce9e2c6080c79b78be92c4967ed2418c3efff6082038b3f270c3b7e18"
|
||||||
},
|
},
|
||||||
"changes": [
|
"changes": [
|
||||||
{
|
{
|
||||||
|
|||||||
불러오는 중...
Reference in New Issue
Block a user