Repository navigation
Theme: follow system dark mode (Windows three-way, macOS appearance t… #47
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Native Apps CI | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - 'VERSION' | |
| - 'apps/macos/**' | |
| - 'apps/windows/**' | |
| - 'apps/linux/**' | |
| - 'shared/**' | |
| - 'scripts/**' | |
| - '.github/workflows/native.yml' | |
| - '.github/workflows/release-native.yml' | |
| pull_request: | |
| paths: | |
| - 'VERSION' | |
| - 'apps/macos/**' | |
| - 'apps/windows/**' | |
| - 'apps/linux/**' | |
| - 'shared/**' | |
| - 'scripts/**' | |
| - '.github/workflows/native.yml' | |
| - '.github/workflows/release-native.yml' | |
| permissions: | |
| contents: read | |
| jobs: | |
| contract-preflight: | |
| name: Shared contract + release metadata | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Verify platform i18n copies match shared/i18n | |
| run: scripts/sync-i18n.sh --check | |
| - name: Verify release version alignment | |
| run: bash scripts/check-release-version.sh | |
| macos: | |
| name: macOS (Swift build + tests + CLI golden smoke) | |
| runs-on: macos-15 | |
| needs: contract-preflight | |
| defaults: | |
| run: | |
| working-directory: apps/macos | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Swift version | |
| run: swift --version | |
| - name: Build | |
| run: swift build | |
| - name: Unit tests (data contract, date parser, CLI JSON) | |
| run: swift test | |
| - name: CLI end-to-end smoke (contract) | |
| run: | | |
| DB=$(mktemp -d)/tasks.db | |
| B=.build/debug/Taskly | |
| $B mklist "work" --icon "💼" --color "#007AFF" --db "$DB" | |
| ID=$($B add "buy milk" --due tomorrow --db "$DB" --quiet) | |
| $B update "$ID" --time 09:30 --db "$DB" --json | grep -q '"dueTime": "09:30"' | |
| $B search "milk" --db "$DB" --json | grep -q '"text"' | |
| $B done "$ID" --db "$DB" --json --quiet | grep -q '"completed": true' | |
| $B rm "$ID" --db "$DB" --json | grep -q '"deleted": true' | |
| $B list --view completed --db "$DB" | wc -l | grep -q '^0$' || true | |
| set +e | |
| $B update 999 --text x --db "$DB" 2>/dev/null; test $? -eq 3 | |
| $B list --view bogus --db "$DB" 2>/dev/null; test $? -eq 2 | |
| set -e | |
| linux: | |
| name: Linux (Vala build + contract tests + CLI smoke) | |
| runs-on: ubuntu-latest | |
| needs: contract-preflight | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Vala + GTK toolchain | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y valac meson libgtk-4-dev libadwaita-1-dev \ | |
| libsqlite3-dev libnotify-dev pkg-config | |
| - name: Build (valac → C → native binary) | |
| working-directory: apps/linux | |
| run: | | |
| meson setup build | |
| meson compile -C build | |
| - name: Contract tests (schema/date parser/i18n/CLI JSON) | |
| working-directory: apps/linux | |
| run: meson test -C build --verbose | |
| - name: CLI end-to-end smoke (contract, --db isolation) | |
| working-directory: apps/linux | |
| run: | | |
| DB=$(mktemp -d)/tasks.db | |
| B=build/taskly | |
| $B mklist "work" --icon "💼" --color "#007AFF" --db "$DB" --json | grep -q '"id": 2' | |
| test -f "$DB" | |
| ID=$($B add "buy milk" --due tomorrow --db "$DB" --quiet) | |
| $B update "$ID" --time 09:30 --db "$DB" --json | grep -q '"dueTime": "09:30"' | |
| $B search "milk" --db "$DB" --json | grep -q '"text"' | |
| $B done "$ID" --db "$DB" --json --quiet | grep -q '"completed": true' | |
| $B rm "$ID" --db "$DB" --json | grep -q '"deleted": true' | |
| set +e | |
| $B update 999 --text x --db "$DB" 2>/dev/null; test $? -eq 3 | |
| $B list --view bogus --db "$DB" 2>/dev/null; test $? -eq 2 | |
| set -e | |
| windows: | |
| name: Windows (WinUI 3 build + CLI smoke) | |
| runs-on: windows-latest | |
| needs: contract-preflight | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: '10.0.x' | |
| - name: Build | |
| run: dotnet build apps/windows/Taskly/Taskly.csproj -c Release -p:Platform=x64 | |
| - name: CLI end-to-end smoke (contract, --db isolation) | |
| shell: bash | |
| run: | | |
| DB=$(mktemp -d)/tasks.db | |
| B=apps/windows/Taskly/bin/x64/Release/net8.0-windows10.0.22621.0/Taskly.exe | |
| "$B" mklist "work" --icon "💼" --color "#007AFF" --db "$DB" --json | grep -q '"id": 2' | |
| ID=$("$B" add "buy milk" --due tomorrow --db "$DB" --quiet) | |
| "$B" update "$ID" --time 09:30 --db "$DB" --json | grep -q '"dueTime": "09:30"' | |
| "$B" search "milk" --db "$DB" --json | grep -q '"text"' | |
| "$B" done "$ID" --db "$DB" --json --quiet | grep -q '"completed": true' | |
| "$B" rm "$ID" --db "$DB" --json | grep -q '"deleted": true' | |
| set +e | |
| "$B" update 999 --text x --db "$DB" 2>/dev/null; test $? -eq 3 | |
| "$B" list --view bogus --db "$DB" 2>/dev/null; test $? -eq 2 | |
| set -e |