Skip to content

Conversation

@luancazarine
Copy link
Collaborator

@luancazarine luancazarine commented Dec 30, 2025

Resolves #13266

Summary by CodeRabbit

  • New Features
    • Add "Create Post" action to publish posts with project, title, body, labels, locale, and draft options
    • Add three event sources — New Post, New Comment, New Reaction — to trigger workflows on new activity
    • Dynamic project/label/locale selection, improved API requester and paginated activity fetching, and included sample test events
  • Chores
    • Component version bumped to 0.1.0

✏️ Tip: You can customize this high-level summary in your review settings.

- Added prop definitions for project ID, labels, and locale in the AnnounceKit app.
- Implemented methods for listing projects, labels, locales, and creating posts.
- Introduced new sources for tracking new comments and posts, along with their respective test events.
- Added utility functions for object parsing.
- Bumped version to 0.1.0 in package.json.
@luancazarine luancazarine linked an issue Dec 30, 2025 that may be closed by this pull request
@vercel
Copy link

vercel bot commented Dec 30, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Review Updated (UTC)
pipedream-docs-redirect-do-not-edit Ignored Ignored Dec 30, 2025 8:04pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 30, 2025

Walkthrough

Adds an AnnounceKit integration: GraphQL app client, Create Post action, three polling sources (new-post, new-comment, new-reaction) built on a shared paginated polling base, GraphQL queries and utilities, test events, and package version bumped to 0.1.0 with a platform dependency.

Changes

Cohort / File(s) Summary
App Layer & Queries
components/announcekit/announcekit.app.mjs, components/announcekit/common/queries.mjs, components/announcekit/common/utils.mjs, components/announcekit/package.json
New GraphQL client methods (_baseUrl, _getAuth, _makeRequest), query/mutation helpers, paginate utility, data methods (listProjects, listLabels, listLocales, listPosts, listActivities, createPost), static GraphQL query/mutation strings, parseObject util, package version bumped to 0.1.0 and @pipedream/platform dependency added.
Create Post Action
components/announcekit/actions/create-post/create-post.mjs
New action announcekit-create-post with props (app, projectId, title, labels, body, locale, isDraft). Calls app.createPost, parses labels, throws ConfigurationError on API errors, returns summary and response.
Polling Source Base
components/announcekit/sources/common/base.mjs
New reusable polling base source: props (app, db, timer, projectId), lastItemId persistence, emitEvent that uses app.listActivities with paginate, updates lastItemId, emits new items chronologically, and defines deploy/run hooks.
New Post Source
components/announcekit/sources/new-post/new-post.mjs, components/announcekit/sources/new-post/test-event.mjs
New source announcekit-new-post extending base, uses app.listPosts, defines getSummary and getItemsField ("posts"), includes sample test-event payload.
New Comment Source
components/announcekit/sources/new-comment/new-comment.mjs, components/announcekit/sources/new-comment/test-event.mjs
New source announcekit-new-comment extending base, filters activities with type: ["new-feedback"], defines getSummary, includes sample test-event payload.
New Reaction Source
components/announcekit/sources/new-reaction/new-reaction.mjs, components/announcekit/sources/new-reaction/test-event.mjs
New source announcekit-new-reaction extending base, filters activities with type: ["new-reaction"], defines getSummary, includes sample test-event payload.

Sequence Diagram(s)

sequenceDiagram
    participant Action as Create Post Action
    participant App as AnnounceKit App
    participant API as AnnounceKit API
    participant Error as Error Handler

    Action->>App: createPost({ projectId, content, labels, locale_id, isDraft })
    App->>App: _getAuth() & _baseUrl()
    App->>API: POST /gq/v2 (GraphQL mutation)
    API-->>App: { data, errors }
    alt errors present
        App->>Error: throw ConfigurationError(first error message)
        Error-->>Action: Error thrown
    else success
        App-->>Action: created post response
        Action-->>Action: return summary + response
    end
Loading
sequenceDiagram
    participant Source as Polling Source
    participant DB as DB (lastItemId)
    participant App as AnnounceKit App
    participant API as AnnounceKit API

    Note over Source: deploy/run -> poll for activities
    Source->>DB: _getLastItemId()
    DB-->>Source: lastItemId (or null)
    Source->>App: paginate(listActivities, { projectId, after: lastItemId })
    loop per page
        App->>API: POST /gq/v2 (GraphQL query with cursor)
        API-->>App: activities page + cursor
    end
    App-->>Source: aggregated activities
    Source->>Source: filter items with id > lastItemId
    Source->>Source: sort chronologically (oldest first)
    Source->>DB: _setLastItemId(newestId)
    loop emit each new item
        Source-->>Source: emit({ id, summary, ts, payload })
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Suggested labels

action, trigger / source

Suggested reviewers

  • michelle0927
  • lcaresia

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning The description only contains 'Resolves #13266' and lacks the required 'WHY' section from the template, leaving the rationale and context unexplained. Complete the description by adding the 'WHY' section to explain the motivation, context, and rationale for these changes.
Title check ❓ Inconclusive The title '13266 components announcekit' is vague and appears to be a ticket reference rather than a meaningful summary of the changes. Use a descriptive title like 'Add AnnounceKit polling sources and create-post action' to clearly convey the main changes.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The PR implements the core requirements from issue #13266: new-post, new-reaction, new-comment polling sources and create-post action with required props match the specifications.
Out of Scope Changes check ✅ Passed All changes are in scope: component files, queries, utilities, and package updates directly support the AnnounceKit integration requested in #13266.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings

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

Comment @coderabbitai help to get the list of available commands and usage tips.

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: 12

📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c26f2ae and 9a2c9cf.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (12)
  • components/announcekit/actions/create-post/create-post.mjs
  • components/announcekit/announcekit.app.mjs
  • components/announcekit/common/queries.mjs
  • components/announcekit/common/utils.mjs
  • components/announcekit/package.json
  • components/announcekit/sources/common/base.mjs
  • components/announcekit/sources/new-comment/new-comment.mjs
  • components/announcekit/sources/new-comment/test-event.mjs
  • components/announcekit/sources/new-post/new-post.mjs
  • components/announcekit/sources/new-post/test-event.mjs
  • components/announcekit/sources/new-reaction/new-reaction.mjs
  • components/announcekit/sources/new-reaction/test-event.mjs
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-10-20T01:01:02.970Z
Learnt from: js07
Repo: PipedreamHQ/pipedream PR: 18744
File: components/slack_v2/actions/send-large-message/send-large-message.mjs:49-64
Timestamp: 2025-10-20T01:01:02.970Z
Learning: In components/slack_v2/actions/send-large-message/send-large-message.mjs, the metadata_event_payload prop is typed as string, so the code only needs to handle string-to-JSON parsing and does not need to handle object inputs.

Applied to files:

  • components/announcekit/sources/new-post/test-event.mjs
  • components/announcekit/sources/new-reaction/test-event.mjs
📚 Learning: 2024-07-24T02:06:47.016Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-07-24T02:06:47.016Z
Learning: The `common-webhook-methods.mjs` object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like `generateWebhookMeta` and `getEventType` to enforce implementation in subclasses.

Applied to files:

  • components/announcekit/sources/new-post/new-post.mjs
📚 Learning: 2024-12-12T19:23:09.039Z
Learnt from: jcortes
Repo: PipedreamHQ/pipedream PR: 14935
File: components/sailpoint/package.json:15-18
Timestamp: 2024-12-12T19:23:09.039Z
Learning: When developing Pipedream components, do not add built-in Node.js modules like `fs` to `package.json` dependencies, as they are native modules provided by the Node.js runtime.

Applied to files:

  • components/announcekit/package.json
📚 Learning: 2024-10-10T19:18:27.998Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In `components/the_magic_drip/sources/common.mjs`, when processing items in `getAndProcessData`, `savedIds` is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

Applied to files:

  • components/announcekit/sources/common/base.mjs
🧬 Code graph analysis (1)
components/announcekit/actions/create-post/create-post.mjs (1)
components/announcekit/common/utils.mjs (2)
  • parseObject (1-24)
  • parseObject (1-24)
⏰ 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). (4)
  • GitHub Check: pnpm publish
  • GitHub Check: Lint Code Base
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Publish TypeScript components
🔇 Additional comments (8)
components/announcekit/package.json (1)

1-18: LGTM! Version bump is appropriate.

The version bump to 0.1.0 correctly reflects the addition of new actions and sources in this PR. The dependency on @pipedream/platform is appropriate for Pipedream components.

components/announcekit/common/utils.mjs (1)

1-24: LGTM! Robust input parsing with proper error handling.

