Conversation
WalkthroughAdds CI automation and contributor UX for managing adopters: new "Add Adopter" and "Sync Adopters to README" workflows, README updates with ADOPTERS markers and Parseable Cloud promo, plus an issue template/config and a small CLA allowlist tweak. Changes
Sequence Diagram(s)sequenceDiagram
participant User as Issue Creator
participant GH_Actions as GitHub Actions
participant Repo as Repository (USERS.md)
participant API as GitHub API
User->>GH_Actions: Open issue with "new-adopter" template/label
GH_Actions->>Repo: Checkout main, read USERS.md
GH_Actions->>GH_Actions: Parse & validate fields (org, url, contact, desc)
alt invalid or duplicate
GH_Actions->>API: Comment on issue, add label (invalid/duplicate), optionally close
else valid & unique
GH_Actions->>Repo: Create branch, append row to USERS.md, commit
GH_Actions->>API: Create PR to main
GH_Actions->>API: Comment on issue with PR URL
end
sequenceDiagram
participant Push as Push to main (USERS.md)
participant GH_Actions as GitHub Actions
participant Repo as Repository (README.md)
participant Git as Git operations
Push->>GH_Actions: Trigger sync-adopters workflow
GH_Actions->>Repo: Read USERS.md, generate adopters table
GH_Actions->>Repo: Replace content between ADOPTERS markers in README.md
GH_Actions->>Git: Run git diff on README.md
alt README changed
GH_Actions->>Git: Commit & push README update
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/sync-adopters.yaml:
- Around line 46-51: The replacement using re.sub should verify exactly one
block was replaced: switch to re.subn on the readme string with the same pattern
and replacement (keeping rf"\g<1>{table}\g<2>" and flags=re.DOTALL), capture the
(new_readme, count) tuple, then check the count and fail fast (raise an
exception or exit non-zero) if count != 1 so the workflow surfaces missing or
ambiguous ADOPTERS markers; update usages of the original readme variable to use
the new_readme when the count check passes.
- Around line 34-38: The code appends raw org and desc into a Markdown table
which breaks if values contain pipes or newlines; create and call a sanitizer
(e.g., escape_md) to replace "|" with "\|" and convert newlines to "<br>" (or
"\\n") for both org and desc before the rows.append call so rows.append(f"|
{escaped_org} | {escaped_desc} |") is used instead of the current raw variables;
update the logic around the variables named org and desc and add the helper
function near this block to ensure all table cells are escaped.
In `@README.md`:
- Line 20: The introductory sentence in README.md should hyphenate "full-stack"
when used as a compound adjective; update the phrase "Parseable is a full stack
observability platform" to "Parseable is a full-stack observability platform" so
the copy follows standard compound adjective styling.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: fa8abbf4-5c59-437d-b8a5-c53939597490
📒 Files selected for processing (2)
.github/workflows/sync-adopters.yamlREADME.md
- Update README description to link Parseable Cloud (app.parseable.com) - Add centered Cloud CTA block before YouTube embed - Add Adopters section (between Features and Verify Images) with ADOPTERS:START/END markers, sourced from USERS.md - Add GitHub Action to auto-sync adopters from USERS.md to README on push to main Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Users can now add their organization to the adopters list by simply filling out a GitHub Issue Form — no fork or PR needed. How it works: 1. User opens an issue using the "Add Adopter" template 2. Fills in: Organization Name, URL, Contact, and Description of Use 3. A GitHub Action automatically validates the submission, checks for duplicates, and creates a PR updating USERS.md 4. Maintainers review and merge the PR — issue auto-closes Changes: - Add issue form template (.github/ISSUE_TEMPLATE/add-adopter.yml) - Add template chooser config with Slack and docs links - Add add-adopter workflow to automate PR creation - Add github-actions[bot] to CLA allowlist for bot-created PRs - Update README adopters section to link to the issue form Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Escape pipe and newline characters in adopter table cells - Fail fast if ADOPTERS markers are missing or ambiguous in README - Hyphenate "full-stack" compound adjective in README Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
c967dd0 to
5a155fa
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/add-adopter.yaml:
- Around line 104-105: The PR writes user-supplied orgName, contact and
description directly into a Markdown table row (see newRow construction using
orgName, contactCell, description and then updatedContent), which allows
pipes/newlines to break the table; sanitize these values before composing newRow
by escaping pipe characters ('|') and stripping or replacing newlines in
orgName, contact (used to build contactCell) and description, and ensure the
same sanitization is applied to the other table-insert location that mirrors
this logic (the second occurrence where a row is built and appended). Use the
sanitized variables when building newRow and updatedContent so the table shape
and downstream sync-adopters parsing remain stable.
- Line 74: The current duplicate check uses substring matching
(usersContent.toLowerCase().includes(orgNameLower)) which can false-positive;
instead parse the existing adopters from usersContent into discrete names (and
optionally URLs), normalize each (trim, collapse whitespace, lower-case, strip
punctuation/`www.`/protocol for URLs) and check for exact equality against
orgNameLower. Update the logic that builds the duplicate check (referencing
usersContent and orgNameLower) to iterate the parsedNames array and use
normalizedName === orgNameLower (and/or compare normalized URLs) rather than
includes.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: bdaf6b84-04b3-4109-970c-4f0360be4677
📒 Files selected for processing (6)
.github/ISSUE_TEMPLATE/add-adopter.yml.github/ISSUE_TEMPLATE/config.yml.github/workflows/add-adopter.yaml.github/workflows/cla.yaml.github/workflows/sync-adopters.yamlREADME.md
✅ Files skipped from review due to trivial changes (2)
- .github/workflows/cla.yaml
- .github/ISSUE_TEMPLATE/config.yml
🚧 Files skipped from review as they are similar to previous changes (2)
- README.md
- .github/workflows/sync-adopters.yaml
…te check - Replace demo.parseable.com with app.parseable.com (demo is no longer live) - Sanitize user-supplied fields (escape pipes, strip newlines) before inserting into USERS.md table row - Improve duplicate detection: parse existing org names from USERS.md and do exact match instead of substring includes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@README.md`:
- Line 20: Replace the verb "checkout" with the correct two-word verb phrase
"check out" in the README sentence that invites users to experience Parseable UI
(the sentence containing "To experience Parseable UI, checkout
[app.parseable.com ↗︎](https://app.parseable.com)"). Update the text so it reads
"To experience Parseable UI, check out [app.parseable.com
↗︎](https://app.parseable.com)".
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 3073ab74-3c67-439e-b456-0d8afa30f632
📒 Files selected for processing (2)
.github/workflows/add-adopter.yamlREADME.md
🚧 Files skipped from review as they are similar to previous changes (1)
- .github/workflows/add-adopter.yaml
| </div> | ||
|
|
||
| Parseable is a full stack observability platform built to ingest, analyze and extract insights from all types of telemetry (MELT) data. You can run Parseable on your local machine, in the cloud, or as a managed service. To experience Parseable UI, checkout [demo.parseable.com ↗︎](https://demo.parseable.com/login). | ||
| Parseable is a full-stack observability platform built to ingest, analyze and extract insights from all types of telemetry (MELT) data. You can run Parseable on your local machine, in the cloud, or use [Parseable Cloud](https://app.parseable.com) — the fully managed service. To experience Parseable UI, checkout [app.parseable.com ↗︎](https://app.parseable.com). |
There was a problem hiding this comment.
Fix verb form: "check out" (two words).
"checkout" should be "check out" when used as a verb. As a noun or adjective it's one word, but here it's a verb phrase.
✏️ Proposed fix
-Parseable is a full-stack observability platform built to ingest, analyze and extract insights from all types of telemetry (MELT) data. You can run Parseable on your local machine, in the cloud, or use [Parseable Cloud](https://app.parseable.com) — the fully managed service. To experience Parseable UI, checkout [app.parseable.com ↗︎](https://app.parseable.com).
+Parseable is a full-stack observability platform built to ingest, analyze and extract insights from all types of telemetry (MELT) data. You can run Parseable on your local machine, in the cloud, or use [Parseable Cloud](https://app.parseable.com) — the fully managed service. To experience Parseable UI, check out [app.parseable.com ↗︎](https://app.parseable.com).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` at line 20, Replace the verb "checkout" with the correct two-word
verb phrase "check out" in the README sentence that invites users to experience
Parseable UI (the sentence containing "To experience Parseable UI, checkout
[app.parseable.com ↗︎](https://app.parseable.com)"). Update the text so it reads
"To experience Parseable UI, check out [app.parseable.com
↗︎](https://app.parseable.com)".
Summary
Cloud CTA & Adopters Section
USERS.md, showing current adopters with<!-- ADOPTERS:START/END -->markers.github/workflows/sync-adopters.yamlto auto-syncUSERS.md→ README on push tomainFrictionless Adopter Registration (New)
.github/ISSUE_TEMPLATE/add-adopter.yml— users fill a simple web form (org name, URL, contact, description + authorization checkbox) to request being added as an adopter. No fork needed!.github/workflows/add-adopter.yaml— when the issue is created withnew-adopterlabel, a GitHub Action parses the form, validates fields, checks for duplicates inUSERS.md, and auto-creates a PR. Maintainers just merge..github/ISSUE_TEMPLATE/config.ymlwith links to Slack community and docsgithub-actions[bot]to.github/workflows/cla.yamlso bot-created PRs aren't blockedHow users add their organization
sync-adopters.yamlworkflow updates the README tableTest plan
issues/new/choose— verify "Add Adopter" form appears with all fieldsUSERS.mdrow🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Chores