# Example: schedule neo4j-backup on Forgejo Actions (also Gitea Actions).
#
# TEMPLATE — copy to `.forgejo/workflows/` (or `.gitea/workflows/`) in your deployment repo.
# Syntax is GitHub-Actions-compatible. See docs/CI.md.
#
# Forgejo is a natural fit for self-hosted teams: a Forgejo Actions runner already IS a backup
# runner — ephemeral compute with secrets, sited next to your database with egress to the backup
# port (6362) and object store. Give that runner neo4j-admin, a sized scratch disk, and a label.

name: neo4j-backup

on:
  schedule:
    - cron: "17 2 * * *"    # daily differential
    - cron: "17 3 * * 0"    # weekly full + maintenance
  workflow_dispatch:

env:
  NEO4J_BOLT_URI: ${{ vars.NEO4J_BOLT_URI }}
  NEO4J_BACKUP_SOURCE: ${{ vars.NEO4J_BACKUP_SOURCE }}   # db-host:6362
  BACKUP_BUCKET: ${{ vars.BACKUP_BUCKET }}
  CLOUD: ${{ vars.CLOUD }}
  AWS_REGION: ${{ vars.AWS_REGION }}
  NEO4J_BACKUP_POLICY: policies/demo.yaml
  RUNNER_PAGECACHE: "512M"
  SCRATCH_PATH: /var/lib/neo4j-backup/scratch            # a sized, persistent path on the runner
  NEO4J_PASSWORD: ${{ secrets.NEO4J_PASSWORD }}
  AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
  AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

jobs:
  backup:
    runs-on: neo4j-backup      # your labelled self-hosted Forgejo runner
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install "neo4j-backup-dagster @ git+https://github.com/lex00/neo4j-backup@v0.4.0#subdirectory=orchestrator"
      - name: Back up
        run: |
          kind="${{ github.event.schedule == '17 3 * * 0' && 'FULL' || 'DIFF' }}"
          neo4j-backup --json backup demo --kind "$kind"
      # weekly maintenance on the full run: verify + retention (schedule == approval for prune)
      - name: Verify + prune (weekly)
        if: github.event.schedule == '17 3 * * 0'
        run: |
          neo4j-backup --json verify demo
          neo4j-backup --json prune --confirm