The parseObject utility correctly handles multiple input types (falsy values, arrays, strings, objects) with appropriate JSON parsing and error recovery. The try-catch blocks ensure the function never throws and returns sensible fallback values.

components/announcekit/sources/new-comment/test-event.mjs (1)

1-35: LGTM! Test event payload structure is comprehensive.

The sample event includes all relevant fields for a "new-feedback" activity with proper nesting of post and feedback entities. This provides a clear example of the expected event shape for testing and development.

components/announcekit/sources/new-post/test-event.mjs (1)

1-35: LGTM! Comprehensive test event for post creation.

The sample post includes all relevant fields (metadata, flags, status, contents) and demonstrates both draft and content structure. This aligns well with the post schema defined in the GraphQL queries.

components/announcekit/sources/new-reaction/test-event.mjs (1)

1-35: LGTM! Test event properly demonstrates reaction structure.

The sample reaction event (line 27: "reaction": ":|") clearly distinguishes a reaction from a comment (line 28: "feedback": null), which helps illustrate the different activity types in the AnnounceKit activity feed.

components/announcekit/sources/new-reaction/new-reaction.mjs (1)

1-28: LGTM! Source correctly extends base with appropriate filters.

The new-reaction source properly:

  • Extends the base polling source functionality
  • Overrides getSummary to format reaction-specific messages
  • Overrides getVariables to filter for "new-reaction" activity types (lines 20-22)
  • Includes the sample event for testing

The implementation follows the established pattern for AnnounceKit sources.

components/announcekit/common/queries.mjs (1)

1-175: Define missing listComments query.

The file references queries.listComments in announcekit.app.mjs (via the listComments() method), but the query is not defined or exported in queries.mjs. This will cause a runtime error. Add the listComments GraphQL query definition to queries.mjs and include it in the export statement.

components/announcekit/sources/new-post/new-post.mjs (1)

4-23: Missing optional post status filter per PR objectives.

The PR objectives specify an optional prop for post status (Draft/Published) to filter posts, but this component doesn't define such a prop or pass filtering parameters.

Consider adding a postStatus prop and passing it through getVariables:

🔎 Suggested implementation

Add to the export object after line 11:

   dedupe: "unique",
