From 59217de42207b407bb661bb4c8a9180f93ade652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Prod=27homme?= Date: Thu, 30 Jul 2026 12:34:03 +0200 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=91=B7=20Ajoute=20les=20jobs=20format?= =?UTF-8?q?=20et=20health=20dans=20expo-ci?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/expo-ci.yml | 78 ++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/.github/workflows/expo-ci.yml b/.github/workflows/expo-ci.yml index 7c126a9..1474b7d 100644 --- a/.github/workflows/expo-ci.yml +++ b/.github/workflows/expo-ci.yml @@ -32,6 +32,16 @@ on: type: string default: npm run test + format-check-command: + required: false + type: string + default: npm run format:check + + health-command: + required: false + type: string + default: "" + audit-command: required: false type: string @@ -132,6 +142,72 @@ jobs: - name: Type check run: ${{ inputs.typecheck-command }} + format: + if: inputs.format-check-command != '' + needs: build + runs-on: captive-small + timeout-minutes: 10 + container: + image: ${{ inputs.node-image }} + volumes: + - /home/runner/.npm:/root/.npm + + steps: + - name: Install tar/gzip (Alpine) + run: apk add --no-cache tar gzip + + - name: Checkout code + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Restore npm dependencies + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + id: npm-cache + with: + path: node_modules + key: npm-deps-${{ runner.os }}-${{ hashFiles('package-lock.json') }} + restore-keys: | + npm-deps-${{ runner.os }}- + + - name: Install dependencies + if: steps.npm-cache.outputs.cache-hit != 'true' + run: npm ci --strict-peer-deps + + - name: Format check + run: ${{ inputs.format-check-command }} + + health: + if: inputs.health-command != '' + needs: build + runs-on: captive-small + timeout-minutes: 10 + container: + image: ${{ inputs.node-image }} + volumes: + - /home/runner/.npm:/root/.npm + + steps: + - name: Install tar/gzip (Alpine) + run: apk add --no-cache tar gzip + + - name: Checkout code + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Restore npm dependencies + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + id: npm-cache + with: + path: node_modules + key: npm-deps-${{ runner.os }}-${{ hashFiles('package-lock.json') }} + restore-keys: | + npm-deps-${{ runner.os }}- + + - name: Install dependencies + if: steps.npm-cache.outputs.cache-hit != 'true' + run: npm ci --strict-peer-deps + + - name: Health checks + run: ${{ inputs.health-command }} + test: if: inputs.test-command != '' needs: build @@ -208,7 +284,7 @@ jobs: notify_failure: if: failure() && github.ref == 'refs/heads/main' - needs: [build, lint, typecheck, test, audit] + needs: [build, lint, typecheck, format, health, test, audit] runs-on: captive-small env: SLACK_WEBHOOK_URL: ${{ secrets.slack-webhook-url }} From 38bf8710210f9b97b5dbaf6dc6204911d90c3be9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Prod=27homme?= Date: Thu, 30 Jul 2026 12:36:25 +0200 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=91=B7=20Ajoute=20le=20job=20eas=5Fup?= =?UTF-8?q?date=20dans=20expo-ci?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/expo-ci.yml | 76 ++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/.github/workflows/expo-ci.yml b/.github/workflows/expo-ci.yml index 1474b7d..93224fb 100644 --- a/.github/workflows/expo-ci.yml +++ b/.github/workflows/expo-ci.yml @@ -10,6 +10,12 @@ on: slack-webhook-url: required: false + expo-token: + required: false + + sentry-auth-token: + required: false + inputs: node-image: required: false @@ -47,6 +53,26 @@ on: type: string default: npx audit-ci --moderate + use-eas-update: + required: false + type: boolean + default: false + + eas-channel: + required: false + type: string + default: staging + + eas-environment: + required: false + type: string + default: preview + + expo-public-app-env: + required: false + type: string + default: staging + jobs: build: runs-on: self-hosted @@ -282,9 +308,57 @@ jobs: - name: Audit dependencies run: ${{ inputs.audit-command }} + eas_update: + if: inputs.use-eas-update && github.ref == 'refs/heads/main' && github.event_name == 'push' && !startsWith(github.event.head_commit.message, '🔖 Défini la version') + needs: [build, lint, typecheck, format, health, test, audit] + runs-on: self-hosted + timeout-minutes: 20 + container: + image: ${{ inputs.node-image }} + volumes: + - /home/runner/.npm:/root/.npm + env: + EXPO_TOKEN: ${{ secrets.expo-token }} + EXPO_PUBLIC_APP_ENV: ${{ inputs.expo-public-app-env }} + EAS_NO_VCS: 1 + + steps: + - name: Install system dependencies (Alpine) + run: apk add --no-cache tar gzip git + + - name: Checkout code + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Restore npm dependencies + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + id: npm-cache + with: + path: node_modules + key: npm-deps-${{ runner.os }}-${{ hashFiles('package-lock.json') }} + restore-keys: | + npm-deps-${{ runner.os }}- + + - name: Install dependencies + if: steps.npm-cache.outputs.cache-hit != 'true' + run: npm ci --strict-peer-deps + + - name: Install eas-cli + run: npm install -g eas-cli + + - name: EAS Update + env: + COMMIT_MESSAGE: ${{ github.event.head_commit.message }} + run: eas update --channel ${{ inputs.eas-channel }} --message "$COMMIT_MESSAGE" --environment ${{ inputs.eas-environment }} --non-interactive + + - name: Upload Sentry sourcemaps + if: env.SENTRY_AUTH_TOKEN != '' + env: + SENTRY_AUTH_TOKEN: ${{ secrets.sentry-auth-token }} + run: npx sentry-expo-upload-sourcemaps dist + notify_failure: if: failure() && github.ref == 'refs/heads/main' - needs: [build, lint, typecheck, format, health, test, audit] + needs: [build, lint, typecheck, format, health, test, audit, eas_update] runs-on: captive-small env: SLACK_WEBHOOK_URL: ${{ secrets.slack-webhook-url }} From 79e2df0557e8e1b16b91a582a71ab106588e650e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Prod=27homme?= Date: Thu, 30 Jul 2026 12:47:55 +0200 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=91=B7=20Rend=20le=20pattern=20de=20s?= =?UTF-8?q?kip=20EAS=20configurable=20via=20eas-skip-pattern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/expo-ci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/expo-ci.yml b/.github/workflows/expo-ci.yml index 93224fb..3f8c5cb 100644 --- a/.github/workflows/expo-ci.yml +++ b/.github/workflows/expo-ci.yml @@ -58,6 +58,11 @@ on: type: boolean default: false + eas-skip-pattern: + required: false + type: string + default: "🔖 Défini la version" + eas-channel: required: false type: string @@ -309,7 +314,7 @@ jobs: run: ${{ inputs.audit-command }} eas_update: - if: inputs.use-eas-update && github.ref == 'refs/heads/main' && github.event_name == 'push' && !startsWith(github.event.head_commit.message, '🔖 Défini la version') + if: inputs.use-eas-update && github.ref == 'refs/heads/main' && github.event_name == 'push' && !startsWith(github.event.head_commit.message, inputs.eas-skip-pattern) needs: [build, lint, typecheck, format, health, test, audit] runs-on: self-hosted timeout-minutes: 20 From ab3028d252da37b4ef5d69643b30fee671bd1179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Prod=27homme?= Date: Thu, 30 Jul 2026 12:48:48 +0200 Subject: [PATCH 4/4] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Corrige=20le=20pattern?= =?UTF-8?q?=20de=20skip=20EAS=20en=20D=C3=A9finit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/expo-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/expo-ci.yml b/.github/workflows/expo-ci.yml index 3f8c5cb..4516c32 100644 --- a/.github/workflows/expo-ci.yml +++ b/.github/workflows/expo-ci.yml @@ -61,7 +61,7 @@ on: eas-skip-pattern: required: false type: string - default: "🔖 Défini la version" + default: "🔖 Définit la version" eas-channel: required: false