Skip to content

Commit 7542c0e

Browse files
ricardochlSplaktar
authored andcommitted
feat: add build script
1 parent 51fc073 commit 7542c0e

File tree

4 files changed

+109
-0
lines changed

4 files changed

+109
-0
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"main": "index.js",
66
"scripts": {
77
"test": "echo \"Error: no test specified\" && exit 1",
8+
"build": "zx tools/build.mjs",
89
"update-origin": "zx tools/update-origin.mjs"
910
},
1011
"keywords": [],

tools/build.mjs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/usr/bin/env zx
2+
3+
import { chalk } from 'zx';
4+
import { buildADEV, copyLocalizedFiles, resetBuildDir } from './lib/common.mjs';
5+
6+
try {
7+
console.log(chalk.green('==== setup ===='));
8+
await setup();
9+
console.log(chalk.green('==== preBuild ===='));
10+
await preBuild();
11+
console.log(chalk.green('==== build ===='));
12+
await build();
13+
} catch (e) {
14+
console.error(chalk.red(e));
15+
process.exit(1);
16+
}
17+
18+
async function setup() {
19+
// always reset build dir
20+
await resetBuildDir({ init: true });
21+
}
22+
23+
async function preBuild() {
24+
// copy translated files
25+
console.log(chalk.cyan('Copy localized files...'));
26+
await copyLocalizedFiles();
27+
}
28+
29+
async function build() {
30+
await buildADEV();
31+
}

tools/lib/common.mjs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { resolve } from 'node:path';
2+
import { $, cd, chalk, glob, within } from 'zx';
3+
import { initDir, cpRf, exists } from './fileutiles.mjs';
4+
5+
const rootDir = resolve(__dirname, '../');
6+
const adevEsDir = resolve(rootDir, 'adev-es');
7+
const outDir = resolve(rootDir, 'build');
8+
9+
export async function resetBuildDir({ init = false }) {
10+
if (init) {
11+
console.log(chalk.cyan('synchronizing git submodule...'));
12+
await syncSubmodule();
13+
}
14+
15+
const buildDirExists = await exists(outDir);
16+
if (init || !buildDirExists) {
17+
console.log(chalk.cyan('removing build directory...'));
18+
await initDir(outDir);
19+
console.log(chalk.cyan('copying origin files to build directory...'));
20+
await cpRf(resolve(rootDir, 'origin'), outDir);
21+
}
22+
}
23+
24+
export async function buildADEV() {
25+
await within(async () => {
26+
cd(`${outDir}/adev`);
27+
await $`yarn install`;
28+
await $`yarn build`;
29+
});
30+
}
31+
32+
/**
33+
* glob patterns of localized files in adev-es
34+
*/
35+
const localizedFilePatterns = ['**/*', '!**/*.en.*'];
36+
37+
export async function copyLocalizedFiles() {
38+
const esFiles = await glob(localizedFilePatterns, {
39+
cwd: adevEsDir,
40+
});
41+
for (const file of esFiles) {
42+
const src = resolve(adevEsDir, file);
43+
const dest = resolve(outDir, 'adev', file);
44+
await cpRf(src, dest);
45+
}
46+
}
47+
48+
export async function syncSubmodule() {
49+
await within(async () => {
50+
cd(rootDir);
51+
await $`git submodule sync`;
52+
await $`git submodule update --init`;
53+
});
54+
}
55+

tools/lib/fileutiles.mjs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { access, cp, mkdir, rm } from 'node:fs/promises';
2+
3+
export async function rmrf(path) {
4+
try {
5+
await rm(path, { recursive: true });
6+
} catch {}
7+
}
8+
9+
export async function exists(path) {
10+
return await access(path)
11+
.then(() => true)
12+
.catch(() => false);
13+
}
14+
15+
export async function initDir(path) {
16+
await rmrf(path);
17+
await mkdir(path, { recursive: true });
18+
}
19+
20+
export async function cpRf(src, dest) {
21+
await cp(src, dest, { recursive: true, force: true });
22+
}

0 commit comments

Comments
 (0)