Skip to content

Fix TypeScript array type annotation in integration test #14

Fix TypeScript array type annotation in integration test

Fix TypeScript array type annotation in integration test #14

Workflow file for this run

name: Test and Deploy
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
permissions:
contents: read
env:
CI: true
jobs:
test:
name: Run Tests
runs-on: ubuntu-latest
timeout-minutes: 40
steps:
- name: Checkout code
uses: actions/checkout@v4
# Node for root + server (cache both lockfiles if they exist)
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
cache-dependency-path: |
package-lock.json
server/package-lock.json
- name: Install root dependencies
if: hashFiles('package-lock.json') != ''
run: npm ci
- name: Install server dependencies
run: |
cd server
npm ci
- name: Run server tests
run: |
cd server
npm test
- name: Run server linting
run: |
cd server
npm run lint
# Tooling needed for Android + Web builds
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: 3.19.5
channel: stable
cache: true
- name: Setup Java 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: gradle
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install Flutter dependencies
run: |
cd mobile
flutter pub get
- name: Run Flutter tests
run: |
cd mobile
flutter test
- name: Run Flutter analysis
run: |
cd mobile
flutter analyze
- name: Build Flutter app (Android debug)
run: |
cd mobile
flutter build apk --debug
- name: Build Flutter app (Web release)
run: |
cd mobile
flutter build web --release
deploy-server:
name: Deploy Server to Vercel
needs: test
runs-on: ubuntu-latest
timeout-minutes: 20
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
cache-dependency-path: server/package-lock.json
- name: Install server dependencies
run: |
cd server
npm ci
- name: Build server
run: |
cd server
npm run build
- name: Deploy to Vercel (prod)
uses: amondnet/vercel-action@v25
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
working-directory: ./server
vercel-args: "--prod --confirm"
deploy-mobile:
name: Build Mobile App
needs: test
runs-on: ubuntu-latest
timeout-minutes: 60
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: 3.19.5
channel: stable
cache: true
- name: Setup Java 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: gradle
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install Flutter dependencies
run: |
cd mobile
flutter pub get
- name: Build Android APK (release)
run: |
cd mobile
flutter build apk --release
- name: Build Android App Bundle (release)
run: |
cd mobile
flutter build appbundle --release
- name: Build Web App (release)
run: |
cd mobile
flutter build web --release
- name: Upload Android APK
uses: actions/upload-artifact@v4
with:
name: android-apk
path: mobile/build/app/outputs/flutter-apk/app-release.apk
- name: Upload Android App Bundle
uses: actions/upload-artifact@v4
with:
name: android-aab
path: mobile/build/app/outputs/bundle/release/app-release.aab
- name: Upload Web App
uses: actions/upload-artifact@v4
with:
name: web-app
path: mobile/build/web/
notify:
name: Notify Deployment Status
needs: [test, deploy-server, deploy-mobile]
runs-on: ubuntu-latest
if: always() && github.ref == 'refs/heads/main'
steps:
- name: Notify Success
if: |
needs.test.result == 'success' &&
needs.deploy-server.result == 'success' &&
needs.deploy-mobile.result == 'success'
run: |
echo "✅ All tests passed and deployments succeeded!"
echo "🚀 Server deployed to Vercel"
echo "📱 Mobile app built successfully"
- name: Notify Failure
if: |
needs.test.result != 'success' ||
needs.deploy-server.result != 'success' ||
needs.deploy-mobile.result != 'success'
run: |
echo "❌ Tests or deployments failed. Check job logs for details."
exit 1