|  | #!/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 |