Skip to content

feat: add mobile app #57

feat: add mobile app

feat: add mobile app #57

Workflow file for this run

name: CI
on:
pull_request:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
env:
NODE_VERSION: 22.23.1
JUST_VERSION: 1.40.0
GOLANGCI_LINT_VERSION: v2.11.4
jobs:
format:
name: Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
- uses: actions/setup-go@v5
with:
go-version-file: server/go.mod
cache-dependency-path: server/go.sum
- uses: extractions/setup-just@v3
with:
just-version: ${{ env.JUST_VERSION }}
- run: pnpm install --frozen-lockfile
- run: pnpm format:check
- name: Check Go formatting
run: test -z "$(gofmt -l server)"
contract:
name: Contract and generated artifacts
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
- uses: extractions/setup-just@v3
with:
just-version: ${{ env.JUST_VERSION }}
- run: pnpm install --frozen-lockfile
- run: pnpm --filter @project-template/api check
- run: pnpm generated:check
- run: pnpm test:template
backend:
name: Backend
runs-on: ubuntu-latest
services:
postgres:
image: postgres:17.6-alpine
env:
POSTGRES_DB: project_template_test
POSTGRES_USER: project_template
POSTGRES_PASSWORD: project_template
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U project_template -d project_template_test"
--health-interval 5s
--health-timeout 5s
--health-retries 12
env:
SITCON_BOARD_TEST_DATABASE_URL: postgres://project_template:project_template@localhost:5432/project_template_test?sslmode=disable
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: server/go.mod
cache-dependency-path: server/go.sum
- uses: extractions/setup-just@v3
with:
just-version: ${{ env.JUST_VERSION }}
- uses: golangci/golangci-lint-action@v7
with:
version: ${{ env.GOLANGCI_LINT_VERSION }}
working-directory: server
args: --config ../golangci.yaml ./...
- name: Check Go formatter drift
working-directory: server
run: |
diff="$(golangci-lint fmt --diff --config ../golangci.yaml)"
test -z "$diff" || { printf '%s\n' "$diff"; exit 1; }
- run: just backend-test
- run: just backend-test-integration
- run: just backend-build
web:
name: Web
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
- uses: extractions/setup-just@v3
with:
just-version: ${{ env.JUST_VERSION }}
- run: pnpm install --frozen-lockfile
- run: pnpm check:frontend-style
- run: pnpm --filter @project-template/web lint
- run: pnpm --filter @project-template/web typecheck
- run: pnpm --filter @project-template/web test
- run: pnpm --filter @project-template/web build
- name: Install Chromium for drag regression
run: pnpm --filter @project-template/web exec playwright install --with-deps chromium
- name: Run board drag regression
env:
E2E_DEMO: "true"
VITE_SITCON_DEMO: "true"
run: pnpm --filter @project-template/web exec playwright test e2e/board-demo.spec.ts --grep "drag handle reorders|dragging near the board edge" --project=chromium
ui:
name: UI and Storybook
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
- uses: extractions/setup-just@v3
with:
just-version: ${{ env.JUST_VERSION }}
- run: pnpm install --frozen-lockfile
- run: pnpm --filter @project-template/ui typecheck
- run: pnpm --filter @project-template/ui lint
- run: pnpm --filter @project-template/ui test
- run: pnpm --filter @project-template/ui build
- run: pnpm --filter @project-template/ui build:storybook
docs:
name: Documentation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
- uses: extractions/setup-just@v3
with:
just-version: ${{ env.JUST_VERSION }}
- run: pnpm install --frozen-lockfile
- run: pnpm --filter @project-template/ui build
- run: pnpm --filter @project-template/docs check
- run: pnpm --filter @project-template/docs build:site
mobile-android:
name: Mobile Android
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-java@v6
with:
distribution: temurin
java-version: "17"
cache: gradle
- uses: gradle/actions/setup-gradle@v6
- uses: android-actions/setup-android@v4
- run: sdkmanager "platforms;android-36" "build-tools;36.0.0"
- run: mobile/gradlew -p mobile :composeApp:testDebugUnitTest :composeApp:lintDebug :composeApp:assembleDebug
mobile-ios:
name: Mobile iOS framework
runs-on: macos-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-java@v6
with:
distribution: temurin
java-version: "17"
cache: gradle
- uses: gradle/actions/setup-gradle@v6
- run: mobile/gradlew -p mobile :composeApp:linkDebugFrameworkIosSimulatorArm64
complete:
name: CI complete
if: always()
needs: [format, contract, backend, web, ui, docs, mobile-android, mobile-ios]
runs-on: ubuntu-latest
steps:
- name: Require all jobs
env:
FORMAT_RESULT: ${{ needs.format.result }}
CONTRACT_RESULT: ${{ needs.contract.result }}
BACKEND_RESULT: ${{ needs.backend.result }}
WEB_RESULT: ${{ needs.web.result }}
UI_RESULT: ${{ needs.ui.result }}
DOCS_RESULT: ${{ needs.docs.result }}
MOBILE_ANDROID_RESULT: ${{ needs.mobile-android.result }}
MOBILE_IOS_RESULT: ${{ needs.mobile-ios.result }}
run: |
for result in "$FORMAT_RESULT" "$CONTRACT_RESULT" "$BACKEND_RESULT" "$WEB_RESULT" "$UI_RESULT" "$DOCS_RESULT" "$MOBILE_ANDROID_RESULT" "$MOBILE_IOS_RESULT"; do
test "$result" = success
done