From 189360e6ad34d02cec6e923c838aa1786a8fcf05 Mon Sep 17 00:00:00 2001
From: Max Melchert <maximilian.melchert@stud.hs-bochum.de>
Date: Wed, 12 Mar 2025 12:14:58 +0100
Subject: [PATCH] feat: rename makefile to allow multiple makefiles

---
 src/makefile/README.md |  7 ++--
 src/makefile/basic.mk  | 77 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 81 insertions(+), 3 deletions(-)
 create mode 100644 src/makefile/basic.mk

diff --git a/src/makefile/README.md b/src/makefile/README.md
index ded7a56..ca4872e 100644
--- a/src/makefile/README.md
+++ b/src/makefile/README.md
@@ -42,11 +42,12 @@ Vorteile von _Byobu_:
 
 ## Installation
 
-1. Makefile [herunterladen](./makefile)
+1. Makefile [herunterladen](./basic.mk)
 2. Makefile in Projektordner speichern
    - Projektstruktur ([Beispiel](#projektstruktur))
-3. Makefile [konfigurieren](#konfiguration)
-4. `make install`
+3. Makefile in `Makefile` oder `makefile` umbenennen
+4. Makefile [konfigurieren](#konfiguration)
+5. `make install`
 
 <details>
 <summary>Details anzeigen</summary>
diff --git a/src/makefile/basic.mk b/src/makefile/basic.mk
new file mode 100644
index 0000000..8abe373
--- /dev/null
+++ b/src/makefile/basic.mk
@@ -0,0 +1,77 @@
+# Configuration
+
+## Server
+SERVER_USER := mmustermann
+SERVER_HOST := hyrican-1-extern
+
+## Python Environment
+CONDA_PATH := ~/.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 := ~/my_project
+REMOTE_OUTPUT_FILES := output/*
+
+## 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)
+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
+	$(RSYNC) $(LOCAL_PROJECT_DIR)/ $(LOGIN):$(REMOTE_PROJECT_DIR)
+
+run: # execute main script on server
+	$(SSH) '\
+		cd $(REMOTE_PROJECT_DIR);\
+		$(CONDA) activate $(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_OUTPUT_FILES) $(LOCAL_PROJECT_DIR)/$(LOCAL_OUTPUT_DIR)
+
+delete: # remove/delete all project files on server
+	$(SSH) '\
+		rm -rf $(REMOTE_PROJECT_DIR)\
+	'
-- 
GitLab