Select Git revision
smart-grid-modell-architecture.xmi
basic.mk 2.21 KiB
# Configuration
## Server
SERVER_USER := mmustermann
SERVER_HOST := hyrican-1-extern
## Python Environment
SERVER_CONDA_PATH := /opt/conda
SERVER_CONDA_ENV := ~/envs/ml
PYTHON_VERSION := 3.10
PYTHON_PACKAGES := tensorflow-cpu ipympl mypy jupyter pystan \
matplotlib seaborn scikit-learn openpyxl odfpy pyarrow \
geopandas descartes pyogrio optuna plotly tqdm spyder \
jax-jumpy moviepy shimmy-atari gymnasium-box2d \
ipywidgets notebook lxml fastparquet zstandard \
contextily networkx pyvis netgraph keras pip
## Project Paths
LOCAL_PROJECT_DIR := .
REMOTE_PROJECT_DIR := ~/akis/my_project
## Project Files
MAIN_SCRIPT := main.py
LOG_FILE := progress.log
## File Transfer
LOCAL_UPLOAD_FILES := main.py scripts data/*.pkl
LOCAL_DOWNLOAD_DIR := output
REMOTE_DOWNLOAD_FILES := output/*.svg output/*.pkl
## Misc
COPY_LINKS_AS_FILES := false
# ---
LOGIN := $(SERVER_USER)@$(SERVER_HOST)
SSH := ssh $(LOGIN)
RSYNC := rsync --archive --compress --progress $(if $(filter true,$(COPY_LINKS_AS_FILES)),--copy-links)
MAMBA := source $(SERVER_CONDA_PATH)/etc/profile.d/conda.sh && mamba # TODO: mamba.sh
CONDA := source $(SERVER_CONDA_PATH)/etc/profile.d/conda.sh && conda
.PHONY: install upload run kill log download delete
help: # list targets and usage
@awk '/^[a-zA-Z0-9_-]+:/{print $1}' makefile
install: # install conda environment
$(SSH) '\
$(MAMBA) create -p $(SERVER_CONDA_ENV) python=$(PYTHON_VERSION) $(PYTHON_PACKAGES)\
'
upload: # upload project files from client to server
$(RSYNC) --relative $(foreach file,$(LOCAL_UPLOAD_FILES),$(LOCAL_PROJECT_DIR)/$(file)) $(LOGIN):$(REMOTE_PROJECT_DIR)
run: # execute main script on server
$(SSH) '\
cd $(REMOTE_PROJECT_DIR);\
$(CONDA) activate $(SERVER_CONDA_ENV);\
python $(MAIN_SCRIPT);\
$(CONDA) deactivate;\
'
kill: # terminate the running script on the server
$(SSH) '\
pkill -f $(MAIN_SCRIPT)\
'
log: # show the last lines of the log file
$(SSH) '\
cd $(REMOTE_PROJECT_DIR) && tail -f $(LOG_FILE)\
'
download: # download output files from server to client
$(RSYNC) $(LOGIN):$(REMOTE_PROJECT_DIR)/$(REMOTE_DOWNLOAD_FILES) $(LOCAL_PROJECT_DIR)/$(LOCAL_DOWNLOAD_DIR)
delete: # remove/delete all project files on server
$(SSH) '\
rm -rf $(REMOTE_PROJECT_DIR)\
'