1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-21 09:38:01 +02:00

Tools: Also update dependency version numbers when creating a new release

This commit is contained in:
Laurent Cozic 2021-08-10 15:38:05 +01:00
parent c3263a132f
commit 2ccbc87435
4 changed files with 149 additions and 98 deletions

View File

@ -1719,6 +1719,9 @@ packages/tools/release-ios.js.map
packages/tools/release-server.d.ts
packages/tools/release-server.js
packages/tools/release-server.js.map
packages/tools/setupNewRelease.d.ts
packages/tools/setupNewRelease.js
packages/tools/setupNewRelease.js.map
packages/tools/tool-utils.d.ts
packages/tools/tool-utils.js
packages/tools/tool-utils.js.map

3
.gitignore vendored
View File

@ -1704,6 +1704,9 @@ packages/tools/release-ios.js.map
packages/tools/release-server.d.ts
packages/tools/release-server.js
packages/tools/release-server.js.map
packages/tools/setupNewRelease.d.ts
packages/tools/setupNewRelease.js
packages/tools/setupNewRelease.js.map
packages/tools/tool-utils.d.ts
packages/tools/tool-utils.js
packages/tools/tool-utils.js.map

View File

@ -1,98 +0,0 @@
const fs = require('fs-extra');
const path = require('path');
const rootDir = path.dirname(path.dirname(__dirname));
async function updatePackageVersion(packageFilePath, majorMinorVersion) {
const contentText = await fs.readFile(packageFilePath, 'utf8');
const content = JSON.parse(contentText);
if (content.version.indexOf(majorMinorVersion) === 0) return;
content.version = `${majorMinorVersion}.0`;
await fs.writeFile(packageFilePath, `${JSON.stringify(content, null, 2)}\n`, 'utf8');
}
async function updateGradleVersion(filePath, majorMinorVersion) {
const contentText = await fs.readFile(filePath, 'utf8');
const newContent = contentText.replace(/(versionName\s+")(\d+?\.\d+?)(\.\d+")/, function(match, prefix, version, suffix) {
if (version === majorMinorVersion) return prefix + version + suffix;
return `${prefix + majorMinorVersion}.0"`;
});
if (newContent === contentText) return;
await fs.writeFile(filePath, newContent, 'utf8');
}
async function updateCodeProjVersion(filePath, majorMinorVersion) {
const contentText = await fs.readFile(filePath, 'utf8');
// MARKETING_VERSION = 10.1.0;
const newContent = contentText.replace(/(MARKETING_VERSION = )(\d+\.\d+)(\.\d+;)/g, function(match, prefix, version, suffix) {
if (version === majorMinorVersion) return prefix + version + suffix;
return `${prefix + majorMinorVersion}.0;`;
});
if (newContent === contentText) return;
await fs.writeFile(filePath, newContent, 'utf8');
}
async function updateClipperManifestVersion(manifestPath, majorMinorVersion) {
const manifestText = await fs.readFile(manifestPath, 'utf8');
const manifest = JSON.parse(manifestText);
const versionText = manifest.version;
if (versionText.indexOf(majorMinorVersion) === 0) return;
manifest.version = `${majorMinorVersion}.0`;
await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 4));
}
async function updatePluginGeneratorTemplateVersion(manifestPath, majorMinorVersion) {
const manifestText = await fs.readFile(manifestPath, 'utf8');
const manifest = JSON.parse(manifestText);
manifest.app_min_version = majorMinorVersion;
await fs.writeFile(manifestPath, JSON.stringify(manifest, null, '\t'));
}
// Need this hack to transform x.y.z into 1x.y.z due to some mistake
// on one of the release and the App Store won't allow decreasing
// the major version number.
function iosVersionHack(majorMinorVersion) {
const p = majorMinorVersion.split('.');
p[0] = `1${p[0]}`;
return p.join('.');
}
async function main() {
const argv = require('yargs').parserConfiguration({
'parse-numbers': false,
}).argv;
if (!argv._ || !argv._.length) throw new Error('Please specify the major.minor version, eg. 1.2');
const majorMinorVersion = argv._[0];
await updatePackageVersion(`${rootDir}/packages/app-desktop/package.json`, majorMinorVersion);
await updatePackageVersion(`${rootDir}/packages/app-cli/package.json`, majorMinorVersion);
await updatePackageVersion(`${rootDir}/packages/generator-joplin/package.json`, majorMinorVersion);
await updatePackageVersion(`${rootDir}/packages/server/package.json`, majorMinorVersion);
await updatePackageVersion(`${rootDir}/packages/plugin-repo-cli/package.json`, majorMinorVersion);
await updatePackageVersion(`${rootDir}/packages/lib/package.json`, majorMinorVersion);
await updatePackageVersion(`${rootDir}/packages/renderer/package.json`, majorMinorVersion);
await updatePackageVersion(`${rootDir}/packages/tools/package.json`, majorMinorVersion);
await updateGradleVersion(`${rootDir}/packages/app-mobile/android/app/build.gradle`, majorMinorVersion);
await updateCodeProjVersion(`${rootDir}/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj`, iosVersionHack(majorMinorVersion));
await updateClipperManifestVersion(`${rootDir}/packages/app-clipper/manifest.json`, majorMinorVersion);
await updatePluginGeneratorTemplateVersion(`${rootDir}/packages/generator-joplin/generators/app/templates/src/manifest.json`, majorMinorVersion);
console.info('Version numbers have been updated. Consider running `npm i` to update the lock files');
}
main().catch((error) => {
console.error('Fatal error:', error);
process.exit(1);
});

