mirror of
https://codeberg.org/muon/home.git
synced 2026-03-08 03:25:16 +00:00
168 lines
4 KiB
Bash
168 lines
4 KiB
Bash
# Set default PROJECT_ID if not already set
|
|
if [[ -z "$PROJECT_ID" ]]; then
|
|
export PROJECT_ID="mk2-test"
|
|
fi
|
|
|
|
_hr_usage() {
|
|
echo "Usage: hr <command>"
|
|
echo "Commands:"
|
|
echo " switch Switch PROJECT_ID between mk2-test and mk2-prod"
|
|
echo " init py Initialize a python devenv environment (git-ignored)"
|
|
echo " freeze Freeze dependencies to requirements.txt"
|
|
}
|
|
|
|
_hr_init_py() {
|
|
echo "Initializing python devenv..."
|
|
|
|
# 1. Init devenv
|
|
if [ -f .gitignore ]; then
|
|
cp .gitignore .gitignore.bak
|
|
fi
|
|
|
|
if command -v devenv >/dev/null; then
|
|
devenv init
|
|
echo "Direnv allowed"
|
|
else
|
|
echo "Error: devenv not found in path."
|
|
return 1
|
|
fi
|
|
|
|
if [ -f .gitignore.bak ]; then
|
|
mv .gitignore.bak .gitignore
|
|
elif [ -f .gitignore ]; then
|
|
rm .gitignore
|
|
fi
|
|
|
|
# 2. Replace devenv.nix
|
|
cat <<EOF >devenv.nix
|
|
{pkgs, ...}: {
|
|
packages = [ pkgs.google-cloud-sdk ];
|
|
|
|
languages.python = {
|
|
enable = true;
|
|
venv.enable = true;
|
|
uv = {
|
|
enable = true;
|
|
sync.enable = false;
|
|
};
|
|
};
|
|
|
|
# We use the named index "google" defined in uv.toml
|
|
env.UV_INDEX_GOOGLE_USERNAME = "oauth2accesstoken";
|
|
env.PROJECT_ID = "mk2-test";
|
|
|
|
enterShell = ''
|
|
if ! gcloud auth print-access-token >/dev/null 2>&1; then
|
|
echo "⚠️ gcloud not authenticated. Run 'gcloud auth login' to access Google Artifact Registry."
|
|
else
|
|
export UV_INDEX_GOOGLE_PASSWORD=\$(gcloud auth print-access-token)
|
|
fi
|
|
uv sync
|
|
'';
|
|
}
|
|
EOF
|
|
|
|
cat <<EOF >uv.toml
|
|
[[index]]
|
|
name = "google"
|
|
url = "https://europe-west1-python.pkg.dev/mk2-prod/python-packages/simple/"
|
|
EOF
|
|
|
|
# 3. Add to local git exclude
|
|
if git rev-parse --git-dir >/dev/null 2>&1; then
|
|
EXCLUDE_FILE=$(git rev-parse --git-path info/exclude)
|
|
mkdir -p "$(dirname "$EXCLUDE_FILE")"
|
|
|
|
IGNORES=(
|
|
".devenv*"
|
|
".direnv"
|
|
"devenv.nix"
|
|
"devenv.yaml"
|
|
"devenv.lock"
|
|
"uv.lock"
|
|
"uv.toml"
|
|
".envrc"
|
|
)
|
|
|
|
for file in "${IGNORES[@]}"; do
|
|
if ! grep -Fxq "$file" "$EXCLUDE_FILE" 2>/dev/null; then
|
|
echo "$file" >>"$EXCLUDE_FILE"
|
|
echo "Added $file to local git exclude ($EXCLUDE_FILE)"
|
|
fi
|
|
done
|
|
else
|
|
echo "Warning: Not a git repository. Skipping git ignore setup."
|
|
fi
|
|
|
|
# 4. Allow direnv
|
|
if command -v direnv >/dev/null; then
|
|
direnv allow
|
|
echo "Direnv allowed"
|
|
else
|
|
echo "Error: direnv not found in path."
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
_hr_freeze() {
|
|
local extra_index_url="https://europe-west1-python.pkg.dev/mk2-prod/python-packages/simple/"
|
|
|
|
# Install the auth plugin and keyring CLI
|
|
uv pip install keyrings.google-artifactregistry-auth==1.1.2 keyring
|
|
|
|
# Install project dependencies using the subprocess keyring provider
|
|
uv pip install --no-cache -e .[test] --extra-index-url "${extra_index_url}" --keyring-provider subprocess
|
|
|
|
# Generate requirements.txt
|
|
echo "--extra-index-url ${extra_index_url}" >requirements.txt
|
|
uv pip freeze --exclude-editable >>requirements.txt
|
|
}
|
|
|
|
hr() {
|
|
if [[ $# -eq 0 ]]; then
|
|
_hr_usage
|
|
return 1
|
|
fi
|
|
|
|
local command="$1"
|
|
shift
|
|
|
|
if [[ "$command" == "switch" ]]; then
|
|
if [[ -z "$1" ]]; then
|
|
# Toggle between test and prod
|
|
if [[ "$PROJECT_ID" == "mk2-test" ]]; then
|
|
export PROJECT_ID="mk2-prod"
|
|
echo "Switched PROJECT_ID to mk2-prod"
|
|
else
|
|
export PROJECT_ID="mk2-test"
|
|
echo "Switched PROJECT_ID to mk2-test"
|
|
fi
|
|
elif [[ "$1" == "test" ]]; then
|
|
export PROJECT_ID="mk2-test"
|
|
echo "Set PROJECT_ID to mk2-test"
|
|
elif [[ "$1" == "prod" ]]; then
|
|
export PROJECT_ID="mk2-prod"
|
|
echo "Set PROJECT_ID to mk2-prod"
|
|
else
|
|
echo "Usage: hr switch [test|prod]"
|
|
return 1
|
|
fi
|
|
return 0
|
|
fi
|
|
|
|
# Run original logic in a subshell to preserve set -e behavior without affecting current shell
|
|
(
|
|
set -e
|
|
# Restore arguments for processing
|
|
set -- "$command" "$@"
|
|
|
|
if [ "$1" = "init" ] && [ "$2" = "py" ]; then
|
|
_hr_init_py
|
|
elif [ "$1" = "freeze" ]; then
|
|
_hr_freeze
|
|
else
|
|
_hr_usage
|
|
exit 1
|
|
fi
|
|
)
|
|
}
|