setup: use listr2

This commit is contained in:
Abdullah Atta
2024-07-20 10:34:40 +05:00
parent ebc01af34a
commit 4c2ad4567c
6 changed files with 390 additions and 1034 deletions

1288
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -37,7 +37,6 @@
},
"devDependencies": {
"@commitlint/cli": "^17.1.1",
"@types/listr": "^0.14.4",
"@types/node": "^18.7.13",
"@typescript-eslint/eslint-plugin": "^5.59.9",
"@typescript-eslint/parser": "^5.59.9",
@@ -59,7 +58,7 @@
"dependencies": {
"eslint-plugin-header": "^3.1.1",
"fdir": "^6.0.2",
"listr": "^0.14.3",
"listr2": "^8.2.3",
"nx": "^17.3.1",
"patch-package": "^7.0.0",
"rxjs": "^7.8.1",

View File

@@ -23,7 +23,7 @@ import path from "path";
import os from "os";
import parser from "yargs-parser";
import { fdir } from "fdir";
import Listr from "listr";
import { Listr } from "listr2";
const args = parser(process.argv, { alias: { scope: ["s"], offline: ["o"] } });
const IS_CI = process.env.CI;
@@ -90,16 +90,16 @@ async function bootstrapPackages(dependencies) {
console.log("> Using", THREADS, "threads.");
const outputs = { stdout: [], stderr: [] };
const tasks = new Listr({
concurrent: THREADS,
exitOnError: false
});
for (const dependency of dependencies) {
tasks.add({
task: () => bootstrapPackage(dependency, outputs),
title: "Bootstrapping " + dependency
});
}
const tasks = new Listr(
dependencies.map((dep) => ({
task: () => bootstrapPackage(dep, outputs),
title: "Bootstrapping " + dep
})),
{
concurrent: THREADS,
exitOnError: false
}
);
console.time("Took");
await tasks.run();

View File

@@ -20,14 +20,14 @@ import glob from "fast-glob";
import fs from "fs/promises";
import { existsSync } from "fs";
import path from "path";
import Listr from "listr";
import { Listr } from "listr2";
const allPackages = await glob(["packages/**", "apps/**", "extensions/**"], {
deep: 1,
onlyDirectories: true
});
const tasks = new Listr({ concurrent: 4, exitOnError: false });
const tasks = new Listr([], { concurrent: 4, exitOnError: false });
for (const pkg of allPackages) {
for (const dirname of ["node_modules", "dist", "build", "out"]) {
const dir = path.join(pkg, dirname);

View File

@@ -26,10 +26,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import { exec } from "child_process";
import path from "path";
import { readFile, writeFile } from "fs/promises";
import { readFile, writeFile, cp, rm } from "fs/promises";
import glob from "fast-glob";
import parser from "yargs-parser";
import Listr from "listr";
import { Listr } from "listr2";
const args = parser(process.argv, { alias: { scope: ["s"], version: ["v"] } });
const allPackages = await glob("packages/*", {
@@ -55,34 +55,53 @@ async function publishPackages(dependencies) {
console.log("> Found", dependencies.length, "dependencies to bootstrap.");
const outputs = { stdout: [], stderr: [] };
const tasks = new Listr({
concurrent: 1,
exitOnError: false
});
for (const dependency of dependencies) {
tasks.add({
task: () => publishPackage(dependency, outputs),
title: "Bootstrapping " + dependency
});
}
await performTasks("bump", dependencies, (dep) => bumpVersion(dep, outputs));
console.time("Took");
await tasks.run();
try {
await performTasks("resolve local packages", dependencies, (dep) =>
resolveLocalPackages(dep)
);
await performTasks("dry run", dependencies, (dep) =>
publishPackage(dep, true)
);
await performTasks("publish", dependencies, (dep) =>
publishPackage(dep, false, outputs)
);
} finally {
await performTasks("unresolve", dependencies, (dep) =>
unresolveLocalPackages(dep)
);
}
process.stdout.write(outputs.stdout.join(""));
process.stderr.write(outputs.stderr.join(""));
console.timeEnd("Took");
}
async function publishPackage(cwd, outputs) {
async function performTasks(title, dependencies, action) {
const tasks = new Listr(
dependencies.map((dep) => ({
task: (_, task) => action(dep, task),
title: title + " " + dep
})),
{
concurrent: 8,
exitOnError: true
}
);
await tasks.run();
if (tasks.errors.length > 0) throw new Error("Failed.");
}
async function bumpVersion(cwd, outputs) {
const bumpCmd = `npm version ${args.version} --no-git-tag-version`;
const publishCmd = `npm publish --access public`;
outputs.stdout.push("> " + cwd);
await execute(bumpCmd, cwd, outputs);
}
async function resolveLocalPackages(cwd) {
const packageJsonPath = path.join(cwd, "package.json");
const packageJson = JSON.parse(await readFile(packageJsonPath, "utf-8"));
@@ -97,25 +116,26 @@ async function publishPackage(cwd, outputs) {
allDependencies.map((deps) => resolveDependencies(cwd, deps))
);
await cp(packageJsonPath, packageJsonPath + ".old");
await writeFile(
packageJsonPath,
JSON.stringify(packageJson, undefined, 2) + "\n"
);
try {
await execute(publishCmd, cwd, outputs);
} finally {
await Promise.all(
allDependencies.map((deps, i) =>
unresolveDependencies(cwd, deps, resolved[i])
)
);
return { resolved, allDependencies, packageJson };
}
await writeFile(
packageJsonPath,
JSON.stringify(packageJson, undefined, 2) + "\n"
);
}
async function unresolveLocalPackages(cwd) {
const packageJsonPath = path.join(cwd, "package.json");
await cp(packageJsonPath + ".old", packageJsonPath, {
force: true
});
await rm(packageJsonPath + ".old", { force: true });
}
async function publishPackage(cwd, dryRun, outputs) {
const publishCmd = `npm publish --access public${dryRun ? " --dry-run" : ""}`;
await execute(publishCmd, cwd, outputs);
}
async function findDependencies(scope) {
@@ -167,17 +187,6 @@ async function resolveDependencies(basePath, dependencies) {
return resolvedDependencies;
}
async function unresolveDependencies(
basePath,
dependencies,
resolvedDependencies
) {
for (const name in dependencies) {
if (!resolvedDependencies[name]) continue;
dependencies[name] = resolvedDependencies[name];
}
}
function execute(cmd, cwd, outputs) {
return new Promise((resolve, reject) =>
exec(
@@ -190,8 +199,10 @@ function execute(cmd, cwd, outputs) {
(err, stdout, stderr) => {
if (err) return reject(err);
outputs.stdout.push(stdout);
outputs.stderr.push(stderr);
if (outputs) {
outputs.stdout.push(stdout);
outputs.stderr.push(stderr);
}
resolve();
}

View File

@@ -26,7 +26,7 @@
},
"../../packages/theme": {
"name": "@notesnook/theme",
"version": "2.0.1",
"version": "2.0.7",
"dev": true,
"license": "GPL-3.0-or-later",
"devDependencies": {