mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-01-23 02:36:05 +00:00
- Update bump-android-version.js to handle RC/alpha/beta versions - Pre-releases use versionCode suffix 0001-8999, stable uses 9000 - This ensures users can upgrade from RC to stable without uninstalling - Skip Play Store upload for pre-release tags (GitHub only) - Skip fastlane changelog generation for pre-releases Fixes #5964
112 lines
3.2 KiB
JavaScript
112 lines
3.2 KiB
JavaScript
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
// Read the version from package.json
|
||
const packageJson = require('../package.json');
|
||
const version = packageJson.version;
|
||
|
||
// Parse version to extract pre-release info
|
||
const versionParts = version.split('-');
|
||
const baseVersion = versionParts[0]; // e.g., "17.0.0"
|
||
const preRelease = versionParts[1]; // e.g., "RC.1" or undefined
|
||
const isPreRelease = !!preRelease;
|
||
|
||
String.prototype.insertAt = function (index, string) {
|
||
return this.substr(0, index) + string + this.substr(index);
|
||
};
|
||
|
||
// Define the path to build.gradle
|
||
const gradleFilePath = path.join(__dirname, '..', 'android', 'app', 'build.gradle');
|
||
|
||
// Read the build.gradle file
|
||
let gradleFileContent = fs.readFileSync(gradleFilePath, 'utf8');
|
||
|
||
// Calculate versionCode
|
||
const baseVersionCode =
|
||
baseVersion
|
||
.split('.')
|
||
.map((num) => num.padStart(2, '0'))
|
||
.join('') * 10000;
|
||
|
||
let versionCodeDroid;
|
||
if (isPreRelease) {
|
||
// Pre-release: extract number (RC.1 → 1, alpha.5 → 5)
|
||
// Uses suffix 0001-8999 to be LOWER than stable (9000)
|
||
const preReleaseNum = parseInt(preRelease.split('.')[1] || '1', 10);
|
||
versionCodeDroid = baseVersionCode + preReleaseNum;
|
||
} else {
|
||
// Stable release: use suffix 9000 to be HIGHER than any RC
|
||
versionCodeDroid = baseVersionCode + 9000;
|
||
}
|
||
|
||
const versionCodeDroidWithUnderscores = versionCodeDroid
|
||
.toString()
|
||
.padStart(10, '0')
|
||
.insertAt(6, '_')
|
||
.insertAt(4, '_')
|
||
.insertAt(2, '_');
|
||
|
||
gradleFileContent = gradleFileContent.replace(
|
||
/versionCode (\d|_)+/g,
|
||
`versionCode ${versionCodeDroidWithUnderscores}`,
|
||
);
|
||
gradleFileContent = gradleFileContent.replace(
|
||
/versionName "[^"]+"/g,
|
||
`versionName "${version}"`,
|
||
);
|
||
|
||
// Write the updated content back to build.gradle
|
||
fs.writeFileSync(gradleFilePath, gradleFileContent, 'utf8');
|
||
|
||
console.log(`Updated build.gradle to version ${version}`);
|
||
|
||
// Skip fastlane changelog for pre-release versions
|
||
if (isPreRelease) {
|
||
console.log('Pre-release version – skipping fastlane changelog generation');
|
||
process.exit(0);
|
||
}
|
||
|
||
// CREATE fastlane changelog file
|
||
// Define the paths
|
||
const changelogPath = path.join(__dirname, '..', 'CHANGELOG.md');
|
||
const outputDir = path.join(
|
||
__dirname,
|
||
'..',
|
||
'android',
|
||
'fastlane',
|
||
'metadata',
|
||
'android',
|
||
'en-US',
|
||
'changelogs',
|
||
);
|
||
const outputFilePath = path.join(outputDir, `${versionCodeDroid}.txt`);
|
||
|
||
// Read the changelog.md file
|
||
const changelogContent = fs.readFileSync(changelogPath, 'utf8');
|
||
|
||
// Extract the latest changes
|
||
const lines = changelogContent.split('\n').slice(2); // Remove the first two lines;
|
||
let latestChanges = '';
|
||
let headerCount = 0;
|
||
|
||
for (const line of lines) {
|
||
if (line.startsWith('# [') || line.startsWith('## [')) {
|
||
headerCount++;
|
||
if (headerCount === 1) break;
|
||
}
|
||
latestChanges += line + '\n';
|
||
}
|
||
// Remove all links from the extracted text
|
||
latestChanges = latestChanges
|
||
.replace(/\[([^\]]+)\]\([^\)]+\)/g, '$1')
|
||
.replace(/\s*\([a-f0-9]{7}\)\s*$/gm, '');
|
||
|
||
// Ensure the output directory exists
|
||
if (!fs.existsSync(outputDir)) {
|
||
fs.mkdirSync(outputDir, { recursive: true });
|
||
}
|
||
|
||
// Write the latest changes to the versioned changelog file
|
||
fs.writeFileSync(outputFilePath, latestChanges, 'utf8');
|
||
|
||
console.log(`Wrote latest changes to ${outputFilePath}`);
|