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