3333 should-build : ${{ steps.check-update.outputs.should-build }}
3434 tag : ${{ steps.check-update.outputs.tag }}
3535 version : ${{ steps.check-update.outputs.version }}
36+ version_code : ${{ steps.check-update.outputs.version_code }}
3637
3738 steps :
3839 - name : 🛎️ Checkout
4748
4849 SEMVER_TAG_REGEX='^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$' # vX.Y.Z
4950 SEMVER_VER_REGEX='^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$' # X.Y.Z
51+
52+ SHOULD_BUILD="false"
53+ TAG=""
54+ VERSION=""
55+ VERSION_CODE=""
5056
5157 if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
5258 # 수동 실행인 경우
5763 exit 1
5864 fi
5965 VERSION="${TAG#v}"
66+ SHOULD_BUILD="true"
6067 echo "should-build=true" >> $GITHUB_OUTPUT
6168 echo "tag=$TAG" >> $GITHUB_OUTPUT
6269 echo "version=$VERSION" >> $GITHUB_OUTPUT
@@ -66,12 +73,17 @@ jobs:
6673 RAW_VER="${{ github.event.client_payload.new_version }}"
6774
6875 if [ -n "$RAW_TAG" ] && [[ "$RAW_TAG" =~ $SEMVER_TAG_REGEX ]]; then
76+ TAG="$RAW_TAG"
6977 VERSION="${RAW_TAG#v}"
78+ SHOULD_BUILD="true"
7079 echo "should-build=true" >> "$GITHUB_OUTPUT"
7180 echo "tag=$RAW_TAG" >> "$GITHUB_OUTPUT"
7281 echo "version=$VERSION" >> "$GITHUB_OUTPUT"
7382 echo "✅ repository_dispatch tag: $RAW_TAG"
7483 elif [ -n "$RAW_VER" ] && [[ "$RAW_VER" =~ $SEMVER_VER_REGEX ]]; then
84+ TAG="$RAW_TAG"
85+ VERSION="${RAW_TAG#v}"
86+ SHOULD_BUILD="true"
7587 echo "should-build=true" >> "$GITHUB_OUTPUT"
7688 echo "tag=v$RAW_VER" >> "$GITHUB_OUTPUT"
7789 echo "version=$RAW_VER" >> "$GITHUB_OUTPUT"
8193 echo "📝 repository_dispatch payload에 유효한 tag/version이 없습니다. 빌드 생략"
8294 fi
8395 fi
96+
97+ echo "should-build=$SHOULD_BUILD" >> "$GITHUB_OUTPUT"
98+
99+ if [ "$SHOULD_BUILD" = "true" ]; then
100+ # VERSION_CODE 생성 (v0.1.15 -> 000115 -> 115)
101+ IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
102+
103+ # 각 파트 0~99 제한 (2자리 스키마 고정)
104+ if [ "$MAJOR" -gt 99 ] || [ "$MINOR" -gt 99 ] || [ "$PATCH" -gt 99 ]; then
105+ echo "❌ VERSION_CODE 생성 실패: major/minor/patch는 0~99 범위여야 함 (현재: $VERSION)"
106+ exit 1
107+ fi
108+
109+ PADDED="$(printf "%02d%02d%02d" "$MAJOR" "$MINOR" "$PATCH")"
110+ VERSION_CODE="$(echo "$PADDED" | sed 's/^0*//')"
111+ if [ -z "$VERSION_CODE" ]; then
112+ VERSION_CODE="1"
113+ fi
114+
115+ echo "tag=$TAG" >> "$GITHUB_OUTPUT"
116+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
117+ echo "version_code=$VERSION_CODE" >> "$GITHUB_OUTPUT"
118+
119+ echo "✅ TAG=$TAG"
120+ echo "✅ VERSION=$VERSION"
121+ echo "✅ VERSION_CODE=$VERSION_CODE (from $PADDED)"
122+ fi
84123
85124 # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
86125 # Job 2: Next.js 빌드
@@ -175,7 +214,7 @@ jobs:
175214 - name : 🏗️ Build APK
176215 env :
177216 VERSION_NAME : ${{ needs.check-version-update.outputs.version }}
178- VERSION_CODE : ${{ github.run_number }}
217+ VERSION_CODE : ${{ needs.check-version-update.outputs.version_code }}
179218 KEYSTORE_PASSWORD : ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
180219 KEY_ALIAS : ${{ secrets.ANDROID_KEY_ALIAS }}
181220 KEY_PASSWORD : ${{ secrets.ANDROID_KEY_PASSWORD }}
@@ -191,7 +230,7 @@ jobs:
191230 - name : 🏗️ Build AAB
192231 env :
193232 VERSION_NAME : ${{ needs.check-version-update.outputs.version }}
194- VERSION_CODE : ${{ github.run_number }}
233+ VERSION_CODE : ${{ needs.check-version-update.outputs.version_code }}
195234 KEYSTORE_PASSWORD : ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
196235 KEY_ALIAS : ${{ secrets.ANDROID_KEY_ALIAS }}
197236 KEY_PASSWORD : ${{ secrets.ANDROID_KEY_PASSWORD }}
@@ -283,18 +322,18 @@ jobs:
283322 shell : bash
284323 run : |
285324 set -euo pipefail
286-
325+
287326 xcodebuild -version
288327 xcodebuild -showsdks
289-
328+
290329 # ✅ (추가) iOS 26 SDK 존재 여부 강제 검증
291330 if ! xcodebuild -showsdks | grep -q "iphoneos26"; then
292331 echo "❌ iOS 26 SDK not found on this runner."
293332 echo "Installed Xcode apps:"
294333 ls -d /Applications/Xcode*.app 2>/dev/null || true
295334 exit 1
296335 fi
297-
336+
298337 echo "✅ iOS 26 SDK detected."
299338
300339 - name : 📥 Download web build
0 commit comments