Arquitectura de Pipelines
🔍
PR Check
.eas/workflows/pr-check.yml
pull_request
Lint & Tests
custom
linux-medium
Build Android Preview
build
linux-medium
🚀
Deploy Staging
.eas/workflows/deploy-staging.yml
push: main
EAS Update › Staging
update
Notificar equipo Slack
slack
🏭
Release Production
.eas/workflows/release-production.yml
workflow_dispatch
Tests previos al release
custom
linux-medium
Paralelo · if: platform
Build iOS
build
if: ios|all
Build Android
build
if: android|all
Submit a stores
Submit → App Store
submit
Submit → Google Play
submit
Validación contra Schema Oficial EAS
🛡️ node scripts/validate.js .eas/workflows/*.yml
Schema: api.expo.dev/v2/workflows/schema
.eas/workflows/pr-check.yml
2 jobs · pull_request trigger
VALID
.eas/workflows/deploy-staging.yml
2 jobs · push:main trigger
VALID
.eas/workflows/release-production.yml
5 jobs · workflow_dispatch + concurrency
VALID
YAML Generado
pr-check.yml
name: PR Check — NutriPaw

on:
  pull_request: {}

jobs:
  lint-and-test:
    name: Lint & Tests
    type: custom
    runs_on: linux-medium
    steps:
      - name: Install dependencies
        run: npm ci
      - name: Run ESLint
        run: npx eslint . --max-warnings 0
      - name: Run unit tests
        run: npx jest --ci --coverage

  preview-build-android:
    name: Build Android Preview
    type: build
    needs: [lint-and-test]
    runs_on: linux-medium
    params:
      platform: android
      profile: preview
deploy-staging.yml
name: Deploy Staging — NutriPaw

on:
  push:
    branches: [main]

jobs:
  update-staging:
    name: EAS Update › Staging
    type: update
    params:
      channel: staging
      message: "Deploy automático desde main"

  notify-slack:
    name: Notificar equipo
    type: slack
    needs: [update-staging]
    params:
      webhook_url: https://hooks.slack.com/...
      message: "NutriPaw Staging actualizado
        — rama main por ${{ github.actor }}"
release-production.yml
name: Release Production — NutriPaw

on:
  workflow_dispatch:
    inputs:
      platform: {type: string, default: all}

concurrency:
  cancel_in_progress: true
  group: "${{ workflow.filename }}-${{ github.ref }}"

jobs:
  run-tests:
    type: custom
    runs_on: linux-medium
    ...

  build-ios:
    type: build
    needs: [run-tests]
    if: "${{ inputs.platform == 'ios' }}"
    runs_on: macos-medium
    params: {platform: ios, profile: production}

  submit-ios:
    type: submit
    needs: [build-ios]
    params:
      build_id: "${{ needs.build-ios.outputs.build_id }}"
      profile: production
Resumen del proyecto
3
Workflows generados
9
Jobs definidos
3
Validados OK
5
Tipos de job usados