Skip to content

feat: migrate to self-hosted server with Google OAuth#1

Merged
gcamp merged 8 commits into
mainfrom
feat/local-storage-v2
May 16, 2026
Merged

feat: migrate to self-hosted server with Google OAuth#1
gcamp merged 8 commits into
mainfrom
feat/local-storage-v2

Conversation

@gcamp
Copy link
Copy Markdown
Member

@gcamp gcamp commented May 15, 2026

Summary

  • Server component (server/): Flask app that accepts authenticated uploads via Google ID tokens and serves files publicly. Includes cleanup thread (deletes files >2 years old). Docker image built by CI and pushed to ghcr.io/transitapp/image-upload-server.
  • CLI v2.0.0: Replaces GCS upload + 1Password auth with Google OAuth PKCE login (--login) and HTTP POST to the self-hosted server. Zero external dependencies (stdlib only).
  • Breaking change: Users must run image-upload-transit --login once after upgrading. 1Password CLI is no longer required.

Changes

  • server/server.py — Flask upload/serve/health server with Google JWT validation
  • server/Dockerfile, server/requirements.txt — Docker packaging
  • .github/workflows/server-image.yml — CI: build + push server image to GHCR
  • image_upload_transit.py — v2.0.0: OAuth PKCE auth, HTTP upload, removed GCS/1P code
  • tests/test_server.py — 13 server tests
  • tests/test_upload.py — Updated CLI tests (removed 1P tests, added auth + upload tests)
  • Formula/image-upload-transit.rb — Updated caveats
  • .github/workflows/release.yml — Updated formula template

Test plan

  • All 30 tests pass locally (pytest tests/ -v)
  • CI passes (lint + tests)
  • After merge: server image builds and pushes to GHCR
  • After infra-office deploy: image-upload-transit --login → upload test file → verify public URL

🤖 Generated with Claude Code

@gcamp gcamp merged commit 0946642 into main May 16, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant