From dd8a29acc2c6ac58bc37e2de3fe048cf4a2c0245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Tr=C3=B6ger?= Date: Sun, 30 Nov 2025 19:54:00 +0100 Subject: [PATCH] added install script + reworked pipeline --- .gitea/workflows/build.yaml | 3 +- .gitea/workflows/test.yaml | 13 ++++---- Backend/database.go | 3 +- Docker/docker-compose.yml | 4 +-- Docker/env.example | 2 +- Makefile | 8 +++++ install.sh | 63 +++++++++++++++++++++++++++++++------ 7 files changed, 75 insertions(+), 21 deletions(-) diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index c32282f..a73ba14 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -2,7 +2,8 @@ name: Arbeitszeitmessung Deploy run-name: ${{ gitea.actor }} is building and deploying arbeitszeitmesssung on: push: - tags: "*" + tags: + - "*" jobs: testing: diff --git a/.gitea/workflows/test.yaml b/.gitea/workflows/test.yaml index 2a3dfc4..22d5898 100644 --- a/.gitea/workflows/test.yaml +++ b/.gitea/workflows/test.yaml @@ -15,8 +15,8 @@ jobs: POSTGRES_DB: arbeitszeitmessung env: POSTGRES_HOST: postgres - POSTGRES_USER: root - POSTGRES_PASSWORD: password + POSTGRES_API_USER: root + POSTGRES_API_PASS: password POSTGRES_DB: arbeitszeitmessung POSTGRES_PORT: 5432 RUNNER_TOOL_CACHE: /toolcache # Runner Tool Cache @@ -26,10 +26,7 @@ jobs: with: # Disabling shallow clone is recommended for improving relevancy of reporting fetch-depth: 0 - - name: Setup go - uses: actions/setup-go@v5 - with: - go-version-file: Backend/go.mod + - uses: https://gitea.com/actions/go-hashfiles@v0.0.1 id: hash-go with: @@ -46,6 +43,10 @@ jobs: key: arbeitszeitmessung-${{ steps.hash-go.outputs.hash }} restore-keys: |- arbeitszeitmessung- + - name: Setup go + uses: actions/setup-go@v5 + with: + go-version-file: Backend/go.mod - name: Run Go Tests run: cd Backend && mkdir .test && go test ./... -coverprofile=.test/coverage.out -json > .test/report.json - name: Verify coverage report exists diff --git a/Backend/database.go b/Backend/database.go index bad1b77..8394d1f 100644 --- a/Backend/database.go +++ b/Backend/database.go @@ -14,7 +14,8 @@ func OpenDatabase() (models.IDatabase, error) { dbName := helper.GetEnv("POSTGRES_DB", "arbeitszeitmessung") dbUser := helper.GetEnv("POSTGRES_API_USER", "api_nutzer") dbPassword := helper.GetEnv("POSTGRES_API_PASS", "password") + dbTz := helper.GetEnv("TZ", "Europe/Berlin") - connStr := fmt.Sprintf("postgres://%s:%s@%s:5432/%s?sslmode=disable&TimeZone=Europe/Berlin", dbUser, dbPassword, dbHost, dbName) + connStr := fmt.Sprintf("postgres://%s:%s@%s:5432/%s?sslmode=disable&TimeZone=%s", dbUser, dbPassword, dbHost, dbName, dbTz) return sql.Open("postgres", connStr) } diff --git a/Docker/docker-compose.yml b/Docker/docker-compose.yml index f08a18b..d3d97c0 100644 --- a/Docker/docker-compose.yml +++ b/Docker/docker-compose.yml @@ -6,9 +6,7 @@ services: env_file: - .env environment: - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_DB: ${POSTGRES_DB} + PGTZ: ${TZ} PGDATA: /var/lib/postgresql/data/pg_data volumes: - ${POSTGRES_PATH}:/var/lib/postgresql/data diff --git a/Docker/env.example b/Docker/env.example index fb99eed..b79f985 100644 --- a/Docker/env.example +++ b/Docker/env.example @@ -4,7 +4,7 @@ POSTGRES_API_USER=api_nutzer # Postgres API Nutzername (für Arbeitszeitmessu POSTGRES_API_PASS=password # Postgres API Passwort (für Arbeitszeitmessung) POSTGRES_PATH=../DB # Datebank Pfad (relativ zu Docker Ordner oder absoluter pfad mit /...) POSTGRES_DB=arbeitszeitmessung # Postgres Datenbank Name -EXPOSED_PORT=8000 # Port auf welchem Arbeitszeitmessung läuft +EXPOSED_PORT=8000 # Port auf welchem Arbeitszeitmessung läuft regex:^[0-9]{1,5}$ TZ=Europe/Berlin # Zeitzone PGTZ=Europe/Berlin # Zeitzone API_TOKEN=dont_access # API Token für ESP Endpoints diff --git a/Makefile b/Makefile index 58d90fb..8de2724 100644 --- a/Makefile +++ b/Makefile @@ -52,3 +52,11 @@ test: scan: test $(MAKE) -C Backend scan + +Docker/.env: + cp Docker/env.example Docker/.env + echo "Konfigurations Datei erstellt (./Docker/.env), bitte zuerst ausfüllen und danach erneut 'make install' ausführen" + exit 0 + +install: Docker/.env + echo "Install" diff --git a/install.sh b/install.sh index cd40bd6..5a0758e 100755 --- a/install.sh +++ b/install.sh @@ -30,16 +30,60 @@ if [ ! -f $envFile ]; then echo ".env not found. Creating interactively from .env.example." > $envFile - while IFS="=" read -r key val; do - [[ "$key" =~ ^#.*$ || -z "$key" ]] && continue - default_value=$(echo "$val" | sed 's/"//g') - printf "Value for $key (default: $default_value): " - read -r user_value < /dev/tty - if [ -z "$user_value" ]; then - echo "$key=$default_value" >> $envFile - else - echo "$key=$user_value" >> $envFile + while IFS= read -r line; do + + #ignore empty lines and comments + [[ "$line" =~ ^#.*$ || -z "$line" ]] && continue + + + key=$(printf "%s" "$line" | cut -d '=' -f 1) + rest=$(printf "%s" "$line" | cut -d '=' -f 2-) + + # extract inline comment portion + comment=$(printf "%s" "$rest" | sed -n 's/.*# \(.*\)$/\1/p') + raw_val=$(printf "%s" "$rest" | sed 's/ *#.*//') + default_value=$(printf "%s" "$raw_val" | sed 's/"//g') + + regex="" + if [[ "$comment" =~ regex:(.*)$ ]]; then + regex="${BASH_REMATCH[1]}" fi + + comment=$(printf "%s" "$comment" | sed 's/ regex:.*//') + + while true; do + if [ -z "$comment" ]; then + printf "Value for $key - $comment (default: $default_value" + else + printf "Value for $key (default: $default_value" + fi + if [ -n "$regex" ]; then + printf ", must match: %s" "$regex" + fi + printf "):\n" + + read user_input < /dev/tty + + # empty input -> take default + [ -z "$user_input" ] && user_input="$default_value" + + printf "\e[A$user_input\n" + + # validate + if [ -n "$regex" ]; then + if [[ "$user_input" =~ $regex ]]; then + echo "$key=$user_input" >> $envFile + break + else + printf "Invalid value. Does not match regex: %s\n" "$regex" + continue + fi + else + echo "$key=$user_input" >> $envFile + break + fi + done + done < $envExample echo ".env created." @@ -55,6 +99,7 @@ fi echo "Start containers with docker compose up -d? [y/N]" read -r start_containers if [[ "$start_containers" =~ ^[Yy]$ ]]; then + cd Docker docker compose up -d echo "Containers started." else