+  props: {
+    ...base.props,
+    postStatus: {
+      type: "string",
+      label: "Post Status",
+      description: "Filter posts by status",
+      options: ["draft", "published"],
+      optional: true,
+    },
+  },
   methods: {
     ...base.methods,
     getSummary(post) {
       return `New Post with ID: ${post.id}`;
     },
+    getVariables(variables) {
+      return {
+        ...variables,
+        ...(this.postStatus && { status: this.postStatus }),
+      };
+    },
     getFn() {
       return this.app.listPosts;
     },

Note: Ensure the GraphQL listPosts query in common/queries.mjs accepts a status filter parameter.

- Updated project and label value assignments to use string IDs instead of parsed integers.
- Moved the GraphQL query for listing projects to a separate constant for better maintainability.
- Cleaned up unused code by removing the unimplemented generateMeta method.
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: 4

♻️ Duplicate comments (3)
components/announcekit/sources/common/base.mjs (2)

49-53: ID comparison may fail for string identifiers.

The comparison item.id <= lastItemId assumes numeric IDs. GraphQL APIs typically return string IDs, which would use lexicographic ordering rather than numeric ordering, potentially causing incorrect filtering or missed events.

🔎 Proposed fix
       for await (const item of response) {
-        if (item.id <= lastItemId) break;
+        if (lastItemId && item.id === lastItemId) break;
         items.push(item);
       }

Alternatively, if numeric comparison is intended, convert both to numbers:

-        if (item.id <= lastItemId) break;
+        if (lastItemId && Number(item.id) <= Number(lastItemId)) break;

59-65: Guard against undefined created_at.

Date.parse(item.created_at) will return NaN if created_at is undefined or malformed, causing the event timestamp to be invalid.

🔎 Proposed fix
       for (const item of items.reverse()) {
         this.$emit(item, {
           id: item.id,
           summary: this.getSummary(item),
-          ts: Date.parse(item.created_at),
+          ts: item.created_at ? Date.parse(item.created_at) : Date.now(),
         });
       }
components/announcekit/announcekit.app.mjs (1)

157-172: Add null safety checks in paginate.

Lines 160 and 170 access nested properties without verifying that data[itemsField] exists. This will throw if the API returns an unexpected structure or an error response.

🔎 Proposed fix
       do {
         variables.page = page++;
         const { data } = await fn(variables);
+        
+        if (!data?.[itemsField]) {
+          break;
+        }
+        
         const items = data[itemsField].items || data[itemsField].list;
+        
+        if (!items?.length) {
+          break;
+        }

         for (const d of items) {
           yield d;

           if (maxResults && ++count === maxResults) {
             return count;
           }
         }

-        hasMore = data[itemsField].page < data[itemsField].pages;
+        hasMore = (data[itemsField]?.page ?? 0) < (data[itemsField]?.pages ?? 0);

       } while (hasMore);
📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9a2c9cf and 327461c.

📒 Files selected for processing (3)
  • components/announcekit/announcekit.app.mjs
  • components/announcekit/common/queries.mjs
  • components/announcekit/sources/common/base.mjs
🧰 Additional context used
🧠 Learnings (5)
📚 Learning: 2024-10-10T19:18:27.998Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In `components/the_magic_drip/sources/common.mjs`, when processing items in `getAndProcessData`, `savedIds` is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

Applied to files:

  • components/announcekit/sources/common/base.mjs
📚 Learning: 2025-01-29T22:59:38.825Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 15436
File: components/printful/printful.app.mjs:55-63
Timestamp: 2025-01-29T22:59:38.825Z
Learning: Console.log statements should be removed before merging PRs to maintain code quality and prevent potential security risks from exposing sensitive information in logs.

Applied to files:

  • components/announcekit/sources/common/base.mjs
📚 Learning: 2025-07-09T18:07:12.426Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 17538
File: components/aircall/sources/new-sms/new-sms.mjs:19-25
Timestamp: 2025-07-09T18:07:12.426Z
Learning: In Aircall API webhook payloads, the `created_at` field is returned as an ISO 8601 string format (e.g., "2020-02-18T20:52:22.000Z"), not as milliseconds since epoch. For Pipedream components, this needs to be converted to milliseconds using `Date.parse()` before assigning to the `ts` field in `generateMeta()`.

Applied to files:

  • components/announcekit/sources/common/base.mjs
📚 Learning: 2025-10-20T01:01:02.970Z
Learnt from: js07
Repo: PipedreamHQ/pipedream PR: 18744
File: components/slack_v2/actions/send-large-message/send-large-message.mjs:49-64
Timestamp: 2025-10-20T01:01:02.970Z
Learning: In components/slack_v2/actions/send-large-message/send-large-message.mjs, the metadata_event_payload prop is typed as string, so the code only needs to handle string-to-JSON parsing and does not need to handle object inputs.

Applied to files:

  • components/announcekit/announcekit.app.mjs
📚 Learning: 2025-08-27T17:25:10.425Z
Learnt from: jverce
Repo: PipedreamHQ/pipedream PR: 18187
File: packages/connect-react/src/utils/type-guards.ts:23-33
Timestamp: 2025-08-27T17:25:10.425Z
Learning: In the connect-react package, the isOptionWithLabel type guard intentionally restricts value types to string|number for runtime filtering purposes, even though LabelValueOption<T> allows any T. This runtime behavior should be preserved over type safety improvements.

Applied to files:

  • components/announcekit/announcekit.app.mjs
🧬 Code graph analysis (1)
components/announcekit/sources/common/base.mjs (2)
components/announcekit/actions/create-post/create-post.mjs (1)
  • response (68-79)
components/announcekit/announcekit.app.mjs (1)
  • items (160-160)
⏰ 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). (4)
  • GitHub Check: pnpm publish
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Lint Code Base
🔇 Additional comments (3)
components/announcekit/common/queries.mjs (1)

1-69: LGTM!

The GraphQL query definitions are well-structured with proper variable types and field selections. The use of fragments for activity and feedback in listActivities promotes reusability.

components/announcekit/sources/common/base.mjs (1)

4-20: LGTM!

The base source structure follows Pipedream's polling source patterns correctly with proper prop definitions, timer configuration, and project ID integration.

components/announcekit/announcekit.app.mjs (1)

49-82: LGTM!

The HTTP layer with _baseUrl, _getAuth, _makeRequest, and query methods is well-structured and follows consistent patterns for GraphQL API integration.

