Skip to content

Theme: follow system dark mode (Windows three-way, macOS appearance t… #47

Theme: follow system dark mode (Windows three-way, macOS appearance t…

Theme: follow system dark mode (Windows three-way, macOS appearance t… #47

Workflow file for this run

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