Skip to content

Commit

Permalink
fix(ci): Update ci to work with last version of puppeteer
Browse files Browse the repository at this point in the history
  • Loading branch information
rolljee committed Nov 4, 2024
1 parent a923912 commit ad8e533
Show file tree
Hide file tree
Showing 7 changed files with 193 additions and 82 deletions.
76 changes: 76 additions & 0 deletions .ci/doc/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
FROM node:20-bookworm-slim

USER root

RUN mkdir -p /home/node/.cache/puppeteer

# Puppeteer Chrome headless dependencies
RUN apt-get update && apt-get install -y \
ca-certificates \
curl \
fonts-liberation \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libc6 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libexpat1 \
libfontconfig1 \
libgbm1 \
libgcc1 \
libglib2.0-0 \
libgtk-3-0 \
libnspr4 \
libnss3 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libstdc++6 \
libx11-6 \
libx11-xcb1 \
libxcb1 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrandr2 \
libxrender1 \
libxss1 \
libxtst6 \
lsb-release \
wget \
xdg-utils \
&& rm -rf /var/lib/apt/lists/*

# Install all dependencies needed for both services
RUN npm install -g \
puppeteer \
eslint@8.38.0 \
eslint-plugin-html \
eslint-plugin-import \
eslint-plugin-node \
eslint-plugin-promise \
eslint-plugin-standard \
babel-loader \
@babel/core \
html-webpack-plugin \
webpack \
webpack-cli

RUN usermod -a -G video,audio node

# Create working directories for snippets
RUN mkdir -p /var/snippets/web && \
mkdir -p /var/snippets/webpack

# Set proper permissions
RUN chown -R node:node /var/snippets/
RUN chown -R node:node /home/node/.cache/puppeteer

USER node

# Keep container running
CMD ["tail", "-f", "/dev/null"]
34 changes: 17 additions & 17 deletions .ci/doc/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,40 @@ snippets:
templates: /mnt/.ci/doc/templates

runners:
default: node
default: web

node:
service: doc-runner-node
path: /var/snippets/node
lint:
global: true
cmd: eslint -c /mnt/.ci/doc/eslint.json {{ snippet.dir }}
before: timeout 600 ash -c 'until stat /tmp/runner_ready_to_lint; do sleep 1; done'
run:
cmd: node {{ snippet.source }}
before: timeout 600 ash -c 'until stat /tmp/runner_is_ready && curl -f -s -o /dev/null http://kuzzle:7512/_now; do sleep 1; done'
# node:
# service: doc-runner-node
# path: /var/snippets/node
# lint:
# global: true
# cmd: npx eslint@8.38.0 -c /mnt/.ci/doc/eslint.json {{ snippet.dir }}
# before: timeout 600 ash -c 'until stat /home/node/runner_ready_to_lint; do sleep 1; done'
# run:
# cmd: node {{ snippet.source }}
# before: timeout 600 ash -c 'until stat /home/node/runner_is_ready && curl -f -s -o /dev/null http://kuzzle:7512/_now; do sleep 1; done'

web:
service: doc-runner-web
path: /var/snippets/web
lint:
global: true
cmd: eslint -c /mnt/.ci/doc/eslint.json --parser-options ecmaVersion:12 {{ snippet.dir }}/*.html
before: timeout 600 bash -c 'until stat /tmp/runner_ready_to_lint; do sleep 1; done'
cmd: npx eslint@8.38.0 -c /mnt/.ci/doc/eslint.json --parser-options ecmaVersion:12 {{ snippet.dir }}/*.html
before: timeout 600 bash -c 'until stat /home/node/runner_ready_to_lint; do sleep 1; done'
run:
cmd: node puppeteer.js {{ snippet.dir }}/{{ snippet.source }}
before: timeout 600 bash -c 'until stat /tmp/runner_is_ready && curl -f -s -o /dev/null http://kuzzle:7512/_now; do sleep 1; done'
before: timeout 600 bash -c 'until stat /home/node/runner_is_ready && curl -f -s -o /dev/null http://kuzzle:7512/_now; do sleep 1; done'

webpack:
service: doc-runner-webpack
path: /var/snippets/webpack
lint:
global: true
cmd: eslint -c /mnt/.ci/doc/eslint.json {{ snippet.dir }}
before: timeout 600 bash -c 'until stat /tmp/runner_ready_to_lint; do sleep 1; done'
cmd: npx eslint8.38.0 -c /mnt/.ci/doc/eslint.json {{ snippet.dir }}
before: timeout 600 bash -c 'until stat /home/node/runner_ready_to_lint; do sleep 1; done'
build:
cmd: node webpackBuild.js {{ snippet.dir }}/{{ snippet.source }}
before: timeout 600 bash -c 'until stat /tmp/runner_is_ready; do sleep 1; done'
before: timeout 600 bash -c 'until stat /home/node/runner_is_ready; do sleep 1; done'
run:
cmd: node puppeteer.js /tmp/{{ snippet.name }}/index.html
before: timeout 600 bash -c 'until curl -f -s -o /dev/null http://kuzzle:7512/_now; do sleep 1; done'
71 changes: 21 additions & 50 deletions .ci/doc/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,11 @@ services:
ash -c '
mkdir -p /var/snippets/node;
apk add --no-cache curl;
npm install -g eslint@8.38.0;
cd /var/snippets/node;
npm install \
bluebird \
/mnt/ \
eslint \
eslint@8.38.0 \
eslint-plugin-html \
eslint-plugin-import \
eslint-plugin-node \
Expand All @@ -67,68 +66,40 @@ services:
- snippets:/var/snippets

doc-runner-web:
image: ghcr.io/puppeteer/puppeteer:23.5.1
user: root
build: .
volumes:
- ../..:/mnt
- snippets:/var/snippets
working_dir: /var/snippets/web
command: >
bash -c '
mkdir -p /var/snippets/web;
apt-get update;
apt-get install -y curl;
npm install -g \
eslint@8.38.0;
cd /var/snippets/web;
cp /mnt/.ci/doc/puppeteer.js /var/snippets/web/;
npm install \
/mnt/ \
puppeteer \
eslint \
eslint-plugin-html \
eslint-plugin-import \
eslint-plugin-node \
eslint-plugin-promise \
eslint-plugin-standard;
touch /tmp/runner_ready_to_lint;
touch /tmp/runner_is_ready;
npm install /mnt/;
cp -fr /usr/local/lib/node_modules/* /var/snippets/web/node_modules;
cp -fr /usr/local/lib/node_modules/* /var/snippets/webpack/node_modules;
touch /home/node/runner_ready_to_lint;
touch /home/node/runner_is_ready;
tail -f /dev/null
'
doc-runner-webpack:
build: .
volumes:
- ../..:/mnt
- snippets:/var/snippets

doc-runner-webpack:
image: ghcr.io/puppeteer/puppeteer:23.5.1
user: root
working_dir: /var/snippets/webpack
command: >
bash -c '
mkdir -p /var/snippets/webpack;
apt-get update;
apt-get install -y curl;
npm install -g \
eslint@8.38.0;
cd /var/snippets/webpack;
cp /mnt/.ci/doc/puppeteer.js /var/snippets/webpack/;
cp /mnt/.ci/doc/webpackBuild.js /var/snippets/webpack/;
npm install \
/mnt/ \
puppeteer \
babel-loader \
@babel/core \
html-webpack-plugin \
webpack \
webpack-cli \
eslint \
eslint-plugin-html \
eslint-plugin-import \
eslint-plugin-node \
eslint-plugin-promise \
eslint-plugin-standard;
touch /tmp/runner_ready_to_lint;
touch /tmp/runner_is_ready;
npm install /mnt/;
cp -fr /usr/local/lib/node_modules/* /var/snippets/web/node_modules;
cp -fr /usr/local/lib/node_modules/* /var/snippets/webpack/node_modules;
touch /home/node/runner_ready_to_lint;
touch /home/node/runner_is_ready;
tail -f /dev/null
'
volumes:
- ../..:/mnt
- snippets:/var/snippets
volumes:
snippets:
1 change: 1 addition & 0 deletions .ci/doc/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"version": "1.0.0",
"description": "docs for kuzzle-sdk",
"author": "The Kuzzle Team <support@kuzzle.io>",
"main": "index.js",
"scripts": {},
"dependencies": {},
"devDependencies": {}
Expand Down
50 changes: 36 additions & 14 deletions .ci/doc/puppeteer.js
Original file line number Diff line number Diff line change
@@ -1,38 +1,60 @@
const puppeteer = require('puppeteer');
const puppeteer = require("puppeteer");
const renderedSnippetPath = process.argv[2];

const runInBrowser = async snippetPath => {
const runInBrowser = async (snippetPath) => {
let browser;

try {
// Install Chrome browser first
const { execSync } = require('child_process');
execSync('npx puppeteer browsers install chrome', { stdio: 'inherit' });

browser = await puppeteer.launch({
dumpio: true,
args: ['--no-sandbox']
headless: "new",
// Remove executablePath to use the bundled Chromium
args: [
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-gpu",
"--disable-dev-shm-usage",
],
});
} catch (error) {
console.error(error);
return;
console.error('Browser launch error:', error);
process.exit(1);
}

try {
const page = await browser.newPage();

page.on('error', err => {
console.error(err);
page.on("error", (err) => {
console.error('Page error:', err);
});

page.on('pageerror', err => {
console.error(err);
page.on("pageerror", (err) => {
console.error('Page error:', err);
});

page.on('console', msg => {
console.log('Page console:', msg.text());
});

await page.goto(`file:${snippetPath}`, {
waitUntil: 'networkidle0'
waitUntil: "networkidle0",
timeout: 30000,
});
} catch (error) {
console.error(error);
console.error('Page processing error:', error);
} finally {
await browser.close();
if (browser) {
await browser.close();
}
}
};

runInBrowser(renderedSnippetPath);
if (!renderedSnippetPath) {
console.error('Please provide a path to the snippet file');
process.exit(1);
}

runInBrowser(renderedSnippetPath);
3 changes: 2 additions & 1 deletion .ci/test-docs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ set -ex
here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd "$here"

docker compose -f ./doc/docker-compose.yml build
docker compose -f ./doc/docker-compose.yml pull
docker compose -f ./doc/docker-compose.yml run doc-tests node index
EXIT=$?
docker compose -f ./doc/docker-compose.yml down
# docker compose -f ./doc/docker-compose.yml down
40 changes: 40 additions & 0 deletions src/utils/browser.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit ad8e533

Please sign in to comment.