1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-08-27 20:29:45 +02:00

Compare commits

..

28 Commits

Author SHA1 Message Date
Laurent Cozic
54f4b41de8 CLI v1.4.3 2020-11-06 21:21:17 +00:00
Laurent Cozic
b33aeeecc5 remove postinstall 2020-11-06 21:19:07 +00:00
Laurent Cozic
7eefac0b54 CLI v1.4.2 2020-11-06 21:10:07 +00:00
Laurent Cozic
3fbec21c2e fix script 2020-11-06 20:59:25 +00:00
Laurent Cozic
d3b2f23983 fix script 2020-11-06 20:54:19 +00:00
Laurent Cozic
9956b6612d Added release script 2020-11-06 20:53:40 +00:00
Laurent Cozic
bc3f6dd51a fix cli release script 2020-11-06 20:50:32 +00:00
Laurent Cozic
7b0122a8db Merge branch 'dev' of github.com:laurent22/joplin into dev 2020-11-06 20:41:37 +00:00
Laurent Cozic
7ea4f570cb Tools: Refactor Android release script 2020-11-06 18:45:45 +00:00
Laurent Cozic
1e1f2582c5 Tools: minor tweak 2020-11-06 12:31:30 +00:00
Laurent Cozic
7e2d512fde Merge branch 'release-1.3' into dev 2020-11-06 12:05:15 +00:00
Laurent Cozic
6b75485a1e Electron release v1.3.18 2020-11-06 11:52:20 +00:00
Laurent Cozic
0cfcc00912 Desktop: Fixes #4049: Keymap editor crash when an invalid command is used 2020-11-06 11:51:36 +00:00
Laurent Cozic
496b19b3f1 Electron release v1.3.17 2020-11-06 10:52:06 +00:00
Laurent Cozic
9618591158 Electron release v1.3.16 2020-11-06 10:51:08 +00:00
Laurent Cozic
55b6394bf3 Desktop: Fixes #4051: Random crash when syncing due to undefined tags 2020-11-06 10:50:44 +00:00
Laurent Cozic
4a1dc2c80e Tools: Need to remove spellfix.dll otherwise it gets signed by CI 2020-11-05 21:12:55 +00:00
Laurent Cozic
cb66158b2d Electron release v1.4.6 2020-11-05 21:06:03 +00:00
Laurent Cozic
da04d3ce51 Tools: trying a different timestamp server 2020-11-05 21:05:52 +00:00
Laurent Cozic
bcbce682d5 Electron release v1.4.5 2020-11-05 20:55:01 +00:00
Laurent Cozic
08f7521e1e Tools: Fixing desktop build 2020-11-05 20:54:51 +00:00
Laurent Cozic
3579e7eab5 Electron release v1.4.4 2020-11-05 19:54:13 +00:00
Laurent Cozic
5922c6b216 Tools: Fix Linux build 2020-11-05 19:53:53 +00:00
Laurent Cozic
c558e729bd Electron release v1.4.3 2020-11-05 18:58:12 +00:00
Laurent Cozic
ca80101174 Tools: Fixed desktop app name 2020-11-05 18:56:35 +00:00
Laurent Cozic
6124f483dc Electron release v1.4.2 2020-11-05 18:24:07 +00:00
Laurent Cozic
90d58e4e2b Tools: Fixing Windows CI build 2020-11-05 18:23:54 +00:00
Laurent Cozic
8cd37d602c Tools: Running tests from root does not work well 2020-11-05 17:53:43 +00:00
21 changed files with 152 additions and 42 deletions

View File

@@ -10,7 +10,6 @@ platform:
install:
- ps: Install-Product node 10 x64
- yarn
build_script:
- npm install

View File

@@ -7,11 +7,10 @@
},
"license": "MIT",
"scripts": {
"test": "lerna run test --stream",
"linter": "./node_modules/.bin/eslint --resolve-plugins-relative-to . --fix --quiet --ext .js --ext .jsx --ext .ts --ext .tsx",
"linter-precommit": "./node_modules/.bin/eslint --resolve-plugins-relative-to . --fix --ext .js --ext .jsx --ext .ts --ext .tsx",
"linter-ci": "./node_modules/.bin/eslint --resolve-plugins-relative-to . --quiet --ext .js --ext .jsx --ext .ts --ext .tsx",
"postinstall": "lerna bootstrap && npm run tsc",
"postinstall": "lerna bootstrap --no-ci && npm run tsc",
"tsc": "lerna run tsc --stream --parallel",
"watch": "lerna run watch --stream --parallel",
"updateIgnored": "gulp updateIgnoredTypeScriptBuild",
@@ -23,6 +22,8 @@
"clean": "lerna clean -y && lerna run clean",
"linkChecker": "linkchecker https://joplinapp.org",
"releaseDesktop": "node packages/tools/release-electron.js",
"releaseAndroid": "node packages/tools/release-android.js",
"releaseCli": "node packages/tools/release-cli.js",
"publishAll": "git pull && lerna version --no-git-tag-version && gulp completePublishAll"
},
"husky": {

View File

@@ -10,15 +10,23 @@ const tasks = {
// updateIgnoredTypeScriptBuild: require('../Tools/gulp/tasks/updateIgnoredTypeScriptBuild'),
};
async function makePackagePublic(filePath) {
const text = await fs.readFile(filePath, 'utf8');
const obj = JSON.parse(text);
delete obj.private;
await fs.writeFile(filePath, JSON.stringify(obj), 'utf8');
}
tasks.prepareBuild = {
fn: async () => {
const buildDir = `${__dirname}/build`;
await utils.copyDir(`${__dirname}/app`, buildDir, {
excluded: ['node_modules'],
});
// await utils.copyDir(`${__dirname}/locales-build`, `${buildDir}/locales`);
// await tasks.copyLib.fn();
await utils.copyFile(`${__dirname}/package.json`, `${buildDir}/package.json`);
await makePackagePublic(`${buildDir}/package.json`);
await utils.copyFile(`${__dirname}/package-lock.json`, `${buildDir}/package-lock.json`);
await utils.copyFile(`${__dirname}/gulpfile.js`, `${buildDir}/gulpfile.js`);

View File

@@ -1,6 +1,6 @@
{
"name": "@joplinapp/app-cli",
"version": "1.3.13",
"version": "1.4.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@@ -1,5 +1,5 @@
{
"name": "@joplinapp/app-cli",
"name": "joplin",
"description": "Joplin CLI Client",
"license": "MIT",
"author": "Laurent Cozic",
@@ -7,7 +7,6 @@
"scripts": {
"test": "node node_modules/jasmine/bin/jasmine.js --fail-fast=true --config=tests/support/jasmine.json",
"test-ci": "node node_modules/jasmine/bin/jasmine.js --config=tests/support/jasmine.json",
"postinstall": "npm run build",
"build": "gulp build",
"start": "gulp build -L && node \"build/main.js\" --stack-trace-enabled --log-level debug --env dev",
"tsc": "node node_modules/typescript/bin/tsc --project tsconfig.json",
@@ -31,7 +30,7 @@
],
"owner": "Laurent Cozic"
},
"version": "1.4.0",
"version": "1.4.3",
"bin": {
"joplin": "./main.js"
},

View File

@@ -30,9 +30,14 @@ const getLabel = (commandName: string):string => {
return _('Command palette');
case 'config':
return shim.isMac() ? _('Preferences') : _('Options');
default:
throw new Error(`Command: ${commandName} is unknown`);
}
// We don't throw an error if a command is not found because if for
// example a command is removed from one version to the next, or a
// command is renamed, we still want the keymap editor to work. So in
// that case, we simply display the command name and it is up to the
// user to fix the shortcut if needed.
return `${commandName} (${_('Invalid')})`;
};
export default getLabel;

View File

@@ -1,6 +1,6 @@
{
"name": "@joplinapp/app-desktop",
"version": "1.4.1",
"version": "1.4.6",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@@ -1,13 +1,12 @@
{
"name": "@joplinapp/app-desktop",
"version": "1.4.1",
"version": "1.4.6",
"description": "Joplin for Desktop",
"main": "main.js",
"private": true,
"scripts": {
"dist": "node_modules/.bin/electron-builder",
"build": "gulp build",
"preinstall": "node tools/unlinkReact",
"postinstall": "npm run build && gulp electronRebuild",
"tsc": "node node_modules/typescript/bin/tsc --project tsconfig.json",
"watch": "node node_modules/typescript/bin/tsc --watch --project tsconfig.json",
@@ -34,7 +33,7 @@
"asar": true,
"asarUnpack": "./node_modules/node-notifier/vendor/**",
"win": {
"rfc3161TimeStampServer": "http://sha256timestamp.ws.symantec.com/sha256/timestamp",
"rfc3161TimeStampServer": "http://timestamp.comodoca.com/rfc3161",
"icon": "../../Assets/ImageSources/Joplin.ico",
"target": [
{
@@ -74,7 +73,7 @@
"icon": "../../Assets/macOs.icns"
},
"linux": {
"icon": "../Assets/LinuxIcons",
"icon": "../../Assets/LinuxIcons",
"category": "Office",
"desktop": {
"Icon": "joplin"
@@ -91,6 +90,7 @@
"@types/node": "^14.14.6",
"@types/react": "16.9.55",
"@types/react-redux": "^7.1.9",
"@joplinapp/tools": "^1.0.9",
"ajv": "^6.5.0",
"app-builder-bin": "^1.9.11",
"babel-cli": "^6.26.0",
@@ -112,7 +112,6 @@
"@fortawesome/fontawesome-free": "^5.13.0",
"@joplinapp/lib": "^1.0.9",
"@joplinapp/renderer": "^1.0.17",
"@joplinapp/tools": "^1.0.9",
"async-mutex": "^0.1.3",
"codemirror": "^5.56.0",
"color": "^3.1.2",

View File

@@ -14,9 +14,12 @@ module.exports = async function() {
}
const appId = packageInfo.build.appId;
const productName = packageInfo.build.productName;
delete packageInfo.build;
packageInfo.build = { appId: appId };
packageInfo.name = productName;
let branch;
let hash;

View File

@@ -61,3 +61,4 @@ buck-out/
# Custom
lib/csstojs/
lib/rnInjectedJs/
dist/

View File

@@ -138,8 +138,8 @@ android {
applicationId "net.cozic.joplin"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 2097602
versionName "1.4.0"
versionCode 2097608
versionName "1.4.6"
ndk {
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}

View File

@@ -11,6 +11,7 @@
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit

View File

@@ -12,6 +12,9 @@ const tasks = {
podInstall: {
fn: require('./tools/podInstall'),
},
prepareRelease: {
fn: require('./tools/prepareRelease'),
},
// clean: {
// fn: require('./tools/clean'),
// },

View File

@@ -9,14 +9,12 @@
"build": "gulp build",
"tsc": "node node_modules/typescript/bin/tsc --project tsconfig.json",
"watch": "node node_modules/typescript/bin/tsc --watch --project tsconfig.json",
"preinstall": "node tools/unlinkReact.js",
"clean": "node tools/clean.js",
"postinstall": "jetify && npm run build"
},
"dependencies": {
"@joplinapp/lib": "^1.0.9",
"@joplinapp/renderer": "^1.0.17",
"@joplinapp/tools": "^1.0.9",
"@react-native-community/clipboard": "^1.5.0",
"@react-native-community/datetimepicker": "^3.0.3",
"@react-native-community/geolocation": "^2.0.2",
@@ -60,6 +58,7 @@
"valid-url": "^1.0.9"
},
"devDependencies": {
"@joplinapp/tools": "^1.0.9",
"@babel/core": "^7.11.6",
"@babel/runtime": "^7.11.2",
"@types/node": "^14.14.6",

View File

@@ -0,0 +1,32 @@
// This is to replace the symlinks inside node_modules with the actual packages
// as I assumed it was needed to build the final release. However it seems
// Android `assembleRelease` handles symlinks properly so maybe this is not
// needed after all ¯\_(ツ)_/¯
const { copyDir } = require('@joplinapp/tools/gulp/utils');
const { rootDir, deleteLink, toSystemSlashes } = require('@joplinapp/tools/tool-utils');
const mobileDir = `${rootDir}/packages/app-mobile`;
module.exports = async function() {
const dirsToCopy = [
'fork-htmlparser2',
'fork-sax',
'lib',
'renderer',
];
const destDir = `${mobileDir}/node_modules/@joplinapp`;
for (const dir of dirsToCopy) {
const destPath = toSystemSlashes(`${destDir}/${dir}`);
const sourcePath = toSystemSlashes(`${rootDir}/packages/${dir}`);
console.info(`Copying ${sourcePath} => ${destPath}`);
// TODO: copy symlink so that it can be restored
await deleteLink(destPath);
await copyDir(sourcePath, destPath, {
excluded: ['node_modules'],
});
}
};

View File

@@ -51,6 +51,13 @@ shared.renderFolders = function(props, renderItem) {
shared.renderTags = function(props, renderItem) {
const tags = props.tags.slice();
tags.sort((a, b) => {
// It seems title can sometimes be undefined (perhaps when syncing
// and before tag has been decrypted?). It would be best to find
// the root cause but for now that will do.
//
// Fixes https://github.com/laurent22/joplin/issues/4051
if (!a || !a.title || !b || !b.title) return 0;
// Note: while newly created tags are normalized and lowercase
// imported tags might be any case, so we need to do case-insensitive
// sort.

View File

@@ -1,13 +1,13 @@
const fs = require('fs-extra');
const { execCommand, execCommandWithPipes, githubRelease, githubOauthToken, fileExists } = require('./tool-utils.js');
const { execCommandVerbose, execCommandWithPipes, githubRelease, githubOauthToken, fileExists } = require('./tool-utils.js');
const path = require('path');
const fetch = require('node-fetch');
const uriTemplate = require('uri-template');
const projectName = 'joplin-android';
const rnDir = `${__dirname}/../packages/app-mobile`;
const rnDir = `${__dirname}/../../packages/app-mobile`;
const rootDir = path.dirname(__dirname);
const releaseDir = `${rootDir}/_releases`;
const releaseDir = `${rnDir}/dist`;
// function wslToWinPath(wslPath) {
// const s = wslPath.split('/');
@@ -84,7 +84,8 @@ async function createRelease(name, tagName, version) {
console.info(`Building APK file v${suffix}...`);
let restoreDir = null;
let apkBuildCmd = 'assembleRelease -PbuildDir=build';
let apkBuildCmd = '';
const apkBuildCmdArgs = ['assembleRelease', '-PbuildDir=build'];
if (await fileExists('/mnt/c/Windows/System32/cmd.exe')) {
// In recent versions (of Gradle? React Native?), running gradlew.bat from WSL throws the following error:
@@ -114,14 +115,12 @@ async function createRelease(name, tagName, version) {
apkBuildCmd = '';
} else {
process.chdir(`${rnDir}/android`);
apkBuildCmd = `./gradlew ${apkBuildCmd}`;
apkBuildCmd = './gradlew';
restoreDir = rootDir;
}
if (apkBuildCmd) {
console.info(apkBuildCmd);
const output = await execCommand(apkBuildCmd);
console.info(output);
await execCommandVerbose(apkBuildCmd, apkBuildCmdArgs);
}
if (restoreDir) process.chdir(restoreDir);
@@ -129,11 +128,11 @@ async function createRelease(name, tagName, version) {
await fs.mkdirp(releaseDir);
console.info(`Copying APK to ${apkFilePath}`);
await fs.copy('packages/app-mobile/android/app/build/outputs/apk/release/app-release.apk', apkFilePath);
await fs.copy('app-mobile/android/app/build/outputs/apk/release/app-release.apk', apkFilePath);
if (name === 'main') {
console.info(`Copying APK to ${releaseDir}/joplin-latest.apk`);
await fs.copy('packages/app-mobile/android/app/build/outputs/apk/release/app-release.apk', `${releaseDir}/joplin-latest.apk`);
await fs.copy('app-mobile/android/app/build/outputs/apk/release/app-release.apk', `${releaseDir}/joplin-latest.apk`);
}
for (const filename in originalContents) {
@@ -177,12 +176,12 @@ async function main() {
await fs.writeFile('README.md', readmeContent);
}
console.info(await execCommand('git pull'));
console.info(await execCommand('git add -A'));
console.info(await execCommand(`git commit -m "Android release v${version}"`));
console.info(await execCommand(`git tag ${tagName}`));
console.info(await execCommand('git push'));
console.info(await execCommand('git push --tags'));
await execCommandVerbose('git', ['pull']);
await execCommandVerbose('git', ['add', '-A']);
await execCommandVerbose('git', ['commit', '-m', `Android release v${version}`]);
await execCommandVerbose('git', ['tag', tagName]);
await execCommandVerbose('git', ['push']);
await execCommandVerbose('git', ['push', '--tags']);
console.info(`Creating GitHub release ${tagName}...`);

View File

@@ -1,9 +1,7 @@
const { execCommand } = require('./tool-utils.js');
const path = require('path');
const { execCommand, rootDir } = require('./tool-utils.js');
const fs = require('fs-extra');
const moment = require('moment');
const rootDir = path.dirname(__dirname);
const appDir = `${rootDir}/packages/app-cli`;
const changelogPath = `${rootDir}/readme/changelog_cli.md`;
@@ -59,8 +57,7 @@ async function main() {
await execCommand('git pull');
await execCommand('touch app/main.js');
await execCommand('npm run build');
// await execCommand('cp package.json build/');
await execCommand('cp ../README.md build/');
await execCommand('cp ../../README.md build/');
process.chdir(`${appDir}/build`);

View File

@@ -1,5 +1,7 @@
const fetch = require('node-fetch');
const fs = require('fs-extra');
const execa = require('execa');
const { execSync } = require('child_process');
const toolUtils = {};
@@ -21,6 +23,30 @@ toolUtils.execCommand = function(command) {
});
};
function quotePath(path) {
if (!path) return '';
if (path.indexOf('"') < 0 && path.indexOf(' ') < 0) return path;
path = path.replace(/"/, '\\"');
return `"${path}"`;
}
function commandToString(commandName, args = []) {
const output = [quotePath(commandName)];
for (const arg of args) {
output.push(quotePath(arg));
}
return output.join(' ');
}
toolUtils.execCommandVerbose = function(commandName, args = []) {
console.info(`> ${commandToString(commandName, args)}`);
const promise = execa(commandName, args);
promise.stdout.pipe(process.stdout);
return promise;
};
toolUtils.execCommandWithPipes = function(executable, args) {
const spawn = require('child_process').spawn;
@@ -41,6 +67,28 @@ toolUtils.execCommandWithPipes = function(executable, args) {
});
};
toolUtils.toSystemSlashes = function(path) {
const os = process.platform;
if (os === 'win32') return path.replace(/\//g, '\\');
return path.replace(/\\/g, '/');
};
toolUtils.deleteLink = async function(path) {
if (toolUtils.isWindows()) {
try {
execSync(`rmdir "${toolUtils.toSystemSlashes(path)}"`, { stdio: 'pipe' });
} catch (error) {
// console.info('Error: ' + error.message);
}
} else {
try {
fs.unlinkSync(toolUtils.toSystemSlashes(path));
} catch (error) {
// ignore
}
}
};
toolUtils.credentialDir = async function() {
const username = require('os').userInfo().username;

View File

@@ -1,5 +1,14 @@
# Joplin terminal app changelog
## [cli-v1.4.3](https://github.com/laurent22/joplin/releases/tag/cli-v1.4.3) - 2020-11-06T21:19:29Z
IMPORTANT: If you use the web API, please note that there are a few breaking changes in this release. See here for more information: https://github.com/laurent22/joplin/pull/3983#issue-509624899
- New: API: Adds ability to paginate data (#3983)
- Fixed: Display proper error message when decryption worker cannot be started (#4000)
- Fixed: Fixed OneDrive authentication
- Fixed: Fixed sync issue when importing ENEX files that contain new line characters in the source URL attribute (#3955)
## [cli-v1.3.3](https://github.com/laurent22/joplin/releases/tag/cli-v1.3.3) - 2020-10-23T16:00:38Z
- Improved: Added support for a custom S3 URL (#3921) (#3691 by [@aaron](https://github.com/aaron))