From af35a78f7e7e777a999ec30fdebca1cebdc70c28 Mon Sep 17 00:00:00 2001 From: jthor Date: Sat, 20 Sep 2025 22:48:58 -0400 Subject: [PATCH] testing --- .woodpecker.yml | 22 ------------------ .woodpecker.yml.original | 22 ++++++++++++++++++ .woodpecker/regen-update-pipeline.yml | 26 ++++++++++++++++++++++ backup-paths.json | 4 ++++ generate_pipeline.py | 32 +++++++++++++++++++++++++++ 5 files changed, 84 insertions(+), 22 deletions(-) create mode 100644 .woodpecker.yml.original create mode 100644 .woodpecker/regen-update-pipeline.yml create mode 100644 backup-paths.json create mode 100644 generate_pipeline.py diff --git a/.woodpecker.yml b/.woodpecker.yml index 6b78d00..e69de29 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,22 +0,0 @@ -steps: - sanity-check: &defaults - image: alpine - volumes: &vols - - "/Users/jthor/Obsidian/My Vault:/obsidian" - - "/Volumes/What/backup:/backup" - commands: - - echo "Listing mount points..." - - ls -ld /obsidian /backup - - ls -l /backup - when: - event: [ push, manual, cron ] - - backup: - <<: *defaults - volumes: *vols - commands: - - tar czf /backup/obsidian-$(date +%F).tar.gz /obsidian - when: - event: [ push, manual, cron ] - cron: nightly-backup - depends_on: [ sanity-check ] diff --git a/.woodpecker.yml.original b/.woodpecker.yml.original new file mode 100644 index 0000000..6b78d00 --- /dev/null +++ b/.woodpecker.yml.original @@ -0,0 +1,22 @@ +steps: + sanity-check: &defaults + image: alpine + volumes: &vols + - "/Users/jthor/Obsidian/My Vault:/obsidian" + - "/Volumes/What/backup:/backup" + commands: + - echo "Listing mount points..." + - ls -ld /obsidian /backup + - ls -l /backup + when: + event: [ push, manual, cron ] + + backup: + <<: *defaults + volumes: *vols + commands: + - tar czf /backup/obsidian-$(date +%F).tar.gz /obsidian + when: + event: [ push, manual, cron ] + cron: nightly-backup + depends_on: [ sanity-check ] diff --git a/.woodpecker/regen-update-pipeline.yml b/.woodpecker/regen-update-pipeline.yml new file mode 100644 index 0000000..996967e --- /dev/null +++ b/.woodpecker/regen-update-pipeline.yml @@ -0,0 +1,26 @@ +kind: pipeline +type: docker +name: regen-backup-pipeline + +# Only run this pipeline when the manifest changes +when: + path: + include: + - backup-paths.json + +steps: + - name: regenerate + image: python:3.12 + environment: + GIT_USER_NAME: woodpecker-bot + GIT_USER_EMAIL: ci@git.jthor.site + GIT_AUTH_TOKEN: + from_secret: woodpecker-bot # store your Gitea PAT or deploy key in Woodpecker secrets + commands: + - pip install jinja2 + - python generate_pipeline.py + - git config user.name "$GIT_USER_NAME" + - git config user.email "$GIT_USER_EMAIL" + - git add .woodpecker.yml + - git diff --cached --quiet || git commit -m "Auto-regenerate pipeline [skip ci]" + - git push https://oauth2:$GIT_AUTH_TOKEN@git.jthor.site/jthor/ci.git HEAD:main diff --git a/backup-paths.json b/backup-paths.json new file mode 100644 index 0000000..1ee0a3e --- /dev/null +++ b/backup-paths.json @@ -0,0 +1,4 @@ +[{ + "path": "/Users/jthor/Obsidian", + "name": "Obsidian" +}] \ No newline at end of file diff --git a/generate_pipeline.py b/generate_pipeline.py new file mode 100644 index 0000000..09de6b2 --- /dev/null +++ b/generate_pipeline.py @@ -0,0 +1,32 @@ +import json +from jinja2 import Template + +with open("backup_manifest.json") as f: + manifest = json.load(f) + +template_str = """ +kind: pipeline +type: docker +name: backup + +steps: +{% for backup in backups %} + - name: backup_{{ backup.name }} + image: alpine:3 + volumes: + - {{ backup.path }}:/mnt/{{ backup.name }} + commands: + - echo "Backing up {{ backup.path }}" + - tar czf /tmp/{{ backup.name }}.tar.gz /mnt/{{ backup.name }} + # Replace with your actual upload/rsync/rclone command + - echo "Upload {{ backup.name }}.tar.gz to remote" +{% endfor %} +""" + +template = Template(template_str) +output = template.render(backups=manifest["backups"]) + +with open(".woodpecker.yml", "w") as f: + f.write(output) + +print("Generated .woodpecker.yml with inline volumes")