Skip to content

feat(data-warehouse): scaffold 4 newly-requested sources - #75901

Merged
talyn-app[bot] merged 3 commits into
masterfrom
posthog-code/scaffold-requested-warehouse-sources
Jul 31, 2026
Merged

feat(data-warehouse): scaffold 4 newly-requested sources#75901
talyn-app[bot] merged 3 commits into
masterfrom
posthog-code/scaffold-requested-warehouse-sources

Conversation

@Gilbert09

Copy link
Copy Markdown
Member

Problem

Users asked for a handful of data-warehouse sources we don't have yet, via the posthog.com "which source do you want?" survey and the in-product "Notify me" button. This scaffolds the legitimate ones so they exist as connectors we can flesh out, and so future "Notify me" interest routes to a real source entry.

Changes

Scaffold four sources as hidden stubs (unreleasedSource=True, so users don't see them yet — there's no sync logic behind them):

Source Category Why
Hyros Advertising Ad attribution / tracking
Odoo Finance & accounting ERP / business suite (matches how Dolibarr is categorized)
Airbridge Advertising Mobile measurement / attribution (matches Adjust, AppsFlyer, Singular, Branch)
Snov.io Sales Cold email outreach / lead gen (matches lemlist, Instantly, Reply.io)

Each one is the standard scaffold: an enum value in ExternalDataSourceType + externalDataSources, a stub source.py, a generated config, an icon from Logo.dev, and a SOURCES.md entry. All four enum additions land in one AlterField migration (0115_scaffold_four_requested_sources) so the migration chain stays linear.

Skipped the survey entries that aren't real, identifiable data sources: an internal admin platform, "knowledgebase", "integrations", and "api-integrations". Snov.io was requested twice ("snovio" and "snov.io") so it's scaffolded once.

How did you test this code?

