Repository navigation
feat: add mobile app #57
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: 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 |