From d5728ae7dc409747795f5a1b979c0c85099f2ba2 Mon Sep 17 00:00:00 2001 From: Dominic Seung Date: Thu, 20 Aug 2026 02:07:42 -0700 Subject: [PATCH 1/6] Revert "remove workflows to fix later" This reverts commit 2598c8724e9ee33d01eafa8f4b8d02b99e475ab6. --- .github/workflows/build-android.yml | 36 ++++++++++++++++ .github/workflows/build-ios.yml | 31 ++++++++++++++ .github/workflows/lint.yml | 25 +++++++++++ .github/workflows/test-android.yml | 34 +++++++++++++++ .github/workflows/test-ios.yml | 66 +++++++++++++++++++++++++++++ .github/workflows/test-web.yml | 37 ++++++++++++++++ .github/workflows/typecheck.yml | 25 +++++++++++ 7 files changed, 254 insertions(+) create mode 100644 .github/workflows/build-android.yml create mode 100644 .github/workflows/build-ios.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/test-android.yml create mode 100644 .github/workflows/test-ios.yml create mode 100644 .github/workflows/test-web.yml create mode 100644 .github/workflows/typecheck.yml diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml new file mode 100644 index 0000000..2cbb658 --- /dev/null +++ b/.github/workflows/build-android.yml @@ -0,0 +1,36 @@ +name: Build and Submit Android App + +on: + workflow_dispatch: + push: + branches: + - "main" + +jobs: + build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-java@v4 + with: + distribution: "temurin" + java-version: "21" + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies + run: bun ci + + - name: Build Android App + env: + EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + run: bun run --filter @scheduli/mobile build:android + + - name: Submit Android App + if: github.ref == 'refs/heads/main' + env: + EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + run: bun run --filter @scheduli/mobile submit:android diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml new file mode 100644 index 0000000..4b65aa0 --- /dev/null +++ b/.github/workflows/build-ios.yml @@ -0,0 +1,31 @@ +name: Build and Submit iOS App + +on: + workflow_dispatch: + push: + branches: + - "main" + +jobs: + build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v6 + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies + run: bun ci + + - name: Build iOS App + env: + EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + run: bun run --filter @scheduli/mobile build:ios + + - name: Submit iOS App + if: github.ref == 'refs/heads/main' + env: + EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + run: bun run --filter @scheduli/mobile submit:ios diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..883b2e4 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,25 @@ +name: Lint + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + workflow_dispatch: + pull_request: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies + run: bun ci + + - name: Run lint + run: bun run lint diff --git a/.github/workflows/test-android.yml b/.github/workflows/test-android.yml new file mode 100644 index 0000000..e8ab889 --- /dev/null +++ b/.github/workflows/test-android.yml @@ -0,0 +1,34 @@ +name: Build Android App + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + workflow_dispatch: + pull_request: + +jobs: + build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-java@v4 + with: + distribution: "temurin" + java-version: "21" + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies + run: bun ci + + - name: Build Android Simulator App + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: dsnss-projects + EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + run: bunx turbo run build:android:simulator diff --git a/.github/workflows/test-ios.yml b/.github/workflows/test-ios.yml new file mode 100644 index 0000000..8c87eb6 --- /dev/null +++ b/.github/workflows/test-ios.yml @@ -0,0 +1,66 @@ +name: Test iOS App + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + workflow_dispatch: + pull_request: + +jobs: + test: + runs-on: macos-latest + timeout-minutes: 60 + steps: + - uses: actions/checkout@v6 + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies + run: bun ci + + - name: Install Maestro + run: | + curl -fsSL "https://get.maestro.mobile.dev" | bash + echo "$HOME/.maestro/bin" >> $GITHUB_PATH + + - name: Build iOS Simulator App + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: dsnss-projects + EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} + run: bunx turbo run build:ios:simulator + + - uses: futureware-tech/simulator-action@v4 + with: + model: "iPhone 17 Pro" + wait_for_boot: true + + - name: Install iOS App + run: bun run --filter @scheduli/mobile install:ios:simulator + + - name: Run iOS Tests + env: + MAESTRO_DRIVER_STARTUP_TIMEOUT: 120000 + run: bun run --filter @scheduli/mobile test + + - name: Create Debug Information + if: failure() + run: | + mkdir -p ./debug-info + cp -r ~/Library/Logs/DiagnosticReports/ ./debug-info/diagnostic-reports + cp -r ~/Library/Logs/CoreSimulator ./debug-info/simulator-logs + cp -r apps/mobile/.maestro/recordings ./debug-info/recordings + cp -r ~/.maestro/tests ./debug-info/maestro-logs + + - name: Upload Debug Information + if: failure() + uses: actions/upload-artifact@v6 + with: + name: debug-info + path: ./debug-info/ + if-no-files-found: ignore + retention-days: 1 diff --git a/.github/workflows/test-web.yml b/.github/workflows/test-web.yml new file mode 100644 index 0000000..5a4aff3 --- /dev/null +++ b/.github/workflows/test-web.yml @@ -0,0 +1,37 @@ +name: Test Website + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + workflow_dispatch: + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - uses: actions/checkout@v6 + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies + run: bun ci + + - name: Install Playwright Browsers + run: bun run --filter @scheduli/web test:setup + + - name: Run Playwright tests + run: bun run --filter @scheduli/web test + + - uses: actions/upload-artifact@v6 + if: failure() + with: + name: playwright-report + path: ./apps/web/playwright-report/ + if-no-files-found: ignore + retention-days: 1 diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml new file mode 100644 index 0000000..fa77517 --- /dev/null +++ b/.github/workflows/typecheck.yml @@ -0,0 +1,25 @@ +name: Typecheck + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + workflow_dispatch: + pull_request: + +jobs: + typecheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies + run: bun ci + + - name: Typecheck + run: bun run --filter @scheduli/mobile typecheck From a04d7046da2e9d9a9833f83a8ddf7ac6723e0d07 Mon Sep 17 00:00:00 2001 From: Dominic Seung Date: Thu, 20 Aug 2026 02:09:58 -0700 Subject: [PATCH 2/6] run build/test workflows always --- .github/workflows/build-android.yml | 4 +--- .github/workflows/build-ios.yml | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index 2cbb658..67fb99d 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -2,9 +2,7 @@ name: Build and Submit Android App on: workflow_dispatch: - push: - branches: - - "main" + pull_request: jobs: build: diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index 4b65aa0..d9df89d 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -2,9 +2,7 @@ name: Build and Submit iOS App on: workflow_dispatch: - push: - branches: - - "main" + pull_request: jobs: build: From 6b89045a7dd9b69ff158e807f11a53f0210ddfb1 Mon Sep 17 00:00:00 2001 From: Dominic Seung Date: Thu, 20 Aug 2026 02:12:28 -0700 Subject: [PATCH 3/6] Revert "run build/test workflows always" This reverts commit a04d7046da2e9d9a9833f83a8ddf7ac6723e0d07. --- .github/workflows/build-android.yml | 4 +++- .github/workflows/build-ios.yml | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index 67fb99d..2cbb658 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -2,7 +2,9 @@ name: Build and Submit Android App on: workflow_dispatch: - pull_request: + push: + branches: + - "main" jobs: build: diff --git a/.github/workflows/build-ios.yml b/.github/workflows/build-ios.yml index d9df89d..4b65aa0 100644 --- a/.github/workflows/build-ios.yml +++ b/.github/workflows/build-ios.yml @@ -2,7 +2,9 @@ name: Build and Submit iOS App on: workflow_dispatch: - pull_request: + push: + branches: + - "main" jobs: build: From 1d46ca4e58c4b4700a3bf1684428dd7449751aa4 Mon Sep 17 00:00:00 2001 From: Dominic Seung Date: Thu, 20 Aug 2026 02:28:55 -0700 Subject: [PATCH 4/6] ci: retrigger workflows From f221a1765bd11c321c890533ad3982b2c3a38637 Mon Sep 17 00:00:00 2001 From: Dominic Seung Date: Thu, 20 Aug 2026 04:40:45 -0700 Subject: [PATCH 5/6] Pin MMKVCore 2.4.0 to fix iOS memset_s build failure (#13) * pin MMKVCore and MMKVAppExtension to 2.4.0 MMKVCore 2.4.1 fails to compile (memset_s). Pinning only MMKVAppExtension still resolves MMKVCore 2.4.1 because ~> 2.4.0 allows it. Co-authored-by: Dominic Seung * make maestro-test.sh executable The iOS test job failed immediately with permission denied (exit 126) because the script was checked in as 100644. Co-authored-by: Dominic Seung --------- Co-authored-by: Cursor Agent --- apps/mobile/plugins/withAddPodDepsToTargets.ts | 3 ++- apps/mobile/scripts/maestro-test.sh | 0 2 files changed, 2 insertions(+), 1 deletion(-) mode change 100644 => 100755 apps/mobile/scripts/maestro-test.sh diff --git a/apps/mobile/plugins/withAddPodDepsToTargets.ts b/apps/mobile/plugins/withAddPodDepsToTargets.ts index 4df6453..b07965e 100644 --- a/apps/mobile/plugins/withAddPodDepsToTargets.ts +++ b/apps/mobile/plugins/withAddPodDepsToTargets.ts @@ -9,7 +9,8 @@ target "StatusWidget" do use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] - pod "MMKVAppExtension" + pod "MMKVAppExtension", "2.4.0" + pod "MMKVCore", "2.4.0" end `; diff --git a/apps/mobile/scripts/maestro-test.sh b/apps/mobile/scripts/maestro-test.sh old mode 100644 new mode 100755 From e7af149b6af2c780e6360db9b6f91b9720d6d056 Mon Sep 17 00:00:00 2001 From: Dominic Seung Date: Thu, 20 Aug 2026 04:42:04 -0700 Subject: [PATCH 6/6] remove concurrency --- .github/workflows/lint.yml | 4 ---- .github/workflows/test-android.yml | 4 ---- .github/workflows/test-ios.yml | 4 ---- .github/workflows/test-web.yml | 4 ---- .github/workflows/typecheck.yml | 4 ---- 5 files changed, 20 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 883b2e4..d1f6177 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,9 +1,5 @@ name: Lint -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - on: workflow_dispatch: pull_request: diff --git a/.github/workflows/test-android.yml b/.github/workflows/test-android.yml index e8ab889..7db2c32 100644 --- a/.github/workflows/test-android.yml +++ b/.github/workflows/test-android.yml @@ -1,9 +1,5 @@ name: Build Android App -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - on: workflow_dispatch: pull_request: diff --git a/.github/workflows/test-ios.yml b/.github/workflows/test-ios.yml index 8c87eb6..d40b286 100644 --- a/.github/workflows/test-ios.yml +++ b/.github/workflows/test-ios.yml @@ -1,9 +1,5 @@ name: Test iOS App -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - on: workflow_dispatch: pull_request: diff --git a/.github/workflows/test-web.yml b/.github/workflows/test-web.yml index 5a4aff3..72de45a 100644 --- a/.github/workflows/test-web.yml +++ b/.github/workflows/test-web.yml @@ -1,9 +1,5 @@ name: Test Website -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - on: workflow_dispatch: pull_request: diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index fa77517..6725922 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -1,9 +1,5 @@ name: Typecheck -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - on: workflow_dispatch: pull_request: