diff --git a/.gitignore b/.gitignore index c4248b3..11d4933 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ config.cfg lighttpd-fsfe.conf pywebserver-fsfe.log +fsfe.org +fsfe-website + lighttpd-fsfe*.log # ignore everything in fsfe.org/ and status/ but keep the folders diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e897e53 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM alpine:3.9 + +RUN apk add --no-cache \ + bash \ + bash-completion \ + coreutils \ + diffutils \ + findutils \ + inotify-tools \ + libxml2-utils \ + libxslt \ + make \ + nodejs \ + nodejs-npm \ + procps \ + python3 \ + rsync + +RUN npm install -g less + +RUN mkdir -p /fsfe-local-build/fsfe.org + +EXPOSE 8000 + +CMD sh /fsfe-local-build/docker-cmd.sh + diff --git a/README.md b/README.md index dcb5ff8..c1bfcfa 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,49 @@ -# FSFE Local Build +# FSFE Website Local Build -This is a collection of scripts and configuration files necessary to build fsfe.org websites locally. +This is a collection of scripts, tools and configuration files necessary to build fsfe.org websites locally. Full instructions can be found in FSFE's wiki: https://wiki.fsfe.org/TechDocs/Mainpage/BuildLocally + +## Docker based development environment + +For convenience local development you may want to use the docker contaienr provided by this repo. + +The container contains everything you need to work on the website including serving a preview, building the static pages and the CSS files. + +### Requirements + +* Docker https://docs.docker.com/install/ +* Docker Compose https://docs.docker.com/compose/install/ +* Patience (for the website build) + +### Website Dev Instructions + +#### Initial set up + +Just run the following command for the initial setup: + +``` +./docker-setup.sh +``` + +⚠ The command may run some hours, since it does the initial full build of the website. + +#### Development + +Spin up the container (⚠ takes some minutes): + + docker-compose up + +The website should now be available on your machine under http://127.0.0.1:8000/. + +Build a single page after changes (e.g. `index.de.xhtml`): + +``` +docker exec \ + --workdir /fsfe-local-build/fsfe.org \ + fsfe-local-build \ + bash ../fsfe-preview.sh ../fsfe-website/index.de.xhtml +``` + +Style modifications in `fsfe-website/look` trigger a re build of the styles. +After modifications a page reload shoud show the changes. diff --git a/config.cfg.docker b/config.cfg.docker new file mode 100644 index 0000000..fb00777 --- /dev/null +++ b/config.cfg.docker @@ -0,0 +1,32 @@ +### BUILD DIRECTORIES ### + +# Cloned Git directory (repository with XHTML source files) +LOC_trunk=/fsfe-local-build/fsfe-website + +# Directory in which the result of the build process (html files) will be saved +LOC_out=/fsfe-local-build/fsfe.org + + +### LOCAL WEBSERVER ### + +# Choose your local webserver. +# Default is "python" which is python3's built-in http.server module (SimpleHTTP) that is available on most distributions +# Use "lighttpd" if you want to use the Lighttpd webserver. This has to be configured manually (see guide) +HTTPD=lighttpd + + +### ADVANCED ### + +# Directory of the secondary Git directory with which you made a first full build. +# Avoids having some generated files in your clean trunk. +# Default: Leave empty if you just want to use one Git source directory (recommended) +LOC_trunk_dev= + +# Choose on which port the webserver runs. This has no effect for "lighttpd". +HTTPD_port=5080 + +# If you use other webservers like "lighttpd", this is the path to its config file +# Default: points to a lighttpd config file in the same directory as the script +# Has no effect if you use the "python" webserver +HTTPD_conf=$ROOT/lighttpd-fsfe.conf + diff --git a/docker-cmd.sh b/docker-cmd.sh new file mode 100755 index 0000000..386c961 --- /dev/null +++ b/docker-cmd.sh @@ -0,0 +1,32 @@ +#!/bin/bash +######################################################################## +# Copyright (C) 2019 Michael Weimann +######################################################################## +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################## +# +# This script is executed in docker CMD. +# +####################################################################### + +# Set up the less watcher +cd /fsfe-local-build +sh less-watch.sh & + +# Run the preview server +cd /fsfe-local-build/fsfe.org +python3 -m http.server + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d60ed57 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3' + +services: + fsfe-local-build: + build: . + image: fsfe/local-build:1.0 + container_name: fsfe-local-build + ports: + - 8000:8000 + volumes: + - .:/fsfe-local-build + diff --git a/docker-setup.sh b/docker-setup.sh new file mode 100755 index 0000000..8bd3ff9 --- /dev/null +++ b/docker-setup.sh @@ -0,0 +1,53 @@ +#!/bin/bash +######################################################################## +# Copyright (C) 2019 Michael Weimann +######################################################################## +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################## +# +# This script runs the docker dev setup. +# +####################################################################### + +echo -e "\e[96m→ Cloning the website repo\e[0m" +git clone git@git.fsfe.org:FSFE/fsfe-website.git +echo "" + +echo -e "\e[96m→ Setting up the config file\e[0m" +cp config.cfg.docker config.cfg +echo "" + +echo -e "\e[96m→ Linking the look directory\e[0m" +ln -s ../fsfe-website/look fsfe.org/look +echo "" + +echo -e "\e[96m→ Starting the container\e[0m" +docker-compose up --build -d +echo "" + +echo -e "\e[96m→ Initial full build\e[0m" +echo -e "\e[33m⚠ This may take some hours\e[0m" +docker exec fsfe-local-build \ + bash /fsfe-local-build/fsfe-website/build/build_main.sh \ + build_into /fsfe-local-build/fsfe.org/ \ + --statusdir /fsfe-local-build/status/ \ + || true +echo "" + +echo -e "\e[96m→ Stopping the container\e[0m" +docker-compose stop +echo "" + diff --git a/fsfe.org/.gitkeep b/fsfe.org/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/less-watch.sh b/less-watch.sh new file mode 100755 index 0000000..c82bf35 --- /dev/null +++ b/less-watch.sh @@ -0,0 +1,31 @@ +#!/bin/bash +######################################################################## +# Copyright (C) 2019 Michael Weimann +######################################################################## +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################## +# +# This script sets up a watcher that re-compiles the fsfe website +# styles on changes. +# +####################################################################### + +while inotifywait \ + -r -e close_write -e create -e moved_to \ + --exclude '\.(swx|swp|min\.css)' fsfe-website/look; do + lessc -x fsfe-website/look/fsfe.less fsfe-website/look/fsfe.min.css; +done +