Skip to content

04 — Cloud drive upload #4

Description

@gardusig

Summary

Epic: shuttle drive — local git-tag zips (iCloud hub) + append-only cloud upload to Google Drive, OneDrive, and Proton.

Pair with shuttle git for tagging; drive owns everything after the tag exists in git.

CLI convention (local-centric)

Direction Verb Command
Repos → local store ingest shuttle drive ingest
Local store → cloud upload shuttle drive upload
Inspect local status · list compare git tags vs zips

ingest ≈ bulk import into backup.tags_dir; uploadexport/send to providers.

Command model

Command Role
drive status Git tags vs local zips (backup.repositories)
drive ingest Zip all tags → backup.tags_dir (all configured repos or one PATH)
drive list · drive delete Local zip CRUD
drive upload Push missing paths to cloud (append-only)
drive sync Ingest all repos, then upload all enabled providers

Legacy hidden: backup statusdrive status, backup repository syncdrive ingest.

Current scaffold (shipped)

  • Local ingest, status, list, delete — real implementation
  • backup.tags_dir → iCloud git-tags/{repo}/{tag}.zip
  • drive upload orchestration + append-only diff engine
  • config/drives.yaml provider toggles
  • docs/drive.md, README, scripts/drive/*.sh
  • drive sync orchestrator (#30)
  • Provider OAuth + API (#12#14)
  • Daily automation (#15)
  • Cloud → local download (#29) — future

Target workflow

shuttle git tag --yes && shuttle git zip    # single repo
shuttle drive sync                          # ingest all + upload all
# or step by step:
shuttle drive ingest
shuttle drive upload [google|onedrive|proton]

Re-run upload skips existing remote paths (append-only v1).

Child issues

Non-goals (v1)

Two-way sync, conflict resolution, remote delete, hash comparison.

Definition of done (epic)

  • drive upload works end-to-end per provider
  • drive ingest + drive upload documented as daily workflow
  • Provider auth docs + integration tests
  • Optional launchd template (#15)

Execution

Close children #12#15; link PRs to this epic.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Status
    todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions