From ed10b989849bcf29510dedfd382552f632cf95af Mon Sep 17 00:00:00 2001 From: Hugo Wood Date: Thu, 20 Jan 2022 15:06:10 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=9A=20restructure=20source=20file=20tr?= =?UTF-8?q?ee=20(#136)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This restructures sources file tree into something hopefully easier to understand: - `src/app`: source code for the web app that embeds training material - `src/build`: source code that builds the previously mentioned app, including the training material - `src/pdf`: source code that builds PDFs from the training material - `src/cli`: source code for the CLI 🚚 Moved files: - `bin/webpack.config*` -> `src/build/` - `bin/sensei.js` -> `src/cli/cli.js` - `src/loaders` -> `src/build/loaders` - `src/{slides,labs,index.*,*.js,assets}` -> `src/app/` 🔥 Removed files: build.sh (not very useful), run.sh (duplicated in readme), Makefile (duplicate of the other two) --- Dockerfile | 2 +- Makefile | 8 ----- README.md | 33 +++++++++++++++--- build.sh | 3 -- package.json | 6 ++-- run.sh | 12 ------- src/{ => app}/assets/Menlo-Regular.ttf | Bin src/{ => app}/assets/Nunito-Bold.ttf | Bin src/{ => app}/assets/OpenSans-Regular.ttf | Bin .../assets/zenika-logo-horizontal-black.png | Bin src/{ => app}/assets/zenika-logo-monogram.png | Bin .../assets/zenika-logo-vertical-black.png | Bin src/{ => app}/content.js | 0 src/{ => app}/global.css | 0 src/{ => app}/index.css | 0 src/{ => app}/index.html | 0 src/{ => app}/index.js | 0 src/{ => app}/labs/content.js | 0 src/{ => app}/labs/labs.css | 0 src/{ => app}/labs/labs.html | 0 src/{ => app}/labs/labs.js | 0 .../slides/assets/Programming-pana.svg | 0 .../slides/assets/Questions-pana.svg | 0 src/{ => app}/slides/assets/Webinar-pana.svg | 0 .../slides/assets/zenika-gradient-bar.png | Bin src/{ => app}/slides/content.js | 0 src/{ => app}/slides/slides-pdf.css | 0 src/{ => app}/slides/slides-pdf.js | 0 src/{ => app}/slides/slides.css | 0 src/{ => app}/slides/slides.html | 0 src/{ => app}/slides/slides.js | 0 src/{ => build}/loaders/revealjs-loader.js | 0 .../loaders/revealjs-loader.test.js | 0 src/{ => build}/loaders/slides-json-loader.js | 0 .../loaders/slides-json-loader.test.js | 0 {bin => src/build}/webpack.config.js | 16 ++++----- {bin => src/build}/webpack.config.test.js | 0 bin/sensei.js => src/cli/cli.js | 17 ++++----- test.js | 4 +-- 39 files changed, 48 insertions(+), 53 deletions(-) delete mode 100644 Makefile delete mode 100755 build.sh delete mode 100755 run.sh rename src/{ => app}/assets/Menlo-Regular.ttf (100%) rename src/{ => app}/assets/Nunito-Bold.ttf (100%) rename src/{ => app}/assets/OpenSans-Regular.ttf (100%) rename src/{ => app}/assets/zenika-logo-horizontal-black.png (100%) rename src/{ => app}/assets/zenika-logo-monogram.png (100%) rename src/{ => app}/assets/zenika-logo-vertical-black.png (100%) rename src/{ => app}/content.js (100%) rename src/{ => app}/global.css (100%) rename src/{ => app}/index.css (100%) rename src/{ => app}/index.html (100%) rename src/{ => app}/index.js (100%) rename src/{ => app}/labs/content.js (100%) rename src/{ => app}/labs/labs.css (100%) rename src/{ => app}/labs/labs.html (100%) rename src/{ => app}/labs/labs.js (100%) rename src/{ => app}/slides/assets/Programming-pana.svg (100%) rename src/{ => app}/slides/assets/Questions-pana.svg (100%) rename src/{ => app}/slides/assets/Webinar-pana.svg (100%) rename src/{ => app}/slides/assets/zenika-gradient-bar.png (100%) rename src/{ => app}/slides/content.js (100%) rename src/{ => app}/slides/slides-pdf.css (100%) rename src/{ => app}/slides/slides-pdf.js (100%) rename src/{ => app}/slides/slides.css (100%) rename src/{ => app}/slides/slides.html (100%) rename src/{ => app}/slides/slides.js (100%) rename src/{ => build}/loaders/revealjs-loader.js (100%) rename src/{ => build}/loaders/revealjs-loader.test.js (100%) rename src/{ => build}/loaders/slides-json-loader.js (100%) rename src/{ => build}/loaders/slides-json-loader.test.js (100%) rename {bin => src/build}/webpack.config.js (90%) rename {bin => src/build}/webpack.config.test.js (100%) rename bin/sensei.js => src/cli/cli.js (96%) mode change 100755 => 100644 diff --git a/Dockerfile b/Dockerfile index dbc4339..4323e40 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,5 +20,5 @@ WORKDIR /training-material USER chrome -ENTRYPOINT [ "/app/bin/sensei.js" ] +ENTRYPOINT [ "node", "/app/src/cli/cli.js" ] CMD ["serve"] diff --git a/Makefile b/Makefile deleted file mode 100644 index 9c02e10..0000000 --- a/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -.PHONY: build push -image_name=zenika/sensei - -build: - docker image build -t $(image_name) . - -push: build - docker image push $(image_name) diff --git a/README.md b/README.md index 9751f8e..a33f2b0 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,8 @@ using a simpler and newer stack. It's not up-to-par in terms of features, but it > ⚠ If you expect to use this alias within Git Bash for Windows, you might need > to set `MSYS_NO_PATHCONV` to `1` to disable path conversion on the volume paths. -> This avoids the `C:/Program Files/Git/...: no such file or directory` type of -> errors. +> This avoids the `C:/Program Files/Git/...: no such file or directory` type of +> errors. ### Using a Docker image built from sources 🐳 @@ -45,7 +45,9 @@ using a simpler and newer stack. It's not up-to-par in terms of features, but it - Install with `npm install --global https://github.com/Zenika/sensei` -> ⚠ You may use Yarn, however it's been to known to have cache issues when installing packages from GitHub, resulting in failures to update sensei correctly. +> ⚠ You may use Yarn, however it's been known to have cache issues when +> installing packages from GitHub, resulting in failures to update sensei +> correctly. ## Usage @@ -59,8 +61,6 @@ Run `sensei --help` for available commands and options. - Run `sensei pdf` - PDFs are generated inside `pdf` folder -⚠️ Note about slide sizing and PDF rendering: to avoid any layout inconsistencies, the `width` and `height` values present in [src/slides/slides.js](src/slides/slides.js) file must match the values of the `--size` parameter in the `slides` npm script - ### Serving the slides and labs - `cd` into a training material folder (must have `Slides/slides.json` and `Workbook/parts.json`) @@ -77,3 +77,26 @@ The following plugins are enabled: - Math Refer to [Reveal's documentation](https://revealjs.com/plugins/#built-in-plugins) for usage. + +## Development + +### Running + +Install dependencies (`npm i`) then use `npm start --` to run the CLI (eg `npm +start -- serve --material=./training-material` where `./training-material` +points to directory with training material in it). You may alternatively use +`npm run dev --` instead to enable restart on change (eg `npm run dev -- serve +--material=./training-material`). + +### Source file structure + +- `src/app`: source code for the web app that embeds training material +- `src/build`: source code that builds the previously mentioned web app, + including the training material +- `src/pdf`: source code that builds PDFs from the training material +- `src/cli`: source code for the CLI + +### Code formating + +This project uses Prettier. Don't forget to format before committing! You may +use `npm run prettier:write` to do that. diff --git a/build.sh b/build.sh deleted file mode 100755 index 741e308..0000000 --- a/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -docker image build . --tag zenika/sensei diff --git a/package.json b/package.json index 61af433..1fde2c5 100644 --- a/package.json +++ b/package.json @@ -7,11 +7,11 @@ "prettier:write": "npm run prettier -- --write", "test": "node test.js", "test:watch": "nodemon test.js --ignore dist", - "start": "node bin/sensei.js", - "dev": "nodemon --watch src/loaders --watch bin bin/sensei.js" + "start": "node src/cli/cli.js", + "dev": "nodemon --watch src/build --watch src/cli src/cli/cli.js" }, "bin": { - "sensei": "bin/sensei.js" + "sensei": "src/cli/cli.js" }, "dependencies": { "css-loader": "6.5.1", diff --git a/run.sh b/run.sh deleted file mode 100755 index 55bbaf2..0000000 --- a/run.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -TRAINING_NAME=$(basename $(pwd)) - -docker container run \ - --interactive \ - --tty \ - --rm \ - --volume $(pwd):/${TRAINING_NAME} \ - --workdir /${TRAINING_NAME} \ - --publish 8080:8080 \ - zenika/sensei diff --git a/src/assets/Menlo-Regular.ttf b/src/app/assets/Menlo-Regular.ttf similarity index 100% rename from src/assets/Menlo-Regular.ttf rename to src/app/assets/Menlo-Regular.ttf diff --git a/src/assets/Nunito-Bold.ttf b/src/app/assets/Nunito-Bold.ttf similarity index 100% rename from src/assets/Nunito-Bold.ttf rename to src/app/assets/Nunito-Bold.ttf diff --git a/src/assets/OpenSans-Regular.ttf b/src/app/assets/OpenSans-Regular.ttf similarity index 100% rename from src/assets/OpenSans-Regular.ttf rename to src/app/assets/OpenSans-Regular.ttf diff --git a/src/assets/zenika-logo-horizontal-black.png b/src/app/assets/zenika-logo-horizontal-black.png similarity index 100% rename from src/assets/zenika-logo-horizontal-black.png rename to src/app/assets/zenika-logo-horizontal-black.png diff --git a/src/assets/zenika-logo-monogram.png b/src/app/assets/zenika-logo-monogram.png similarity index 100% rename from src/assets/zenika-logo-monogram.png rename to src/app/assets/zenika-logo-monogram.png diff --git a/src/assets/zenika-logo-vertical-black.png b/src/app/assets/zenika-logo-vertical-black.png similarity index 100% rename from src/assets/zenika-logo-vertical-black.png rename to src/app/assets/zenika-logo-vertical-black.png diff --git a/src/content.js b/src/app/content.js similarity index 100% rename from src/content.js rename to src/app/content.js diff --git a/src/global.css b/src/app/global.css similarity index 100% rename from src/global.css rename to src/app/global.css diff --git a/src/index.css b/src/app/index.css similarity index 100% rename from src/index.css rename to src/app/index.css diff --git a/src/index.html b/src/app/index.html similarity index 100% rename from src/index.html rename to src/app/index.html diff --git a/src/index.js b/src/app/index.js similarity index 100% rename from src/index.js rename to src/app/index.js diff --git a/src/labs/content.js b/src/app/labs/content.js similarity index 100% rename from src/labs/content.js rename to src/app/labs/content.js diff --git a/src/labs/labs.css b/src/app/labs/labs.css similarity index 100% rename from src/labs/labs.css rename to src/app/labs/labs.css diff --git a/src/labs/labs.html b/src/app/labs/labs.html similarity index 100% rename from src/labs/labs.html rename to src/app/labs/labs.html diff --git a/src/labs/labs.js b/src/app/labs/labs.js similarity index 100% rename from src/labs/labs.js rename to src/app/labs/labs.js diff --git a/src/slides/assets/Programming-pana.svg b/src/app/slides/assets/Programming-pana.svg similarity index 100% rename from src/slides/assets/Programming-pana.svg rename to src/app/slides/assets/Programming-pana.svg diff --git a/src/slides/assets/Questions-pana.svg b/src/app/slides/assets/Questions-pana.svg similarity index 100% rename from src/slides/assets/Questions-pana.svg rename to src/app/slides/assets/Questions-pana.svg diff --git a/src/slides/assets/Webinar-pana.svg b/src/app/slides/assets/Webinar-pana.svg similarity index 100% rename from src/slides/assets/Webinar-pana.svg rename to src/app/slides/assets/Webinar-pana.svg diff --git a/src/slides/assets/zenika-gradient-bar.png b/src/app/slides/assets/zenika-gradient-bar.png similarity index 100% rename from src/slides/assets/zenika-gradient-bar.png rename to src/app/slides/assets/zenika-gradient-bar.png diff --git a/src/slides/content.js b/src/app/slides/content.js similarity index 100% rename from src/slides/content.js rename to src/app/slides/content.js diff --git a/src/slides/slides-pdf.css b/src/app/slides/slides-pdf.css similarity index 100% rename from src/slides/slides-pdf.css rename to src/app/slides/slides-pdf.css diff --git a/src/slides/slides-pdf.js b/src/app/slides/slides-pdf.js similarity index 100% rename from src/slides/slides-pdf.js rename to src/app/slides/slides-pdf.js diff --git a/src/slides/slides.css b/src/app/slides/slides.css similarity index 100% rename from src/slides/slides.css rename to src/app/slides/slides.css diff --git a/src/slides/slides.html b/src/app/slides/slides.html similarity index 100% rename from src/slides/slides.html rename to src/app/slides/slides.html diff --git a/src/slides/slides.js b/src/app/slides/slides.js similarity index 100% rename from src/slides/slides.js rename to src/app/slides/slides.js diff --git a/src/loaders/revealjs-loader.js b/src/build/loaders/revealjs-loader.js similarity index 100% rename from src/loaders/revealjs-loader.js rename to src/build/loaders/revealjs-loader.js diff --git a/src/loaders/revealjs-loader.test.js b/src/build/loaders/revealjs-loader.test.js similarity index 100% rename from src/loaders/revealjs-loader.test.js rename to src/build/loaders/revealjs-loader.test.js diff --git a/src/loaders/slides-json-loader.js b/src/build/loaders/slides-json-loader.js similarity index 100% rename from src/loaders/slides-json-loader.js rename to src/build/loaders/slides-json-loader.js diff --git a/src/loaders/slides-json-loader.test.js b/src/build/loaders/slides-json-loader.test.js similarity index 100% rename from src/loaders/slides-json-loader.test.js rename to src/build/loaders/slides-json-loader.test.js diff --git a/bin/webpack.config.js b/src/build/webpack.config.js similarity index 90% rename from bin/webpack.config.js rename to src/build/webpack.config.js index 8340161..a787c7a 100644 --- a/bin/webpack.config.js +++ b/src/build/webpack.config.js @@ -27,16 +27,16 @@ module.exports = (env = {}, argv = {}) => { return { mode: argv.mode || "development", entry: { - index: path.resolve(__dirname, "../src/index.js"), - slides: path.resolve(__dirname, `../src/slides/${slidesEntry}.js`), - labs: path.resolve(__dirname, "../src/labs/labs.js"), + index: path.resolve(__dirname, "../app/index.js"), + slides: path.resolve(__dirname, `../app/slides/${slidesEntry}.js`), + labs: path.resolve(__dirname, "../app/labs/labs.js"), }, module: { rules: [ { test: [/slides\.json$/, /parts\.json$/], type: "javascript/auto", - use: path.resolve(__dirname, "../src/loaders/slides-json-loader"), + use: path.resolve(__dirname, "./loaders/slides-json-loader"), }, { test: /[\/\\]Slides[\/\\].+\.md$/, @@ -44,7 +44,7 @@ module.exports = (env = {}, argv = {}) => { require.resolve("html-loader"), { loader: path.resolve( - path.join(__dirname, "../src/loaders/revealjs-loader") + path.join(__dirname, "./loaders/revealjs-loader") ), options: { materialVersion }, }, @@ -112,19 +112,19 @@ module.exports = (env = {}, argv = {}) => { }, plugins: [ new HtmlWebpackPlugin({ - template: path.resolve(__dirname, "../src/index.html"), + template: path.resolve(__dirname, "../app/index.html"), chunks: ["index"], filename: "index.html", ...commonPluginOptions, }), new HtmlWebpackPlugin({ - template: path.resolve(__dirname, "../src/slides/slides.html"), + template: path.resolve(__dirname, "../app/slides/slides.html"), chunks: ["slides"], filename: "slides.html", ...commonPluginOptions, }), new HtmlWebpackPlugin({ - template: path.resolve(__dirname, "../src/labs/labs.html"), + template: path.resolve(__dirname, "../app/labs/labs.html"), chunks: ["labs"], filename: "labs.html", ...commonPluginOptions, diff --git a/bin/webpack.config.test.js b/src/build/webpack.config.test.js similarity index 100% rename from bin/webpack.config.test.js rename to src/build/webpack.config.test.js diff --git a/bin/sensei.js b/src/cli/cli.js old mode 100755 new mode 100644 similarity index 96% rename from bin/sensei.js rename to src/cli/cli.js index 09130f9..6228f35 --- a/bin/sensei.js +++ b/src/cli/cli.js @@ -5,7 +5,7 @@ const fork = require("child_process").fork; const fs = require("fs"); const path = require("path"); const WebpackDevServer = require("webpack-dev-server"); -const webpackConfig = require("./webpack.config"); +const webpackConfig = require("../build/webpack.config"); const webpack = require("webpack"); const yargs = require("yargs/yargs"); @@ -98,9 +98,7 @@ async function pdf(options) { function pdfSlides({ slug, slideWidth, slideHeight, port }) { return new Promise((resolve, reject) => { const child = spawn("node", [ - path.resolve( - path.join(__dirname, "../node_modules/decktape/decktape.js") - ), + require.resolve("decktape"), "reveal", "-p", "0", @@ -137,13 +135,10 @@ function pdfSlides({ slug, slideWidth, slideHeight, port }) { function pdfLabs({ slug, port }) { return new Promise((resolve, reject) => { - const child = fork( - path.resolve(path.join(__dirname, "../src/pdf/pdf.js")), - [ - `http://localhost:${port}/labs.html`, - `./pdf/Zenika-${slug}-Workbook.pdf`, - ] - ); + const child = fork(path.resolve(__dirname, "../pdf/pdf.js"), [ + `http://localhost:${port}/labs.html`, + `./pdf/Zenika-${slug}-Workbook.pdf`, + ]); child.on("exit", function (code) { if (code !== 0) { diff --git a/test.js b/test.js index bdec5d2..81163d9 100644 --- a/test.js +++ b/test.js @@ -1,2 +1,2 @@ -require("./src/loaders/slides-json-loader.test.js"); -require("./bin/webpack.config.test.js"); +require("./src/build/loaders/slides-json-loader.test.js"); +require("./src/build/webpack.config.test.js");