From 688db3175245221f43cc334005f1eef65bb3b0e8 Mon Sep 17 00:00:00 2001
From: David Trattnig <david@subsquare.at>
Date: Sat, 23 Jul 2022 15:52:54 +0200
Subject: [PATCH] Chore: Makefile to replace run.sh

---
 .codespell-whitelist |   4 ++
 Dockerfile           |  15 +++--
 Makefile             | 113 ++++++++++++++++++++++++++++++++++++
 run.sh               | 134 -------------------------------------------
 4 files changed, 126 insertions(+), 140 deletions(-)
 create mode 100644 .codespell-whitelist
 create mode 100644 Makefile
 delete mode 100755 run.sh

diff --git a/.codespell-whitelist b/.codespell-whitelist
new file mode 100644
index 0000000..93f82e5
--- /dev/null
+++ b/.codespell-whitelist
@@ -0,0 +1,4 @@
+HDA
+hda
+occuring
+fro
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index e5f3761..8262dcc 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,7 +5,9 @@ LABEL maintainer="David Trattnig <david.trattnig@subsquare.at>"
 USER root
 
 # Dependencies & Utils
-RUN apt update --allow-releaseinfo-change && apt -y install \
+RUN apt update --allow-releaseinfo-change && \
+      apt -y --no-install-recommends install \
+      build-essential \
       alsa-utils \
       libssl-dev
 
@@ -15,15 +17,16 @@ RUN mkdir -p /srv/tests
 RUN mkdir -p /srv/config
 COPY src /srv/src
 COPY tests /srv/tests
-COPY run.sh /srv
-VOLUME ["/srv/socket", "/srv/logs", "/srv/audio/source", "/srv/audio/playlist", "/srv/audio/station"]
+COPY Makefile /srv/Makefile
+COPY VERSION /srv/VERSION
+VOLUME ["/srv/socket", "/srv/logs", "/srv/audio/source", "/srv/audio/playlist", "/srv/audio/fallback"]
 #RUN chown -R liquidsoap:liquidsoap /srv
 WORKDIR /srv
 
-# User liquodsoap has uid 10000 and gid 10001
+# User Liquidsoap has UID 10000 and GID 10001
 #USER liquidsoap
 
 # Start the Engine
 EXPOSE 1234/tcp
