feat: ship portal and android release updates
This commit is contained in:
112
scripts/deploy-android-apk.mjs
Normal file
112
scripts/deploy-android-apk.mjs
Normal file
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import fs from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import process from 'node:process';
|
||||
import {spawnSync} from 'node:child_process';
|
||||
import {fileURLToPath} from 'node:url';
|
||||
|
||||
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
|
||||
const repoRoot = path.resolve(scriptDir, '..');
|
||||
const frontDir = path.join(repoRoot, 'front');
|
||||
const androidDir = path.join(frontDir, 'android');
|
||||
const capacitorPluginsGradlePath = path.join(androidDir, 'capacitor-cordova-android-plugins', 'build.gradle');
|
||||
const capacitorAppGradlePath = path.join(frontDir, 'node_modules', '@capacitor', 'app', 'android', 'build.gradle');
|
||||
|
||||
const googleMirrorValue = 'https://maven.aliyun.com/repository/google';
|
||||
|
||||
function runCommand(command, args, cwd, extraEnv = {}) {
|
||||
const result = spawnSync(command, args, {
|
||||
cwd,
|
||||
env: {
|
||||
...process.env,
|
||||
...extraEnv,
|
||||
},
|
||||
stdio: 'inherit',
|
||||
shell: process.platform === 'win32',
|
||||
});
|
||||
|
||||
if (result.status !== 0) {
|
||||
throw new Error(`Command failed: ${command} ${args.join(' ')}`);
|
||||
}
|
||||
}
|
||||
|
||||
function createAndroidBuildVersion() {
|
||||
const now = new Date();
|
||||
const year = String(now.getFullYear()).slice(-2);
|
||||
const startOfYear = new Date(now.getFullYear(), 0, 1);
|
||||
const dayOfYear = String(Math.floor((now - startOfYear) / 86400000) + 1).padStart(3, '0');
|
||||
const hour = String(now.getHours()).padStart(2, '0');
|
||||
const minute = String(now.getMinutes()).padStart(2, '0');
|
||||
|
||||
return {
|
||||
versionCode: `${year}${dayOfYear}${hour}${minute}`,
|
||||
versionName: `${now.getFullYear()}.${String(now.getMonth() + 1).padStart(2, '0')}.${String(now.getDate()).padStart(2, '0')}.${hour}${minute}`,
|
||||
};
|
||||
}
|
||||
|
||||
async function ensureAndroidGoogleMirror() {
|
||||
await Promise.all([
|
||||
patchCapacitorPluginGradle(capacitorPluginsGradlePath),
|
||||
patchCapacitorPluginGradle(capacitorAppGradlePath),
|
||||
]);
|
||||
}
|
||||
|
||||
async function patchCapacitorPluginGradle(gradlePath) {
|
||||
try {
|
||||
const original = await fs.readFile(gradlePath, 'utf-8');
|
||||
let next = original;
|
||||
|
||||
if (!next.includes(`def googleMirror = '${googleMirrorValue}'`)) {
|
||||
next = next.replace(
|
||||
'buildscript {\n',
|
||||
`buildscript {\n def googleMirror = '${googleMirrorValue}'\n`,
|
||||
);
|
||||
}
|
||||
|
||||
next = next.replace(
|
||||
/buildscript \{\n\s+def googleMirror = 'https:\/\/maven\.aliyun\.com\/repository\/google'\n\s+repositories \{\n\s+google\(\)\n/,
|
||||
`buildscript {\n def googleMirror = '${googleMirrorValue}'\n repositories {\n maven { url googleMirror }\n`,
|
||||
);
|
||||
|
||||
next = next.replace(
|
||||
/repositories \{\n\s+google\(\)\n\s+mavenCentral\(\)/g,
|
||||
`repositories {\n maven { url '${googleMirrorValue}' }\n mavenCentral()`,
|
||||
);
|
||||
|
||||
if (next !== original) {
|
||||
await fs.writeFile(gradlePath, next, 'utf-8');
|
||||
}
|
||||
} catch (error) {
|
||||
if (error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT') {
|
||||
return;
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const buildVersion = createAndroidBuildVersion();
|
||||
const buildEnv = {
|
||||
YOYUZH_ANDROID_VERSION_CODE: buildVersion.versionCode,
|
||||
YOYUZH_ANDROID_VERSION_NAME: buildVersion.versionName,
|
||||
};
|
||||
|
||||
console.log(`Android versionCode=${buildVersion.versionCode}`);
|
||||
console.log(`Android versionName=${buildVersion.versionName}`);
|
||||
|
||||
runCommand('npm', ['run', 'build'], frontDir, buildEnv);
|
||||
runCommand('npx', ['cap', 'sync', 'android'], frontDir, buildEnv);
|
||||
await ensureAndroidGoogleMirror();
|
||||
|
||||
const gradleCommand = process.platform === 'win32' ? 'gradlew.bat' : './gradlew';
|
||||
runCommand(gradleCommand, ['assembleDebug'], androidDir, buildEnv);
|
||||
runCommand('node', ['scripts/deploy-front-oss.mjs', '--skip-build'], repoRoot, buildEnv);
|
||||
runCommand('node', ['scripts/deploy-android-release.mjs'], repoRoot, buildEnv);
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
console.error(error instanceof Error ? error.message : String(error));
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user