Automated only (I'm an agent — no manual/live-API testing):

  • pnpm run generate:source-configs regenerates my four config modules with no drift.
  • pnpm run schema:build picks up the new enum values.
  • makemigrations --check --dry-run reports no pending changes and --merge --dry-run finds no conflicts, confirming the single linear migration.
  • The source registry loads all four with the expected category, icon path, and unreleasedSource=True.
  • The source guard suites pass (test_source_categories.py, test_source_versions.py, test_generated_configs.py).
  • ruff check / ruff format clean; hogli ci:preflight reports 0 failures.

Automatic notifications

  • Publish to changelog?
  • Alert Sales and Marketing teams?

Docs update

No docs yet — these are hidden stubs, not connectable sources. Docs come when the sync logic is implemented per the /implementing-warehouse-sources skill.

🤖 Agent context

Autonomy: Fully autonomous

Scaffolded by Claude following the /implementing-warehouse-sources skill. Each requested survey name was first checked against the existing sources/ tree, the ExternalDataSourceType enum, and open PRs (including the maintainer's own) to rule out duplicates and in-flight work — none matched. Each candidate brand was verified via Logo.dev before scaffolding; entries with no brand/logo were treated as junk and skipped. Icons were pulled from Logo.dev (key not committed). Kept strictly to scaffolding: no sync logic, and the unreleasedSource flag stays on every source.


Created with PostHog Code

Scaffold Hyros, Odoo, Airbridge, and Snov.io as hidden stub sources
(unreleasedSource=True) in response to the posthog.com source survey and
in-product "Notify me" requests.

Each source registers with a category, label, and icon but ships no sync
logic yet. All four enum additions land in a single AlterField migration so
the chain stays linear.

Skipped the non-source survey entries (an admin platform, "knowledgebase",
"integrations", "api-integrations") — none map to an identifiable SaaS data
source.

Generated-By: PostHog Code
Task-Id: 8f2233ce-c683-44e0-b734-d240f2a0c0df
@trunk-io

trunk-io Bot commented Jul 31, 2026

Copy link
Copy Markdown

😎 This pull request was merged.

@github-actions

Copy link
Copy Markdown
Contributor

Hey @Gilbert09! 👋

It looks like your git author email on this PR isn't your @posthog.com address (owerstom@gmail.com). Since you're on the PostHog team, it's worth pointing your local git author email at your @posthog.com address. Why it matters:

  • Consistent work identity in git history — internal tooling that attributes commits to team members keys off your @posthog.com address.
  • Keeps team contributions easy to tell apart from external community ones when scanning history.

You can fix it for this repo with:

git config user.email "you@posthog.com"

Or set it globally with git config --global user.email "you@posthog.com". No need to redo this PR — just a nudge for next time. 🙂

@github-actions
github-actions Bot requested a deployment to preview-pr-75901 July 31, 2026 09:30 In progress
@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

🦔 Hogbox preview · ✅ ready

▶ Open the preview

🔑 Login test@posthog.com / 12345678 (demo data)
🧩 Running this PR's backend and frontend, on the PostHog :master base
🔗 Link stable across rebuilds — a re-push swaps the box underneath, the URL stays
🔒 Access tailnet only (PostHog VPN)
🛠️ Admin inspect & debug state in hogland
💤 Idle sleeps after ~30 min idle (snapshot to S3, zero node cost) and wakes on your next visit in ~30s, behind a brief "waking up" screen

commit 8a3dc89 · box box-11cea888c808 · ready in 887s (push → usable) · build log · rebuilds on every push, torn down on close

@pr-assigner-resolver-posthog
pr-assigner-resolver-posthog Bot requested a review from a team July 31, 2026 09:30
@Gilbert09
Gilbert09 requested a review from a team July 31, 2026 09:30
@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

🤖 CI report

⚠️ Bundle size — 🔺 +1.7 KiB (+0.0%)

Uncompressed size of every built .js bundle, compared against the base branch.

Total: 65.43 MiB · 🔺 +1.7 KiB (+0.0%)

File Size Δ vs base
posthog-app/src/scenes/instance/QueryPerformance/QueryPerformance.js 34.7 KiB 🔺 +1.6 KiB (+4.9%)

Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report

Eager graph — within budget

How much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy import() / React.lazy chunks are not counted.

Root Eager (shipped) Δ vs base Budget
entry (logged-out pages, app bootstrap)
src/index.tsx
1.25 MiB · 22 files no change ███░░░░░░░ 27.7% of 4.51 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
8.12 MiB · 3,023 files 🔺 +36 B (+0.0%) ████████░░ 83.6% of 9.71 MiB

🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx

Largest files eagerly shipped from src/index.tsx
Size File
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
24.6 KiB ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js
6.3 KiB ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js
4.5 KiB ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js
3.9 KiB ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js
1.4 KiB ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
1.3 KiB src/RootErrorBoundary.tsx
912 B ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js
789 B src/scenes/ChunkLoadErrorBoundary.tsx
762 B src/index.tsx
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
285.3 KiB ../node_modules/.pnpm/posthog-js@1.409.2/node_modules/posthog-js/dist/rrweb.js
267.7 KiB ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
235.5 KiB src/taxonomy/core-filter-definitions-by-group.json
231.4 KiB ../node_modules/.pnpm/posthog-js@1.409.2/node_modules/posthog-js/dist/module.js
154.3 KiB ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
105.2 KiB src/lib/api.ts
94.7 KiB ../packages/quill/packages/quill/dist/index.js
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
90.6 KiB ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js

Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479

Toolbar bundle — eager 2.19 MiB within budget

What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.

Metric Size Δ vs base Budget
Eager (shipped)
entry + static imports
2.19 MiB · 17 files no change ████░░░░░░ 38.3% of 5.72 MiB
Deferred (lazy) 2.08 MiB · 33 files no change n/a — loads on demand
Loader dist/toolbar.js 1.1 KiB no change █░░░░░░░░░ 5.8% of 19.5 KiB
Largest eagerly-shipped chunks
Size File
717.8 KiB dist/toolbar/toolbar-app-2QFKEBT7.css
551.1 KiB dist/toolbar/chunk-chunk-5FDJUV5A.js
484.6 KiB dist/toolbar/chunk-chunk-QCKKTYHY.js
133.6 KiB dist/toolbar/chunk-chunk-UDBJ4EGL.js
131.8 KiB dist/toolbar/chunk-chunk-T5KY5WYR.js
71.0 KiB dist/toolbar/toolbar-app-DBANC7W5.js
69.0 KiB dist/toolbar/chunk-chunk-27JL52RE.js
35.6 KiB dist/toolbar/chunk-chunk-QFZQEUXB.js
20.9 KiB dist/toolbar/chunk-chunk-HWIVFWBZ.js
12.2 KiB dist/toolbar/chunk-chunk-PIK3PADE.js

Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile

Dist folder size — 🔺 +65.0 KiB (+0.0%)

Total size of the built frontend/dist folder (all assets), compared against the base branch.

Total: 1371.06 MiB · 🔺 +65.0 KiB (+0.0%)

⚠️ Playwright — 1 flaky

🎭 Playwright report · View test results →

⚠️ 1 flaky test:

  • Duplicating a dashboard preserves text cards, date filter, and variables (chromium)

These issues are not necessarily caused by your changes.
Annoyed by this section? Help fix flakies and failures and it will go green!

⚠️ Django migration SQL — 1 new migration to review

We've detected new migrations on this PR. Review the SQL output for each migration:

products/warehouse_sources/backend/migrations/0115_scaffold_four_requested_sources.py

BEGIN;
--
-- Alter field source_type on externaldatasource
--
-- (no-op)
--
-- Alter field source_type on pendingsourcecredential
--
-- (no-op)
COMMIT;

Last updated: 2026-07-31 10:03 UTC (8a3dc89)

Django migration risk — migration analysis complete

We've analyzed your migrations for potential risks.

Summary: 0 Safe | 1 Needs Review | 0 Blocked

⚠️ Needs Review

May have performance impact

warehouse_sources.0115_scaffold_four_requested_sources
  └─ #1 ⚠️ AlterField
     Field alteration may cause table locks or data loss (check if changing type or constraints)
     model: externaldatasource, field: source_type, field_type: CharField
  └─ #2 ⚠️ AlterField
     Field alteration may cause table locks or data loss (check if changing type or constraints)
     model: pendingsourcecredential, field: source_type, field_type: CharField

Last updated: 2026-07-31 10:03 UTC (8a3dc89)

@fuziontech fuziontech left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Automated review agent on behalf of @fuziontech: approved. The four unreleased source scaffolds follow the existing registry/config pattern, keep the generated enums and migration state aligned, and include valid service icons. Focused source category/generated-config tests passed (2,581 tests), as did Ruff. I found no blocking issues.

Kea-typegen expands ExternalDataSourceType inline into the NewSourceScene
logic type files. Adding the four new sources changes that union, so
regenerate sourceCatalogLogic.ts and sourceWizardLogic.tsx to match — the
frontend typecheck's "schema up to date" diff check requires it.

Generated-By: PostHog Code
Task-Id: 8f2233ce-c683-44e0-b734-d240f2a0c0df
@talyn-app
talyn-app Bot enabled auto-merge (squash) July 31, 2026 10:14
@talyn-app
talyn-app Bot merged commit 44695c0 into master Jul 31, 2026
272 checks passed
@talyn-app
talyn-app Bot deleted the posthog-code/scaffold-requested-warehouse-sources branch July 31, 2026 10:22
@deployment-status-posthog

deployment-status-posthog Bot commented Jul 31, 2026

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-07-31 11:00 UTC Run
prod-us ✅ Deployed 2026-07-31 11:20 UTC Run
prod-eu ✅ Deployed 2026-07-31 11:19 UTC Run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants