Commit 882cb43
feat: add shared Product Pulse composite action [ED-24831] (#42)
* feat: Add shared Product Pulse composite action
Centralizes the product-pulse logic (Cursor Agent generation, JSON
parsing, Slack notification) so elementor and elementor-pro can share
one implementation instead of maintaining duplicate ~300-line workflows.
Callers keep their own repo-specific product-area prompt and pass it
in via the prompt-file input.
Ref: ED-24831
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: pass GitHub Action expressions via env to prevent script injection
Move ${{ }} expressions (inputs.pr-number, github.action_path,
steps.update.outputs.*, github.event.pull_request.html_url) out of
inline run: script bodies and into env: blocks, addressing CodeQL
code-injection findings in the product-pulse action.
Ref: ED-24831
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: Unify product-pulse prompt into a shared template
Moves the ~85% of the prompt that was byte-identical between
elementor and elementor-pro (goal, decision criteria, type
classification, writing style, output format, examples, edge
cases) into prompt-template.md, owned by this action.
Callers now only supply a small product-areas-file with the three
things that genuinely differ per repo: PRODUCT_NAME, the
PRODUCT_AREAS file-path mapping, and the PRODUCT_ENUM list. A new
render-prompt.py substitutes these into the shared template before
it's handed to Cursor Agent. Replaces the prompt-file/default-product
inputs accordingly.
Ref: ED-24831
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: Drop product-area detection, just tag the caller's product name
Per-repo file-path -> product-area mapping was more granularity than
needed for a Slack pulse feed. The product field is now always the
calling repo's name (e.g. "Elementor" or "Elementor Pro"), passed as
a plain product-name input instead of a product-areas-file.
This removes the whole Product Area Detection section from the shared
prompt, drops the AI's product classification (and its validation),
and lets callers drop their per-repo areas file entirely.
Ref: ED-24831
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: Add build artifact link to Slack pulse footer
Adds a "Get build artifact link" step that looks up the most recent
successful run of the caller repo's Build workflow (build.yml) for
the PR's head SHA, resolves its uploaded artifact, and appends a
"Build Artifact" link to the Slack notification footer alongside the
PR # and Jira ticket links. Skips gracefully if no matching run or
artifact is found.
Ref: ED-24831
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: Fix Prettier formatting in product-pulse docs
Ref: ED-24831
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(setup-elementor-env): activate Elementor instead of only validating it
wp-env installs the Elementor plugin but does not reliably auto-activate
it, causing the Performance flow CI job to fail intermittently at the
"Validating elementor being activated" step. Actively activate the
plugin (idempotent) instead of just checking its state.
Cherry-picked from ED-24451 (5444eeb).
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(test-actions): bump pinned WordPress core to 7.0.1
Elementor's latest release requires WordPress 6.8+ ("Current WordPress
version (6.6) does not meet minimum requirements for Elementor"), so the
Performance flow job's plugin activation was silently failing even
though wp-env reported the plugin as active. Pin to the current stable
core (7.0.1) instead of the outdated 6.6.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>1 parent a5fe855 commit 882cb43
8 files changed
Lines changed: 651 additions & 5 deletions
File tree
- .github/workflows
- actions
- product-pulse
- scripts
- setup-elementor-env
- dist
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
0 commit comments