forked from AskingQuestions/Shadeup
-
Notifications
You must be signed in to change notification settings - Fork 0
/
archive.js
113 lines (99 loc) · 2.57 KB
/
archive.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import path from "path";
import fs from "fs";
import { cp, rm, rmdir, unlink } from "fs/promises";
import archiver from "archiver";
import { CreateModule } from "./cli.js";
// Generates all examples and zips them for distribution on the https://unreal.shadeup.dev site
import * as url from "url";
const __filename = url.fileURLToPath(import.meta.url);
const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
import templates from "./src/types/template.js";
(async () => {
for (let template of templates) {
let examples = template.examples();
for (let example of examples) {
let outDirPlugin = path.resolve(
"./",
"archives",
template.name + "_Plugin"
);
await cp(
path.join(__dirname, "./src/plugin_template"),
outDirPlugin,
{ recursive: true }
);
let moduleDir = await CreateModule(
{
name: "ShadeupExamplePlugin",
dir: outDirPlugin,
file: path.join(
outDirPlugin,
"ShadeupExamplePlugin.uplugin"
),
},
template.name
);
let inst = new template(
{
name: "archive",
dir: path.join(__dirname, "archives"),
},
{
dir: outDirPlugin,
name: template.name + "_Plugin",
},
{
file: path.join(moduleDir, template.name + ".Build.cs"),
dir: moduleDir,
name: template.name,
}
);
inst.example = example[0];
inst.answers = { name: "Example" + template.name };
try {
let mdFile = await inst.generate();
} catch (e) {
continue;
}
await unlink(
path.join(outDirPlugin, "./ShadeupExamplePlugin.uplugin.back")
);
await new Promise((res) => {
const output = fs.createWriteStream(
path.resolve(
"./",
"archives",
template.name + "_" + example[0] + ".zip"
)
);
const archive = archiver("zip", {
zlib: { level: 9 },
});
output.on("close", function () {
res();
});
archive.on("warning", function (err) {
if (err.code === "ENOENT") {
console.warn(err);
} else {
throw err;
}
});
archive.on("error", function (err) {
throw err;
});
archive.pipe(output);
archive.append(
`The folder named \`${template.name}_Plugin\` is an Unreal Engine plugin that can be dropped into any UE5 c++ project.
1. Extract the plugin folder to \`YourProject/Plugins/\` directory.
2. Recompile the project.`,
{ name: "readme.md" }
);
archive.directory(outDirPlugin, template.name + "_Plugin");
archive.finalize();
});
await rm(outDirPlugin, { recursive: true });
console.log("Archived " + inst.answers.name);
}
}
})();