Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
256 commits
Select commit Hold shift + click to select a range
50c0ca8
fix(security): resolve residual CodeQL alerts
Aug 26, 2026
d85c666
fix(security): strip residual '<' after entity decoding in Steam meta…
Aug 26, 2026
f0dfdaf
fix(security): make Steam HTML sanitizer unable to emit angle brackets
Aug 26, 2026
6f05ddc
fix(ci): resolve lint errors and Security workflow failures
Aug 26, 2026
73e51d5
fix(security): remove angle brackets by character instead of tag matc…
Aug 26, 2026
754932c
chore(deps): bump the cargo group across 1 directory with 2 updates (#3)
dependabot[bot] Aug 26, 2026
342d15b
Remediate all 680 SonarCloud issues for Heretek-AI_drop2 (#5)
BillyOutlast Aug 28, 2026
c20e1d1
Merge upstream Drop-OSS/drop develop into fork
Sep 13, 2026
91f25da
chore: reconcile GitHub Actions SHA pinning, knip CI job, and Prisma …
Sep 13, 2026
dfe6d04
fix(toolchain): specify ./core/... module path for golangci-lint in p…
Sep 13, 2026
6f912c9
feat(desktop): fix 4K scaling bug, add WinGet/Flatpak distribution, a…
Sep 13, 2026
af65632
feat(plugins): implement Server Plugin SPI, Drop GSE room coordinator…
Sep 13, 2026
58ed891
feat(plugins): implement dynamic plugin discovery, state persistence,…
Sep 13, 2026
b076e12
fix(ci): correct job dependency and environment context in client-rel…
Sep 13, 2026
99b6462
docs: add GEMINI.md developer and AI agent architecture guide
Sep 13, 2026
b05808f
feat(library): add automated game distribution pipeline and recipe en…
Sep 13, 2026
da21865
fix(ci): ensure REGISTRY_IMAGE is lowercase in server-release workflow
Sep 13, 2026
bcff6ed
feat(desktop): add native pipeline runner and setup progress UI
Sep 13, 2026
8f1514b
feat(server): add bulk auto-import discovery and admin review UI
Sep 13, 2026
d670c50
feat(torrential): add opt-in content-addressed chunk cache
Sep 13, 2026
252aed2
docs: add canonical AGENTS.md and align CLAUDE.md/GEMINI.md
Sep 13, 2026
ad74f03
fix(cli): migrate to opendal 0.58 API and remove dead code
Sep 13, 2026
ec09e55
fix(torrential): repair and slim the chunk-cache benchmark
Sep 13, 2026
77f7ca6
refactor(server): remove dead code and unused dependencies
Sep 13, 2026
cb56fe5
fix(desktop): resolve GameStatus type errors and nuxt config typing
Sep 13, 2026
fb688ec
chore(rust): clear clippy warnings in droplet, libarchive, native_model
Sep 13, 2026
d6163d7
build(torrential): generate protobuf into OUT_DIR and exclude it from…
Sep 13, 2026
7d8d4e5
fix(torrential): harden chunk serving, cache fallback, and RPC handling
Sep 13, 2026
f4a31a8
chore(security): add cargo-deny policy and CI, run torrential clippy …
Sep 13, 2026
57d8587
Merge pull request #2 from Heretek-Games/torrential/static-analysis-r…
BillyOutlast Sep 13, 2026
0a0f8a9
chore(deps): drop stale client Cargo.lock
Sep 13, 2026
50f7bf5
chore(deps): refresh pnpm overrides for vulnerable transitive deps
Sep 13, 2026
5adff09
fix(desktop): stop logging sensitive cert and save paths
Sep 13, 2026
21f82df
fix(desktop): enable uuid v4 feature for cloud_saves
Sep 13, 2026
6ce2972
fix(deps): constrain brace-expansion override to 1.x
Sep 13, 2026
a8b96a4
feat(plugins): testable manager, server test runner, frozen A<->B con…
Sep 13, 2026
46a9f77
feat(plugins): versioned contract, fail-closed capabilities, storage …
Sep 13, 2026
9590d4b
feat(gse): add gse-engine crate and engine-backed launch interceptor
Sep 13, 2026
b5f517e
feat(gse): opt-in launch interceptor and startup crash recovery
Sep 13, 2026
3c8e11f
feat(gse): durable room store, mesh backends, ZeroTier provisioning
Sep 13, 2026
85fb8de
feat(gse): mesh address assignment, Tailscale backend, client credent…
Sep 13, 2026
bd08be7
feat(plugins): bundle integrity verification and hello-world referenc…
Sep 13, 2026
9b6c787
feat(plugins): bundle signing tool, sample bundle, and ABI decision (…
Sep 13, 2026
a21ff97
feat(gse): ZeroTier member authorization and network teardown (M3 B4)
Sep 13, 2026
b83a01f
feat(gse): AppID pinning, compatibility registry, and consent UI (M2 …
Sep 13, 2026
db2fe2d
feat(plugins): WebSocket plugin API and credential rotation (B3, P2 w…
Sep 13, 2026
a60758d
feat(gse): live WebSocket room updates in the client (M4 B8)
Sep 13, 2026
7d2d3fd
feat(plugins): install/remove bundles, admin docs, license review (M5)
Sep 13, 2026
f1413c0
feat(gse): transport-agnostic release fetch in the engine (A6)
Sep 13, 2026
d6a78e5
feat(gse): apply staged emulator payload in the interceptor (M1 A2)
Sep 13, 2026
47d30b3
feat(plugins): registry allow-list and version pinning (M5)
Sep 13, 2026
cc3ed6c
docs(gse): refresh implementation status summary
Sep 13, 2026
af0eb58
feat(desktop): install/remove plugin bundles from Settings (M5)
Sep 13, 2026
f1e65a7
feat(gse): client mesh-readiness validator (M3 B6)
Sep 13, 2026
de4de3f
feat(gse): runtime emulator release download (M1 A6)
Sep 13, 2026
4ccb106
feat(gse): Tailscale API provisioner and backend selection (M4 B5)
Sep 13, 2026
ac0bd6a
feat(gse): durable Prisma-backed room persistence (M3 B2)
Sep 13, 2026
57991ac
feat(gse): authenticated WebSocket credential distribution (M3 B3)
Sep 13, 2026
96e05d4
test(gse): Prisma room-store integration check + verified against Pos…
Sep 13, 2026
3af2fbd
feat(gse): ZTNET controller backend as the default mesh path (M3 B4)
Sep 13, 2026
6056724
feat(gse): ZTNET compose overlay and integration check
Sep 13, 2026
1467793
feat(gse): client ZeroTier join/leave and ZTNET docs (M3 B6)
Sep 13, 2026
72417f8
fix(gse): deterministic ZTNET member addresses + E2E bootstrap
Sep 13, 2026
268348a
ci: add ZTNET controller E2E job
Sep 13, 2026
a6be51e
docs: cover drop-gse multiplayer and ZTNET
Sep 13, 2026
eeaf891
fix(gse): authorize ZeroTier members end-to-end
Sep 13, 2026
0879229
fix(gse): make mesh authorization restart-safe
Sep 13, 2026
d219c59
fix(gse): report the server mesh backend and drop the inert selector
Sep 13, 2026
d952667
fix(gse): pin release origin and honor the room emulator flavor
Sep 13, 2026
2eebb4d
fix(gse): harden backend selection, room store and discovery
Sep 13, 2026
6985c08
fix(gse): validate persisted payloads, expose self address, add route…
Sep 13, 2026
22b4c02
fix(plugins): authenticate desktop JWTs on plugin routes and websocket
Sep 13, 2026
72ba18e
fix(library): embed pipeline recipes in string droplet manifests
Sep 13, 2026
760e5a3
fix(desktop): materialize generated setup scripts before legacy fallback
Sep 13, 2026
0d51973
ci(gse): run the ZTNET E2E check from the server workspace
Sep 13, 2026
3acf4b7
fix(gse): validate room input, redact leave broadcasts, encode mesh URLs
Sep 13, 2026
32cc0d8
fix(plugins): fail-closed capabilities, safe bundle paths, cached-cod…
Sep 13, 2026
eff9645
fix(import): make bulk import idempotent and stop fabricating launch …
Sep 13, 2026
4052d9d
fix(torrential): validate cache keys and verify chunks before caching
Sep 13, 2026
9b8bb7f
fix(plugins): require auth for sensitive WS subscriptions and bound p…
Sep 13, 2026
f63b3ac
fix(gse): never record patched bytes as the original binary
Sep 13, 2026
7b946eb
fix(desktop): confine recipe paths and escape cleanup globs
Sep 13, 2026
d4b8147
fix(gse): restore nested targets and clear the room marker on crash r…
Sep 13, 2026
1d2e195
fix(plugins): require apiVersion and authenticate the plugin inventory
Sep 13, 2026
3118de6
fix(ci): restore job-scoped WINGET_TOKEN env
Sep 13, 2026
f911d37
fix(torrential): bound in-flight cache fills by the configured budget
Sep 13, 2026
75aa82a
fix(desktop): make pipeline cancellation responsive
Sep 13, 2026
8f20019
docs: document cache defaults/verification, refresh GSE status, dedup…
Sep 13, 2026
1c7b9d6
fix(gse): preserve pre-existing emulator config across launches
Sep 13, 2026
ec2fd3b
fix(security): harden session cookies and reject cross-site plugin so…
Sep 13, 2026
458bce5
docs: align AGENTS.md with the hardened plugin, pipeline and cache co…
Sep 13, 2026
4f30220
fix(security): support forwarded-host in plugin sockets and scope ses…
Sep 13, 2026
9293395
chore(desktop): disable nuxt telemetry in desktop main
Sep 13, 2026
33fbc34
feat(flatpak): add dual-track FlatPark publishing for stable and alph…
Sep 13, 2026
4bcd560
chore(flatpak): pin live alpha build 0.4.0-alpha.1.33fbc34 and allow …
Sep 13, 2026
af06c80
feat(server): add generic Podman Quadlet deployment template
Sep 13, 2026
71f877f
fix(server): eliminate file descriptor double-close and stream leaks …
Sep 13, 2026
7adf9c5
fix(server): repair age-rating migration drift
Sep 13, 2026
d4aec4c
fix(ci): read server version from server/package.json
Sep 13, 2026
0e37f5b
fix(server): correct community page title
Sep 13, 2026
36407e2
fix(torrential): apply rustfmt to cache benchmark
Sep 13, 2026
b5893b3
fix(ci): least-privilege permissions and optional macOS signing
Sep 13, 2026
f61b698
chore(knip): reduce false positives and cover desktop/main
Sep 13, 2026
9e5f550
chore: remove unreferenced dead code
Sep 13, 2026
589cb1f
chore(deps): remove unused deps and declare @vueuse/core
Sep 13, 2026
f3ca789
chore(ci): add report-only static-analysis workflow
Sep 13, 2026
1833c67
fix(server): handle object manifests and await signout
Sep 13, 2026
803c8ba
chore(ci): add cargo-machete report-only job
Sep 13, 2026
2d34bc0
chore(ci): pin analysis tools and bump Go to 1.26.6
Sep 13, 2026
e701458
fix(ci): resolve actionlint and zizmor findings
Sep 13, 2026
b0c4a4f
chore(deps): remove unused Rust dependencies
Sep 13, 2026
9f65cee
fix(scripts): resolve shellcheck and hadolint findings
Sep 13, 2026
6a8dba2
fix(ci): avoid unpinned-install Sonar findings
Sep 13, 2026
4d0c75a
Merge pull request #3 from Heretek-Games/fix/age-rating-migration-drift
BillyOutlast Sep 13, 2026
18fc99e
Merge pull request #5 from Heretek-Games/chore/static-analysis-cleanup
BillyOutlast Sep 13, 2026
05585ab
fix(desktop): confine GSE/pipeline writes and gate cleanup
Sep 13, 2026
ddf68bc
fix(torrential): authenticate RPC, evict responses, bound cache
Sep 13, 2026
79d91d1
fix(server): harden drop-gse room membership and lifecycle
Sep 13, 2026
d840a34
fix(server): authenticate plugin WS and verify whole bundles
Sep 13, 2026
f3233d5
fix(server): correct bulk-import counting and discovery edges
Sep 13, 2026
df945c6
fix(server): stop logging the setup token in cleartext
Sep 13, 2026
4bab38c
fix(server): resolve SonarCloud findings on PR #16
Sep 13, 2026
26eb188
fix(server): clear remaining SonarCloud findings in sign-plugin
Sep 13, 2026
2699f09
fix(server): place NOSONAR on the readdir sink line
Sep 13, 2026
078221f
Merge pull request #16 from Heretek-Games/fix/fork-review-remediation
BillyOutlast Sep 13, 2026
56ef579
ci: pin actions, lock dependency installs and enforce HTTPS downloads
Sep 13, 2026
487d216
fix: resolve remaining SonarCloud security, bug and complexity findings
Sep 13, 2026
d6be999
fix: clear SonarCloud style backlog across server and client
Sep 13, 2026
c02399a
fix: clear final SonarCloud findings
Sep 13, 2026
aa636cc
fix: clear last SonarCloud findings
Sep 13, 2026
db9cce4
fix(server): widen WebSocketPeer request type to match crossws Upgrad…
Sep 13, 2026
1c3695e
chore: add mise toolchain, commitlint, ruff and hardened git hooks
Sep 13, 2026
a0311df
refactor(server): add Sonar-equivalent eslint rules and fix findings
Sep 13, 2026
6b58dfd
chore: extend eslint coverage to every workspace
Sep 13, 2026
356a4cb
chore: add agent quality integrations and CI lint jobs
Sep 13, 2026
a9eeca9
chore: install rustfmt and clippy with the pinned rust toolchain
Sep 13, 2026
9af1a38
fix(quality): address review findings on the tooling overhaul
Sep 13, 2026
4224bca
fix(ci): pass base ref via env to avoid template injection
Sep 13, 2026
1fbcec0
Merge pull request #54 from Heretek-Games/chore/quality-tooling
BillyOutlast Sep 13, 2026
5e8de2c
docs: link sister repositories and clarify multi-repo workspace bound…
Sep 13, 2026
94bbdc4
refactor: decouple GSE and ZeroTier subsystems
Sep 13, 2026
f362b17
chore: merge feat/decouple-gse-zerotier into develop
Sep 13, 2026
500548b
feat(plugins): implement client runtime, play actions, and launch pip…
Sep 13, 2026
5c6ed2f
chore(ci): remove obsolete ztnet e2e workflow
Sep 13, 2026
398eb65
feat(plugins): support multi-file bundle and .dropplugin archive install
Sep 14, 2026
00931c8
test(droplet): assert UTF-8 BOM survives manifest generation
Sep 14, 2026
9a847bb
feat(process): run admin setup installers in order after the base recipe
Sep 14, 2026
3001341
feat: game uninstallers, HTML launches, and launch diagnostics
Sep 14, 2026
8ec1de4
chore: merge develop into feat/issue6-launch-gaps
Sep 14, 2026
05bf69c
feat(plugins): add capability review modal before bundle install
Sep 14, 2026
eba6c86
feat(plugins): support remote registry url, install-by-url, and updat…
Sep 14, 2026
0c05871
Merge pull request #60 from Heretek-Games/feat/issue6-launch-gaps
BillyOutlast Sep 14, 2026
15d708f
feat(plugins): add client serverRequest proxy and generic extension p…
Sep 14, 2026
4f33488
feat(dist): add Ubuntu PPA + Fedora COPR publishing
Sep 14, 2026
eb19e6d
docs(dist): use droposs Launchpad and heretek-ai COPR namespaces
Sep 14, 2026
4ac9637
feat(plugins): add client system:command native command capability
Sep 14, 2026
bb561ea
refactor(dist): publish PPA via yuezk/publish-ppa-package
Sep 14, 2026
d95ac55
refactor(deploy): stop bundling ZTNET; delegate mesh to the drop-zero…
Sep 14, 2026
aeff582
feat(plugins): fail closed on system:command without a commands allow…
Sep 14, 2026
bdde5f1
fix(dist): extract drop-app from Tauri deb without leading ./
Sep 14, 2026
dd9331b
Merge pull request #61 from Heretek-Games/fix/dist-deb-binary-extraction
BillyOutlast Sep 14, 2026
ff3871b
fix: address SonarCloud findings (dist scripts, plugins)
Sep 14, 2026
e8a6464
fix(plugins): isolate plugin storage from bundle directory and harden…
Sep 14, 2026
1aaa2f0
feat(plugins): dynamic public websocket channels, web admin UI, and u…
Sep 14, 2026
795f61c
feat(plugins): implement MetadataProvider and PaymentGateway SPI exte…
Sep 14, 2026
585de88
fix(plugins): add collision guards, input validation, desktop SPI run…
Sep 14, 2026
28ac0f1
fix(server): use typed vue3-carousel-nuxt config key in nuxt.config.ts
Sep 14, 2026
44e4ef8
feat(cloud-saves): add Ludusavi lifecycle sync, testable save manager…
Sep 14, 2026
b45d899
fix(desktop): use buttons for conflict selection to satisfy a11y lint
Sep 14, 2026
885bc3d
feat(plugins): add CloudSavePathResolver SPI to core server and deskt…
Sep 14, 2026
aa429cc
refactor(desktop): extract plugin-ownership purge helper to satisfy c…
Sep 14, 2026
9a511fb
feat(cloud-saves): sync Ludusavi snapshots to the Drop server end-to-end
Sep 14, 2026
dad16ed
feat(delivery): add downpour push CDN chunker and LAN peer discovery …
Sep 14, 2026
8ce486f
fix(delivery): satisfy clippy for LAN scoring and push chunk helper
Sep 14, 2026
d22e494
feat(input): add Drop Input mapping core and Big Picture shell (#18)
Sep 14, 2026
11abf3e
feat(achievements): add achievement/leaderboard models, unlock API, a…
Sep 14, 2026
cbb419f
feat(community): add verified playtime reviews and Ed25519 purchase r…
Sep 14, 2026
67892a8
feat(community): add desktop community reviews page and fetch command
Sep 14, 2026
536e63a
docs(upstream): add PR 1 platform-stability and PR 2 generic-SPI scope
Sep 14, 2026
1f04a51
docs(roadmap): record per-issue completion status and verification ev…
Sep 14, 2026
775c2f0
refactor(metadata): consume plugin MetadataProvider SPI and externali…
Sep 14, 2026
2a76fdf
feat(cloud-saves): consume CloudSaveProvider resolver SPI in the serv…
Sep 14, 2026
f8d57ce
feat(cloud-saves): provision managed Ludusavi into <data>/tools/ludusavi
Sep 14, 2026
bbdc7a2
feat(delivery): add shader-cache discovery hook and desktop export co…
Sep 14, 2026
c6f511f
feat(lan): add SSDP peer discovery backend with loopback test (#17)
Sep 14, 2026
8ef8291
feat(lan): add client-to-client chunk fetch contract (#17)
Sep 14, 2026
49f2f61
feat(commerce): dispatch payment webhooks and wire store-scanner impo…
Sep 14, 2026
e4f1eff
feat(achievements): add desktop unlock toasts for drop:achievement:un…
Sep 14, 2026
58706fb
feat(achievements): add unlock_achievements Tauri command for plugin …
Sep 14, 2026
d81df27
feat(input): report platform backend availability and fail explicitly…
Sep 14, 2026
b6e8932
feat(lan): add HTTP client-to-client chunk fetcher with tested URL bu…
Sep 14, 2026
33a9417
feat(cli): upload packaged depots to memory/S3 via opendal (#407)
Sep 14, 2026
a7b079f
feat(achievements): mount unlock toasts in the desktop app shell
Sep 14, 2026
44bc25f
docs(roadmap): update completion status, evidence, and hard blockers
Sep 14, 2026
0ef75a6
feat(store-import): add desktop page driving the StoreScanner SPI
Sep 14, 2026
53930c3
fix(desktop): resolve typecheck errors in client plugin manager
Sep 14, 2026
8c42565
ci(analysis): keep knip report running when typecheck fails
Sep 14, 2026
59cccd1
fix(process): sweep symlink escapes after archive extraction
Sep 14, 2026
e7c1786
chore(security): run cargo-deny over every Rust crate
Sep 14, 2026
41a7eab
fix(server): clear the session cookie when a session expires
Sep 14, 2026
4264a59
fix(server): require explicit opt-in to overwrite objects
Sep 14, 2026
1b6df12
fix(server): make update checks ETag-aware and rate-limit tolerant
Sep 14, 2026
b72dc0f
fix(cloud_saves): skip unreadable save paths instead of panicking
Sep 14, 2026
3b99bc5
fix(input): report only implemented virtual-gamepad backends
Sep 14, 2026
ac9851f
fix(i18n): drop TODO markers from user activity strings
Sep 14, 2026
08d7f35
docs: correct upstream PR refs and roadmap claims
Sep 14, 2026
18ac88e
Merge pull request #62 from Heretek-Games/fix/desktop-typecheck
BillyOutlast Sep 14, 2026
e4b5106
Merge branch 'develop' into fix/core-hardening
BillyOutlast Sep 14, 2026
1db45df
Merge pull request #63 from Heretek-Games/fix/core-hardening
BillyOutlast Sep 14, 2026
adede2e
fix(server): reclaim pruned save objects and cap uploads while streaming
Sep 14, 2026
d0e2953
fix(desktop): consume plugin events through the Tauri event bridge
Sep 14, 2026
6bcfa1b
docs(roadmap): correct test count and record anti-cheat SPI follow-up
Sep 14, 2026
8dde0ae
refactor(desktop): expose a generic findFiles host primitive
Sep 14, 2026
a8c8ba5
docs(roadmap): record the completed findFiles anti-cheat refactor
Sep 14, 2026
e565d0e
feat(torrential): add opt-in chunk authentication for remote depots
Sep 14, 2026
d0aa35f
feat(torrential): verify LAN peer chunk SHA-256 before commit
Sep 14, 2026
c13bfeb
feat(server): add leaderboard API and best-score tracking
Sep 14, 2026
e9a126e
feat(cli): binary delta and branch/depot metadata for downpour push
Sep 14, 2026
24a2169
feat(server): add Drop Workshop mod registry and subscriptions
Sep 14, 2026
c6b9206
feat(desktop): stage shader caches before launch and document the pac…
Sep 14, 2026
664b7d1
feat(server): validate admin depot endpoints before registration
Sep 14, 2026
a58e6bf
docs(roadmap): record workshop, leaderboards, federation and mirror p…
Sep 14, 2026
4551527
feat(server): implement the Dropworks native SDK REST contract
Sep 14, 2026
9fca213
feat(server): add per-game discussion forums
Sep 14, 2026
3db5871
feat(desktop): show per-game forum threads on the community page
Sep 14, 2026
5f7ba9e
feat(torrential): add mDNS LAN discovery backend
Sep 14, 2026
b241a69
feat(server): purchase orders and Ed25519 ownership receipts
Sep 14, 2026
902d6ba
docs(roadmap): record commerce, forums and dropworks progress
Sep 14, 2026
327996f
feat(input): add a Linux uinput virtual-gamepad backend
Sep 14, 2026
633a140
feat(server): add storefront price tiers
Sep 14, 2026
de1b808
feat(community): add a public screenshot gallery
Sep 14, 2026
e68dfac
feat(server): global leaderboards on the Dropworks API
Sep 14, 2026
28cfbbe
docs(roadmap): record dropworks leaderboards, sharing and moderation …
Sep 14, 2026
1513ce8
feat(server): add developer crash telemetry
Sep 14, 2026
3529482
feat(server): add local rich presence
Sep 14, 2026
d7d8439
feat(desktop): report local presence on launch and exit
Sep 14, 2026
e76589e
feat(server): add dropworks presence endpoint
Sep 14, 2026
fd43799
docs(roadmap): add dropworks presence and refresh status evidence
Sep 14, 2026
6d063d9
docs(roadmap): note the dropworks csharp binding
Sep 14, 2026
e31a258
docs(roadmap): record the gdscript binding
Sep 14, 2026
afacbd0
feat(server): add WebRTC ICE configuration provider
Sep 14, 2026
a580892
docs(roadmap): record the webrtc signaling relay
Sep 14, 2026
4c9e59d
feat(desktop): add the client WebRTC peer module
Sep 14, 2026
dd54cad
feat(desktop): add the workshop mod load planner
Sep 14, 2026
8363593
feat(workshop): include the mod in subscription listings
Sep 14, 2026
8950364
feat(desktop): add a workshop mod manager page
Sep 14, 2026
501b040
feat(input): add shareable controller profiles
Sep 14, 2026
65313e6
feat(power): add handheld battery policy and command
Sep 14, 2026
02296fd
docs(roadmap): add remaining-work map and refresh verification
Sep 14, 2026
37bb20e
fix(server): harden plugin route patterns, i18n keys, and container user
Sep 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .claude/hooks/sonar-secrets/build-scripts/pretool-secrets.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
if ! command -v sonar &> /dev/null; then
exit 0
fi
sonar hook claude-pre-tool-use
5 changes: 5 additions & 0 deletions .claude/hooks/sonar-secrets/build-scripts/prompt-secrets.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
if ! command -v sonar &> /dev/null; then
exit 0
fi
sonar hook claude-prompt-submit
40 changes: 40 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"hooks": {
"PostToolUse": [
{
"hooks": [
{
"command": "\"${CLAUDE_PROJECT_DIR}/scripts/agent-quality-hook.sh\"",
"timeout": 60,
"type": "command"
}
],
"matcher": "Edit|Write|MultiEdit"
}
],
"PreToolUse": [
{
"hooks": [
{
"command": "\"${CLAUDE_PROJECT_DIR}/.claude/hooks/sonar-secrets/build-scripts/pretool-secrets.sh\"",
"timeout": 60,
"type": "command"
}
],
"matcher": "Read"
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"command": "\"${CLAUDE_PROJECT_DIR}/.claude/hooks/sonar-secrets/build-scripts/prompt-secrets.sh\"",
"timeout": 60,
"type": "command"
}
],
"matcher": "*"
}
]
}
}
3 changes: 3 additions & 0 deletions .codex/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[mcp_servers.sonarqube]
command = "sonar"
args = [ "run", "mcp", "--project", "Heretek-Games_drop" ]
16 changes: 16 additions & 0 deletions .codex/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"command": "'.codex/hooks/sonar-secrets/build-scripts/prompt-secrets.sh'",
"timeout": 60,
"type": "command"
}
],
"matcher": "*"
}
]
}
}
5 changes: 5 additions & 0 deletions .codex/hooks/sonar-secrets/build-scripts/prompt-secrets.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
if ! command -v sonar &> /dev/null; then
exit 0
fi
sonar hook codex-prompt-submit
29 changes: 29 additions & 0 deletions .cursor/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"hooks": {
"beforeReadFile": [
{
"command": "'.cursor/hooks/sonar-secrets/build-scripts/before-read-file-secrets.sh'",
"failClosed": false,
"matcher": "Read|TabRead",
"timeout": 60
}
],
"beforeSubmitPrompt": [
{
"command": "'.cursor/hooks/sonar-secrets/build-scripts/prompt-secrets.sh'",
"failClosed": false,
"matcher": "UserPromptSubmit",
"timeout": 60
}
],
"preToolUse": [
{
"command": "'.cursor/hooks/sonar-secrets/build-scripts/pre-tool-use-secrets.sh'",
"failClosed": false,
"matcher": "Read",
"timeout": 60
}
]
},
"version": 1
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
if ! command -v sonar &> /dev/null; then
exit 0
fi
sonar hook cursor-pre-file-read
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
if ! command -v sonar &> /dev/null; then
exit 0
fi
sonar hook cursor-pre-tool-use
5 changes: 5 additions & 0 deletions .cursor/hooks/sonar-secrets/build-scripts/prompt-secrets.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
if ! command -v sonar &> /dev/null; then
exit 0
fi
sonar hook cursor-prompt-submit
8 changes: 8 additions & 0 deletions .cursor/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"sonarqube": {
"args": ["run", "mcp", "--project", "Heretek-Games_drop"],
"command": "sonar"
}
}
}
2 changes: 2 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Repository-wide Prettier formatting pass
ab351bf800feba2e5658c9758fe3f5682a501497
228 changes: 228 additions & 0 deletions .github/workflows/analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
name: Static analysis

