initial commit. Cloned timetracker repository

This commit is contained in:
Daniel Goc
2026-03-10 09:02:57 +01:00
commit f2952bcef0
189 changed files with 21334 additions and 0 deletions

11
taskfiles/build.yml Normal file
View File

@@ -0,0 +1,11 @@
version: "3"
tasks:
prod:
desc: Production build
aliases: [b]
cmds:
- bun --cwd=./bo run build
- templ generate
- go build -tags embed -o {{.BUILD_DIR}}/{{.PROJECT}} ./app/cmd/main.go

41
taskfiles/db.yml Normal file
View File

@@ -0,0 +1,41 @@
version: "3"
tasks:
reset:
desc: Drop and recreate database
cmds:
- |
docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d postgres -c \
\"SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='{{.DB_NAME}}' AND pid<>pg_backend_pid();\""
- |
docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d postgres -c \"DROP DATABASE IF EXISTS {{.DB_NAME}};\""
- |
docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d postgres -c \"CREATE DATABASE {{.DB_NAME}};\""
restore:
desc: Restore DB from file
aliases: [r]
preconditions:
- sh: '[ -n "{{index .CLI_ARGS_LIST 0}}" ]'
msg: "Usage: task db:restore -- dump.sql"
cmds:
- task db:reset
- |
cat {{index .CLI_ARGS_LIST 0}} | docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d {{.DB_NAME}}"
- task db:migrate
migrate:
desc: Apply SQL migrations
aliases: [m]
cmds:
- |
sed '/-- +goose Down/,$d' i18n/migrations/20260302163100_routes.sql | docker compose -p {{.PROJECT}} exec -T -e PGPASSWORD={{.DB_PASSWORD}} {{.DB_SERVICE_NAME}} psql -U {{.DB_USER}} -d {{.DB_NAME}}
sed '/-- +goose Down/,$d' i18n/migrations/20260302163122_create_tables.sql | docker compose -p {{.PROJECT}} exec -T -e PGPASSWORD={{.DB_PASSWORD}} {{.DB_SERVICE_NAME}} psql -U {{.DB_USER}} -d {{.DB_NAME}}
sed '/-- +goose Down/,$d' i18n/migrations/20260302163152_translations_backoffice.sql | docker compose -p {{.PROJECT}} exec -T -e PGPASSWORD={{.DB_PASSWORD}} {{.DB_SERVICE_NAME}} psql -U {{.DB_USER}} -d {{.DB_NAME}}
sed '/-- +goose Down/,$d' i18n/migrations/20260302163157_translations_backend.sql | docker compose -p {{.PROJECT}} exec -T -e PGPASSWORD={{.DB_PASSWORD}} {{.DB_SERVICE_NAME}} psql -U {{.DB_USER}} -d {{.DB_NAME}}

17
taskfiles/dev.yml Normal file
View File

@@ -0,0 +1,17 @@
version: "3"
tasks:
run:
desc: Run frontend + backend in watch mode
aliases: [d]
cmds:
- task --parallel dev:bo dev:go
bo:
cmds:
- cd bo && bun run dev
go:
cmds:
- EMAIL_SMTP_PORT={{.EMAIL_SMTP_PORT}} EMAIL_SMTP_HOST={{.EMAIL_SMTP_HOST}} air

33
taskfiles/docker.yml Normal file
View File

@@ -0,0 +1,33 @@
version: "3"
tasks:
up:
desc: Start containers
aliases: [du]
cmds:
- printf "%s\n" "{{.DOCKER_CONFIG}}" | docker-compose -f - -p {{.PROJECT}} up -d
down:
desc: Stop containers
aliases: [dd]
cmds:
- docker compose -p {{.PROJECT}} down
restart:
desc: Restart containers
aliases: [dr]
cmds:
- docker compose -p {{.PROJECT}} restart
logs:
desc: Tail logs
aliases: [dl]
cmds:
- docker compose -p {{.PROJECT}} logs -f
clean:
desc: Remove containers and volumes
aliases: [dc]
cmds:
- docker compose -p {{.PROJECT}} down -v

