c71663946e
## What Introduces a `packages/twenty-apps/public/` folder and moves the publicly publishable apps into it, then generalizes the apps CI workflow to cover both folders. ### Moves The following apps were moved from `packages/twenty-apps/internal/` to `packages/twenty-apps/public/` (via `git mv`, history preserved): - `people-data-labs` - `twenty-discord` - `twenty-exa` - `twenty-fireflies` - `twenty-last-contact` - `twenty-linear` - `twenty-meeting-bot` - `twenty-slack` These remain in `internal/`: `self-hosting`, `twenty-for-twenty`, `twenty-partners`. ### Workflow - Renamed `.github/workflows/ci-internal-apps.yaml` → `.github/workflows/ci-twenty-apps.yaml`. - The discover job now scans **both** `packages/twenty-apps/internal` and `packages/twenty-apps/public`: - the "no nested `.github`" guard checks both folders, - `changed-files` watches both globs, - the matrix builder iterates over both roots (guarded with `existsSync` so a missing folder is a no-op). - Each matrix entry still carries its own `path`, so the `ci` job works unchanged regardless of which folder an app lives in. ## Notes - The apps are standalone packages (own `yarn.lock`, not part of the root Nx workspaces), so no root `package.json` / `nx.json` / `tsconfig` changes were needed. - The companion publish workflow lives in `twentyhq/twenty-infra` (`publish-internal-apps.yaml` → `publish-public-apps.yaml`) and is updated in a paired PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- _Generated by [Claude Code](https://claude.ai/code/session_01Fmu3DWf1yTTkVW49eSkXwh)_ <!-- This is an auto-generated description by cubic. --> <a href="https://cubic.dev/pr/twentyhq/twenty/pull/22096?utm_source=github" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true"><picture><source media="(prefers-color-scheme: dark)" srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img alt="Review in cubic" src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a> <!-- End of auto-generated description by cubic. -->
42 lines
1.8 KiB
TypeScript
42 lines
1.8 KiB
TypeScript
import { defineApplication } from 'twenty-sdk/define';
|
|
|
|
import {
|
|
APPLICATION_UNIVERSAL_IDENTIFIER,
|
|
FIREFLIES_API_KEY_VARIABLE_UNIVERSAL_IDENTIFIER,
|
|
FIREFLIES_WEBHOOK_SECRET_VARIABLE_UNIVERSAL_IDENTIFIER,
|
|
} from 'src/constants/universal-identifiers';
|
|
|
|
export default defineApplication({
|
|
universalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
|
|
displayName: 'Twenty Fireflies',
|
|
description:
|
|
'Sync Fireflies call transcripts and AI summaries onto matching CalendarEvent records in Twenty, and trigger sync / list / search of Fireflies calls from workflows and the AI chat.',
|
|
logoUrl: 'public/twenty-fireflies.svg',
|
|
author: 'Twenty',
|
|
category: 'Productivity',
|
|
screenshots: [
|
|
'public/gallery/transcript-on-calendar-event.png',
|
|
'public/gallery/summary-on-calendar-event.png',
|
|
'public/gallery/workflow-builder-actions.png',
|
|
'public/gallery/app-settings.png',
|
|
],
|
|
websiteUrl: 'https://docs.twenty.com/developers/extend/apps/getting-started',
|
|
termsUrl: 'https://www.twenty.com/terms',
|
|
emailSupport: 'contact@twenty.com',
|
|
issueReportUrl: 'https://github.com/twentyhq/twenty/issues',
|
|
applicationVariables: {
|
|
FIREFLIES_API_KEY: {
|
|
universalIdentifier: FIREFLIES_API_KEY_VARIABLE_UNIVERSAL_IDENTIFIER,
|
|
description:
|
|
'API key from Fireflies (Integrations → Fireflies API → Generate). Used as a Bearer token against https://api.fireflies.ai/graphql to fetch full transcript content after a webhook fires.',
|
|
isSecret: true,
|
|
},
|
|
FIREFLIES_WEBHOOK_SECRET: {
|
|
universalIdentifier: FIREFLIES_WEBHOOK_SECRET_VARIABLE_UNIVERSAL_IDENTIFIER,
|
|
description:
|
|
'Signing secret for verifying Fireflies Webhooks V2 payloads (sent in the X-Hub-Signature header as sha256=<hex-hmac-sha256-of-body>). Configure the same value on the Fireflies V2 webhook setup page.',
|
|
isSecret: true,
|
|
},
|
|
},
|
|
});
|