Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ jobs:
postgres:
image: postgres:17-alpine
env:
POSTGRES_USER: roxy
POSTGRES_PASSWORD: roxy
POSTGRES_DB: roxycloud
POSTGRES_USER: stashden
POSTGRES_PASSWORD: stashden
POSTGRES_DB: stashden
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U roxy"
--health-cmd "pg_isready -U stashden"
--health-interval 5s
--health-timeout 3s
--health-retries 12
Expand Down Expand Up @@ -69,7 +69,7 @@ jobs:
# a machine with no Postgres.
- run: cargo test --workspace --locked
env:
DATABASE_URL: postgres://roxy:roxy@localhost:5432/roxycloud
DATABASE_URL: postgres://stashden:stashden@localhost:5432/stashden
S3_TEST_ENDPOINT: http://localhost:9000

desktop-csp:
Expand All @@ -82,10 +82,10 @@ jobs:
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm --filter @roxycloud/web build
- run: pnpm --filter @roxycloud/web exec playwright install --with-deps chromium
- run: pnpm --filter @stashden/web build
- run: pnpm --filter @stashden/web exec playwright install --with-deps chromium
- name: The desktop window's CSP must let the app style itself and show its previews
run: pnpm --filter @roxycloud/web check:csp
run: pnpm --filter @stashden/web check:csp

chart:
runs-on: ubuntu-latest
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/sonarqube.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ jobs:
postgres:
image: postgres:17-alpine
env:
POSTGRES_USER: roxy
POSTGRES_PASSWORD: roxy
POSTGRES_DB: roxycloud
POSTGRES_USER: stashden
POSTGRES_PASSWORD: stashden
POSTGRES_DB: stashden
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U roxy"
--health-cmd "pg_isready -U stashden"
--health-interval 5s
--health-timeout 3s
--health-retries 12
Expand All @@ -48,7 +48,7 @@ jobs:
- uses: taiki-e/install-action@v2
with:
tool: cargo-tarpaulin
# roxycloud-app is excluded: it has no tests, and building it would need
# stashden-app is excluded: it has no tests, and building it would need
# both the webview toolchain and a built web/dist for generate_context!.
#
# The llvm engine rather than the default ptrace one, which segfaults on a test binary that
Expand All @@ -60,9 +60,9 @@ jobs:
# attempts takes 81s on the runner and dav 56s, each test creating a database, running the
# migrations, and hashing with Argon2id where a login is involved. 600 leaves room for a
# slower runner without letting a hung run sit there.
- run: cargo tarpaulin --workspace --exclude roxycloud-app --engine llvm --out xml --skip-clean --timeout 600
- run: cargo tarpaulin --workspace --exclude stashden-app --engine llvm --out xml --skip-clean --timeout 600
env:
DATABASE_URL: postgres://roxy:roxy@localhost:5432/roxycloud
DATABASE_URL: postgres://stashden:stashden@localhost:5432/stashden
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: coverage-cobertura
Expand Down
2 changes: 1 addition & 1 deletion ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ flowchart LR
TR[Traefik]
end
subgraph Private
API[roxycloud-api]
API[stashden-api]
PG[(Postgres)]
BS[(Blob store)]
end
Expand Down
208 changes: 104 additions & 104 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ missing_errors_doc = "allow"
missing_panics_doc = "allow"

[workspace.dependencies]
roxycloud-core = { path = "crates/core" }
roxycloud-client = { path = "crates/client" }
stashden-core = { path = "crates/core" }
stashden-client = { path = "crates/client" }

tokio = { version = "1", features = ["full"] }
tokio-util = { version = "0.7", features = ["io"] }
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ directory.
Postgres 15 or later, and a Rust toolchain matching `rust-toolchain.toml`.

```bash
DATABASE_URL=postgres://localhost/roxycloud JWT_SECRET=dev-secret cargo run -p roxycloud-api
DATABASE_URL=postgres://localhost/roxycloud JWT_SECRET=dev-secret cargo run -p stashden-api
```

Migrations run on boot. Configuration is environment only:
Expand Down Expand Up @@ -157,13 +157,13 @@ Migrations run on boot. Configuration is environment only:
| `BOOTSTRAP_ADMIN_EMAIL` | unset | Creates the first administrator on an empty database |
| `BOOTSTRAP_ADMIN_PASSWORD` | unset | Required alongside the email, minimum 12 characters |

The web app compiles two values in, `ROXYCLOUD_API_URL` and `ROXYCLOUD_SOURCE_URL`. They default to
The web app compiles two values in, `STASHDEN_API_URL` and `STASHDEN_SOURCE_URL`. They default to
a local API and to this repository, and both are overridden at build time. An empty API URL means
the same origin as the page, which is what the image builds with, since the API serving the app is
also the API it talks to:

```bash
pnpm --filter @roxycloud/web build --define ROXYCLOUD_API_URL="'https://api.example.com'" --define ROXYCLOUD_SOURCE_URL="'https://git.example.com/roxycloud'"
pnpm --filter @stashden/web build --define STASHDEN_API_URL="'https://api.example.com'" --define STASHDEN_SOURCE_URL="'https://git.example.com/roxycloud'"
```

If you deploy a modified RoxyCloud, point the source URL at your fork: the AGPL requires you to
Expand All @@ -180,7 +180,7 @@ POSTGRES_PASSWORD=... JWT_SECRET=... docker compose -f deploy/docker-compose.yml

The image carries the built web app and serves it from the same origin as the API, so there is no
second deployment and no CORS to configure. Hosting the bundle elsewhere still works: build it with
`ROXYCLOUD_API_URL` pointing at the API, serve it however you like, and name its origin in
`STASHDEN_API_URL` pointing at the API, serve it however you like, and name its origin in
`CORS_ALLOWED_ORIGINS`.

On Kubernetes, `deploy/helm/roxycloud` deploys the API against a database you already run, with a
Expand Down Expand Up @@ -556,7 +556,7 @@ On an empty database, set `BOOTSTRAP_ADMIN_EMAIL` and `BOOTSTRAP_ADMIN_PASSWORD`
to create the administrator, then log in:

```bash
cargo run -p roxycloud-cli -- login you@example.com --password '...'
cargo run -p stashden-cli -- login you@example.com --password '...'
```

## Syncing a folder
Expand All @@ -573,7 +573,7 @@ than asking.
content, not timestamps: a file is only transferred when its bytes differ from the other side.

```bash
ROXYCLOUD_TOKEN=... cargo run -p roxycloud-cli -- sync ~/RoxyCloud
STASHDEN_TOKEN=... cargo run -p stashden-cli -- sync ~/RoxyCloud
```

State lives in `.roxycloud-sync.json` inside the folder, which is what makes a second run cheap and
Expand All @@ -587,7 +587,7 @@ overwritten and nothing waits for an answer.
`--watch` keeps it running instead, syncing as the folder changes:

```bash
ROXYCLOUD_TOKEN=... cargo run -p roxycloud-cli -- sync ~/RoxyCloud --watch
STASHDEN_TOKEN=... cargo run -p stashden-cli -- sync ~/RoxyCloud --watch
```

A save is not a sync. Changes are collected until the folder has been quiet for a moment, and a
Expand Down
Loading
Loading