4 Commits

Author SHA1 Message Date
Fredrik Johansson
b2b5c8c7cb ci: fix webkit dep for Ubuntu 24.04 (Noble)
Some checks failed
Build / Build & release (push) Failing after 7m5s
libwebkit2gtk-4.0-dev was dropped in Noble; use 4.1 and pass
-tags webkit2_41 to wails build.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 22:28:04 +02:00
Fredrik Johansson
b6ff30de78 ci: rewrite workflow as single job to avoid upload-artifact
Some checks failed
Build / Build & release (push) Failing after 5m15s
Gitea act_runner intercepts actions/upload-artifact regardless of version
tag and uses an incompatible built-in. Restructured as one job that builds
all server binaries (cross-compiled) and the Linux desktop app, then
publishes directly to the release — no artifact handoff needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 22:02:43 +02:00
Fredrik Johansson
1bd719fa58 ci: downgrade artifact actions to v3 for Gitea GHES compatibility
upload-artifact@v4 and download-artifact@v4 are not supported on GHES.
Also drop merge-multiple (v4-only) and adjust release glob to artifacts/*/*.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 21:53:07 +02:00
Fredrik Johansson
be297d3a49 docs: add QUICKSTART.md for non-technical users
Three paths: browser-only, desktop app download, headless daemon.
Covers invites, anchor server basics, and mobile install.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 21:46:37 +02:00
2 changed files with 121 additions and 71 deletions

View File

@@ -7,55 +7,8 @@ on:
workflow_dispatch:
jobs:
# ── Server binaries (no CGo, cross-compile freely) ───────────────────────────
server:
name: Server binaries
runs-on: ubuntu-latest
strategy:
matrix:
include:
- goos: linux
goarch: amd64
- goos: linux
goarch: arm64
- goos: darwin
goarch: amd64
- goos: darwin
goarch: arm64
- goos: windows
goarch: amd64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: go.mod
- name: Build daemon + anchor
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
CGO_ENABLED: "0"
run: |
SUFFIX="${{ matrix.goos }}-${{ matrix.goarch }}"
[ "${{ matrix.goos }}" = "windows" ] && EXT=".exe" || EXT=""
go build -trimpath -ldflags="-s -w" -o "dist/waste-daemon-${SUFFIX}${EXT}" ./cmd/daemon
go build -trimpath -ldflags="-s -w" -o "dist/waste-anchor-${SUFFIX}${EXT}" ./cmd/anchor
- uses: actions/upload-artifact@v4
with:
name: server-${{ matrix.goos }}-${{ matrix.goarch }}
path: dist/
# ── Desktop app (Wails, requires CGo + webview libs) ─────────────────────────
# Runs only on Linux amd64 with the default runner.
# For macOS/Windows desktop builds, add self-hosted runners with those platforms
# and duplicate this job (adjusting the runs-on and platform deps).
desktop-linux:
name: Desktop app (Linux amd64)
build:
name: Build & release
runs-on: ubuntu-latest
steps:
@@ -77,9 +30,34 @@ jobs:
sudo apt-get update -q
sudo apt-get install -y \
libgtk-3-dev \
libwebkit2gtk-4.0-dev \
libwebkit2gtk-4.1-dev \
libayatana-appindicator3-dev
# ── Server binaries (CGO_ENABLED=0, cross-compile freely) ──────────────
- name: Build server binaries
run: |
mkdir -p dist
build() {
local GOOS=$1 GOARCH=$2
local SUFFIX="${GOOS}-${GOARCH}"
local EXT=""
[ "$GOOS" = "windows" ] && EXT=".exe"
CGO_ENABLED=0 GOOS=$GOOS GOARCH=$GOARCH \
go build -trimpath -ldflags="-s -w" \
-o "dist/waste-daemon-${SUFFIX}${EXT}" ./cmd/daemon
CGO_ENABLED=0 GOOS=$GOOS GOARCH=$GOARCH \
go build -trimpath -ldflags="-s -w" \
-o "dist/waste-anchor-${SUFFIX}${EXT}" ./cmd/anchor
}
build linux amd64
build linux arm64
build darwin amd64
build darwin arm64
build windows amd64
# ── Desktop app (Linux amd64, CGo + Wails) ─────────────────────────────
- name: Build frontend
run: |
cd web
@@ -89,32 +67,15 @@ jobs:
- name: Build desktop app
run: |
mkdir -p dist
cd cmd/app
wails build -trimpath -ldflags="-s -w" -o ../../dist/waste-linux-amd64
wails build -trimpath -ldflags="-s -w" -tags webkit2_41 -o ../../dist/waste-linux-amd64
- uses: actions/upload-artifact@v4
with:
name: desktop-linux-amd64
path: dist/waste-linux-amd64
# ── Release: collect all artifacts and publish ────────────────────────────────
release:
name: Publish release
needs: [server, desktop-linux]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/download-artifact@v4
with:
path: artifacts/
merge-multiple: true
# ── Publish release (tags only) ─────────────────────────────────────────
- name: Create release
if: startsWith(github.ref, 'refs/tags/')
uses: https://gitea.com/actions/gitea-release-action@main
with:
token: ${{ secrets.RELEASE_TOKEN }}
files: artifacts/*
files: dist/*
prerelease: ${{ contains(github.ref_name, '-') }}

89
QUICKSTART.md Normal file
View File

@@ -0,0 +1,89 @@
# waste — quick start
waste is a private, encrypted chat and file sharing app for people you trust.
No accounts, no phone numbers, no central server that knows your messages.
Pick the option that fits you best.
---
## Option 1 — Just open it in your browser
If someone is running a waste anchor server and has shared the URL with you:
1. Open the URL in any modern browser
2. Enter your name and a network name your group has agreed on
3. Done — you're in
On mobile, tap **Share → Add to Home Screen** to install it as an app icon.
To invite someone: click the 🔗 button in the sidebar and share the link.
> Your identity and messages stay in your browser. Nothing is stored on the server — the server only helps peers find each other.
---
## Option 2 — Desktop app (recommended for regular use)
Download the latest `waste` binary for your platform from the [releases page](../../releases).
**Linux / macOS:**
```bash
chmod +x waste-linux-amd64 # or waste-darwin-arm64, etc.
./waste-linux-amd64
```
**Windows:** double-click `waste-windows-amd64.exe`.
The app opens a window with the waste UI. Enter your name, the anchor URL, and a network name to join. Your identity is saved between sessions in your config directory (`~/.config/waste` on Linux, `~/Library/Application Support/waste` on macOS, `%APPDATA%\waste` on Windows).
On Linux and Windows a tray icon appears — closing the window hides to tray rather than quitting. Right-click the tray icon to reopen or quit.
---
## Option 3 — Run the daemon manually (headless / power users)
If you want the daemon running in the background without the desktop UI — on a server, over SSH, or with the web UI in a browser pointed at your local machine:
```bash
# Download waste-daemon from the releases page, then:
./waste-daemon -alias yourname -anchor wss://your-anchor-server/ws
```
Then open the web UI in a browser at the anchor URL, or point the web UI's daemon mode at `ws://127.0.0.1:17338`.
Full flag reference:
| Flag | Default | Description |
|---|---|---|
| `-alias` | `anon` | Your display name |
| `-anchor` | — | Anchor server WebSocket URL |
| `-data-dir` | `~/.waste` | Where identity and messages are stored |
| `-download-dir` | same as data-dir | Where received files are saved |
| `-ipc-port` | `17337` | Local TCP IPC port |
| `-ws-port` | `0` (off) | WebSocket IPC port (needed for web UI) |
| `-turn-url` | — | TURN relay URL (fixes mobile/CGNAT) |
| `-turn-secret` | — | TURN shared secret |
---
## Inviting someone
1. Click `Ctrl+I` in the TUI, or click **Generate invite** in the web UI
2. Share the `waste:...` link with your friend (Signal, email, anything)
3. They open it in a browser or pass it to `waste-daemon --join 'waste:...'`
Invite links encode the anchor URL and network name. The anchor never sees your messages.
---
## Running your own anchor server
The anchor is a tiny signaling server that helps peers find each other — it never sees plaintext messages or file contents. You need a VPS with a domain and TLS.
```bash
# On your VPS:
./waste-anchor -bind 127.0.0.1:8080
```
Put it behind nginx with a `/ws` WebSocket proxy and serve the web UI static files at `/`. See [README.md](README.md#hosting-on-a-vps) for the full nginx setup.