From 5ddfa09ae8a28eb19744c5269baf067e10f75a55 Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Sat, 7 Mar 2026 11:37:16 +0100 Subject: [PATCH] refact --- Makefile | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 0a0a27e..31a1962 100755 --- a/Makefile +++ b/Makefile @@ -1,35 +1,62 @@ +BACKUP_BASE ?= /srv/backup +BACKUP_KEEP_DAYS ?= 7 + +DATABASE_BACKUP_BASE ?= $(BACKUP_BASE)/database +REPOSITORY_BACKUP_BASE ?= $(BACKUP_BASE)/repositories + +REDMINE_STACK ?= /srv/stacks/redmine +WIKI_STACK ?= /srv/stacks/wiki +CATALOG_STACK ?= /srv/stacks/teletype-games + +GITEA_SERVER ?= https://git.teletype.hu +GITEA_API ?= $(GITEA_SERVER)/api/v1/repos/search?limit=10000&private=true db_redmine: echo "==> Dump Redmine database" - cd /srv/stacks/redmine && docker compose exec database sh /db_backup/mariadb_backup.sh + cd $(REDMINE_STACK) && docker compose exec database sh /db_backup/mariadb_backup.sh db_wiki: echo "==> Dump Wiki database" - cd /srv/stacks/wiki && docker compose exec wiki_db sh /db_backup/pg_backup.sh + cd $(WIKI_STACK) && docker compose exec wiki_db sh /db_backup/pg_backup.sh db_catalog: echo "==> Dump Catalog database" - cd /srv/stacks/teletype-games && docker compose exec mysql sh /db_backup/mysql_backup.sh + cd $(CATALOG_STACK) && docker compose exec mysql sh /db_backup/mysql_backup.sh + +db_cleanup: + echo "==> Cleanup database dumps older than $(BACKUP_KEEP_DAYS) days" + @prefixes=$$(find $(DATABASE_BACKUP_BASE) -maxdepth 1 -type f -name "*.sql" \ + | xargs -I{} basename {} \ + | sed 's/-[0-9].*$$//' \ + | sort -u); \ + for prefix in $$prefixes; do \ + total=$$(find $(DATABASE_BACKUP_BASE) -maxdepth 1 -type f -name "$$prefix-*.sql" | wc -l); \ + old=$$(find $(DATABASE_BACKUP_BASE) -maxdepth 1 -type f -name "$$prefix-*.sql" -mtime +$(BACKUP_KEEP_DAYS) | wc -l); \ + keep=$$((total - old)); \ + if [ "$$keep" -ge 1 ]; then \ + echo "===> Cleaning $$prefix dumps ($$old old, $$keep remaining)"; \ + find $(DATABASE_BACKUP_BASE) -maxdepth 1 -type f -name "$$prefix-*.sql" -mtime +$(BACKUP_KEEP_DAYS) -delete; \ + else \ + echo "===> Skipping $$prefix (would leave no backups)"; \ + fi; \ + done repos: echo "==> Get GIT repositories" - @BASE="/srv/backup/repositories/"; \ - SRC="https://git.teletype.hu"; \ - @TOKEN=$$GITEA_TOKEN; \ - mkdir -p $$BASE; \ - curl -s -H "Authorization: token $$TOKEN" "$$SRC/api/v1/repos/search?limit=10000&private=true" \ + @mkdir -p "$(REPOSITORY_BACKUP_BASE)"; \ + curl -s -H "Authorization: token $(GITEA_TOKEN)" "$(GITEA_API)" \ | jq -r '.data[] | "\(.clone_url) \(.full_name)"' \ | while read repo fullname; do \ repo=$$(echo $$repo | sed 's|^http://|https://|'); \ name=$$(basename $$fullname); \ - dir="$$BASE/$$name"; \ + dir="$(REPOSITORY_BACKUP_BASE)/$$name"; \ echo "===> Get $$repo name=$$name"; \ if [ -d "$$dir/.git" ]; then \ - git -C "$$dir" fetch --all --prune; \ + git -C "$$dir" fetch --all --prune; \ git -C "$$dir" pull; \ else \ git clone "$$repo" "$$dir"; \ fi; \ done -backup: db_redmine db_wiki db_catalog repos +backup: db_redmine db_wiki db_catalog repos db_cleanup \ No newline at end of file