feat(billing): embed Stripe Payment Element in onboarding #8818
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI Create App E2E minimal | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| 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/create-twenty-app/** | |
| packages/twenty-sdk/** | |
| packages/twenty-client-sdk/** | |
| packages/twenty-shared/** | |
| !packages/create-twenty-app/package.json | |
| !packages/twenty-sdk/package.json | |
| !packages/twenty-client-sdk/package.json | |
| !packages/twenty-shared/package.json | |
| create-app-e2e-minimal: | |
| needs: changed-files-check | |
| if: needs.changed-files-check.outputs.any_changed == 'true' | |
| timeout-minutes: 30 | |
| runs-on: ubuntu-latest-4-cores | |
| 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: | |
| PUBLISHABLE_PACKAGES: twenty-client-sdk twenty-sdk create-twenty-app | |
| TWENTY_API_URL: http://localhost:3000 | |
| TWENTY_API_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ1c2VySWQiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtNDYzZi00MzViLTgyOGMtMTA3ZTAwN2EyNzExIiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWU3Yy00M2Q5LWE1ZGItNjg1YjUwNjlkODE2IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjIwNjY4NTc3MDR9.HMGqCsVlOAPVUBhKSGlD1X86VoHKt4LIUtET3CGIdik | |
| steps: | |
| - name: Fetch custom Github Actions and base branch history | |
| uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| with: | |
| fetch-depth: 10 | |
| - name: Install dependencies | |
| uses: ./.github/actions/yarn-install | |
| - name: Set CI version and prepare packages for publish | |
| run: | | |
| CI_VERSION="0.0.0-ci.$(date +%s)" | |
| echo "CI_VERSION=$CI_VERSION" >> $GITHUB_ENV | |
| npx nx run-many -t set-local-version -p $PUBLISHABLE_PACKAGES --releaseVersion=$CI_VERSION | |
| - name: Build packages | |
| run: | | |
| for pkg in $PUBLISHABLE_PACKAGES; do | |
| npx nx build $pkg | |
| done | |
| - name: Install and start Verdaccio | |
| run: | | |
| npx verdaccio --config .github/verdaccio-config.yaml & | |
| for i in $(seq 1 30); do | |
| if curl -s http://localhost:4873 > /dev/null 2>&1; then | |
| echo "Verdaccio is ready" | |
| break | |
| fi | |
| echo "Waiting for Verdaccio... ($i/30)" | |
| sleep 1 | |
| done | |
| - name: Publish packages to local registry | |
| run: | | |
| yarn config set npmRegistryServer http://localhost:4873 | |
| yarn config set unsafeHttpWhitelist --json '["localhost"]' | |
| yarn config set npmAuthToken ci-auth-token | |
| for pkg in $PUBLISHABLE_PACKAGES; do | |
| cd packages/$pkg | |
| yarn npm publish --tag ci | |
| cd ../.. | |
| done | |
| - name: Scaffold app using published create-twenty-app | |
| run: | | |
| npm install -g create-twenty-app@$CI_VERSION --registry http://localhost:4873 | |
| create-twenty-app --version | |
| mkdir -p /tmp/e2e-test-workspace | |
| cd /tmp/e2e-test-workspace | |
| create-twenty-app test-app --display-name "Test scaffolded app" --description "E2E test scaffolded app" --url http://localhost:3000 | |
| - name: Install scaffolded app dependencies | |
| run: | | |
| cd /tmp/e2e-test-workspace/test-app | |
| echo 'npmRegistryServer: "http://localhost:4873"' >> .yarnrc.yml | |
| echo 'unsafeHttpWhitelist: ["localhost"]' >> .yarnrc.yml | |
| YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn install --no-immutable | |
| - name: Verify installed app versions | |
| run: | | |
| cd /tmp/e2e-test-workspace/test-app | |
| echo "--- Checking package.json references correct SDK version ---" | |
| node -e " | |
| const pkg = require('./package.json'); | |
| const sdkVersion = pkg.devDependencies['twenty-sdk']; | |
| if (!sdkVersion.startsWith('0.0.0-ci.')) { | |
| console.error('Expected twenty-sdk version to start with 0.0.0-ci., got:', sdkVersion); | |
| process.exit(1); | |
| } | |
| console.log('SDK version in scaffolded app:', sdkVersion); | |
| " | |
| - name: Verify SDK CLI is available | |
| run: | | |
| cd /tmp/e2e-test-workspace/test-app | |
| npx --no-install twenty --version | |
| - 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: Authenticate with twenty-server | |
| run: | | |
| cd /tmp/e2e-test-workspace/test-app | |
| npx --no-install twenty remote:add --api-key ${{ env.TWENTY_API_KEY }} --url ${{ env.TWENTY_API_URL }} | |
| - name: Run scaffolded app integration test (deploys, installs, and verifies the app) | |
| run: | | |
| cd /tmp/e2e-test-workspace/test-app | |
| yarn test | |
| ci-create-app-e2e-minimal-status-check: | |
| if: always() && !cancelled() | |
| timeout-minutes: 5 | |
| runs-on: ubuntu-latest | |
| needs: [changed-files-check, create-app-e2e-minimal] | |
| steps: | |
| - name: Fail job if any needs failed | |
| if: contains(needs.*.result, 'failure') | |
| run: exit 1 |