#!/usr/bin/env bash set -euo pipefail script_dirpath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root_dirpath="$(cd "${script_dirpath}/.." && pwd)" REVERT="NO" COPY="NO" MOVE_NEW_FILES="NO" EE_CODE_DIR="../windmill-ee-private/" DIR_EXPLICIT="NO" while [[ $# -gt 0 ]]; do case $1 in -r|--revert) # Removes all _ee.rs files from the backend directory. Symlinks are deleted. # Regular files with content differing from windmill-ee-private are moved back # to the EE repo so nothing is lost. REVERT="YES" shift ;; -c|--copy) # By default, EE files are symlinked. Pass this option to do a real copy instead. # This might be necessary if you want to build the Docker Image as Docker COPY seems # to not follow symlinks. For local development, symlinks should be preferred as they # adds a safeguards EE files can't be commited to the OSS repo. COPY="YES" shift # past argument ;; -m|--move-new-files) # This moves all new EE files from the public repository to the private repository. MOVE_NEW_FILES="YES" shift # past argument ;; -d|--dir) # Path to the local directory of the windmill-ee-private repository. By defaults, it # assumes it is cloned next to the Windmill OSS repo. EE_CODE_DIR="$2" DIR_EXPLICIT="YES" shift # past argument shift # past value ;; -*|--*) echo "Unknown option $1" exit 1 ;; *) POSITIONAL_ARGS+=("$1") # save positional arg shift # past argument ;; esac done if [[ $EE_CODE_DIR == /* ]]; then EE_CODE_DIR="${EE_CODE_DIR}" else EE_CODE_DIR="${root_dirpath}/${EE_CODE_DIR}" fi # Fallback to ~/windmill-ee-private if the default location doesn't exist if [ ! -d "${EE_CODE_DIR}" ]; then EE_CODE_DIR="${HOME}/windmill-ee-private" fi # Unless --dir was explicitly set, try to find an EE worktree on the same branch if [ "$DIR_EXPLICIT" == "NO" ] && [ -d "${HOME}/windmill-ee-private" ]; then current_branch=$(git -C "${root_dirpath}" branch --show-current 2>/dev/null || true) if [ -n "$current_branch" ]; then ee_worktree=$(git -C "${HOME}/windmill-ee-private" worktree list 2>/dev/null \ | awk -v branch="[${current_branch}]" '$NF == branch {print $1; exit}') if [ -n "$ee_worktree" ] && [ -d "$ee_worktree" ]; then EE_CODE_DIR="$ee_worktree" fi fi fi echo "EE code directory = ${EE_CODE_DIR} | Revert = ${REVERT}" if [ ! -d "${EE_CODE_DIR}" ]; then echo "Windmill EE repo not found, please clone it next to this repository (or use the --dir option) and try again" echo "> git clone git@github.com:windmill-labs/windmill-ee-private.git" echo "" exit 0 fi if [ "$REVERT" == "YES" ]; then backend_dirpath="${root_dirpath}/backend/" for ce_file in $(find "${root_dirpath}/backend" \( -name "*_ee.rs" -o -name "ee.rs" \)); do if [ -L "${ce_file}" ]; then rm "${ce_file}" echo "Deleted symlink '${ce_file}'" else ee_file="${ce_file/${backend_dirpath}/}" ee_file="${EE_CODE_DIR}${ee_file}" if [ ! -f "${ee_file}" ] || ! diff -q "${ce_file}" "${ee_file}" > /dev/null 2>&1; then mkdir -p "$(dirname "${ee_file}")" mv "${ce_file}" "${ee_file}" echo "Moved '${ce_file}' -->> '${ee_file}'" else rm "${ce_file}" echo "Deleted '${ce_file}' (identical to EE)" fi fi done exit 0 fi if [ "$MOVE_NEW_FILES" == "NO" ]; then # This replaces all files in current repo with alternative EE files in windmill-ee-private for ee_file in $(find "${EE_CODE_DIR}" -name "*ee.rs"); do ce_file="${ee_file/${EE_CODE_DIR}/}" ce_file="${root_dirpath}/backend/${ce_file}" if [ "$COPY" == "YES" ]; then cp "${ee_file}" "${ce_file}" echo "File copied '${ee_file}' -->> '${ce_file}'" else ln -s "${ee_file}" "${ce_file}" || true echo "Symlink created '${ee_file}' -->> '${ce_file}'" fi done fi if [ "$MOVE_NEW_FILES" == "YES" ]; then for ce_file in $(find "${root_dirpath}"/backend/windmill-*/src/ -name "*ee.rs"); do backend_dirpath="${root_dirpath}/backend/" ee_file="${ce_file/${backend_dirpath}/}" ee_file="${EE_CODE_DIR}${ee_file}" if [ ! -f "${ee_file}" ]; then mv "${ce_file}" "${ee_file}" if [ ! "$REVERT" == "YES" ]; then ln -s "${ee_file}" "${ce_file}" fi echo "File moved '${ce_file}' -->> '${ee_file}'" fi done fi