Skip to main content
Rakcha uses GitHub Actions for continuous integration and deployment. Workflows are defined in apps/desktop/.github/workflows/. The root .github/ directory contains Dependabot configuration and issue/PR templates.

Workflow overview

Workflow fileTriggerPurpose
ci.ymlPush / PR to main, developFull CI pipeline: build, test, code quality, security scan, jpackage verification, and optional release.
build-and-deploy.ymlPush / PR to main, master; version tags (v*)Cross-platform native installer builds (Linux .deb, Windows .msi, macOS .dmg) and GitHub Pages deployment.
maven.ymlPush / PR to mainLightweight Maven build and dependency graph submission to GitHub.
codeql.ymlPush / PR to main; weekly scheduleGitHub CodeQL static analysis for Java.
sonarcloud.ymlPush / PR to mainSonarCloud quality gate analysis.

CI pipeline (ci.yml)

Triggered on every push or pull request to main or develop. The pipeline runs six jobs:
1

Build and test

Sets up Java 21 (Liberica JDK with JavaFX), caches the local Maven repository, compiles the project, and runs the unit test suite with mvn test. JaCoCo coverage reports are generated and uploaded to Codecov. Test results are retained as workflow artifacts for 30 days.
2

Code quality analysis

Runs SpotBugs static analysis (mvn spotbugs:check) and generates JavaDoc. Both outputs are uploaded as artifacts. This job runs after the build-and-test job succeeds.
3

Security scan

Runs OWASP Dependency-Check (mvn org.owasp:dependency-check-maven:check) and Trivy filesystem vulnerability scanning. Results are uploaded to GitHub Security as SARIF.
4

Verify jpackage configuration

Builds the application JAR and validates that jpackage can produce a working app-image on the CI runner. Fails the pipeline if the image is not created.
5

Build release artifacts

Runs only when a version tag (refs/tags/v*) is pushed. Builds the release JAR, generates release notes, and creates a GitHub Release with the JAR, LICENSE, and README attached.
6

Send notifications

Always runs at the end of the pipeline (regardless of earlier job results) and logs the final build status. Notification integrations (Slack, Discord, etc.) can be added here.

Build and deploy workflow (build-and-deploy.yml)

Produces native desktop installers for all three platforms in parallel using jpackage. The app version is 1.0.10 and the main class is com.esprit.MainApp.
1

Build Linux distribution

Runs on ubuntu-latest. Produces a .deb Debian package installer and a portable .tar.gz archive. Both are uploaded as the linux-distributions artifact (retained 90 days).
2

Build Windows distribution

Runs on windows-latest. Produces a .msi Windows Installer package and a portable .zip archive. Both are uploaded as the windows-distributions artifact.
3

Build macOS distribution

Runs on macos-latest. Produces a .dmg disk image installer and a portable .tar.gz archive. Both are uploaded as the macos-distributions artifact.
4

Deploy to GitHub Pages

Downloads all platform artifacts, organises them under releases/{linux,windows,macos}/, and deploys the result to GitHub Pages. Runs on pushes to main/master and on version tags.
5

Create GitHub release

Runs only on version tags. Downloads all artifacts, generates installation instructions per platform, and publishes a GitHub Release using ncipollo/release-action.
All installers bundle Java 21 — users do not need a separate JDK or JRE installed.

CodeQL analysis (codeql.yml)

Runs CodeQL Advanced analysis against the java-kotlin language matrix on every push and pull request to main, and on a weekly schedule (Fridays at 21:44 UTC). Results are uploaded to the GitHub Security tab as SARIF.

SonarCloud analysis (sonarcloud.yml)

Runs SonarCloud quality gate analysis on every push and pull request to main. Requires the SONAR_TOKEN repository secret.
Project key:     aliammari1_rakcha-desktop
Organization:    aliammari1
Add SONAR_TOKEN in Settings > Secrets and variables > Actions before enabling this workflow.

Dependabot

Dependabot is configured at the repository root (.github/dependabot.yml) and in apps/web/.github/dependabot.yml. It runs weekly version updates for:
EcosystemDirectory
npm/apps/web
maven/apps/desktop
composer/apps/web
docker-compose/ (repository root)
pub (Flutter/Dart)/apps/mobile

Running tests locally

The Taskfile.yml at the repository root provides task definitions for all apps. Install Task to use these commands.

Run the full test suite

task test:all
This sequentially runs the desktop, web, and mobile test suites.

Per-app test commands

task desktop:test
# Equivalent to:
mvn test

Available Taskfile tasks

The Taskfile.yml defines the following tasks:
TaskDirectoryCommandDescription
desktop:buildapps/desktopmvn clean install -DskipTestsBuild the desktop JAR without running tests.
desktop:runapps/desktopmvn javafx:runLaunch the desktop app via the JavaFX Maven plugin.
desktop:testapps/desktopmvn testRun the Maven test suite.
web:installapps/webcomposer install && npm installInstall PHP and JavaScript dependencies.
web:devapps/websymfony server:start -dStart the Symfony development server in detached mode. Requires the Symfony CLI.
web:buildapps/webnpm run buildBuild frontend assets.
web:testapps/webphp bin/phpunitRun the PHPUnit test suite.
web:migrateapps/webphp bin/console doctrine:migrations:migrate --no-interactionApply pending database migrations.
mobile:getapps/mobileflutter pub getFetch Flutter/Dart dependencies.
mobile:runapps/mobileflutter runRun the app on a connected device or emulator.
mobile:build:apkapps/mobileflutter build apkBuild an Android APK.
mobile:build:iosapps/mobileflutter build iosBuild an iOS archive (macOS only).
mobile:testapps/mobileflutter testRun the Flutter test suite.
test:all(root)Runs desktop:test, web:test, mobile:testRun all test suites in sequence.
setup(root)Runs web:install, mobile:get, desktop:buildFirst-time setup for all apps.
api:generate(root)openapi-generator-cli generateRegenerate API clients for all three apps from shared/api-spec/openapi.yaml.

Required secrets

The following secrets must be configured in the GitHub repository before the workflows function correctly:
SecretUsed byDescription
GITHUB_TOKENci.yml, build-and-deploy.ymlAutomatically provided by GitHub Actions. Used for creating releases and uploading artifacts.
SONAR_TOKENsonarcloud.ymlAPI token from SonarCloud.
Codecov integration in ci.yml uses codecov/codecov-action with fail_ci_if_error: false, so missing Codecov configuration does not break the build.

Build docs developers (and LLMs) love