User-friendly output for site.sh + Bug fixes for the build process(#325)
* User-friendly output for site.sh (#319)
* Copy docs for staable version to /docs/stable/ (#321)
* Add sanity checks
diff --git a/site.sh b/site.sh
index aa26e88..9e8e11d 100755
--- a/site.sh
+++ b/site.sh
@@ -16,7 +16,7 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-set -euox pipefail
+set -euo pipefail
WORKING_DIR="$(pwd)"
MY_DIR="$(cd "$(dirname "$0")" && pwd)"
@@ -25,6 +25,10 @@
IMAGE_NAME=airflow-site
CONTAINER_NAME=airflow-site-c
+function log {
+ echo -e "$(date +'%Y-%m-%d %H:%M:%S'):INFO: ${*} " >&2;
+}
+
function usage {
cat << EOF
usage: ${0} <command> [<args>]
@@ -62,15 +66,17 @@
}
function ensure_image_exists {
+ log "Checking if image exists: ${IMAGE_NAME}"
if [[ ! $(docker images "${IMAGE_NAME}" -q) ]]; then
- echo "Image not exists."
+ log "Image not exists."
build_image
fi
}
function ensure_container_exists {
+ log "Checking if container exists: ${CONTAINER_NAME}"
if [[ ! $(docker container ls -a --filter="Name=${CONTAINER_NAME}" -q ) ]]; then
- echo "Container not exists"
+ log "Container not exists"
docker run \
--detach \
--name "${CONTAINER_NAME}" \
@@ -83,37 +89,41 @@
}
function ensure_container_running {
+ log "Checking if container running: ${CONTAINER_NAME}"
container_status="$(docker inspect "${CONTAINER_NAME}" --format '{{.State.Status}}')"
- echo "Current container status: ${container_status}"
+ log "Current container status: ${container_status}"
if [[ ! "${container_status}" == "running" ]]; then
- echo "Container not running. Starting the container."
+ log "Container not running. Starting the container."
docker start "${CONTAINER_NAME}"
fi
}
function ensure_node_module_exists {
+ log "Checking if node module exists"
if [[ ! -d landing-pages/node_modules/ ]] ; then
- echo "Missing node dependencies. Start installation."
+ log "Missing node dependencies. Start installation."
run_command "/opt/site/landing-pages/" yarn install
- echo "Dependencies installed."
+ log "Dependencies installed."
fi
}
function ensure_that_website_is_build {
+ log "Check if landing-pages/dist/index.html file exists"
if [[ ! -f landing-pages/dist/index.html ]] ; then
- echo "The website is not built. Start building."
+ log "The website is not built. Start building."
run_command "/opt/site/landing-pages/" npm run build
- echo "The website builded."
+ log "The website builded."
fi
}
function build_image {
- echo "Start building image"
+ log "Start building image"
docker build -t airflow-site .
- echo "End building image"
+ log "End building image"
}
function run_command {
+ log "Running command: $*"
working_directory=$1
shift
if [[ -f /.dockerenv ]] ; then
@@ -136,6 +146,7 @@
}
function prepare_environment {
+ log "Preparing environment"
if [[ ! -f /.dockerenv ]] ; then
ensure_image_exists
ensure_container_exists
@@ -202,30 +213,22 @@
}
function prepare_docs_index {
+ log "Preparing docs index"
run_command "/opt/site/docs-archive/" ./show_docs_index_json.sh > landing-pages/site/static/_gen/docs-index.json
}
function build_landing_pages {
+ log "Building landing pages"
run_command "/opt/site/landing-pages/" npm run index
prepare_docs_index
run_command "/opt/site/landing-pages/" npm run build
}
-function build_site {
- if [[ ! -f "landing-pages/dist/index.html" ]]; then
- build_landing_pages
- fi
- mkdir -p dist
- rm -rf dist/*
- cp -R landing-pages/dist/. dist/
- mkdir -p dist/docs/
- rm -rf dist/docs/*
- for doc_path in docs-archive/*/ ; do
- version="$(basename -- "${doc_path}")"
- cp -R "${doc_path}" "dist/docs/${version}/"
- done
- cp -R "docs-archive/$(cat docs-archive/stable.txt)" "dist/docs/stable/"
- cat > dist/docs/index.html << EOF
+function create_index {
+ output_path="$1/index.html"
+ log "Creating index: ${output_path}"
+
+ cat > "${output_path}" << EOF
<!DOCTYPE html>
<html>
<head><meta http-equiv="refresh" content="1; url=stable/" /></head>
@@ -234,27 +237,68 @@
EOF
}
+function verbose_copy {
+ source="$1"
+ target="$2"
+ log "Copying '$source' to '$target'"
+ mkdir -p "${target}"
+ cp -R "$source" "$target"
+}
+
+function assert_file_exists {
+ file_path="$1"
+ if [[ ! -f "${file_path}" ]]; then
+ echo "Missing file: ${file_path}":
+ exit 1
+ fi
+}
+
+function build_site {
+ log "Building full site"
+
+ if [[ ! -f "landing-pages/dist/index.html" ]]; then
+ build_landing_pages
+ fi
+ mkdir -p dist
+ rm -rf dist/*
+ verbose_copy landing-pages/dist/. dist/
+ mkdir -p dist/docs/
+ rm -rf dist/docs/*
+ for doc_path in docs-archive/*/ ; do
+ version="$(basename -- "${doc_path}")"
+ verbose_copy "docs-archive/${version}/." "dist/docs/${version}"
+ done
+ verbose_copy "docs-archive/$(cat docs-archive/stable.txt)/." "dist/docs/stable"
+ create_index dist/docs
+
+ # Sanity checks
+ assert_file_exists dist/docs/1.10.7/tutorial.html
+ assert_file_exists dist/docs/stable/tutorial.html
+ assert_file_exists dist/docs/index.html
+}
+
function cleanup_environment {
container_status="$(docker inspect "${CONTAINER_NAME}" --format '{{.State.Status}}')"
- echo "Current container status: ${container_status}"
+ log "Current container status: ${container_status}"
if [[ "${container_status}" == "running" ]]; then
- echo "Container running. Killing the container."
+ log "Container running. Killing the container."
docker kill "${CONTAINER_NAME}"
fi
if [[ $(docker container ls -a --filter="Name=${CONTAINER_NAME}" -q ) ]]; then
- echo "Container exists. Removing the container."
+ log "Container exists. Removing the container."
docker rm "${CONTAINER_NAME}"
fi
if [[ $(docker images "${IMAGE_NAME}" -q) ]]; then
- echo "Images exists. Deleeting the image."
+ log "Images exists. Deleting the image."
docker rmi "${IMAGE_NAME}"
fi
}
function prepare_theme {
+ log "Preparing theme files"
SITE_DIST="landing-pages/dist"
THEME_GEN="sphinx_airflow_theme/sphinx_airflow_theme/static/_gen"
mkdir -p "${THEME_GEN}/css" "${THEME_GEN}/js"