#!/usr/bin/env bash # Script to check git status and commit changes if needed # This ensures the ToolboxStack is always in a clean state set -euo pipefail # Get the current directory SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "${SCRIPT_DIR}" && git rev-parse --show-toplevel 2>/dev/null || true)" # If we can't find the repo root, exit if [[ -z "${REPO_ROOT}" ]]; then echo "Error: Unable to find git repository root" >&2 exit 1 fi # Change to the repo root cd "${REPO_ROOT}" # Check if there are any changes if ! git diff --quiet --ignore-submodules --exit-code; then echo "Git working tree has uncommitted changes. Committing..." # Add all changes git add . # Create a commit message TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S") BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) # Try to get a meaningful commit message based on changed files CHANGED_FILES=$(git diff --name-only HEAD | head -10) if [[ -n "${CHANGED_FILES}" ]]; then COMMIT_MSG="chore(toolboxstack): Auto-commit changes at ${TIMESTAMP}" else COMMIT_MSG="chore(toolboxstack): Periodic update at ${TIMESTAMP}" fi # Commit the changes if git commit -m "${COMMIT_MSG}"; then echo "Successfully committed changes" else echo "Failed to commit changes" >&2 exit 1 fi else echo "Git working tree is clean. No changes to commit." fi # Check if we need to push # (This would require checking if the local branch is ahead of the remote) # For now, we'll just inform the user echo "Git status check completed."