From d00d26c4a41cb1555bbe9b4048a85b7abe5d6fdb Mon Sep 17 00:00:00 2001 From: martmull Date: Wed, 24 Jun 2026 10:12:24 +0200 Subject: [PATCH] ci: remove redundant twenty-meeting-bot per-app workflow (#22057) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What Removes `.github/workflows/ci-internal-app-twenty-meeting-bot.yaml`. ## Why The generic `ci-internal-apps.yaml` already runs CI for every app under `packages/twenty-apps/internal/` that has a `package.json`. For each discovered app it runs: - `yarn lint` - `yarn typecheck` (when a `typecheck` script exists) - `yarn test:unit` (when a `test:unit` script exists) - `yarn test` integration tests against a spawned Twenty instance (when a `test` script exists) `twenty-meeting-bot` defines all four scripts (`lint`, `typecheck`, `test:unit`, `test`), so it is fully covered by the generic workflow. It was the **last remaining** per-app workflow — all the other internal apps (discord, exa, fireflies, self-hosting, for-twenty, linear) were already migrated to `ci-internal-apps.yaml`. ## Note The removed workflow had two behavioral differences from the generic one, which are the same standardized tradeoffs already accepted for every other internal app: - It built `twenty-server` from source and ran integration tests against it, whereas the generic workflow tests against the published `twentycrm/twenty-app-dev:latest` image via the `spawn-twenty-app-dev-test` action. - It also triggered on changes to `twenty-server` / `twenty-sdk` / `twenty-client-sdk` / `twenty-shared`, whereas the generic workflow only triggers on `packages/twenty-apps/internal/**` changes. > [!NOTE] > If `ci-internal-app-twenty-meeting-bot-status-check` is configured as a required status check in branch protection, that rule should be dropped (and `ci-internal-apps-status-check` kept) so PRs aren't blocked waiting on a check that no longer runs. https://claude.ai/code/session_013WZuk6jw2RmZT77enuMT2y --- _Generated by [Claude Code](https://claude.ai/code/session_013WZuk6jw2RmZT77enuMT2y)_ Review in cubic --- .../ci-internal-app-twenty-meeting-bot.yaml | 111 ------------------ 1 file changed, 111 deletions(-) delete mode 100644 .github/workflows/ci-internal-app-twenty-meeting-bot.yaml diff --git a/.github/workflows/ci-internal-app-twenty-meeting-bot.yaml b/.github/workflows/ci-internal-app-twenty-meeting-bot.yaml deleted file mode 100644 index f84747e8d8..0000000000 --- a/.github/workflows/ci-internal-app-twenty-meeting-bot.yaml +++ /dev/null @@ -1,111 +0,0 @@ -name: CI Internal App Twenty Meeting Bot - -on: - push: - branches: - - main - pull_request: - workflow_dispatch: - -permissions: - contents: read - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} - -jobs: - changed-files-check: - uses: ./.github/workflows/changed-files.yaml - with: - files: | - packages/twenty-apps/internal/twenty-meeting-bot/** - packages/twenty-sdk/** - packages/twenty-client-sdk/** - packages/twenty-shared/** - packages/twenty-server/** - !packages/twenty-sdk/package.json - !packages/twenty-client-sdk/package.json - !packages/twenty-shared/package.json - !packages/twenty-server/package.json - - internal-app-twenty-meeting-bot: - needs: changed-files-check - if: needs.changed-files-check.outputs.any_changed == 'true' - timeout-minutes: 30 - runs-on: ubuntu-latest - services: - postgres: - image: postgres:18 - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - redis: - image: redis - ports: - - 6379:6379 - env: - TWENTY_API_URL: http://localhost:3000 - TWENTY_API_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ1c2VySWQiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtNDYzZi00MzViLTgyOGMtMTA3ZTAwN2EyNzExIiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWU3Yy00M2Q5LWE1ZGItNjg1YjUwNjlkODE2IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjIwNjY4NTc3MDR9.HMGqCsVlOAPVUBhKSGlD1X86VoHKt4LIUtET3CGIdik - steps: - - name: Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - - - name: Install dependencies - uses: ./.github/actions/yarn-install - - - name: Build SDK packages - run: npx nx build twenty-sdk - - # The integration tests import the CoreApiClient that `appDevOnce` - # generates into the app's own node_modules/twenty-client-sdk; without - # this install the import falls back to the workspace stub and throws. - - name: Install app dependencies - working-directory: packages/twenty-apps/internal/twenty-meeting-bot - run: yarn install --immutable - - - name: Typecheck - working-directory: packages/twenty-apps/internal/twenty-meeting-bot - run: npx tsc --build tsconfig.json --force - - - name: Run unit tests - working-directory: packages/twenty-apps/internal/twenty-meeting-bot - run: npx vitest run --config vitest.unit.config.ts - - - name: Setup server environment - run: npx nx reset:env:e2e-testing-server twenty-server - - - name: Create databases - run: | - PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "default";' - PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "test";' - - - name: Setup database - run: npx nx run twenty-server:database:reset - - - name: Start server - run: nohup npx nx start:ci twenty-server & - - - name: Wait for server to be ready - run: npx wait-on http://localhost:3000/healthz --timeout 120000 --interval 1000 - - - name: Run integration tests - working-directory: packages/twenty-apps/internal/twenty-meeting-bot - run: npx vitest run - - ci-internal-app-twenty-meeting-bot-status-check: - if: always() && !cancelled() - timeout-minutes: 5 - runs-on: ubuntu-latest - needs: [changed-files-check, internal-app-twenty-meeting-bot] - steps: - - name: Fail job if any needs failed - if: contains(needs.*.result, 'failure') - run: exit 1