name: CI Postcard App E2E on: # Temporarily disabled — will be re-enabled when example apps are published. # 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/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-postcard: needs: changed-files-check if: needs.changed-files-check.outputs.any_changed == 'true' timeout-minutes: 30 runs-on: ubuntu-latest-4-cores env: PUBLISHABLE_PACKAGES: twenty-client-sdk twenty-sdk create-twenty-app steps: - name: Fetch custom Github Actions and base branch history uses: actions/checkout@v4 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 --example postcard --display-name "Test postcard app" --description "E2E test postcard app" --skip-local-instance - 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 echo "--- Installing last SDK versions ---" YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn add twenty-sdk twenty-client-sdk - 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.dependencies['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: Spawn Twenty test instance id: twenty uses: ./.github/actions/spawn-twenty-app-dev-test - name: Authenticate with twenty-server run: | cd /tmp/e2e-test-workspace/test-app npx --no-install twenty remote add --api-key ${{ steps.twenty.outputs.api-key }} --api-url ${{ steps.twenty.outputs.server-url }} - name: Deploy scaffolded app run: | cd /tmp/e2e-test-workspace/test-app npx --no-install twenty deploy - name: Install scaffolded app run: | cd /tmp/e2e-test-workspace/test-app npx --no-install twenty install - name: Execute postcard logic function run: | cd /tmp/e2e-test-workspace/test-app EXEC_OUTPUT=$(npx --no-install twenty exec --functionName postcard-logic-function) echo "$EXEC_OUTPUT" echo "$EXEC_OUTPUT" | grep -q "Hello, World!" - name: Execute create-postcard-company logic function run: | cd /tmp/e2e-test-workspace/test-app EXEC_OUTPUT=$(npx --no-install twenty exec --functionName create-postcard-company) echo "$EXEC_OUTPUT" echo "$EXEC_OUTPUT" | grep -q 'Created company.*Hello World.*with id' - name: Run scaffolded app integration test env: TWENTY_API_URL: ${{ steps.twenty.outputs.server-url }} TWENTY_API_KEY: ${{ steps.twenty.outputs.api-key }} run: | cd /tmp/e2e-test-workspace/test-app yarn test ci-create-app-e2e-postcard-status-check: if: always() && !cancelled() timeout-minutes: 5 runs-on: ubuntu-latest needs: [changed-files-check, create-app-e2e-postcard] steps: - name: Fail job if any needs failed if: contains(needs.*.result, 'failure') run: exit 1