-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathJustfile
More file actions
156 lines (133 loc) · 4.98 KB
/
Justfile
File metadata and controls
156 lines (133 loc) · 4.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# list all available commands
default:
just --list
# clean all build, python, and lint files
clean:
rm -fr build
rm -fr docs/_build
rm -fr dist
rm -fr .eggs
find . -name '*.egg-info' -exec rm -fr {} +
find . -name '*.egg' -exec rm -f {} +
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
find . -name '__pycache__' -exec rm -fr {} +
rm -fr .coverage
rm -fr coverage.xml
rm -fr htmlcov
rm -fr .pytest_cache
rm -fr .mypy_cache
# install with all deps
install:
uv pip install -e '.[lint,test,docs,dev]'
# lint, format, and check all files
lint:
pre-commit run --all-files
# run tests
test:
pytest semantic_navigator/tests
# run lint and then run tests
build:
just lint
just test
# generate Sphinx HTML documentation
generate-docs:
rm -f docs/semantic_navigator*.rst
rm -f docs/modules.rst
sphinx-apidoc -o docs semantic_navigator **/tests
python -msphinx "docs" "docs/_build"
# Generate project URI for browser opening
# We replace here to handle windows paths
# Windows paths are normally `\` separated but even in the browser they use `/`
# https://stackoverflow.com/a/61991869
project_uri := if "os_family()" == "unix" {
justfile_directory()
} else {
replace(justfile_directory(), "\\", "/")
}
# generate Sphinx HTML documentation and serve to browser
serve-docs:
just generate-docs
python -mwebbrowser -t "file://{{project_uri}}/docs/_build/index.html"
# tag a new version
tag-for-release version:
git tag -a "{{version}}" -m "{{version}}"
echo "Tagged: $(git tag --sort=-version:refname| head -n 1)"
# release a new version
release:
git push --follow-tags
# update this repo using latest cookiecutter-py-package
update-from-cookiecutter:
pip install cookiecutter
cookiecutter gh:evamaxfield/cookiecutter-py-package --config-file .cookiecutter.yaml --no-input --overwrite-if-exists --output-dir ..
###############################################################################
# infra
# get and store user
USER := env_var("USER")
# default params
default_region := "us-central1"
default_key_dir := ".keys/"
default_key := ".keys/sem-nav-dev.json"
default_project := "sem-nav-eva-006"
# run gcloud login
login:
gcloud auth login
gcloud auth application-default login
# generate a service account JSON
gen-key project=default_project:
mkdir -p {{default_key_dir}}
rm -rf {{default_key_dir}}{{project}}.json
gcloud iam service-accounts create {{project}} \
--description="Dev Service Account for {{USER}}" \
--display-name="{{project}}"
gcloud projects add-iam-policy-binding {{project}} \
--member="serviceAccount:{{project}}@{{project}}.iam.gserviceaccount.com" \
--role="roles/owner"
gcloud iam service-accounts keys create {{default_key_dir}}{{project}}.json \
--iam-account "{{project}}@{{project}}.iam.gserviceaccount.com"
@ echo "----------------------------------------------------------------------------"
@ echo "Sleeping for fifteen seconds while resources set up"
@ echo "----------------------------------------------------------------------------"
sleep 15
cp -rf {{default_key_dir}}{{project}}.json {{default_key}}
@ echo "----------------------------------------------------------------------------"
@ echo "Be sure to update the GOOGLE_APPLICATION_CREDENTIALS environment variable."
@ echo "----------------------------------------------------------------------------"
# create a new gcloud project and generate a key
init project=default_project:
gcloud projects create {{project}} --set-as-default
@ echo "----------------------------------------------------------------------------"
@ echo "Follow the link to setup billing for the created GCloud account."
@ echo "https://console.cloud.google.com/billing/linkedaccount?project={{project}}"
@ echo "----------------------------------------------------------------------------"
just gen-key {{project}}
# enable gcloud services
enable-services:
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable cloudfunctions.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com
# deploy the web app
deploy project=default_project region=default_region:
just enable-services
-gsutil mb gs://{{project}}
gsutil cors set cors.json gs://{{project}}
gsutil defacl ch -u AllUsers:R gs://{{project}}
gcloud builds submit --tag gcr.io/{{project}}/semanticnavigator
gcloud run deploy semanticnavigator \
--image gcr.io/{{project}}/semanticnavigator \
--region {{region}} \
--allow-unauthenticated \
--memory 4Gi
# fully teardown project
destroy project:
gcloud projects delete {{project}}
rm -f {{default_key_dir}}{{project}}.json
# build docker image locally
build-docker:
docker build --tag semantic-navigator {{justfile_directory()}}
# run docker image locally
run-docker:
docker run --rm -p 8080:8080 -e PORT=8080 semantic-navigator