diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1919b5b..9b04560 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,6 +23,9 @@ jobs: - name: Install dependencies run: npm install --legacy-peer-deps + - name: Check release version metadata + run: npm run check:versions + - name: Typecheck run: npm run typecheck diff --git a/.github/workflows/publish-fdroid.yml b/.github/workflows/publish-fdroid.yml index caf4363..a258241 100644 --- a/.github/workflows/publish-fdroid.yml +++ b/.github/workflows/publish-fdroid.yml @@ -46,6 +46,9 @@ jobs: - name: Install dependencies run: npm install --legacy-peer-deps + - name: Check release version metadata + run: npm run check:versions + - name: Set Sentry release identifiers # sentry.gradle (applied from android/app/build.gradle) defaults the # upload's --release/--dist to `${applicationId}@${versionName}+${versionCode}`, diff --git a/android/app/build.gradle b/android/app/build.gradle index ac22f44..78fd4a0 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -94,8 +94,8 @@ android { applicationId 'cc.agentlabs.opencode' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 34 - versionName "0.4.7" + versionCode 37 + versionName "0.4.10" buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\"" } diff --git a/package.json b/package.json index eefa626..2ff6889 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "ios": "expo run:ios", "android": "expo run:android", "typecheck": "tsc --noEmit", + "check:versions": "node scripts/check-version-parity.mjs", "test": "node --test 'src/**/*.test.ts'" }, "dependencies": { diff --git a/scripts/check-version-parity.mjs b/scripts/check-version-parity.mjs new file mode 100644 index 0000000..2c3eba2 --- /dev/null +++ b/scripts/check-version-parity.mjs @@ -0,0 +1,31 @@ +import { readFile } from "node:fs/promises"; + +const app = JSON.parse(await readFile("app.json", "utf8")); +const pkg = JSON.parse(await readFile("package.json", "utf8")); +const gradle = await readFile("android/app/build.gradle", "utf8"); + +const name = gradle.match(/^\s*versionName\s+"([^"]+)"/m)?.[1]; +const code = Number(gradle.match(/^\s*versionCode\s+(\d+)/m)?.[1]); +const expectedName = app.expo.version; +const expectedCode = app.expo.android.versionCode; + +const errors = []; + +if (pkg.version !== expectedName) { + errors.push(`package.json version ${pkg.version} != app.json version ${expectedName}`); +} + +if (name !== expectedName) { + errors.push(`Gradle versionName ${name ?? "missing"} != app.json version ${expectedName}`); +} + +if (code !== expectedCode) { + errors.push(`Gradle versionCode ${Number.isNaN(code) ? "missing" : code} != app.json versionCode ${expectedCode}`); +} + +if (errors.length) { + console.error(errors.join("\n")); + process.exitCode = 1; +} else { + console.log(`Version metadata aligned: ${expectedName} (${expectedCode})`); +}