aboutsummaryrefslogtreecommitdiff
path: root/etc/scripts/generate_site_template_screenshots.js
diff options
context:
space:
mode:
authorJeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com>2022-06-12 08:09:36 -0400
committerJeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com>2022-06-12 08:09:36 -0400
commit306acc0f67890184cffbc65a0a383f01187c0155 (patch)
tree788aa4977efeb7f187641bd7cff34dc919e712df /etc/scripts/generate_site_template_screenshots.js
parent7957fb514666d11d9dadc746047f71e87791523e (diff)
downloadcompiler-explorer-gh-3307.tar.gz
compiler-explorer-gh-3307.zip
Improvements to screenshot generation and site template configgh-3307
Diffstat (limited to 'etc/scripts/generate_site_template_screenshots.js')
-rw-r--r--etc/scripts/generate_site_template_screenshots.js21
1 files changed, 18 insertions, 3 deletions
diff --git a/etc/scripts/generate_site_template_screenshots.js b/etc/scripts/generate_site_template_screenshots.js
index 28d24e64d..127c9e67e 100644
--- a/etc/scripts/generate_site_template_screenshots.js
+++ b/etc/scripts/generate_site_template_screenshots.js
@@ -77,6 +77,19 @@ function partition(array, filter) {
return [pass, fail];
}
+async function PromisePoolExecutor(jobs, max_concurrency) {
+ async function worker(iterator) {
+ for(const [_, job] of iterator) {
+ await job();
+ }
+ }
+ const iterator = jobs.entries();
+ const workers = new Array(max_concurrency).fill(iterator).map(worker);
+ await Promise.allSettled(workers);
+}
+
+// end utils
+
async function generate_screenshot(url, output_path, settings) {
const browser = await puppeteer.launch({
dumpio: true,
@@ -111,6 +124,7 @@ async function generate_screenshot(url, output_path, settings) {
.split("\n")
.filter(l => l !== "")
.map(splitProperty)
+ .map(pair => [pair[0], pair[1].replace(/^https:\/\/godbolt.org\/#/, "")])
.map(([name, data]) => [!name.startsWith("meta.") ? name.replaceAll(/[^a-z]/gi, "") : name, data]),
([name, _]) => name.startsWith("meta.")
);
@@ -128,12 +142,12 @@ async function generate_screenshot(url, output_path, settings) {
if(!fs.existsSync(output_dir)) {
fs.mkdirSync(output_dir, { recursive: true });
}
- const promises = [];
+ const jobs = [];
for(const [name, data] of templates) {
for(const [theme, colourScheme] of themes) {
const path = `${output_dir}/${name}.${theme}.png`;
if(!fs.existsSync(path)) {
- promises.push(generate_screenshot(
+ jobs.push(() => generate_screenshot(
`${godbolt}/e#${data}`,
path,
Object.assign(Object.assign({}, defaultSettings), {theme, colourScheme})
@@ -141,5 +155,6 @@ async function generate_screenshot(url, output_path, settings) {
}
}
}
- await Promise.all(promises);
+ // don't launch too many chrome instances concurrently
+ await PromisePoolExecutor(jobs, 4);
})();