22import { readFileSync } from 'fs' ;
33
44const args = parseArgs ( process . argv . slice ( 2 ) ) ;
5+ // Desktop release workflows resolve their version from the root package. Mobile
6+ // apps ship on their own cadence, so they form a separate consistency group.
57const expected = args . version || readJsonVersion ( 'package.json' ) ;
68const versions = new Map ( [
79 [ 'package.json' , readJsonVersion ( 'package.json' ) ] ,
@@ -15,6 +17,9 @@ const versions = new Map([
1517 [ 'src/apps/relay-server/Cargo.toml' , readTomlVersion ( 'src/apps/relay-server/Cargo.toml' , / v e r s i o n = " ( [ ^ " ] + ) " # x - r e l e a s e - p l e a s e - v e r s i o n / ) ] ,
1618 [ 'src/crates/services/relay-service/Cargo.toml' , readTomlVersion ( 'src/crates/services/relay-service/Cargo.toml' , / ^ v e r s i o n = " ( [ ^ " ] + ) " / m) ] ,
1719 [ 'src/crates/services/page-function-runtime/Cargo.toml' , readTomlVersion ( 'src/crates/services/page-function-runtime/Cargo.toml' , / ^ v e r s i o n = " ( [ ^ " ] + ) " / m) ] ,
20+ ] ) ;
21+
22+ const mobileVersions = new Map ( [
1823 [ 'src/apps/mobile/android/app/build.gradle.kts' , readTextVersion ( 'src/apps/mobile/android/app/build.gradle.kts' , / v e r s i o n N a m e \s * = \s * " ( [ ^ " ] + ) " / ) ] ,
1924 [ 'src/apps/mobile/ios/OpenBitFun/Info.plist' , readTextVersion ( 'src/apps/mobile/ios/OpenBitFun/Info.plist' , / < k e y > C F B u n d l e S h o r t V e r s i o n S t r i n g < \/ k e y > \s * < s t r i n g > ( [ ^ < ] + ) < \/ s t r i n g > / ) ] ,
2025 [ 'src/apps/mobile/harmonyos/AppScope/app.json5' , readTextVersion ( 'src/apps/mobile/harmonyos/AppScope/app.json5' , / " v e r s i o n N a m e " \s * : \s * " ( [ ^ " ] + ) " / ) ] ,
@@ -26,13 +31,18 @@ if (!expected.includes('-')) {
2631}
2732
2833const mismatches = [ ...versions ] . filter ( ( [ , version ] ) => version !== expected ) ;
29- if ( mismatches . length > 0 ) {
30- for ( const [ file , version ] of mismatches ) {
31- console . error ( `[release-version] ${ file } : expected ${ expected } , found ${ version } ` ) ;
32- }
34+ const mobileExpected = args [ 'mobile-version' ] || mobileVersions . values ( ) . next ( ) . value ;
35+ const mobileMismatches = [ ...mobileVersions ] . filter ( ( [ , version ] ) => version !== mobileExpected ) ;
36+ for ( const [ file , version ] of mismatches ) {
37+ console . error ( `[release-version] ${ file } : expected ${ expected } , found ${ version } ` ) ;
38+ }
39+ for ( const [ file , version ] of mobileMismatches ) {
40+ console . error ( `[release-version] ${ file } : expected mobile ${ mobileExpected } , found ${ version } ` ) ;
41+ }
42+ if ( mismatches . length > 0 || mobileMismatches . length > 0 ) {
3343 process . exit ( 1 ) ;
3444}
35- console . log ( `[release-version] OK: ${ expected } ` ) ;
45+ console . log ( `[release-version] OK: desktop ${ expected } ; mobile ${ mobileExpected } ` ) ;
3646
3747function readJsonVersion ( file ) {
3848 return JSON . parse ( readFileSync ( file , 'utf8' ) ) . version ;
0 commit comments