Skip to content

feat: atoms e2e tests #22926

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Aug 11, 2025
Merged

Conversation

supalarry
Copy link
Contributor

@supalarry supalarry requested review from a team as code owners August 6, 2025 14:35
Copy link

linear bot commented Aug 6, 2025

Copy link
Contributor

coderabbitai bot commented Aug 6, 2025

Walkthrough

A new end-to-end (E2E) testing setup was added for the examples app: a GitHub Actions workflow (.github/workflows/atoms-e2e.yml) to run E2E tests on pull requests, Playwright configuration (packages/platform/examples/base/playwright.config.ts), Playwright devDependency and npm scripts (packages/platform/examples/base/package.json), a sample Playwright test (packages/platform/examples/base/tests/create-event-type-atom/create-event-type.e2e.ts), .gitignore updates to exclude Playwright artifacts, and documentation on testing (packages/platform/atoms/README.md).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~15 minutes

Assessment against linked issues

Objective Addressed Explanation
Add E2E tests for the examples app (CAL-6198)
Integrate E2E tests with CI via GitHub Actions (CAL-6198)
Provide Playwright configuration for E2E testing (CAL-6198)
Add scripts and dependencies for E2E testing (CAL-6198)
✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch lauris/cal-6198-chore-e2e-tests-for-examples-app

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@graphite-app graphite-app bot requested a review from a team August 6, 2025 14:35
@keithwillcode keithwillcode added core area: core, team members only platform Anything related to our platform plan labels Aug 6, 2025
@dosubot dosubot bot added the automated-tests area: unit tests, e2e tests, playwright label Aug 6, 2025
Copy link

graphite-app bot commented Aug 6, 2025

Graphite Automations

"Add consumer team as reviewer" took an action on this PR • (08/06/25)

1 reviewer was added to this PR based on Keith Williams's automation.

Copy link

vercel bot commented Aug 6, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

2 Skipped Deployments
Name Status Preview Comments Updated (UTC)
cal ⬜️ Ignored (Inspect) Aug 11, 2025 1:45pm
cal-eu ⬜️ Ignored (Inspect) Aug 11, 2025 1:45pm

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
packages/platform/examples/base/tests/create-event-type-atom/create-event-type.e2e.ts (1)

12-14: Consider extracting test data for better maintainability.

The hardcoded test values make the test less maintainable and could cause conflicts if multiple tests run concurrently.

Extract test data to constants:

+const TEST_DATA = {
+  eventName: `e2e event ${Date.now()}`,
+  description: 'This is an e2e test event description'
+};
+
 test('create event type using CreateEventTypeAtom', async ({ page }) => {
   await page.goto('/');
   await page.goto('/event-types');
   await expect(page).toHaveURL('/event-types');
   await expect(page.locator('body')).toBeVisible();
-  await page.fill('[data-testid="event-type-quick-chat"]', 'e2e event');
-  await page.fill('textarea[placeholder="A quick video meeting."]', 'This is an e2e test event description');
+  await page.fill('[data-testid="event-type-quick-chat"]', TEST_DATA.eventName);
+  await page.fill('textarea[placeholder="A quick video meeting."]', TEST_DATA.description);

This approach reduces test flakiness and improves maintainability.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b410316 and d1d7b8d.

⛔ Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (5)
  • .github/workflows/atoms-e2e.yml (1 hunks)
  • packages/platform/examples/base/.gitignore (1 hunks)
  • packages/platform/examples/base/package.json (2 hunks)
  • packages/platform/examples/base/playwright.config.ts (1 hunks)
  • packages/platform/examples/base/tests/create-event-type-atom/create-event-type.e2e.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.ts

📄 CodeRabbit Inference Engine (.cursor/rules/review.mdc)

**/*.ts: For Prisma queries, only select data you need; never use include, always use select
Ensure the credential.key field is never returned from tRPC endpoints or APIs

Files:

  • packages/platform/examples/base/tests/create-event-type-atom/create-event-type.e2e.ts
  • packages/platform/examples/base/playwright.config.ts
**/*.{ts,tsx}

📄 CodeRabbit Inference Engine (.cursor/rules/review.mdc)

Flag excessive Day.js use in performance-critical code; prefer native Date or Day.js .utc() in hot paths like loops

Files:

  • packages/platform/examples/base/tests/create-event-type-atom/create-event-type.e2e.ts
  • packages/platform/examples/base/playwright.config.ts
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-28T11:50:23.946Z
Learning: For large pull requests (>500 lines changed or >10 files touched), advise splitting into smaller, focused PRs by feature, layer, dependency chain, or file/module
Learnt from: vijayraghav-io
PR: calcom/cal.com#21072
File: .env.example:354-357
Timestamp: 2025-07-18T08:49:18.779Z
Learning: For E2E integration tests that require real third-party service credentials (like Outlook calendar), it's acceptable to temporarily include actual test account credentials in .env.example during feature development and validation, provided there's a clear plan to replace them with placeholder values before final release. Test credentials should be for dedicated test tenants/accounts, not production systems.
📚 Learning: applies to **/*.{service,repository}.ts : avoid dot-suffixes like `.service.ts` or `.repository.ts` ...
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-28T11:50:23.946Z
Learning: Applies to **/*.{service,repository}.ts : Avoid dot-suffixes like `.service.ts` or `.repository.ts` for new files; reserve `.test.ts`, `.spec.ts`, `.types.ts` for their specific purposes

Applied to files:

  • packages/platform/examples/base/.gitignore
🪛 actionlint (1.7.7)
.github/workflows/atoms-e2e.yml

29-29: label "buildjet-4vcpu-ubuntu-2204" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Atoms E2E Tests
🔇 Additional comments (7)
packages/platform/examples/base/.gitignore (1)

38-42: LGTM! Proper exclusion of Playwright test artifacts.

The additions correctly exclude Playwright test results, reports, and the development database from version control, which is essential for a clean repository.

packages/platform/examples/base/playwright.config.ts (1)

3-4: LGTM! Well-configured timeout settings.

The timeout configurations appropriately balance fast CI feedback with local debugging flexibility.

packages/platform/examples/base/tests/create-event-type-atom/create-event-type.e2e.ts (1)

19-20: Verify CreateEventTypeAtom’s title/slug transformations

The E2E test at packages/platform/examples/base/tests/create-event-type-atom/create-event-type.e2e.ts (​lines 19–20) assumes that typing “e2e event” produces:

  • Header text “E2e Event” (title-case)
  • URL segment “/e2e-event” (kebab-case)

We weren’t able to locate the transformation utilities or the CreateEventTypeAtom implementation to confirm these exact conversions. Please manually verify that this atom applies those transformations under the hood—or update the test (or expose the slug/title functions) to keep it in sync and avoid brittleness.

• packages/platform/examples/base/tests/create-event-type-atom/create-event-type.e2e.ts (lines 19–20)

packages/platform/examples/base/package.json (1)

6-6: LGTM! Good separation of dev and E2E environments.

Using port 4322 for E2E tests prevents conflicts with the regular development server on port 4321.

.github/workflows/atoms-e2e.yml (3)

19-23: LGTM! Proper environment variable configuration for E2E testing.

The use of GitHub secrets for OAuth credentials and API URLs follows security best practices for E2E testing with real service integration.


7-11: LGTM! Efficient path-based workflow triggering.

The workflow correctly triggers only on changes to relevant paths, optimizing CI resource usage.


44-57: LGTM! Comprehensive artifact management for debugging.

The workflow properly uploads both test results and Playwright reports with appropriate retention, facilitating effective debugging of test failures.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
packages/platform/atoms/README.md (2)

39-40: Convert bare URL into proper Markdown link to satisfy MD034

markdownlint flagged the newly-added bare URL. Using inline link syntax is more maintainable and avoids the linter warning.

-- https://docs.gitlab.com/development/changelog/
+- [GitLab changelog guidelines](https://docs.gitlab.com/development/changelog/)

45-52: Add language identifier to fenced block (MD040)

The .env snippet lacks a language tag, triggering MD040. Annotate the block as env (or bash) so editors get syntax highlighting and linter noise is removed.

-```
+```env
 NEXT_PUBLIC_X_CAL_ID=""
 X_CAL_SECRET_KEY=""
 NEXT_PUBLIC_CALCOM_API_URL="https://api.cal.com/v2"
 VITE_BOOKER_EMBED_OAUTH_CLIENT_ID=""
 VITE_BOOKER_EMBED_API_URL="https://api.cal.com/v2"
 ORGANIZATION_ID=""

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between d1d7b8d4ffc218c4895973c7edf5ad28732da35c and 50b03aceec2f01aa24dedacbd0b1ba1d63edd155.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `packages/platform/atoms/README.md` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧠 Learnings (1)</summary>

<details>
<summary>📓 Common learnings</summary>

Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-28T11:50:23.946Z
Learning: For large pull requests (>500 lines changed or >10 files touched), advise splitting into smaller, focused PRs by feature, layer, dependency chain, or file/module


Learnt from: vijayraghav-io
PR: #21072
File: .env.example:354-357
Timestamp: 2025-07-18T08:49:18.779Z
Learning: For E2E integration tests that require real third-party service credentials (like Outlook calendar), it's acceptable to temporarily include actual test account credentials in .env.example during feature development and validation, provided there's a clear plan to replace them with placeholder values before final release. Test credentials should be for dedicated test tenants/accounts, not production systems.


</details>

</details><details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

<details>
<summary>packages/platform/atoms/README.md</summary>

39-39: Bare URL used

(MD034, no-bare-urls)

---

45-45: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)</summary>

* GitHub Check: Install dependencies / Yarn install & cache
* GitHub Check: Atoms E2E Tests

</details>

<details>
<summary>🔇 Additional comments (1)</summary><blockquote>

<details>
<summary>packages/platform/atoms/README.md (1)</summary>

`43-43`: **Verify script name `yarn dev-on`**

Most workspaces use a `dev` or `dev:watch` script; `dev-on` is uncommon. Please confirm the script exists in `packages/platform/atoms/package.json`. If it’s actually `dev`, update the instruction to avoid confusion.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
.github/workflows/atoms-e2e.yml (1)

30-30: Runner label is still non-standard – please replace or ensure self-hosted config
The workflow continues to use buildjet-4vcpu-ubuntu-2204, which GitHub does not recognise as a hosted runner. Unless you have a correctly configured self-hosted runner with that exact label, jobs will queue forever. Switch to an official label such as ubuntu-22.04 / ubuntu-latest-4-cores, or document the self-hosted runner setup.

🧹 Nitpick comments (1)
.github/workflows/atoms-e2e.yml (1)

26-29: Add a concurrency group to avoid stacking CI minutes on multiple PR pushes
When contributors force-push frequently, earlier jobs keep running unnecessarily. Define a concurrency key so that only the latest commit per PR executes:

concurrency:
  group: atoms-e2e-${{ github.head_ref }}
  cancel-in-progress: true
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 50b03ac and 3e2213c.

📒 Files selected for processing (1)
  • .github/workflows/atoms-e2e.yml (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-28T11:50:23.946Z
Learning: For large pull requests (>500 lines changed or >10 files touched), advise splitting into smaller, focused PRs by feature, layer, dependency chain, or file/module
Learnt from: vijayraghav-io
PR: calcom/cal.com#21072
File: .env.example:354-357
Timestamp: 2025-07-18T08:49:18.779Z
Learning: For E2E integration tests that require real third-party service credentials (like Outlook calendar), it's acceptable to temporarily include actual test account credentials in .env.example during feature development and validation, provided there's a clear plan to replace them with placeholder values before final release. Test credentials should be for dedicated test tenants/accounts, not production systems.
🪛 actionlint (1.7.7)
.github/workflows/atoms-e2e.yml

30-30: label "buildjet-4vcpu-ubuntu-2204" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Install dependencies / Yarn install & cache
  • GitHub Check: Atoms E2E Tests

Comment on lines +45 to +58
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: atoms-e2e-test-results
path: test-results
retention-days: 7
- name: Upload Playwright Report
uses: actions/upload-artifact@v4
if: always()
with:
name: atoms-e2e-playwright-report
path: playwright-report
retention-days: 7
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Artifact paths likely wrong when working-directory is changed
actions/upload-artifact always resolves the path input from the workspace root, not from the working-directory used in previous run steps. Because the Playwright run happens inside packages/platform/examples/base, the folders produced will be located at
packages/platform/examples/base/test-results and packages/platform/examples/base/playwright-report.

As written, the upload steps will silently succeed but create empty artifacts.

-          path: test-results
+          path: packages/platform/examples/base/test-results
@@
-          path: playwright-report
+          path: packages/platform/examples/base/playwright-report
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: atoms-e2e-test-results
path: test-results
retention-days: 7
- name: Upload Playwright Report
uses: actions/upload-artifact@v4
if: always()
with:
name: atoms-e2e-playwright-report
path: playwright-report
retention-days: 7
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: atoms-e2e-test-results
path: packages/platform/examples/base/test-results
retention-days: 7
- name: Upload Playwright Report
uses: actions/upload-artifact@v4
if: always()
with:
name: atoms-e2e-playwright-report
path: packages/platform/examples/base/playwright-report
retention-days: 7
🤖 Prompt for AI Agents
In .github/workflows/atoms-e2e.yml around lines 45 to 58, the artifact upload
paths are incorrect because actions/upload-artifact resolves paths from the
workspace root, not the working-directory of previous steps. Update the path
inputs to include the full relative paths from the root, such as
packages/platform/examples/base/test-results and
packages/platform/examples/base/playwright-report, to ensure the correct
directories are uploaded.

Copy link
Contributor

github-actions bot commented Aug 6, 2025

E2E results are ready!

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
.github/workflows/atoms-e2e.yml (2)

31-31: Non-standard runner label still unresolved

The workflow still uses the unknown label buildjet-4vcpu-ubuntu-2204. GitHub-hosted machines won’t recognise it, so the job will never start unless a self-hosted runner with that exact label is registered. Replace it with an official label (e.g. ubuntu-22.04 or ubuntu-latest-4-cores) or document the custom runner in actionlint.yaml.

-    runs-on: buildjet-4vcpu-ubuntu-2204
+    runs-on: ubuntu-latest-4-cores

50-52: Artifact paths will be empty because they’re resolved from the repo root

actions/upload-artifact resolves path from $GITHUB_WORKSPACE, not from the preceding working-directory (packages/platform/examples/base). The current values will upload empty artefacts. Prefix the correct sub-directory:

-          path: test-results
+          path: packages/platform/examples/base/test-results
@@
-          path: playwright-report
+          path: packages/platform/examples/base/playwright-report

Also applies to: 57-58

🧹 Nitpick comments (1)
.github/workflows/atoms-e2e.yml (1)

17-26: Secrets not available to forked PRs – expect CI failures

The job is triggered by pull_request, which includes forks, but relies on numerous repository secrets (ATOMS_E2E_OAUTH_CLIENT_ID, Docker creds, database URLs, etc.). These secrets are not exposed to untrusted forks, so the job will error out for external contributors.

Consider one of:

  1. Use pull_request_target (with great care for security),
  2. Run the workflow only on push to protected branches, or
  3. Guard secret-dependent steps with if: env.ATOMS_E2E_OAUTH_CLIENT_ID != ''.

Failing to address this will produce red CI for all community PRs.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3e2213c and d97ce8f.

📒 Files selected for processing (1)
  • .github/workflows/atoms-e2e.yml (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-28T11:50:23.946Z
Learning: For large pull requests (>500 lines changed or >10 files touched), advise splitting into smaller, focused PRs by feature, layer, dependency chain, or file/module
Learnt from: vijayraghav-io
PR: calcom/cal.com#21072
File: .env.example:354-357
Timestamp: 2025-07-18T08:49:18.779Z
Learning: For E2E integration tests that require real third-party service credentials (like Outlook calendar), it's acceptable to temporarily include actual test account credentials in .env.example during feature development and validation, provided there's a clear plan to replace them with placeholder values before final release. Test credentials should be for dedicated test tenants/accounts, not production systems.
🪛 actionlint (1.7.7)
.github/workflows/atoms-e2e.yml

31-31: label "buildjet-4vcpu-ubuntu-2204" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Install dependencies / Yarn install & cache
  • GitHub Check: Atoms E2E Tests

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
.github/workflows/atoms-e2e.yml (2)

44-50: Artifact upload will fail—test-results path is wrong
actions/upload-artifact@v4 resolves path from the repository root, not the working-directory used in the previous run step. The Playwrightrun happens inside packages/platform/examples/base, so the folder ends up at packages/platform/examples/base/test-results.
If the path isn’t fixed, the step will throw “no files found” and fail the entire job (v4 is strict).

-          path: test-results
+          path: packages/platform/examples/base/test-results

51-56: Same issue for Playwright report directory
The upload step points to a non-existent root-level directory; update it to the correct relative path.

-          path: playwright-report
+          path: packages/platform/examples/base/playwright-report
🧹 Nitpick comments (1)
.github/workflows/atoms-e2e.yml (1)

13-15: Over-broad permissions—consider dropping actions: write
Unless this job intentionally creates/updates workflow runs or artifacts via the GitHub API, actions: write isn’t required. Reducing to the minimum (often contents: read, statuses: write) follows the principle of least privilege and limits blast radius if a token leaks.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7ce4d00 and 26604ec.

📒 Files selected for processing (1)
  • .github/workflows/atoms-e2e.yml (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-28T11:50:23.946Z
Learning: For large pull requests (>500 lines changed or >10 files touched), advise splitting into smaller, focused PRs by feature, layer, dependency chain, or file/module
Learnt from: vijayraghav-io
PR: calcom/cal.com#21072
File: .env.example:354-357
Timestamp: 2025-07-18T08:49:18.779Z
Learning: For E2E integration tests that require real third-party service credentials (like Outlook calendar), it's acceptable to temporarily include actual test account credentials in .env.example during feature development and validation, provided there's a clear plan to replace them with placeholder values before final release. Test credentials should be for dedicated test tenants/accounts, not production systems.
📚 Learning: cal.com uses buildjet runners extensively in their github actions workflows, including `buildjet-4vc...
Learnt from: supalarry
PR: calcom/cal.com#22926
File: .github/workflows/atoms-e2e.yml:31-31
Timestamp: 2025-08-07T08:53:45.434Z
Learning: Cal.com uses BuildJet runners extensively in their GitHub Actions workflows, including `buildjet-4vcpu-ubuntu-2204` and `buildjet-2vcpu-ubuntu-2204`. These are valid custom runners for their organization and should not be flagged as issues.

Applied to files:

  • .github/workflows/atoms-e2e.yml
📚 Learning: for large pull requests (>500 lines changed or >10 files touched), advise splitting into smaller, fo...
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-28T11:50:23.946Z
Learning: For large pull requests (>500 lines changed or >10 files touched), advise splitting into smaller, focused PRs by feature, layer, dependency chain, or file/module

Applied to files:

  • .github/workflows/atoms-e2e.yml
🪛 actionlint (1.7.7)
.github/workflows/atoms-e2e.yml

31-31: label "buildjet-8vcpu-ubuntu-2204" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Atoms E2E Tests

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
.github/workflows/atoms-e2e.yml (1)

44-56: Artifact paths still incorrect when working-directory is set

Previous feedback noted that actions/upload-artifact resolves path from the workspace root, not from the step’s working-directory.
Because tests run inside packages/platform/examples/base, the generated folders live under that directory. As written, the uploads will be empty.

-          path: test-results
+          path: packages/platform/examples/base/test-results
@@
-          path: playwright-report
+          path: packages/platform/examples/base/playwright-report
🧹 Nitpick comments (1)
.github/workflows/atoms-e2e.yml (1)

31-41: Pin an explicit Node version for deterministic CI runs

The job installs Node implicitly via custom Yarn/Playwright actions. Explicitly setting a Node version (e.g. with actions/setup-node@v4) improves reproducibility across contributors and runners, and prevents silent breakage when the default runner version changes.

Example insertion before dependency steps:

      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'yarn'
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 26604ec and 03ce6c0.

📒 Files selected for processing (1)
  • .github/workflows/atoms-e2e.yml (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-28T11:50:23.946Z
Learning: For large pull requests (>500 lines changed or >10 files touched), advise splitting into smaller, focused PRs by feature, layer, dependency chain, or file/module
Learnt from: vijayraghav-io
PR: calcom/cal.com#21072
File: .env.example:354-357
Timestamp: 2025-07-18T08:49:18.779Z
Learning: For E2E integration tests that require real third-party service credentials (like Outlook calendar), it's acceptable to temporarily include actual test account credentials in .env.example during feature development and validation, provided there's a clear plan to replace them with placeholder values before final release. Test credentials should be for dedicated test tenants/accounts, not production systems.
📚 Learning: cal.com uses buildjet runners extensively in their github actions workflows, including `buildjet-4vc...
Learnt from: supalarry
PR: calcom/cal.com#22926
File: .github/workflows/atoms-e2e.yml:31-31
Timestamp: 2025-08-07T08:53:45.434Z
Learning: Cal.com uses BuildJet runners extensively in their GitHub Actions workflows, including `buildjet-4vcpu-ubuntu-2204` and `buildjet-2vcpu-ubuntu-2204`. These are valid custom runners for their organization and should not be flagged as issues.

Applied to files:

  • .github/workflows/atoms-e2e.yml
📚 Learning: for large pull requests (>500 lines changed or >10 files touched), advise splitting into smaller, fo...
Learnt from: CR
PR: calcom/cal.com#0
File: .cursor/rules/review.mdc:0-0
Timestamp: 2025-07-28T11:50:23.946Z
Learning: For large pull requests (>500 lines changed or >10 files touched), advise splitting into smaller, focused PRs by feature, layer, dependency chain, or file/module

Applied to files:

  • .github/workflows/atoms-e2e.yml
🪛 actionlint (1.7.7)
.github/workflows/atoms-e2e.yml

31-31: label "buildjet-4vcpu-ubuntu-2204" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Install dependencies / Yarn install & cache
  • GitHub Check: Atoms E2E Tests

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (2)
.github/workflows/atoms-e2e.yml (2)

31-31: BuildJet runner label is OK for this org.

Cal.com uses BuildJet runners across workflows; keep as-is. Consider adding your custom labels to actionlint config to silence the false-positive.


45-57: Fix artifact upload paths (current paths will upload nothing).

upload-artifact resolves paths from the workspace root, not the previous step’s working-directory. Prefix with the package path to capture the actual folders.

       - name: Upload Test Results
         uses: actions/upload-artifact@v4
         if: always()
         with:
           name: atoms-e2e-test-results
-          path: test-results
+          path: packages/platform/examples/base/test-results
           retention-days: 7
       - name: Upload Playwright Report
         uses: actions/upload-artifact@v4
         if: always()
         with:
           name: atoms-e2e-playwright-report
-          path: playwright-report
+          path: packages/platform/examples/base/playwright-report
           retention-days: 7
🧹 Nitpick comments (2)
.github/workflows/atoms-e2e.yml (2)

13-16: Tighten permissions (actions: write likely unnecessary).

Upload-artifact and checkout don’t require actions: write. Prefer least privilege.

 permissions:
-  actions: write
   contents: read

29-30: Optional: increase timeout or add concurrency to avoid burning runners.

If E2E occasionally runs long, bump to 25–30 min. Also consider concurrency to cancel superseded runs.

Example:

   atoms-e2e:
-    timeout-minutes: 15
+    timeout-minutes: 25
+    concurrency:
+      group: atoms-e2e-${{ github.ref }}
+      cancel-in-progress: true
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 03ce6c0 and 2c7c236.

⛔ Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (1)
  • .github/workflows/atoms-e2e.yml (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-07T08:53:45.434Z
Learnt from: supalarry
PR: calcom/cal.com#22926
File: .github/workflows/atoms-e2e.yml:31-31
Timestamp: 2025-08-07T08:53:45.434Z
Learning: Cal.com uses BuildJet runners extensively in their GitHub Actions workflows, including `buildjet-4vcpu-ubuntu-2204` and `buildjet-2vcpu-ubuntu-2204`. These are valid custom runners for their organization and should not be flagged as issues.

Applied to files:

  • .github/workflows/atoms-e2e.yml
🪛 actionlint (1.7.7)
.github/workflows/atoms-e2e.yml

31-31: label "buildjet-4vcpu-ubuntu-2204" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Install dependencies / Yarn install & cache
  • GitHub Check: Atoms E2E Tests

Comment on lines +17 to +26
env:
NODE_OPTIONS: --max-old-space-size=8096
ATOMS_E2E_OAUTH_CLIENT_ID: ${{ secrets.ATOMS_E2E_OAUTH_CLIENT_ID }}
ATOMS_E2E_OAUTH_CLIENT_SECRET: ${{ secrets.ATOMS_E2E_OAUTH_CLIENT_SECRET }}
ATOMS_E2E_API_URL: ${{ secrets.ATOMS_E2E_API_URL }}
ATOMS_E2E_ORG_ID: ${{ secrets.ATOMS_E2E_ORG_ID }}
ATOMS_E2E_OAUTH_CLIENT_ID_BOOKER_EMBED: ${{ secrets.ATOMS_E2E_OAUTH_CLIENT_ID_BOOKER_EMBED }}
DATABASE_DIRECT_URL: ${{ secrets.CI_DATABASE_URL }}
DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Scope secrets to the test step and correct NODE_OPTIONS (least-privilege, reduced exposure).

Define env only where needed (the test step) instead of job-wide. Also, 8096 looks like a typo; 8192 is the typical power-of-two setting.

Remove job-level env:

 env:
-  NODE_OPTIONS: --max-old-space-size=8096
-  ATOMS_E2E_OAUTH_CLIENT_ID: ${{ secrets.ATOMS_E2E_OAUTH_CLIENT_ID }}
-  ATOMS_E2E_OAUTH_CLIENT_SECRET: ${{ secrets.ATOMS_E2E_OAUTH_CLIENT_SECRET }}
-  ATOMS_E2E_API_URL: ${{ secrets.ATOMS_E2E_API_URL }}
-  ATOMS_E2E_ORG_ID: ${{ secrets.ATOMS_E2E_ORG_ID }}
-  ATOMS_E2E_OAUTH_CLIENT_ID_BOOKER_EMBED: ${{ secrets.ATOMS_E2E_OAUTH_CLIENT_ID_BOOKER_EMBED }}
-  DATABASE_DIRECT_URL: ${{ secrets.CI_DATABASE_URL }}
-  DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}

Add env to the test step:

       - name: Run Atoms E2E Tests
         working-directory: packages/platform/examples/base
+        env:
+          NODE_OPTIONS: --max-old-space-size=8192
+          ATOMS_E2E_OAUTH_CLIENT_ID: ${{ secrets.ATOMS_E2E_OAUTH_CLIENT_ID }}
+          ATOMS_E2E_OAUTH_CLIENT_SECRET: ${{ secrets.ATOMS_E2E_OAUTH_CLIENT_SECRET }}
+          ATOMS_E2E_API_URL: ${{ secrets.ATOMS_E2E_API_URL }}
+          ATOMS_E2E_ORG_ID: ${{ secrets.ATOMS_E2E_ORG_ID }}
+          ATOMS_E2E_OAUTH_CLIENT_ID_BOOKER_EMBED: ${{ secrets.ATOMS_E2E_OAUTH_CLIENT_ID_BOOKER_EMBED }}
+          DATABASE_DIRECT_URL: ${{ secrets.CI_DATABASE_URL }}
+          DATABASE_URL: ${{ secrets.CI_DATABASE_URL }}
         run: yarn test:e2e

Also applies to: 41-43

🤖 Prompt for AI Agents
.github/workflows/atoms-e2e.yml around lines 17-26 (and also apply the same
change to lines 41-43): the workflow currently sets sensitive env and
NODE_OPTIONS at the job level; move those env entries into the specific test
step to minimize exposure, remove the job-level env block, and correct
NODE_OPTIONS from --max-old-space-size=8096 to --max-old-space-size=8192; ensure
the test step declares ATOMS_E2E_OAUTH_CLIENT_ID, ATOMS_E2E_OAUTH_CLIENT_SECRET,
ATOMS_E2E_API_URL, ATOMS_E2E_ORG_ID, ATOMS_E2E_OAUTH_CLIENT_ID_BOOKER_EMBED,
DATABASE_DIRECT_URL, and DATABASE_URL from secrets and the corrected
NODE_OPTIONS so only the test step has access to the secrets and the memory
setting is fixed.

Comment on lines +33 to +36
- uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Is Docker login needed here?

No docker build/push/pull is shown in this job. If unused, drop this step to reduce secret exposure and speed up the workflow.


🏁 Script executed:

#!/bin/bash
# Check if the examples/base E2E setup references docker usage
rg -n "docker|compose|container" packages/platform/examples/base || true

# Check repo for docker usage tied to Playwright or atoms E2E
rg -n "docker (build|pull|run|compose)" \
  packages/platform/examples/base \
  packages/platform/atoms \
  .github/workflows || true

Length of output: 10332


🏁 Script executed:

#!/bin/bash
rg -n "docker" .github/workflows/atoms-e2e.yml || true

Length of output: 86


Remove unused Docker login step
The atoms-e2e job doesn’t perform any Docker build/push/pull actions, so the login is redundant. Removing it will both speed up the workflow and reduce secret exposure.

• File: .github/workflows/atoms-e2e.yml
• Lines to remove:

-      - uses: docker/login-action@v3
-        with:
-          username: ${{ secrets.DOCKERHUB_USERNAME }}
-          password: ${{ secrets.DOCKERHUB_TOKEN }}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
🤖 Prompt for AI Agents
.github/workflows/atoms-e2e.yml lines 33 to 36: remove the Docker login step
since the atoms-e2e job does not perform any Docker build/push/pull; delete the
block that uses docker/login-action@v3 and its with: username/password inputs
(lines 33–36) so the workflow runs faster and avoids exposing unused secrets.

@supalarry supalarry merged commit 7b7478c into main Aug 11, 2025
40 checks passed
@supalarry supalarry deleted the lauris/cal-6198-chore-e2e-tests-for-examples-app branch August 11, 2025 15:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
automated-tests area: unit tests, e2e tests, playwright core area: core, team members only platform Anything related to our platform plan ready-for-e2e
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants