Skip to content
Permalink
Browse files
move and prepare files for content folder
* Added logic to move generated website and in-tree docs to content folder
* Added logic to remove hardcoded and missing domains from links
* Added logging functionality

patch by Anthony Grasso; reviewed by Michael Semb Wever for CASSANDRA-17374
  • Loading branch information
ossarga committed Apr 6, 2022
1 parent c9b3a29 commit 1de171b910983628e1b7e19dbeac0a3bb09dbab0
Showing 2 changed files with 119 additions and 11 deletions.
@@ -103,6 +103,8 @@ ENV ANTORA_UI_BUNDLE_URL="https://github.com/apache/cassandra-website/raw/trunk/

ENV CASSANDRA_DOWNLOADS_URL="https://downloads.apache.org/cassandra/"

ENV LOG_LEVEL="INFO"

EXPOSE 5151/tcp

# Run as build user from here
@@ -26,10 +26,10 @@ generate_cassandra_versioned_docs() {
# a local copy as some of the pages need to be generated from the source code.
if [ "$(find "${CASSANDRA_SOURCE_DIR}" -mindepth 1 -type f | wc -l)" -eq 0 ]
then
echo "Cloning ${ANTORA_CONTENT_SOURCES_CASSANDRA_URL} to working directory"
log_message "INFO" "Cloning ${ANTORA_CONTENT_SOURCES_CASSANDRA_URL} to working directory"
git clone "${ANTORA_CONTENT_SOURCES_CASSANDRA_URL}" "${CASSANDRA_WORKING_DIR}"
else
echo "Copying ${CASSANDRA_SOURCE_DIR} to working directory"
log_message "INFO" "Copying ${CASSANDRA_SOURCE_DIR} to working directory"
cp -a "${CASSANDRA_SOURCE_DIR}/." "${CASSANDRA_WORKING_DIR}/"
fi

@@ -51,12 +51,12 @@ generate_cassandra_versioned_docs() {

for version in ${GENERATE_CASSANDRA_VERSIONS}
do
echo "Checking out '${version}'"
log_message "INFO" "Checking out '${version}'"
pushd "${CASSANDRA_WORKING_DIR}" > /dev/null
git clean -xdff
git checkout "${version}"

echo "Building JAR files"
log_message "INFO" "Building JAR files"
# Nodetool docs are autogenerated, and that needs nodetool to be built. However, before we can build nodetool we
# need to select the correct Java version
local doc_version=""
@@ -80,7 +80,7 @@ generate_cassandra_versioned_docs() {
sudo update-alternatives --set java ${java_version}
sudo update-alternatives --set javac ${javac_version}

echo "Using Java compiler version $(javac -version) to compile Cassandra JARs"
log_message "INFO" "Using Java compiler version $(javac -version) to compile Cassandra JARs"
ant realclean
ant "${ant_cmd_options}" gen-asciidoc
popd > /dev/null
@@ -93,7 +93,7 @@ generate_cassandra_versioned_docs() {
# generating the HTML.
sed -i '/^doc/d' .gitignore
git add .
git commit -m "Automated commit: Generated nodetool and configuration documentation for version ${doc_version}." || echo "No new changes to commit."
git commit -m "Automated commit: Generated nodetool and configuration documentation for version ${doc_version}." || log_message "INFO" "No new changes to commit."
fi
popd > /dev/null
done
@@ -180,7 +180,7 @@ generate_site_yaml() {
fi
done

echo "Building site.yaml"
log_message "INFO" "Building site.yaml"
rm -f site.yaml
python3 ./bin/site_yaml_generator.py \
-s "$(generate_json \
@@ -196,14 +196,87 @@ generate_site_yaml() {

render_site_content_to_html() {
pushd "${CASSANDRA_WEBSITE_DIR}/site-content" > /dev/null
echo "Building the site HTML content."
log_message "INFO" "Building the site HTML content."
antora --generator antora-site-generator-lunr site.yaml
echo "Rendering complete!"
log_message "INFO" "Rendering complete!"
popd > /dev/null
}


prepare_site_html_for_publication() {
pushd "${CASSANDRA_WEBSITE_DIR}" > /dev/null

# copy everything to content/ directory
log_message "INFO" "Moving site HTML to content/"
mkdir -p content/doc
cp -r site-content/build/html/* content/

# remove hardcoded domain name, and empty domain names first before we duplicate and documentation
content_files_to_change=($(grep -rl 'https://cassandra.apache.org/' content/))
log_message "INFO" "Removing hardcoded domain names in ${#content_files_to_change[*]} files"
for content_file in ${content_files_to_change[*]}
do
log_message "DEBUG" "Processing file ${content_file}"
# sed automatically uses the character following the 's' as a delimiter.
# In this case we will use the ',' so we can avoid the need to escape the '/' characters
sed -i 's,https://cassandra.apache.org/,/,g' ${content_file}
done

content_files_to_change=($(grep -rl 'href="//' content/))
log_message "INFO" "Removing empty domain names in ${#content_files_to_change[*]} files"
for content_file in ${content_files_to_change[*]}
do
log_message "DEBUG" "Processing file ${content_file}"
sed -i 's,href="//,href="/,g' ${content_file}
done

# move around the in-tree docs if generated
if [ "${COMMAND_GENERATE_DOCS}" = "run" ]
then
log_message "INFO" "Moving versioned documentation HTML to content/doc"
move_intree_document_directories "3.11" "3.11.11" "3.11.12"
move_intree_document_directories "4.0" "4.0.0" "4.0.1" "4.0.2" "4.0.3" "stable"
move_intree_document_directories "trunk" "4.1" "latest"
fi

popd > /dev/null
}


move_intree_document_directories() {
local source_doc_dir="$1"
shift
local target_doc_versions=("$@")

local source_base_dir="content/Cassandra"
local target_base_dir="content/doc"

if [ ${#target_doc_versions[*]} -eq 0 ] || [ "${source_doc_dir}" = "" ]
then
return
fi

if [ -d "${source_base_dir}/${source_doc_dir}" ]
then
for cas_ver in ${target_doc_versions[*]}
do
rm -fR ${target_base_dir}/${cas_ver}
cp -r ${source_base_dir}/${source_doc_dir} ${target_base_dir}/${cas_ver}
done
rm -fR ${target_base_dir}/${source_doc_dir}
mv ${source_base_dir}/${source_doc_dir} ${target_base_dir}/
fi

# Check if our source directory is empty and if it is clean it up.
# Otherwise, leave it as is so we can see if we have missed a version.
if [ -z "$(ls -A ${source_base_dir})" ]
then
rmdir "${source_base_dir}"
fi
}

run_preview_mode() {
echo "Entering preview mode!"
log_message "INFO" "Entering preview mode!"

export -f render_site_content_to_html

@@ -241,10 +314,41 @@ run_preview_mode() {
}


log_level_str_to_int() {
local log_level_int
case $1 in
"OFF")
log_level_int=0
;;
"ERROR")
log_level_int=1
;;
"WARN")
log_level_int=2
;;
"INFO")
log_level_int=3
;;
"DEBUG"|"*")
log_level_int=4
;;
esac
echo ${log_level_int}
}


log_message() {
if [ ${LOG_LEVEL_INT} -ne 0 ] && [ $(log_level_str_to_int $1) -le ${LOG_LEVEL_INT} ]
then
echo "container: $1: $2"
fi
}

# ============ MAIN ============

GENERATE_CASSANDRA_VERSIONS=$(sed 's/^[[:space:]]]*//' <<< "${ANTORA_CONTENT_SOURCES_CASSANDRA_BRANCHES} ${ANTORA_CONTENT_SOURCES_CASSANDRA_TAGS}")
export GENERATE_CASSANDRA_VERSIONS
export LOG_LEVEL_INT=$(log_level_str_to_int "${LOG_LEVEL}")

ANTORA_CONTENT_SOURCE_REPOSITORIES=(
CASSANDRA_WEBSITE
@@ -269,7 +373,7 @@ do
COMMAND_PREVIEW="run"
;;
*)
echo "Skipping unrecognised command '$1'."
log_message "WARN" "Skipping unrecognised command '$1'."
;;
esac

@@ -293,6 +397,8 @@ then
export DOCSEARCH_INDEX_VERSION=latest

render_site_content_to_html

prepare_site_html_for_publication
fi

if [ "${COMMAND_PREVIEW}" = "run" ]

0 comments on commit 1de171b

Please sign in to comment.