47
taskfiles/gitea.yml Normal file
View File

@@ -0,0 +1,47 @@
version: "3"
tasks:
pull:
desc: Pull remote Gitea DB into local DB
aliases: [gp]
silent: true
cmds:
- task db:reset
- |
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}} \
"docker exec {{.GITEA_SERVICE}} pg_dump -U {{.GITEA_USER}} {{.GITEA_DB}}" | docker compose -p {{.PROJECT}} exec -T {{.DB_SERVICE_NAME}} sh -c "PGPASSWORD='{{.DB_PASSWORD}}' psql -U {{.DB_USER}} -d {{.DB_NAME}}"
dump:
desc: Dump remote Gitea DB to file
aliases: [gd]
silent: true
cmds:
- |
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}} "docker exec {{.GITEA_SERVICE}} pg_dump -U {{.GITEA_USER}} {{.GITEA_DB}}" > {{.DUMP_FILE_NAME}}
gitea_pull_db_to_file_ma_al_pl:
desc: Pull remote Gitea DB and upload to file.ma-al.pl
aliases: [rdbtfmpl]
silent: true
vars:
SERVER: https://file.ma-al.pl
TARGET_DIR: maal_internal/timetracker/dumps
TMP_DIR: /tmp
TOKEN:
sh: |
curl -s -u "{{.FILE_MAAL_PL_USER}}:{{.FILE_MAAL_PL_PASSWORD}}" "{{.SERVER}}/api/v2/user/token" | jq -r .access_token
preconditions:
- sh: '[ -n "{{.FILE_MAAL_PL_USER}}" ]'
msg: "Missing FILE_MAAL_PL_USER in .env"
- sh: '[ -n "{{.FILE_MAAL_PL_PASSWORD}}" ]'
msg: "Missing FILE_MAAL_PL_PASSWORD in .env"
cmds:
- |
ssh {{.REMOTE_USER}}@{{.REMOTE_HOST}} "docker exec {{.GITEA_REMOTE_SERVICE}} pg_dump -U {{.GITEA_REMOTE_DB_USER}} {{.GITEA_REMOTE_DB_NAME}}" > {{.TMP_DIR}}/{{.DUMP_FILE_NAME}}
- >
curl -X POST "{{.SERVER}}/api/v2/user/files/upload?path={{.TARGET_DIR}}/{{.DUMP_FILE_NAME}}&mkdir_parents=true" -H "Authorization: Bearer {{.TOKEN}}" -H "Content-Type: application/x-tar" --data-binary "@{{.TMP_DIR}}/{{.DUMP_FILE_NAME}}"
- |
rm -f {{.TMP_DIR}}/{{.DUMP_FILE_NAME}}

19
taskfiles/i18n.yml Normal file
View File

@@ -0,0 +1,19 @@
version: "3"
tasks:
collect:
desc: Collect translation keys
aliases: [c]
cmds:
- cd i18n && go-extractor -input ../app -config config_i18n.yaml -save-db
- cd i18n && vue-extractor -input ../bo/src -config config_i18n.yaml -save-db
dump:
desc: Dump translations
aliases: [d]
cmds:
- cd i18n && go-extractor -input ../app -config config_i18n.yaml -dump ./migrations/20260302163157_translations_backend.sql
- cd i18n && vue-extractor -input ../bo/src -config config_i18n.yaml -dump ./migrations/20260302163152_translations_backoffice.sql

16
taskfiles/templates.yml Normal file
View File

@@ -0,0 +1,16 @@
version: "3"
tasks:
watch:
desc: Watch and compile templates
aliases: [w]
cmds:
- templ generate -path app/templ -watch
build:
desc: Compile templates
aliases: [b]
cmds:
- templ generate -path app/templ