# Gitea Actions — CI/CD Smart App City Web # Trigger: push sur master ou PR name: Build & Deploy Smart App Web on: push: branches: [master] paths: - 'smart-app-city/frontend/**' pull_request: branches: [master] jobs: # ─── Lint + Type Check ───────────────────────────────────────────────── lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: smart-app-city/frontend/package-lock.json - name: Install dependencies working-directory: smart-app-city/frontend run: npm ci --legacy-peer-deps - name: TypeScript check working-directory: smart-app-city/frontend run: npx tsc --noEmit continue-on-error: true # TODO: fix TS strict errors # ─── Build Web ───────────────────────────────────────────────────────── build-web: runs-on: ubuntu-latest needs: lint if: github.event_name == 'push' steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: smart-app-city/frontend/package-lock.json - name: Install dependencies working-directory: smart-app-city/frontend run: npm ci --legacy-peer-deps - name: Build Expo web working-directory: smart-app-city/frontend run: npx expo export:web - name: Upload build artifact uses: actions/upload-artifact@v4 with: name: smartapp-web-build path: smart-app-city/frontend/dist/ retention-days: 7 # ─── Deploy to Server ────────────────────────────────────────────────── deploy: runs-on: ubuntu-latest needs: build-web if: github.ref == 'refs/heads/master' steps: - uses: actions/checkout@v4 - name: Download build artifact uses: actions/download-artifact@v4 with: name: smartapp-web-build path: smart-app-city/frontend/dist/ - name: Deploy to server via SSH uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "smart-app-city/frontend/dist/" target: "/var/www/smartapp/" strip_components: 3 - name: Restart nginx (or copy to Docker volume) uses: appleboy/ssh-action@v1.0.7 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | # Option A: If using Docker volume docker cp /var/www/smartapp/ smartapp-web:/usr/share/nginx/html/ # Option B: If using Docker build # cd /home/eric/smart-city-digital-twin-martinique/smart-app-city # docker compose up -d --build smartapp-web echo "✅ Smart App Web deployed at $(date)" # ─── Build Docker Image (alternative) ─────────────────────────────────── docker-build: runs-on: ubuntu-latest needs: lint if: github.ref == 'refs/heads/master' steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build Docker image working-directory: smart-app-city/frontend run: | docker build -t smartapp-web:${{ github.sha }} . docker tag smartapp-web:${{ github.sha }} smartapp-web:latest # Note: Pour pousser vers un registry privé, ajouter docker login + push # - name: Push to registry # run: docker push registry.digitribe.fr/smartapp-web:latest