blob: 92e5faafb7fa9c1c1a3057541699cc0283620485 [file] [log] [blame]
#!/usr/bin/env bash
set -euo pipefail
SOURCE_PATH="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")" )" && pwd)"
# Codebase Repository
PROJECT_NAME="seatunnel"
PROJECT_BRANCH_NAME="dev"
# Repository Website(current) Directory
SWAP_DIR="${SOURCE_PATH}/swap"
PROJECT_SITE_IMG_DIR="${SOURCE_PATH}/static/image_en"
PROJECT_SITE_DOC_DIR="${SOURCE_PATH}/docs"
# Repository Codebase(current) Directory
PROJECT_DIR="${SWAP_DIR}/${PROJECT_NAME}"
PROJECT_IMG_DIR="${PROJECT_DIR}/docs/en/images"
PROJECT_DOC_DIR="${PROJECT_DIR}/docs/en"
PROJECT_SIDEBAR_PATH="${PROJECT_DIR}/docs/sidebars.js"
# Repository Codebase(current) File Path
DOCUSAURUS_DOC_SIDEBARS_FILE="${SOURCE_PATH}/sidebars.js"
# Choose the protocol for git communication to server, default is HTTP because it do not requests password or secret key,
# run command `export PROTOCOL_MODE=ssh` in terminal change protocol to SSH which in is faster and stable in many cases,
# such as local development where we already have RSA public key.
if [ "${PROTOCOL_MODE:-HTTP}" == "ssh" ]; then
PROJECT_REPO="git@github.com:apache/${PROJECT_NAME}.git"
else
PROJECT_REPO="https://github.com/apache/${PROJECT_NAME}.git"
fi
##############################################################
#
# Rebuild specific directory, if directory exists, will remove
# it before create it, otherwise create it directly. It
# supports one or more parameters.
#
# Arguments:
#
# <path...>: One or more directories want to rebuild
#
##############################################################
function rebuild_dirs() {
for dir in "$@"; do
echo " ---> Rebuild directory ${dir}"
if [ -d "${dir}" ]; then
rm -rf "${dir}"
fi
mkdir -p "${dir}"
done
}
##############################################################
#
# Remove specific exists file. It supports one or more
# parameters.
#
# Arguments:
#
# <file...>: One or more files want to remove
#
##############################################################
function rm_exists_files() {
for file in "$@"; do
echo " ---> Remove exists ${file}"
if [ -f "${file}" ]; then
rm -rf "${file}"
fi
done
}
##############################################################
#
# Clone repository to target directory, it will only support
# clone one depth. Supported two or three parameters, if you
# want to clone into specific directory you should provider
# the third parameter.
#
# Arguments:
#
# repo: The link of the repository you want to clone
# branch: The branch to clone
# path: Optional parameter, The directory to keep the clone
# content
#
##############################################################
function clone_repo() {
if [ "$#" -eq 2 ]; then
local repo="${1}"
local path="${2}"
echo " ---> Start clone repository ${repo} to directory ${path}"
git clone --depth 1 "${repo}" "${path}"
elif [ "$#" -eq 3 ]; then
local repo="${1}"
local branch="${2}"
local path="${3}"
echo " ---> Start clone repository ${repo} branch ${branch} to directory ${path}"
git clone --depth 1 --branch "${branch}" "${repo}" "${path}"
else
echo "Illegal number of parameters. Only support parameters number of 2 or 3 but get $#."
exit 1
fi
}
##############################################################
#
# Replace images path in markdown documents, the source path
# in repo `apache/incubator-seatunnel` is like `images/<name>.png`
# and we should replace it to `images_en/<name>.png`
#
# Arguments:
#
# replace_dir: The directory to replace the img path
#
##############################################################
function replace_images_path(){
replace_dir=$1
for file_path in "${replace_dir}"/*; do
if test -f "${file_path}"; then
if [ "${file_path##*.}"x = "md"x ] || [ "${file_path##*.}"x = "mdx"x ]; then
echo " ---> Replace images path to /doc/image_en in ${file_path}"
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -E -i '' "s/(\.\.\/)*images/\/image_en/g" "${file_path}"
else
sed -E -i "s/(\.\.\/)*images/\/image_en/g" "${file_path}"
fi
fi
else
replace_images_path "${file_path}"
fi
done
}
##############################################################
# Main project to do prepare job to debug and build our web
##############################################################
function prepare_docs() {
echo "===>>>: Start documents sync."
echo "===>>>: Rebuild directory swap, docs, static/image_en."
rebuild_dirs "${SWAP_DIR}" "${PROJECT_SITE_DOC_DIR}" "${PROJECT_SITE_IMG_DIR}"
echo "===>>>: Remove exists file sidebars.js."
rm_exists_files "${DOCUSAURUS_DOC_SIDEBARS_FILE}"
echo "===>>>: Clone project main codebase repositories."
clone_repo "${PROJECT_REPO}" "${PROJECT_BRANCH_NAME}" "${PROJECT_DIR}"
echo "===>>>: Rsync sidebars.js to ${DOCUSAURUS_DOC_SIDEBARS_FILE}"
rsync -av "${PROJECT_SIDEBAR_PATH}" "${DOCUSAURUS_DOC_SIDEBARS_FILE}"
echo "===>>>: Rsync images to ${PROJECT_SITE_IMG_DIR}"
rsync -av "${PROJECT_IMG_DIR}"/ "${PROJECT_SITE_IMG_DIR}"
echo "===>>>: Rsync documents exclude images to ${PROJECT_SITE_DOC_DIR}"
rsync -av --exclude images "${PROJECT_DOC_DIR}"/ "${PROJECT_SITE_DOC_DIR}"
echo "===>>>: Replace images path in ${PROJECT_SITE_DOC_DIR}"
replace_images_path "${PROJECT_SITE_DOC_DIR}"
echo "===>>>: End documents sync"
}
prepare_docs