diff --git a/documentation/docs/contributing/development.mdx b/documentation/docs/contributing/development.mdx index 1fa73f10..89294fbb 100644 --- a/documentation/docs/contributing/development.mdx +++ b/documentation/docs/contributing/development.mdx @@ -186,7 +186,7 @@ In whichever clients you're using for testing, you'll need to update the server ### Before Making Changes 1. Install Git Hooks for Validation ```shell - pre-commit install -t pre-push -t pre-commit + ./scripts/dev_setup.sh ``` - This ensures standard code formatting fixes and other checks run automatically on every commit and push - Note 1: If [pre-commit](https://pre-commit.com/#intro) didn't already get installed, [install it](https://pre-commit.com/#install) via `pip install pre-commit` diff --git a/scripts/dev_setup.sh b/scripts/dev_setup.sh new file mode 100755 index 00000000..75e886eb --- /dev/null +++ b/scripts/dev_setup.sh @@ -0,0 +1,119 @@ +# Initialize the development environment for the project +# --- +PROJECT_ROOT=$(git rev-parse --show-toplevel) + +# Install Web App +# --- +echo "Installing Web App..." +cd $PROJECT_ROOT/src/interface/web +yarn install + +# Install Obsidian App +# --- +echo "Installing Obsidiann App..." +cd $PROJECT_ROOT/src/interface/obsidian +yarn install + +# Install Desktop App +# --- +echo "Installing Desktop App..." +cd $PROJECT_ROOT/src/interface/desktop +yarn install + +# Install Server App +# --- +echo "Installing Server App..." +cd $PROJECT_ROOT +# pip install --user pipenv && pipenv install -e '.[dev]' --skip-lock && pipenv shell +python3 -m venv .venv && pip install -e '.[dev]' && . .venv/bin/activate + +# Install pre-commit hooks +# ---- +echo "Installing pre-commit hooks..." + +# Setup pre-commit hooks using the pre-commit package +pre-commit install -t pre-push -t pre-commit + +# Run Prettier on web app +cat << 'EOF' > temp_pre_commit +# Run Prettier for Web App +# ------------------------- + +# Function to check if color output is possible +can_use_color() { + if [ -t 1 ] && command -v tput >/dev/null 2>&1 && tput colors >/dev/null 2>&1; then + return 0 + else + return 1 + fi +} + +# Function to print colored text if possible +print_color() { + if can_use_color; then + tput setab "$1" + printf "%s" "$2" + tput sgr0 + else + printf "%s" "$2" + fi +} + +print_status() { + local status="$1" + local color="$2" + printf "prettier%-64s" "..." + print_color "$color" "$status" + printf "\n" +} + +PROJECT_ROOT=$(git rev-parse --show-toplevel) +# Get the list of staged files +FILES=$(git diff --cached --name-only --diff-filter=ACMR | grep '^src/interface/web/' | sed 's| |\\ |g') +if [ -z "$FILES" ]; then + if [ -t 1 ]; then + print_status "Skipped" 6 + else + echo "prettier.....................................................Skipped" + fi +else + # Run prettier on staged files + echo "$FILES" | xargs $PROJECT_ROOT/src/interface/web/node_modules/.bin/prettier --ignore-unknown --write + + # Check if any files were modified by prettier + MODIFIED=$(git diff --name-only -- $FILES) + if [ -n "$MODIFIED" ]; then + if [ -t 1 ]; then + print_status "Modified" 1 + else + echo "prettier.....................................................Modified" + fi + exit 1 + fi + + # Add back the modified/prettified files to staging + # echo "$FILES" | xargs git add + + # Show the user if changes were made + if [ -t 1 ]; then + print_status "Passed" 2 + else + echo "prettier.....................................................Passed" + fi +fi +EOF + +# Prepend the new content to the existing pre-commit file +cat temp_pre_commit "$(git rev-parse --git-dir)/hooks/pre-commit" > temp_combined_pre_commit + +# Replace the old pre-commit file with the new combined one +mv temp_combined_pre_commit "$(git rev-parse --git-dir)/hooks/pre-commit" + +# Clean up +# --- + +# Remove the temporary pre-commit file +rm temp_pre_commit + +# Make sure the pre-commit hook is executable +chmod +x "$(git rev-parse --git-dir)/hooks/pre-commit"