Skip to content

Commit ab0ef14

Browse files
committed
installPackage script
1 parent 7732f76 commit ab0ef14

8 files changed

Lines changed: 44 additions & 15 deletions

File tree

.config/appveyor/main.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,3 @@ test_script:
1818
devcontainer up --workspace-folder .
1919
2020
devcontainer exec --workspace-folder . pnpm lint
21-
22-
devcontainer exec --workspace-folder . pnpm test

.config/appveyor/publish.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ branches:
55
skip_non_tags: true
66
image: Ubuntu2004
77
environment:
8-
CR_PAT: CR_PAT
8+
NPM_TOKEN: NPM_TOKEN
99
build_script:
1010
- sh: >-
1111
set -e
@@ -19,4 +19,4 @@ deploy_script:
1919
2020
devcontainer up --workspace-folder .
2121
22-
devcontainer exec --workspace-folder . --remote-env CR_PAT=${CR_PAT} pnpm run publish
22+
devcontainer exec --workspace-folder . --remote-env NPM_TOKEN=${NPM_TOKEN} pnpm run publish

create-devcontainer/configs/base/workspace.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
1-
import dedent from "dedent";
21
import type { PackageJson } from "type-fest";
32

43
import { stringify } from "../../formatting.js";
54
import { getNpmLatestDependencies } from "../../versions/npm.js";
65

76
export interface BaseWorkspaceConfigs {
8-
"pnpm-workspace.yaml": string;
97
"package.json": string;
108
}
119

1210
export const createBaseWorkspaceConfigs = async (): Promise<BaseWorkspaceConfigs> => {
1311
const dependencies = await getNpmLatestDependencies(["cspell", "prettier", "prettier-plugin-packagejson"]);
1412
return {
15-
"pnpm-workspace.yaml": dedent`
16-
packages:
17-
- "./**"
18-
`,
1913
"package.json": stringify({
2014
private: true,
2115
type: "module",

create-devcontainer/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { mkdir, writeFile } from "node:fs/promises";
1+
import { mkdir } from "node:fs/promises";
22
import path from "node:path";
33

44
import { Argument, program } from "@commander-js/extra-typings";
5+
import writeFileAtomic from "write-file-atomic";
56

67
import { createBaseConfigs } from "./configs/base/index.js";
78
import { createTypeScriptConfigs } from "./configs/typescript/index.js";
@@ -33,7 +34,7 @@ program
3334
for (const configFile of configFiles) {
3435
const filePath = path.resolve(currentPath, configFile.path);
3536
await mkdir(path.dirname(filePath), { recursive: true });
36-
await writeFile(filePath, configFile.content);
37+
await writeFileAtomic(filePath, configFile.content);
3738
}
3839
});
3940

create-devcontainer/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@
2323
"prettier": "^3.2.5",
2424
"prettier-plugin-packagejson": "^2.5.0",
2525
"semver": "^7.6.2",
26-
"type-fest": "^4.18.2"
26+
"type-fest": "^4.18.2",
27+
"write-file-atomic": "^5.0.1"
2728
},
2829
"devDependencies": {
2930
"@types/node": "^20.12.12",
3031
"@types/pacote": "^11.1.8",
31-
"@types/semver": "^7.5.8"
32+
"@types/semver": "^7.5.8",
33+
"@types/write-file-atomic": "^4.0.3"
3234
},
3335
"engines": {
3436
"node": ">=20"

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"scripts": {
66
"build": "vite-node scripts/build.ts",
77
"fix": "vite-node scripts/fix.ts",
8+
"installPackage": "vite-node scripts/installPackage.ts",
89
"lint": "vite-node scripts/lint.ts",
910
"publish": "vite-node scripts/publish.ts",
1011
"restore": "vite-node scripts/restore.ts",

scripts/installPackage.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
2+
import { cp, mkdir, rm, writeFile } from "node:fs/promises";
3+
import path from "node:path";
4+
5+
import { $ } from "execa";
6+
7+
import pkg from "@/create-devcontainer/package.json";
8+
import { projectRoot } from "@/scripts/project.js";
9+
import { build } from "@/scripts/tasks/build.js";
10+
11+
const XDG_DATA_HOME = process.env.XDG_DATA_HOME;
12+
if (!XDG_DATA_HOME) {
13+
throw new Error("XDG_DATA_HOME is not set");
14+
}
15+
16+
await build();
17+
18+
// Copy the dist folder to a temporary location
19+
const tempPath = `/tmp/${pkg.name}`;
20+
await rm(tempPath, { recursive: true, force: true });
21+
await mkdir(tempPath, { recursive: true });
22+
await cp(path.resolve(projectRoot, pkg.name, "dist"), tempPath, { recursive: true });
23+
await writeFile(path.resolve(tempPath, "pnpm-workspace.yaml"), "");
24+
25+
// Install the package globally after pnpm deploy.
26+
process.env.NODE_ENV = "production";
27+
const installPath = path.resolve(XDG_DATA_HOME, pkg.name);
28+
await rm(installPath, { recursive: true, force: true });
29+
const $$ = $({ stdio: "inherit", verbose: "full", cwd: tempPath });
30+
await $$`pnpm deploy --filter=${pkg.name} --prod ${installPath}`;
31+
await $$`npm uninstall --global ${pkg.name}`;
32+
await $$`npm install --global ${installPath}`;
33+
await $$`rm --recursive ${tempPath}`;

scripts/tasks/build.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ export const build = async () => {
4343
await compile();
4444
await insertShebang(path.resolve(dist, "index.js"));
4545
await writePackageJson();
46-
await cp(path.resolve(projectRoot, pkg.name, "templates"), dist, { recursive: true });
46+
await cp(path.resolve(projectRoot, pkg.name, "templates"), path.resolve(dist, "templates"), { recursive: true });
4747
await copyFile(path.resolve(projectRoot, "ReadMe.md"), path.resolve(dist, "ReadMe.md"));
4848
};

0 commit comments

Comments
 (0)