View File

@ -0,0 +1,143 @@
import * as fs from 'fs-extra';
import * as path from 'path';
const rootDir = path.dirname(path.dirname(__dirname));
interface Options {
updateVersion: boolean;
updateDependenciesVersion: boolean;
}
interface PackageJson {
version: string;
dependencies: Record<string, string>;
devDependencies: Record<string, string>;
}
function isJoplinPackage(name: string): boolean {
if (!name.startsWith('@joplin/')) return false;
if (['@joplin/turndown', '@joplin/turndown-plugin-gfm'].includes(name)) return false;
return !name.startsWith('@joplin/fork-');
}
async function updatePackageVersion(packageFilePath: string, majorMinorVersion: string, options: Options) {
const contentText = await fs.readFile(packageFilePath, 'utf8');
const content: PackageJson = JSON.parse(contentText);
if (options.updateVersion) {
// If it's not already set
if (content.version.indexOf(majorMinorVersion) !== 0) {
content.version = `${majorMinorVersion}.0`;
}
}
if (options.updateDependenciesVersion) {
for (const [name] of Object.entries(content.dependencies)) {
if (isJoplinPackage(name)) {
content.dependencies[name] = `~${majorMinorVersion}`;
}
}
for (const [name] of Object.entries(content.devDependencies)) {
if (isJoplinPackage(name)) {
content.devDependencies[name] = `~${majorMinorVersion}`;
}
}
}
await fs.writeFile(packageFilePath, `${JSON.stringify(content, null, 2)}\n`, 'utf8');
}
async function updateGradleVersion(filePath: string, majorMinorVersion: string) {
const contentText = await fs.readFile(filePath, 'utf8');
const newContent = contentText.replace(/(versionName\s+")(\d+?\.\d+?)(\.\d+")/, function(_match, prefix, version, suffix) {
if (version === majorMinorVersion) return prefix + version + suffix;
return `${prefix + majorMinorVersion}.0"`;
});
if (newContent === contentText) return;
await fs.writeFile(filePath, newContent, 'utf8');
}
async function updateCodeProjVersion(filePath: string, majorMinorVersion: string) {
const contentText = await fs.readFile(filePath, 'utf8');
// MARKETING_VERSION = 10.1.0;
const newContent = contentText.replace(/(MARKETING_VERSION = )(\d+\.\d+)(\.\d+;)/g, function(_match, prefix, version, suffix) {
if (version === majorMinorVersion) return prefix + version + suffix;
return `${prefix + majorMinorVersion}.0;`;
});
if (newContent === contentText) return;
await fs.writeFile(filePath, newContent, 'utf8');
}
async function updateClipperManifestVersion(manifestPath: string, majorMinorVersion: string) {
const manifestText = await fs.readFile(manifestPath, 'utf8');
const manifest = JSON.parse(manifestText);
const versionText = manifest.version;
if (versionText.indexOf(majorMinorVersion) === 0) return;
manifest.version = `${majorMinorVersion}.0`;
await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 4));
}
async function updatePluginGeneratorTemplateVersion(manifestPath: string, majorMinorVersion: string) {
const manifestText = await fs.readFile(manifestPath, 'utf8');
const manifest = JSON.parse(manifestText);
manifest.app_min_version = majorMinorVersion;
await fs.writeFile(manifestPath, JSON.stringify(manifest, null, '\t'));
}
// Need this hack to transform x.y.z into 1x.y.z due to some mistake
// on one of the release and the App Store won't allow decreasing
// the major version number.
function iosVersionHack(majorMinorVersion: string) {
const p = majorMinorVersion.split('.');
p[0] = `1${p[0]}`;
return p.join('.');
}
async function main() {
const argv: any = require('yargs').parserConfiguration({
'parse-numbers': false,
}).argv;
if (!argv._ || !argv._.length) throw new Error('Please specify the major.minor version, eg. 1.2');
const majorMinorVersion = argv._[0];
const options: Options = {
updateVersion: argv.updateVersion !== '0',
updateDependenciesVersion: argv.updateDependenciesVersion !== '0',
};
if (!options.updateDependenciesVersion && !options.updateVersion) throw new Error('Nothing to do!');
await updatePackageVersion(`${rootDir}/packages/app-desktop/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/app-cli/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/generator-joplin/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/server/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/plugin-repo-cli/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/lib/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/renderer/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/tools/package.json`, majorMinorVersion, options);
if (options.updateVersion) {
await updateGradleVersion(`${rootDir}/packages/app-mobile/android/app/build.gradle`, majorMinorVersion);
await updateCodeProjVersion(`${rootDir}/packages/app-mobile/ios/Joplin.xcodeproj/project.pbxproj`, iosVersionHack(majorMinorVersion));
await updateClipperManifestVersion(`${rootDir}/packages/app-clipper/manifest.json`, majorMinorVersion);
await updatePluginGeneratorTemplateVersion(`${rootDir}/packages/generator-joplin/generators/app/templates/src/manifest.json`, majorMinorVersion);
}
console.info('Version numbers have been updated. Consider running `npm i` to update the lock files');
}
main().catch((error) => {
console.error('Fatal error:', error);
process.exit(1);
});