Skip to content

Building from source

Requirements

  • Windows 10 1809+ with the .NET 8 SDK.
  • Flutter (stable channel) for the app; Android SDK and JDK 17 for the APK.

Backend

# run (tray app + server at http://localhost:4787)
cd DroidDeck
dotnet run

# build the solution
dotnet build DroidDeck.sln -c Debug

Warning

Don't use dotnet build -o <dir> on the backend project: it corrupts obj/ and produces an assembly without its resources, and the app closes right after starting.

Set ASPNETCORE_ENVIRONMENT=Development to enable Swagger at /swagger.

App

cd app

# web configurator -> builds and copies to DroidDeck/wwwroot
..\scripts\deploy-web.ps1

# Android APK
flutter build apk --debug --target-platform android-arm64
adb install -r build\app\outputs\flutter-apk\app-debug.apk

Tests and CI

dotnet test DroidDeck.sln              # backend (tests/DroidDeck.Tests)
cd app; flutter analyze; flutter test  # app

Backend tests never touch your real data: a module initializer points the server's data folders to a temporary directory through DROIDDECK_DATA_DIR. Tests in the RequiresDesktop category send real keystrokes (swallowed by a keyboard hook) and need an interactive Windows session.

The CI workflow (.github/workflows/ci.yml) runs on every push to main and on every pull request: backend tests (except RequiresDesktop), flutter analyze --no-fatal-infos, flutter test and a strict documentation build. The Release workflow runs the tests again before building.

Releases

Releases are made by the Release workflow (.github/workflows/release.yml), started manually from Actions → Release → Run workflow. It uses semantic-release, so the version comes from the commits (Conventional Commits):

Commit Version bump
feat: minor
fix:, perf: patch
feat!: or BREAKING CHANGE major

It updates CHANGELOG.md, creates the tag and the GitHub Release, and attaches DroidDeck-Setup.exe (installer), DroidDeck-win-x64.zip (the same self-contained backend with the web configurator embedded, without installer) and DroidDeck.apk. A first job runs semantic-release in dry-run to learn the next version, because the installer is packed with it (Velopack, --packId DroidDeckPC). The Velopack feed (releases.win.json, the .nupkg and friends) is attached too: installed copies look for it in the latest release to update themselves, so don't delete those assets. If there is no releasable commit since the last version, nothing is published.

This website

The landing page (website/landing/) and this documentation (website/docs/, MkDocs Material, English and Portuguese) are published to GitHub Pages by .github/workflows/pages.yml on every push to main that touches website/.

pip install -r website/requirements.txt
cd website
mkdocs serve        # http://127.0.0.1:8000/DroidDeck/docs/

Pages live in website/docs/en/ and website/docs/pt/ with the same file names. When you add a page, add it to nav in website/mkdocs.yml and create it in both languages.