Skip to content
Snippets Groups Projects
Commit 2a6c77e9 authored by Max Melchert's avatar Max Melchert
Browse files

feat: add configuration and targets to makefile

parent a691dd0f
No related branches found
No related tags found
No related merge requests found
# Server Setup
SERVER_USER := user
SERVER_HOST := host
CONDA_PATH := /opt/conda
CONDA_ENV := base
# Project Directories
REMOTE_PATH := /path/to/server/code
LOCAL_PATH := /path/to/client/code
# Output Directory
OUTPUT_DIR := output
# Files
MAIN_SCRIPT := main.py
LOG_FILE := logfile.log
.PHONY: push exec status pull
push:
rsync -a $(LOCAL_PATH) $(SERVER_USER)@$(SERVER_HOST):$(REMOTE_PATH)
exec:
ssh $(SERVER_USER)@$(SERVER_HOST) 'cd $(REMOTE_PATH) && conda run -n $(CONDA_ENV) python $(MAIN_SCRIPT)'
status:
ssh $(SERVER_USER)@$(SERVER_HOST) 'cd $(REMOTE_PATH) && tail -n 10 $(LOG_FILE)'
pull:
rsync -a $(SERVER_USER)@$(SERVER_HOST):$(REMOTE_PATH)/$(OUTPUT_DIR) $(LOCAL_PATH)
# Configuration
## Server
SERVER_USER := mmustermann
SERVER_HOST := hyrican-1-extern
## Python Environment
CONDA_PATH := /home/$(SERVER_USER)/.local/opt/conda
CONDA_ENV := 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 pip
## Project Files
MAIN_SCRIPT := main.py
LOG_FILE := progress.log
## Local Project Paths
LOCAL_PROJECT_DIR := .
LOCAL_OUTPUT_DIR := output
## Remote Project Paths
REMOTE_PROJECT_DIR := /home/$(SERVER_USER)/my_project
REMOTE_OUTPUT_FILES := output/*
# ---
LOGIN := $(SERVER_USER)@$(SERVER_HOST)
SSH := ssh $(LOGIN)
RSYNC := rsync --archive --compress --progress
CONDA := source $(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) '$(CONDA) create -n $(CONDA_ENV) python=$(PYTHON_VERSION) $(PYTHON_PACKAGES)'
upload: # upload project files from client to server
$(SSH) 'mkdir -p $(REMOTE_PROJECT_DIR)'
$(RSYNC) $(LOCAL_PROJECT_DIR)/ $(LOGIN):$(REMOTE_PROJECT_DIR)
run: # execute main script on server
$(SSH) 'cd $(REMOTE_PROJECT_DIR) && $(CONDA) run -n $(CONDA_ENV) python $(MAIN_SCRIPT)'
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) && less $(LOG_FILE)'
download: # download output files from server to client
$(RSYNC) $(LOGIN):$(REMOTE_PROJECT_DIR)/$(REMOTE_OUTPUT_FILES) $(LOCAL_PROJECT_DIR)/$(LOCAL_OUTPUT_DIR)
delete: # remove/delete all project files on server
$(SSH) 'rm -rf $(REMOTE_PROJECT_DIR)'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment