File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ name : CI
2+
3+ on :
4+ pull_request :
5+ branches : [main]
6+
7+ jobs :
8+ build :
9+ runs-on : macos-26
10+ steps :
11+ - uses : actions/checkout@v6
12+
13+ - name : Build
14+ run : swift build
Original file line number Diff line number Diff line change 1+ name : Release
2+
3+ on :
4+ push :
5+ tags : ["v*"]
6+
7+ permissions :
8+ contents : write
9+
10+ jobs :
11+ release :
12+ runs-on : macos-26
13+ steps :
14+ - uses : actions/checkout@v6
15+ with :
16+ fetch-depth : 0
17+
18+ - name : Generate changelog
19+ uses : orhun/git-cliff-action@v4
20+ id : changelog
21+ with :
22+ args : --latest --strip header
23+
24+ - name : Inject version from tag
25+ run : |
26+ VERSION="${GITHUB_REF_NAME#v}"
27+ plutil -replace CFBundleShortVersionString -string "$VERSION" Resources/Info.plist
28+ plutil -replace CFBundleVersion -string "$VERSION" Resources/Info.plist
29+
30+ - name : Build release binary
31+ run : swift build -c release
32+
33+ - name : Assemble .app bundle
34+ run : |
35+ APP="CloudDrop.app"
36+ mkdir -p "$APP/Contents/MacOS"
37+ mkdir -p "$APP/Contents/Resources"
38+ cp .build/release/CloudDrop "$APP/Contents/MacOS/CloudDrop"
39+ cp Resources/Info.plist "$APP/Contents/"
40+ codesign --force --sign - --entitlements Resources/CloudDrop.entitlements "$APP"
41+
42+ - name : Create zip
43+ run : ditto -c -k --keepParent CloudDrop.app CloudDrop.app.zip
44+
45+ - name : Create GitHub Release
46+ uses : softprops/action-gh-release@v2
47+ with :
48+ name : ${{ github.ref_name }}
49+ body : ${{ steps.changelog.outputs.content }}
50+ files : CloudDrop.app.zip
Original file line number Diff line number Diff line change 1+ # CloudDrop
2+
3+ A lightweight macOS menu bar app for uploading files to [ Cloudflare R2] ( https://developers.cloudflare.com/r2/ ) storage.
4+
5+ ## Features
6+
7+ - Lives in the menu bar — no Dock icon, always accessible
8+ - Upload files via file picker
9+ - Browse and manage files in your R2 buckets
10+ - Copy public URLs to clipboard with one click
11+ - Delete objects directly from the app
12+ - Auto-resolves Account ID from API token
13+ - Custom domain support
14+ - Credentials stored locally with restricted file permissions
15+
16+ ## Requirements
17+
18+ - macOS 15+
19+ - Swift 6.2+
20+ - [ just] ( https://github.com/casey/just ) (optional, for build commands)
21+
22+ ## Build & Run
23+
24+ ``` sh
25+ # Development build + run
26+ just dev
27+
28+ # Release build + bundle into .app
29+ just bundle
30+
31+ # Bundle and open
32+ just run
33+
34+ # Install to /Applications
35+ just install
36+ ```
37+
38+ Or build manually:
39+
40+ ``` sh
41+ swift build -c release
42+ ```
43+
44+ ## Setup
45+
46+ 1 . Launch CloudDrop — it appears in the menu bar
47+ 2 . Open Settings and enter your Cloudflare R2 credentials:
48+ - ** Access Key ID**
49+ - ** Secret Access Key**
50+ - ** API Token**
51+ 3 . Click ** Verify & Save** — the app auto-resolves your Account ID and lists available buckets
52+ 4 . Select a bucket and custom domain, then start uploading
53+
54+ Credentials can be found in the Cloudflare dashboard under ** R2 > Overview > Manage R2 API Tokens** .
55+
56+ ## License
57+
58+ MIT
You can’t perform that action at this time.
0 commit comments