From a0602e37f328f5a2142b4983b11672b4a334f984 Mon Sep 17 00:00:00 2001 From: Peter Boy Date: Fri, 11 Aug 2023 19:01:01 +0200 Subject: [PATCH] Update local authoring tools. --- builder.sh | 292 ------------------------------------------------- docsbuilder.sh | 20 +++- new-build.sh | 46 -------- new-preview.sh | 28 ----- old-build.sh | 52 --------- old-preview.sh | 18 --- preview.sh | 13 +++ 7 files changed, 30 insertions(+), 439 deletions(-) delete mode 100755 builder.sh delete mode 100755 new-build.sh delete mode 100755 new-preview.sh delete mode 100755 old-build.sh delete mode 100755 old-preview.sh create mode 100755 preview.sh diff --git a/builder.sh b/builder.sh deleted file mode 100755 index 073b2bc..0000000 --- a/builder.sh +++ /dev/null @@ -1,292 +0,0 @@ -#!/bin/bash -# script to watch source directory for changes, and re-run build and preview -# -# License: MIT -# https://fedoraproject.org/wiki/Licensing:MIT#Another_Minimal_variant_(found_in_libatomic_ops) -# -# Copyright (c) Fedora community contributors. -# -# THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED OR -# IMPLIED. ANY USE IS AT YOUR OWN RISK. -# -# Permission is hereby granted to use or copy this program for any purpose, -# provided the above notices are retained on all copies. Permission to modify -# the code and to distribute modified code is granted, provided the above -# notices are retained, and a notice that the code was modified is included -# with the above copyright notice. - - -script_name="docsbuilder.sh" -script_source="https://gitlab.com/fedora/docs/templates/fedora-docs-template/-/raw/main/${script_name}" -version="1.2.0" -image="docker.io/antora/antora" -cmd="--html-url-extension-style=indexify site.yml" -srcdir="modules" -buildir="public" -previewpidfile="preview.pid" - -# 4913: for vim users, vim creates a temporary file to test it can write to -# directory -# https://groups.google.com/g/vim_dev/c/sppdpElxY44 -# .git: so we don't get rebuilds each time git metadata changes -inotifyignore="\.git.*|4913" - -watch_and_build () { - if ! command -v inotifywait > /dev/null - then - echo "inotifywait command could not be found. Please install inotify-tools." - echo "On Fedora, run: sudo dnf install inotify-tools" - stop_preview_and_exit - else - # check for git - # required to get ignorelist - if ! command -v git > /dev/null - then - echo "git command could not be found. Please install git." - echo "On Fedora, run: sudo dnf install git-core" - stop_preview_and_exit - else - # Get files not being tracked, we don't watch for changes in these. - # Could hard code, but people use different editors that may create - # temporary files that are updated regularly and so on, so better - # to get the list from git. It'll also look at global gitingore - # settings and so on. - inotifyignore="$(git status -s --ignored | grep '^!!' | sed -e 's/^!! //' | tr '\n' '|')${inotifyignore}" - fi - - while true - do - echo "Watching current directory (excluding: ${inotifyignore}) for changes and re-building as required. Use Ctrl C to stop." - inotifywait -q --exclude "($inotifyignore)" -e modify,create,delete,move -r . && echo "Change detected, rebuilding.." && build - done - fi -} - -build () { - if [ "$(uname)" == "Darwin" ]; then - # Running on macOS. - # Let's assume that the user has the Docker CE installed - # which doesn't require a root password. - echo "" - echo "This build script is using Docker container runtime to run the build in an isolated environment." - echo "" - docker run --rm -it -v $(pwd):/antora $image $cmd - - elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - # Running on Linux. - # Check whether podman is available, else faill back to docker - # which requires root. - - if [ -f /usr/bin/podman ]; then - echo "" - echo "This build script is using Podman to run the build in an isolated environment." - echo "" - podman run --rm -it -v $(pwd):/antora:z $image $cmd --stacktrace - - elif [ -f /usr/bin/docker ]; then - echo "" - echo "This build script is using Docker to run the build in an isolated environment." - echo "" - - if groups | grep -wq "docker"; then - docker run --rm -it -v $(pwd):/antora:z $image $cmd - else - echo "" - echo "This build script is using $runtime to run the build in an isolated environment. You might be asked for your password." - echo "You can avoid this by adding your user to the 'docker' group, but be aware of the security implications. See https://docs.docker.com/install/linux/linux-postinstall/." - echo "" - sudo docker run --rm -it -v $(pwd):/antora:z $image $cmd - fi - - else - echo "" - echo "Error: Container runtime haven't been found on your system. Fix it by:" - echo "$ sudo dnf install podman" - exit 1 - fi - fi -} - -start_preview () { - - # clean up a preview that may be running - stop_preview - - # always run an initial build so preview shows latest version - build - - if [ "$(uname)" == "Darwin" ]; then - # Running on macOS. - # Let's assume that the user has the Docker CE installed - # which doesn't require a root password. - echo "The preview will be available at http://localhost:8080/" - docker run --rm -v $(pwd):/antora:ro -v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf:ro -p 8080:80 nginx - - elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - # Running on Linux. - # Fedora Workstation has python3 installed as a default, so using that - echo "" - echo "The preview is available at http://localhost:8080" - echo "" - pushd "${buildir}" > /dev/null 2>&1 - python3 -m http.server 8080 & - echo "$!" > ../"${previewpidfile}" - popd > /dev/null 2>&1 - fi -} - -stop_preview () { - if [ -e "${previewpidfile}" ] - then - PID=$(cat "${previewpidfile}") - kill $PID - echo "Stopping preview server (running with PID ${PID}).." - rm -f "${previewpidfile}" - else - echo "No running preview server found to stop: no ${previewpidfile} file found." - fi -} - -stop_preview_and_exit () -{ - # stop and also exit the script - - # if stop_preview is trapped, then SIGINT doesn't stop the build loop. So - # we need to make sure we also exit the script. - - # stop_preview is called before other functions, so we cannot add exit to - # it. - stop_preview - exit 0 -} - - -# https://apple.stackexchange.com/questions/83939/compare-multi-digit-version-numbers-in-bash/123408#123408 -version () { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; } - - -check_update () { - if ! command -v curl > /dev/null - then - echo "curl command could not be found. Please install curl." - echo "On Fedora, run: sudo dnf install curl" - exit 0 - fi - script_version="$(grep "^version=" ${script_name} | cut -d '=' -f2 | tr --delete '"')" - tempdir="$(mktemp -d)" - echo "$tempdir" - pushd "$tempdir" > /dev/null 2>&1 - curl "$script_source" --silent --output "${script_name}" - upstream_version="$(grep "^version=" ${script_name} | cut -d '=' -f2 | tr --delete '"')" - echo "${upstream_version}" - if [ $(version $upstream_version) -gt $(version $script_version) ]; then - echo "Update available" - echo "Script version $upstream_version is available at $script_source" - echo "This version is $script_version." - echo "Please use the '-U' option to update." - echo - fi - popd > /dev/null 2&>1 -} - -install_update () { - if ! command -v curl > /dev/null - then - echo "curl command could not be found. Please install curl." - echo "On Fedora, run: sudo dnf install curl" - exit 0 - fi - curl "$script_source" --silent --output "${script_name}.new" - mv "${script_name}.new" "${script_name}" - chmod +x "${script_name}" -} - -usage() { - echo "$0: Build and preview Fedora antora based documentation" - echo - echo "Usage: $0 [-awbpkh]" - echo - echo "-a: start preview, start watcher and rebuilder" - echo "-w: start watcher and rebuilder" - echo "-b: rebuild" - echo "-p: start_preview" - echo "-k: stop_preview" - echo "-h: print this usage text and exit" - echo "-u: check builder script update" - echo "-U: install builder script from upstream" - echo - echo "Maintained by the Fedora documentation team." - echo "Please contact on our channels: https://docs.fedoraproject.org/en-US/fedora-docs/#find-docs" -} - -# check if the script is being run in a Fedora docs repository -if [ ! -e "site.yml" ] -then - echo "site.yml not be found." - echo "This does not appear to be a Fedora Antora based documentation repository." - echo "Exiting." - echo - usage - exit 1 -fi - - -if [ $# -lt 1 ] -then - echo "No options provided, running preview with watch and build." - echo "Run script with '-h' to see all available options." - echo - echo - trap stop_preview_and_exit INT - start_preview - watch_and_build - stop_preview -fi - -# parse options -while getopts "awbpkhuU" OPTION -do - case $OPTION in - a) - # handle sig INT to stop the preview - trap stop_preview_and_exit INT - start_preview - watch_and_build - stop_preview - exit 0 - ;; - w) - watch_and_build - exit 0 - ;; - b) - build - exit 0 - ;; - p) - start_preview - echo "Please run ./${script_name} -k to stop the preview server" - exit 0 - ;; - k) - stop_preview - exit 0 - ;; - h) - usage - exit 0 - ;; - u) - check_update - exit 0 - ;; - U) - install_update - exit 0 - ;; - ?) - usage - exit 1 - ;; - esac -done diff --git a/docsbuilder.sh b/docsbuilder.sh index ded7f8d..418b7e3 100755 --- a/docsbuilder.sh +++ b/docsbuilder.sh @@ -1,6 +1,20 @@ #!/bin/bash - # script to watch source directory for changes, and re-run build and preview +# +# License: MIT +# https://fedoraproject.org/wiki/Licensing:MIT#Another_Minimal_variant_(found_in_libatomic_ops) +# +# Copyright (c) Fedora community contributors. +# +# THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED OR +# IMPLIED. ANY USE IS AT YOUR OWN RISK. +# +# Permission is hereby granted to use or copy this program for any purpose, +# provided the above notices are retained on all copies. Permission to modify +# the code and to distribute modified code is granted, provided the above +# notices are retained, and a notice that the code was modified is included +# with the above copyright notice. + script_name="docsbuilder.sh" script_source="https://gitlab.com/fedora/docs/templates/fedora-docs-template/-/raw/main/${script_name}" @@ -63,13 +77,13 @@ build () { # Check whether podman is available, else faill back to docker # which requires root. - if [ -f /usr/bin/podman ]; then + if [ -n "$(command -v podman)" ]; then echo "" echo "This build script is using Podman to run the build in an isolated environment." echo "" podman run --rm -it -v $(pwd):/antora:z $image $cmd --stacktrace - elif [ -f /usr/bin/docker ]; then + elif [ -n "$(command -v docker)" ]; then echo "" echo "This build script is using Docker to run the build in an isolated environment." echo "" diff --git a/new-build.sh b/new-build.sh deleted file mode 100755 index e0cce34..0000000 --- a/new-build.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh - -image="docker.io/antora/antora:latest" -cmd="--html-url-extension-style=indexify site.yml" - -if [ "$(uname)" = "Darwin" ]; then - # Running on macOS. - # Let's assume that the user has the Docker CE installed - # which doesn't require a root password. - echo "" - echo "This build script is using Docker container runtime to run the build in an isolated environment." - echo "" - docker run --rm -it -v "$(pwd):/antora" $image $cmd - -elif [ "$(expr substr "$(uname -s)" 1 5)" = "Linux" ]; then - # Running on Linux. - # Check whether podman is available, else fall back to docker - # which requires root. - - if [ -f /usr/bin/podman ]; then - echo "" - echo "This build script is using Podman to run the build in an isolated environment." - echo "" - podman run --rm -it -v "$(pwd):/antora:z" $image $cmd - - elif [ -f /usr/bin/docker ]; then - echo "" - echo "This build script is using Docker to run the build in an isolated environment." - echo "" - - if groups | grep -wq "docker"; then - docker run --rm -it -v "$(pwd):/antora:z" $image $cmd - else - echo "" - echo "This build script is using $runtime to run the build in an isolated environment. You might be asked for your password." - echo "You can avoid this by adding your user to the 'docker' group, but be aware of the security implications. See https://docs.docker.com/install/linux/linux-postinstall/." - echo "" - sudo docker run --rm -it -v "$(pwd):/antora:z" $image $cmd - fi - else - echo "" - echo "Error: Container runtime haven't been found on your system. Fix it by:" - echo "$ sudo dnf install podman" - exit 1 - fi -fi diff --git a/new-preview.sh b/new-preview.sh deleted file mode 100755 index cbbccef..0000000 --- a/new-preview.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - - -echo "" -echo "The preview is available at http://localhost:8080" -echo "" -echo "Spaces:" -echo " * User Documentation .. http://localhost:8080/fedora-server/ #(default)" -echo " * Working Group pages.. http://localhost:8080/server-working-group/" -echo "" -echo "" - -if [ "$(uname)" = "Darwin" ]; then - # Running on macOS. - # Let's assume that the user has the Docker CE installed - # which doesn't require a root password. - echo "The preview will be available at http://localhost:8080/" - docker run --rm -v "$(pwd):/antora:ro" -v "$(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf:ro" -p 8080:80 nginx - -elif [ "$(expr substr "$(uname -s)" 1 5)" = "Linux" ]; then - # Running on Linux. - # Fedora Workstation has python3 installed as a default, so using that - echo "" - echo "The preview is available at http://localhost:8080" - echo "" - cd ./public - python3 -m http.server 8080 -fi diff --git a/old-build.sh b/old-build.sh deleted file mode 100755 index 96c2b69..0000000 --- a/old-build.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh - -image="docker.io/antora/antora" -cmd="--html-url-extension-style=indexify site.yml" - -if uname | grep -iwq darwin; then - # Running on macOS. - # Let's assume that the user has the Docker CE installed - # which doesn't require a root password. - echo "" - echo "This build script is using Docker container runtime to run the build in an isolated environment." - echo "" - docker run --rm -it -v "$(pwd):/antora" "${image}" ${cmd} - -elif uname | grep -iq linux; then - # Running on Linux. - # there isn't an antora/aarch64 container, antora can be installed locally - # Check whether podman is available, else faill back to docker - # which requires root. - - if [ -f /usr/local/bin/antora ]; then - /usr/local/bin/antora "${cmd}" - elif uname -m | grep -iwq aarch64; then - echo "no antora/aarch64 container try just \`npm install -g @antora/cli @antora/site-generator-default\`" - elif [ -f /usr/bin/podman ]; then - echo "" - echo "This build script is using Podman to run the build in an isolated environment." - echo "" - podman run --rm -it -v "$(pwd):/antora:z" "${image}" ${cmd} - - elif [ -f /usr/bin/docker ]; then - echo "" - echo "This build script is using Docker to run the build in an isolated environment." - echo "" - - if groups | grep -wq "docker"; then - docker run --rm -it -v "$(pwd):/antora:z" "${image}" ${cmd} - else - echo "You might be asked for your password." - echo "You can avoid this by adding your user to the 'docker' group," - echo "but be aware of the security implications." - echo "See https://docs.docker.com/install/linux/linux-postinstall/" - echo "" - sudo docker run --rm -it -v "$(pwd):/antora:z" "${image}" ${cmd} - fi - else - echo "" - echo "Error: Container runtime haven't been found on your system. Fix it by:" - echo "$ sudo dnf install podman" - exit 1 - fi -fi diff --git a/old-preview.sh b/old-preview.sh deleted file mode 100755 index 4270107..0000000 --- a/old-preview.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -if [ "$(uname)" = "Darwin" ]; then - # Running on macOS. - # Let's assume that the user has the Docker CE installed - # which doesn't require a root password. - echo "The preview will be available at http://localhost:8080/" - docker run --rm -v "$(pwd):/antora:ro" -v "$(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf:ro" -p 8080:80 nginx - -elif [ "$(expr substr "$(uname -s)" 1 5)" = "Linux" ]; then - # Running on Linux. - # Fedora Workstation has python3 installed as a default, so using that - echo "" - echo "The preview is available at http://localhost:8080" - echo "" - cd ./public - python3 -m http.server 8080 -fi diff --git a/preview.sh b/preview.sh new file mode 100755 index 0000000..341d6ab --- /dev/null +++ b/preview.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +echo "Deprecated. Use the docsbuilder.sh script instead" +echo "" +echo "The preview is available at http://localhost:8080" +echo "" +echo "Spaces:" +echo " * User Documentation .. http://localhost:8080/fedora-server/ #(default)" +echo " * Working Group pages.. http://localhost:8080/server-working-group/" +echo "" +sleep 2 +./docsbuilder.sh -p +