on:
push:
branches: [develop]
pull_request:
branches: [develop]
schedule:
- cron: "17 5 * * 1" # weekly Monday 05:17 UTC
workflow_dispatch:

permissions:
contents: read

jobs:
actionlint:
name: actionlint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- name: Lint workflows
run: docker run --rm -v "$PWD:/mnt:ro" -w /mnt rhysd/actionlint:1.7.12 -color

zizmor:
name: zizmor (Actions security)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- name: Install zizmor
run: pipx install zizmor==1.30.1
- name: Audit workflows
run: zizmor --format plain .github/workflows

shellcheck:
name: shellcheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- name: Shellcheck scripts
run: |
mapfile -t files < <(git ls-files '*.sh')
if [ "${#files[@]}" -eq 0 ]; then
echo "No shell scripts found."
exit 0
fi
shellcheck "${files[@]}"

hadolint:
name: hadolint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- name: Lint Dockerfile
run: docker run --rm -i hadolint/hadolint:v2.15.1 < Dockerfile

pnpm-audit:
name: pnpm audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # pnpm/action-setup@v6
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # actions/setup-node@v7
with:
node-version: lts/*
cache: "pnpm"
- name: Install dependencies
run: pnpm install --ignore-scripts
- name: Audit
run: pnpm audit --audit-level high

govulncheck:
name: govulncheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- uses: golang/govulncheck-action@032d45514ae346b1db93c04b0c90b841c370344f # v1.1.0
with:
repo-checkout: false
go-version-file: backend/go.work
work-dir: backend
go-package: ./core/...
cache: false

cargo-machete:
name: cargo-machete (unused Rust deps)
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
crate:
- cli
- torrential
- desktop/src-tauri
- libraries/droplet
- libraries/droplet_types
- libraries/libarchive
- libraries/native_model
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@7c8d7d138f5c09cef361f8214cf96882cd029cdb # dtolnay/rust-toolchain@nightly
- uses: taiki-e/install-action@4b8992af23a2be34fd58f8d9b50d3f4939ad1891 # taiki-e/install-action@cargo-machete
with:
tool: cargo-machete
- name: Find unused dependencies
working-directory: ${{ matrix.crate }}
run: cargo machete

desktop:
name: desktop frontend (typecheck + knip)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # pnpm/action-setup@v6
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # actions/setup-node@v7
with:
node-version: lts/*
cache: "pnpm"
- name: Install root dependencies
run: pnpm install --ignore-scripts
- name: Install desktop/main dependencies
run: pnpm -C desktop/main install --ignore-scripts
- name: Typecheck desktop/main
run: pnpm -C desktop/main run typecheck
- name: Knip report (desktop/main)
if: always()
run: pnpm exec knip --directory desktop/main --reporter json --no-exit-code > desktop-knip-report.json
- name: Upload knip report
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # actions/upload-artifact@v7
with:
name: desktop-knip-report
path: desktop-knip-report.json

frontend-lint:
name: frontend lint (${{ matrix.target }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target:
- desktop/main
- libraries/base
- sites/promo
- sites/docs
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # pnpm/action-setup@v6
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # actions/setup-node@v7
with:
node-version: lts/*
cache: "pnpm"
- name: Install root dependencies
run: pnpm install --ignore-scripts
- name: Install desktop/main dependencies
if: matrix.target == 'desktop/main'
run: pnpm -C desktop/main install --ignore-scripts
- name: Lint
run: pnpm -C ${{ matrix.target }} run lint

commitlint:
name: commitlint
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
fetch-depth: 0
persist-credentials: false
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # pnpm/action-setup@v6
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # actions/setup-node@v7
with:
node-version: lts/*
cache: "pnpm"
- name: Install dependencies
run: pnpm install --ignore-scripts
- name: Lint commit messages
env:
BASE_REF: ${{ github.base_ref }}
run: >-
pnpm exec commitlint
--from "origin/$BASE_REF"
--to HEAD

ruff:
name: ruff (Python dev tools)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- name: Install ruff
run: pipx install ruff==0.16.7
- name: Check
working-directory: server
run: |
ruff check dev-tools
ruff format --check dev-tools

typos:
name: typos
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # actions/checkout@v7
with:
persist-credentials: false
- uses: taiki-e/install-action@4b8992af23a2be34fd58f8d9b50d3f4939ad1891 # taiki-e/install-action@typos
with:
tool: typos@1.50.1
- name: Check spelling
run: typos
Loading