-ENTRYPOINT ["./run.sh", "prod"]
-CMD ["core"]
+ENTRYPOINT ["make"]
+CMD ["run"]
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..9da1d80
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,113 @@
+
+APP_NAME := $(shell basename $(dir $(abspath $(dir $$PWD/Makefile))))
+-include scripts/Makefile.*
+
+.PHONY: help
+help:
+	@echo "$(APP_NAME) targets:"
+	@echo "    lint            - verify code style"
+	@echo "    spelling        - check spelling of text"
+	@echo "    test            - run test suite"
+	@echo "    log             - tail log file"
+	@echo "    syslog          - tail syslog file"
+	@echo "    run             - start app"
+	@echo "    run.debug       - start app in debug mode"
+	@echo "    docker.build    - build docker image"
+	@echo "    docker.push     - push docker image"
+	@echo "    docker.run      - start app in container"
+	@echo "    docker.restart  - restart container"
+	@echo "    docker.stop     - stop container"
+	@echo "    docker.rm       - stop and remove container"
+	@echo "    docker.log      - container logs for app"
+	@echo "    docker.bash    - enter bash in container"
+
+
+# Settings
+
+CMD_LIQUIDSOAP := /usr/bin/liquidsoap
+
+AURA_ENGINE_CORE_CONFIG := ${CURDIR}/config/engine-core.docker.ini
+AURA_ENGINE_CORE_SOCKET := ${CURDIR}/socket
+AURA_AUDIO_STORE := ${CURDIR}/audio
+AURA_AUDIO_STORE_SOURCE := ${AURA_AUDIO_STORE}/source
+AURA_AUDIO_STORE_FALLBACK := ${AURA_AUDIO_STORE}/fallback
+AURA_AUDIO_STORE_PLAYLIST := ${AURA_AUDIO_STORE}/playlist
+
+DOCKER_RUN = docker run \
+		--name $(APP_NAME) \
+		--network="host" \
+		--mount type=tmpfs,destination=/tmp \
+		--device /dev/snd \
+		--group-add audio \
+		-v "$(AURA_ENGINE_CORE_CONFIG)":"/srv/config/engine-core.ini":ro \
+		-v "$(AURA_ENGINE_CORE_SOCKET)":"/srv/socket" \
+		-v "$(AURA_AUDIO_STORE_SOURCE)":"/var/audio/source":ro \
+		-v "$(AURA_AUDIO_STORE_PLAYLIST)":"/var/audio/playlist":ro \
+		-v "$(AURA_AUDIO_STORE_FALLBACK)":"/var/audio/fallback":ro \
+		-u $(UID):$(GID) \
+		$(DOCKER_ENTRY_POINT) \
+		autoradio/$(APP_NAME)
+
+
+# Targets
+
+.PHONY: lint
+lint:
+	$(CMD_LIQUIDSOAP) --check src/engine.liq
+
+.PHONY: spelling
+spelling: SPELLING_PATHS := $(wildcard *.md) docs src tests config contrib
+spelling: SPELLING_PATHS_SKIP := src/archive
+spelling: SPELLING_EXCLUDE_FILE := .codespell-whitelist
+spelling:
+	codespell --ignore-words "$(SPELLING_EXCLUDE_FILE)" --skip "$(SPELLING_PATHS_SKIP)" $(SPELLING_PATHS)
+
+.PHONY: test
+test:
+	(cd tests && $(CMD_LIQUIDSOAP) engine_test_suite.liq)
+
+.PHONY: log
+log:
+	tail -f logs/$(APP_NAME).log
+
+.PHONY: run
+run:
+	(cd src && $(CMD_LIQUIDSOAP) ./engine.liq)
+
+.PHONY: run.debug
+run.debug:
+	(cd src && $(CMD_LIQUIDSOAP) --verbose --debug ./engine.liq)
+
+.PHONY: docker.build
+docker.build:
+	docker build -t autoradio/$(APP_NAME) .
+
+.PHONY: docker.push
+docker/push:
+	docker push autoradio/$(APP_NAME)
+
+.PHONY: docker.run
+docker.run: DOCKER_ENTRY_POINT := -d
+docker.run:
+	$(DOCKER_RUN)
+
+.PHONY: docker.restart
+docker.restart:
+	docker restart $(APP_NAME)
+
+.PHONY: docker.stop
+docker.stop:
+	docker stop $(APP_NAME)
+
+.PHONY: docker.rm
+docker.rm: docker.stop
+	docker rm $(APP_NAME)
+
+.PHONY: docker.log
+docker.log:
+	docker logs $(APP_NAME) -f
+
+.PHONY: docker.bash
+docker.bash: DOCKER_ENTRY_POINT := -v "$(CURDIR)":"/srv" --entrypoint bash -it
+docker.bash:
+	$(DOCKER_RUN)
diff --git a/run.sh b/run.sh
deleted file mode 100755
index 34fac64..0000000
--- a/run.sh
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/bin/bash
-mode="dev"
-docker="false"
-
-#
-# Run Script for AURA Engine
-#
-# Call with one of these parameters:
-#
-# - dev
-# - prod
-# - debug
-# - log
-
-# - docker:dev
-# - docker:debug
-# - docker:build
-# - docker:push
-#
-
-if [[ $* =~ ^(dev|prod|debug|log)$ ]]; then
-	mode=$1
-fi
-
-if [[ "$1" == *"docker:"* ]]; then
-	docker="true"
-	mode=${1#*:}
-fi
-
-
-echo "[ Run mode=$mode ]"
-echo "[ Docker=$docker ]"
-LQS_CMD=liquidsoap
-
-
-# +++ DEFAULT COMMANDS +++ #
-
-if [[ $docker == "false" ]]; then
-
-	### Runs Engine Core in Development (Liquidsoap) ###
-
-	if [[ $mode == "dev" ]]; then
-		(cd src && $LQS_CMD ./engine.liq)
-	fi
-
-	### Runs Engine Core in Production (Liquidsoap) ###
-
-	if [[ $mode == "prod" ]]; then
-		(cd src && $LQS_CMD ./engine.liq)
-	fi
-
-	### Runs Engine Core (Verbose & debug output) ###
-
-	if [[ $mode == "debug" ]]; then
-		(cd src && $LQS_CMD  --verbose --debug ./engine.liq)
-	fi
-
-	### Tails the log file only (Used for Docker debugging) ###
-
-	if [[ $mode == "log" ]]; then
-		tail -f logs/engine-core.log
-	fi
-fi
-
-
-# +++ DOCKER COMMANDS +++ #
-
-if [[ $docker == "true" ]]; then
-	BASE_DIR=$(readlink -f .)
-	AUDIO_DIR=$(readlink -f ./audio)
-	echo "Absolute base dir: " $BASE_DIR
-	echo "Absolute audio dir: " $AUDIO_DIR
-
-	### Runs Engine Core ###
-
-	if [[ $mode == "dev" ]]; then
-		exec sudo docker run \
-			--network="host" \
-			--name aura-engine-core \
-			--rm \
-			-u $UID:$GID \
-			-v "$BASE_DIR/config/engine-core.docker.ini":"/srv/config/engine-core.ini":ro \
-			-v "$BASE_DIR/socket":"/srv/socket" \
-			-v "$AUDIO_DIR/source":"/var/audio/source":ro \
-			-v "$AUDIO_DIR/playlist":"/var/audio/playlist":ro \
-			-v "$AUDIO_DIR/station":"/var/audio/station":ro \
-			-v "$BASE_DIR/logs":"/srv/logs" \
-			-v "/etc/asound.conf":"/etc/asound.conf" \
-			--mount type=tmpfs,destination=/tmp \
-			--device /dev/snd \
-			--group-add audio \
-			autoradio/engine-core
-	fi
-
-	### Debugging mode: only tails the log file and enter the container manually ###
-
-	if [[ $mode == "debug" ]]; then
-		exec sudo docker run \
-			--network="host" \
-			--name aura-engine-core \
-			--rm \
-			-u $UID:$GID \
-			-v "$BASE_DIR/config/engine-core.docker.ini":"/srv/config/engine-core.ini":ro \
-			-v "$BASE_DIR/socket":"/srv/socket" \
-			-v "$AUDIO_DIR/source":"/var/audio/source":ro \
-			-v "$AUDIO_DIR/playlist":"/var/audio/playlist":ro \
-			-v "$AUDIO_DIR/station":"/var/audio/station":ro \
-			-v "$BASE_DIR/contrib":"/srv/contrib" \
-			-v "$BASE_DIR/tests":"/srv/tests" \
-			-v "$BASE_DIR/logs":"/srv/logs" \
-			-v "$BASE_DIR/contrib":"/srv/contrib" \
-			-v "$BASE_DIR/tests":"/srv/tests" \
-			-v "/etc/asound.conf":"/etc/asound.conf" \
-			--privileged \
-			--memory=8g --memory-reservation=4g \
-			--cpus=4.0 --cpu-shares=3000 \
-			--mount type=tmpfs,destination=/tmp \
-			--device /dev/snd \
-			--group-add audio \
-			autoradio/engine-core log
-	fi
-
-	### Create Docker Image from local project ###
-
-	if [[ $mode == "build" ]]; then
-		docker build -t autoradio/engine-core .
-	fi
-
-	### Pushes the latest Docker Image to Docker Hub ###
-
-	if [[ $mode == "push" ]]; then
-		docker push autoradio/engine-core
-	fi
-fi
\ No newline at end of file
-- 
GitLab