Content-addressed version deploy system for Diffuse
elements.diffuse.sh
1import lume from "lume/mod.ts";
2
3import date from "lume/plugins/date.ts";
4import postcss from "lume/plugins/postcss.ts";
5
6const site = lume({
7 dest: "./dist",
8 src: "./site",
9 server: {
10 debugBar: false,
11 },
12});
13
14export default site;
15
16site.use(date());
17site.use(postcss());
18
19site.add([".css"]);
20site.add([".woff2"]);
21
22site.add("favicons/");
23
24site.add("images/background/7.jpg");
25site.add("images/maxx-gong-yER6L9sRPXM-unsplash.jpg");
26site.add("images/diffuse-current.svg");
27
28// DIFFUSE DEPENDENCIES
29
30site.remote(
31 "_components/diffuse/",
32 import.meta.resolve("./diffuse/src/_components/diffuse/"),
33 ["**/*"],
34);
35
36site.remote(
37 "_includes/diffuse/",
38 import.meta.resolve("./diffuse/src/_includes/"),
39 ["**/*"],
40);
41
42site.remote(
43 "favicons/",
44 import.meta.resolve("./diffuse/src/favicons/"),
45 ["**/*"],
46);
47
48site.remote(
49 "fonts/",
50 import.meta.resolve("./diffuse/src/fonts/"),
51 ["**/*"],
52);
53
54site.remote(
55 "images/",
56 import.meta.resolve("./diffuse/src/images/"),
57 ["**/*"],
58);
59
60site.remote(
61 "styles/",
62 import.meta.resolve("./diffuse/src/styles/"),
63 ["**/*"],
64);
65
66// PHOSPHOR ICONS
67
68function phosphor(path: string) {
69 site.remoteFile(
70 `styles/vendor/phosphor/${path}`,
71 import.meta.resolve(
72 `./diffuse/node_modules/@phosphor-icons/web/src/${path}`,
73 ),
74 );
75
76 site.add(`styles/vendor/phosphor/${path}`);
77}
78
79phosphor("fill/style.css");
80phosphor("fill/Phosphor-Fill.svg");
81phosphor("fill/Phosphor-Fill.ttf");
82phosphor("fill/Phosphor-Fill.woff");
83phosphor("fill/Phosphor-Fill.woff2");
84
85// Post-build copies
86site.addEventListener("afterBuild", async () => {
87 const faviconsDir = site.dest("favicons");
88
89 for await (const entry of Deno.readDir(faviconsDir)) {
90 if (entry.isFile) {
91 await Deno.copyFile(
92 `${faviconsDir}/${entry.name}`,
93 site.dest(entry.name),
94 );
95 }
96 }
97
98 await Deno.remove(faviconsDir, { recursive: true });
99});