- Changed project and label value assignments to parse IDs as integers for consistency and improved data handling.
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 (3)
components/announcekit/announcekit.app.mjs (3)

8-20: Type mismatch and unnecessary parseInt still present.

GraphQL IDs are strings. The prop type should be "string" instead of "integer", and parseInt() on line 17 should be removed.


21-35: Type mismatch and unnecessary parseInt still present.

Same issue as projectId - GraphQL label IDs are strings. Change type to "string[]" and remove parseInt() on line 32.


142-165: Null safety checks still missing in paginate.

Lines 152 and 162 access nested properties without null checks. If the API returns an unexpected structure, this will throw a runtime error.

🔎 Proposed fix
       do {
         variables.page = page++;
         const { data } = await fn(variables);
+        
+        if (!data?.[itemsField]) {
+          break;
+        }
+        
         const items = data[itemsField].items || data[itemsField].list;
+        
+        if (!Array.isArray(items)) {
+          break;
+        }

         for (const d of items) {
           yield d;

           if (maxResults && ++count === maxResults) {
             return count;
           }
         }

-        hasMore = data[itemsField].page < data[itemsField].pages;
+        hasMore = (data[itemsField]?.page ?? 0) < (data[itemsField]?.pages ?? 0);

       } while (hasMore);
📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 327461c and 4f3f56c.

📒 Files selected for processing (1)
  • components/announcekit/announcekit.app.mjs
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2025-10-20T01:01:02.970Z
Learnt from: js07
Repo: PipedreamHQ/pipedream PR: 18744
File: components/slack_v2/actions/send-large-message/send-large-message.mjs:49-64
Timestamp: 2025-10-20T01:01:02.970Z
Learning: In components/slack_v2/actions/send-large-message/send-large-message.mjs, the metadata_event_payload prop is typed as string, so the code only needs to handle string-to-JSON parsing and does not need to handle object inputs.

Applied to files:

  • components/announcekit/announcekit.app.mjs
📚 Learning: 2025-08-27T17:25:10.425Z
Learnt from: jverce
Repo: PipedreamHQ/pipedream PR: 18187
File: packages/connect-react/src/utils/type-guards.ts:23-33
Timestamp: 2025-08-27T17:25:10.425Z
Learning: In the connect-react package, the isOptionWithLabel type guard intentionally restricts value types to string|number for runtime filtering purposes, even though LabelValueOption<T> allows any T. This runtime behavior should be preserved over type safety improvements.

Applied to files:

  • components/announcekit/announcekit.app.mjs
📚 Learning: 2025-09-15T22:01:11.472Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 18362
File: components/leonardo_ai/actions/generate-image/generate-image.mjs:103-105
Timestamp: 2025-09-15T22:01:11.472Z
Learning: In Pipedream components, pipedream/platform's axios implementation automatically excludes undefined values from HTTP requests, so there's no need to manually check for truthiness before including properties in request payloads.

Applied to files:

  • components/announcekit/announcekit.app.mjs
🧬 Code graph analysis (1)
components/announcekit/announcekit.app.mjs (1)
components/announcekit/sources/common/base.mjs (1)
  • items (49-49)
⏰ 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). (4)
  • GitHub Check: pnpm publish
  • GitHub Check: Lint Code Base
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Publish TypeScript components
🔇 Additional comments (3)
components/announcekit/announcekit.app.mjs (3)

1-3: LGTM!

Imports are clean and appropriate - using the Pipedream platform's axios wrapper and centralizing GraphQL queries in a separate module.


50-69: LGTM!

Base HTTP methods are well-structured with proper separation of concerns. The centralized _makeRequest pattern with axios wrapper is clean.


83-128: LGTM!

All data-fetching methods are now consistent, using GraphQL queries from the centralized queries.mjs module. The previous concern about inline query in listProjects has been addressed.

Copy link
Collaborator

@lcaresia lcaresia left a comment

Choose a reason for hiding this comment

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

LGTM!

@vunguyenhung
Copy link
Collaborator

@vunguyenhung
Copy link
Collaborator

Hi everyone, all test cases are passed! Ready for release!

Test reports

@luancazarine luancazarine merged commit 3fa375a into master Jan 5, 2026
9 checks passed
@luancazarine luancazarine deleted the 13266-components-announcekit branch January 5, 2026 17:51
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.

[Components] announcekit

4 participants