fix: rename package + fix all CI failures #2
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: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| # ───────────────────────────────────────────────────────────────────────────── | |
| # Job 1: Typecheck & Lint | |
| # Verifies TypeScript compiles cleanly and ESLint passes on src/ | |
| # ───────────────────────────────────────────────────────────────────────────── | |
| jobs: | |
| typecheck-lint: | |
| name: Typecheck & Lint | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node 20 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| # No cache: yarn — we have no yarn.lock. npm is used in CI. | |
| - name: Install dependencies | |
| run: npm install --legacy-peer-deps | |
| - name: Typecheck | |
| run: npm run typecheck | |
| - name: Lint | |
| run: npm run lint | |
| # ───────────────────────────────────────────────────────────────────────────── | |
| # Job 2: Build | |
| # Verifies bob compiles src/ to commonjs + esm + typescript outputs | |
| # ───────────────────────────────────────────────────────────────────────────── | |
| build: | |
| name: Build Package | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node 20 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| - name: Install dependencies | |
| run: npm install --legacy-peer-deps | |
| - name: Build | |
| run: npm run build | |
| - name: Verify outputs exist | |
| run: | | |
| echo "=== CommonJS ===" | |
| ls lib/commonjs/ | |
| echo "=== ESM ===" | |
| ls lib/module/ | |
| echo "=== Types ===" | |
| ls lib/typescript/src/ | |
| # ───────────────────────────────────────────────────────────────────────────── | |
| # Job 3: Android — structure & manifest validation | |
| # Full Kotlin compile requires a host app; we validate structure instead. | |
| # ───────────────────────────────────────────────────────────────────────────── | |
| android-validate: | |
| name: Android Validate | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Validate Kotlin source files | |
| run: | | |
| echo "=== Kotlin source files ===" | |
| find android/src -name "*.kt" | sort | |
| echo "=== Checking required files exist ===" | |
| required=( | |
| "android/build.gradle" | |
| "android/src/main/AndroidManifest.xml" | |
| "android/src/main/java/com/rick427/backgroundtimer/BackgroundTimerModule.kt" | |
| "android/src/main/java/com/rick427/backgroundtimer/BackgroundTimerPackage.kt" | |
| "android/src/main/java/com/rick427/backgroundtimer/BackgroundTimerService.kt" | |
| "android/src/main/java/com/rick427/backgroundtimer/AlarmReceiver.kt" | |
| "android/src/main/java/com/rick427/backgroundtimer/BootReceiver.kt" | |
| "android/src/main/java/com/rick427/backgroundtimer/TimerStore.kt" | |
| "android/src/main/java/com/rick427/backgroundtimer/TimerData.kt" | |
| ) | |
| for f in "${required[@]}"; do | |
| if [ -f "$f" ]; then | |
| echo " ✅ $f" | |
| else | |
| echo " ❌ MISSING: $f" | |
| exit 1 | |
| fi | |
| done | |
| - name: Validate AndroidManifest permissions | |
| run: | | |
| echo "=== AndroidManifest.xml ===" | |
| grep -E "uses-permission|service|receiver" android/src/main/AndroidManifest.xml | |
| # Must declare foreground service permission | |
| grep -q "FOREGROUND_SERVICE" android/src/main/AndroidManifest.xml && \ | |
| echo "✅ FOREGROUND_SERVICE declared" || \ | |
| (echo "❌ FOREGROUND_SERVICE missing" && exit 1) | |
| # Must declare WakeLock | |
| grep -q "WAKE_LOCK" android/src/main/AndroidManifest.xml && \ | |
| echo "✅ WAKE_LOCK declared" || \ | |
| (echo "❌ WAKE_LOCK missing" && exit 1) | |
| - name: Validate namespace in build.gradle (AGP 8+ requirement) | |
| run: | | |
| grep -q 'namespace "com.rick427.backgroundtimer"' android/build.gradle && \ | |
| echo "✅ namespace declared" || \ | |
| (echo "❌ namespace missing from build.gradle (required for AGP 8+)" && exit 1) | |
| # ───────────────────────────────────────────────────────────────────────────── | |
| # Job 4: iOS — podspec & Swift source validation | |
| # Full pod compile requires Xcode + RN installed. We do structural checks. | |
| # ───────────────────────────────────────────────────────────────────────────── | |
| ios-validate: | |
| name: iOS Validate | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Validate Swift source files | |
| run: | | |
| echo "=== Swift source files ===" | |
| find ios -name "*.swift" -o -name "*.m" -o -name "*.h" | sort | |
| echo "=== Checking required files exist ===" | |
| required=( | |
| "ios/RNBackgroundTimer.swift" | |
| "ios/RNBackgroundTimer.m" | |
| "ios/RNBackgroundTimer-Bridging-Header.h" | |
| "ios/BGTaskManager.swift" | |
| "ios/TimerData.swift" | |
| "ios/TimerStore.swift" | |
| "ios/background-timer.podspec" | |
| ) | |
| for f in "${required[@]}"; do | |
| if [ -f "$f" ]; then | |
| echo " ✅ $f" | |
| else | |
| echo " ❌ MISSING: $f" | |
| exit 1 | |
| fi | |
| done | |
| - name: Validate podspec structure | |
| run: | | |
| echo "=== background-timer.podspec ===" | |
| cat ios/background-timer.podspec | |
| # Check required podspec fields | |
| grep -q "s.name" ios/background-timer.podspec && \ | |
| echo "✅ name declared" || (echo "❌ name missing" && exit 1) | |
| grep -q "s.version" ios/background-timer.podspec && \ | |
| echo "✅ version declared" || (echo "❌ version missing" && exit 1) | |
| grep -q "s.platforms.*ios.*13" ios/background-timer.podspec && \ | |
| echo "✅ iOS 13 minimum declared" || \ | |
| (echo "❌ iOS 13 minimum missing from podspec" && exit 1) | |
| grep -q "React-Core" ios/background-timer.podspec && \ | |
| echo "✅ React-Core dependency declared" || \ | |
| (echo "❌ React-Core missing" && exit 1) | |
| - name: Validate BGTaskScheduler usage in Swift | |
| run: | | |
| grep -q "BGTaskScheduler" ios/BGTaskManager.swift && \ | |
| echo "✅ BGTaskScheduler used in BGTaskManager" || \ | |
| (echo "❌ BGTaskScheduler not found" && exit 1) | |
| grep -q "beginBackgroundTask" ios/RNBackgroundTimer.swift && \ | |
| echo "✅ UIBackgroundTask used" || \ | |
| (echo "❌ UIBackgroundTask not found" && exit 1) |