8000 fix: copy when punctuation marks in sketch path by kittaakos · Pull Request #2045 · arduino/arduino-ide · GitHub
[go: up one dir, main page]

Skip to content

fix: copy when punctuation marks in sketch path #2045

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
build: use execa for the packager
Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
  • Loading branch information
Akos Kitta committed May 3, 2023
commit 21f3858a1fe015f9e02eefa4fa81cd11b2bc8f95
24 changes: 12 additions & 12 deletions electron/packager/config.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
//@ts-check

const fs = require('fs');
const path = require('path');
const fs = require('node:fs');
const path = require('node:path');
const semver = require('semver');
const merge = require('deepmerge');
const dateFormat = require('dateformat');
const { isNightly, isRelease, git } = require('./utils');

function artifactName() {
async function artifactName() {
const { platform, arch } = process;
const id = (() => {
const id = await (() => {
if (isRelease) {
return getVersion();
} else if (isNightly) {
Expand Down Expand Up @@ -69,8 +69,8 @@ function electronPlatform() {
}
}

function getVersion() {
const repositoryRootPath = git('rev-parse --show-toplevel');
async function getVersion() {
const repositoryRootPath = await git(['rev-parse', '--show-toplevel']);
let version = JSON.parse(
fs.readFileSync(path.join(repositoryRootPath, 'package.json'), {
encoding: 'utf8',
Expand All @@ -85,7 +85,7 @@ function getVersion() {
if (isNightly) {
version = `${version}-nightly-${timestamp()}`;
} else {
version = `${version}-snapshot-${currentCommitish()}`;
version = `${version}-snapshot-${await currentCommitish()}`;
}
if (!semver.valid(version)) {
throw new Error(`Invalid patched version: '${version}'.`);
Expand All @@ -109,18 +109,18 @@ function timestamp() {
return dateFormat(new Date(), 'yyyymmdd');
}

function currentCommitish() {
return git('rev-parse --short HEAD');
async function currentCommitish() {
return git(['rev-parse', '--short', 'HEAD']);
}

// function currentBranch() {
// return git('rev-parse --abbrev-ref HEAD');
// }

function generateTemplate(buildDate) {
async function generateTemplate(buildDate) {
// do `export PUBLISH=true yarn package` if you want to mimic CI build locally.
// const electronPublish = release || (isCI && currentBranch() === 'main') || process.env.PUBLISH === 'true';
const version = getVersion();
const version = await getVersion();
const productName = 'Arduino IDE';
const name = 'arduino-ide';
const updateChannel = getChannel();
Expand All @@ -139,7 +139,7 @@ function generateTemplate(buildDate) {
productName,
appId: 'cc.arduino.IDE2',
[electronPlatform()]: {
artifactName: artifactName(),
artifactName: await artifactName(),
},
},
};
Expand Down
108 changes: 68 additions & 40 deletions electron/packager/index.js
< 6D4E td class="blob-code blob-code-addition js-file-line"> 'yarn',
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
throw reason;
});

const fs = require('fs');
const join = require('path').join;
const fs = require('node:fs');
const join = require('node:path').join;
const shell = require('shelljs');
const { echo, cp, mkdir, mv, rm } = shell;
shell.config.fatal = true;
Expand All @@ -32,7 +32,7 @@
// https://github.com/shelljs/shelljs/issues/1024#issuecomment-1001552543
shell.env.NODE_OPTIONS = '--max_old_space_size=4096'; // Increase heap size for the CI
shell.env.PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = 'true'; // Skip download and avoid `ERROR: Failed to download Chromium`.
const template = require('./config').generateTemplate(
const template = await require('./config').generateTemplate(
new Date().toISOString()
);
const utils = require('./utils');
Expand Down Expand Up @@ -74,12 +74,14 @@
// Clean up the `./electron/build/resources` folder with Git.
// To avoid file duplication between bundled app and dev mode, some files are copied from `./electron-app` to `./electron/build` folder.
const foldersToSyncFromDev = ['resources'];
foldersToSyncFromDev.forEach((filename) =>
shell.exec(
`git -C ${join(repoRoot, 'electron', 'build', filename)} clean -ffxdq`,
{
async: false,
}
await Promise.all(
foldersToSyncFromDev.map((filename) =>
exec('git', [
'-C',
join(repoRoot, 'electron', 'build', filename),
'clean',
'-ffxdq',
])
)
);

Expand All @@ -104,15 +106,20 @@
// Build and test the extensions |
//-------------------------------+
for (const extension of extensions) {
exec(
`yarn --network-timeout 1000000 --cwd ${join(repoRoot, extension)}`,
await exec(
'yarn',
['--network-timeout', '1000000', '--cwd', join(repoRoot, extension)],
`Building and testing ${extension}`
);
exec(
`yarn --network-timeout 1000000 --cwd ${join(
repoRoot,
extension
)} test:slow`,
await exec(
'yarn',
[
'--network-timeout',
'1000000',
'--cwd',
join(repoRoot, extension),
'test:slow',
],
`Executing slow tests ${extension}`
);
}
Expand Down Expand Up @@ -142,11 +149,21 @@
for (const extension of extensions) {
const packageJsonPath = join(repoRoot, extension, 'package.json');
const versionToRestore = readJson(packageJsonPath).version;
exec(
`yarn --network-timeout 1000000 --cwd ${join(
repoRoot,
extension
)} publish --ignore-scripts --new-version ${version} --no-git-tag-version --registry http://localhost:4873`,
await exec(
'yarn',
[
'--network-timeout',
'1000000',
'--cwd',
join(repoRoot, extension),
'publish',
'--ignore-scripts',
'--new-version',
version,
'--no-git-tag-version',
'--registry',
'http://localhost:4873',
],
`Publishing ${extension}@${version} to the private npm registry`
);
// Publishing will change the version number, this should be reverted up after the build.
Expand Down Expand Up @@ -250,20 +267,26 @@ ${fs
//-------------------------------------------------------------------------------------------+
// Install all private and public dependencies for the electron application and build Theia. |
//-------------------------------------------------------------------------------------------+
exec(
`yarn --network-timeout 1000000 --cwd ${join(
repoRoot,
'electron',
'build'
)} --registry http://localhost:4873`,
await exec(
'yarn',
[
'--network-timeout',
'1000000',
'--cwd',
join(repoRoot, 'electron', 'build'),
'--registry',
'http://localhost:4873',
],
'Installing dependencies'
);
exec(
`yarn --cwd ${join(repoRoot, 'electron', 'build')} build`,
await exec(
'yarn',
['--cwd', join(repoRoot, 'electron', 'build'), 'build'],
`Building the ${productName} application`
);
exec(
`yarn --cwd ${join(repoRoot, 'electron', 'build')} rebuild`,
await exec(
'yarn',
['--cwd', join(repoRoot, 'electron', 'build'), 'rebuild'],
'Rebuilding native dependencies'
);

Expand All @@ -284,8 +307,9 @@ ${fs
//-----------------------------------+
// Package the electron application. |
//-----------------------------------+
exec(
`yarn --cwd ${join(repoRoot, 'electron', 'build')} package`,
await exec(
['--cwd', join(repoRoot, 'electron', 'build'), 'package'],
`Packaging the ${productName} application`
);

Expand Down Expand Up @@ -317,15 +341,19 @@ ${fs
//--------+
// Utils. |
//--------+
function exec(command, toEcho) {
/**
* @param {string} command
* @param {readonly string[]} args
*/
async function exec(command, args, toEcho = '') {
if (toEcho) {
echo(`⏱️ >>> ${toEcho}...`);
}
const { stdout } = shell.exec(command);
const stdout = await utils.exec(command, args);
if (toEcho) {
echo(`👌 <<< ${toEcho}.`);
}
return stdout;
return stdout.trim();
}

async function copyFilesToBuildArtifacts() {
Expand Down Expand Up @@ -437,13 +465,13 @@ ${fs
}

/**
* @param {import('fs').PathLike} file
* @param {import('node:fs').PathLike} file
* @param {string|undefined} [algorithm="sha512"]
* @param {BufferEncoding|undefined} [encoding="base64"]
* @param {object|undefined} [options]
*/
function hashFile(file, algorithm = 'sha512', encoding = 'base64', options) {
const crypto = require('crypto');
const crypto = require('node:crypto');
return new Promise((resolve, reject) => {
const hash = crypto.createHash(algorithm);
hash.on('error', reject).setEncoding(encoding);
Expand Down Expand Up @@ -500,11 +528,11 @@ ${fs

/**
* @param {string} configPath
* @return {Promise<import('child_process').ChildProcess>}
* @return {Promise<import('node:child_process').ChildProcess>}
*/
function startNpmRegistry(configPath) {
return new Promise((resolve, reject) => {
const fork = require('child_process').fork(
const fork = require('node:child_process').fork(
require.resolve('verdaccio/bin/verdaccio'),
['-c', configPath]
);
Expand Down
7 changes: 2 additions & 5 deletions electron/packager/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,11 @@
"author": "Arduino SA",
"license": "AGPL-3.0-or-later",
"dependencies": {
"@types/file-type": "^10.9.1",
"@types/temp": "^0.8.32",
"7zip-min": "^1.1.1",
"chai": "^4.2.0",
"crypto": "^1.0.1",
"dateformat": "^3.0.3",
"deepmerge": "2.01",
"execa": "^7.1.1",
"file-type": "^14.1.4",
"glob": "^7.1.6",
"is-ci": "^2.0.0",
Expand All @@ -29,8 +27,7 @@
"sinon": "^9.0.1",
"temp": "^0.9.1",
"verdaccio": "6-next",
"yaml": "^1.10.2",
"yargs": "^12.0.5"
"yaml": "^1.10.2"
},
"engines": {
"node": ">=16.0.0 <17"
Expand Down
4 changes: 2 additions & 2 deletions electron/packager/test/utils.test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const fs = require('fs');
const path = require('path');
const fs = require('node:fs');
const path = require('node:path');
const expect = require('chai').expect;
const track = require('temp').track();
const unpack = require('../utils').unpack;
Expand Down
32 changes: 24 additions & 8 deletions electron/packager/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,20 +125,21 @@ const isElectronPublish = false; // TODO: support auto-updates
const isNightly = process.env.IS_NIGHTLY === 'true';
const isRelease = process.env.IS_RELEASE === 'true';

function git(command) {
/**
* @param {readonly string[]} args
*/
async function git(args) {
try {
const gitPath = shell.which('git');
const git = shell.which('git');
const error = shell.error();
if (error) {
throw new Error(error);
}
const { stderr, stdout } = shell.exec(`"${gitPath}" ${command}`, {
silent: true,
});
if (stderr) {
throw new Error(stderr.toString().trim());
if (!git) {
throw new Error("Could not find 'git' on the $PATH");
}
return stdout.toString().trim();
const stdout = await exec(git.toString(), args);
return stdout;
} catch (e) {
throw e;
}
Expand Down Expand Up @@ -168,6 +169,20 @@ function getChannelFile(platform) {
);
}

/**
* @param {string} command
* @param {readonly string[]} args
*/
async function exec(command, args) {
const execa = await import('execa');
const promise = execa.execa(command, args);
if (promise.pipeStdout) {
promise.pipeStdout(process.stdout);
}
const { stdout } = await promise;
return stdout;
}

module.exports = {
adjustArchiveStructure,
isZip,
Expand All @@ -177,4 +192,5 @@ module.exports = {
isElectronPublish,
git,
getChannelFile,
exec,
};
Loading
0