Skip to content

Commit 77e4acd

Browse files
adrians5jclaude
andauthored
release: release 6.3 announcements (#787)
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
1 parent 7ad01bd commit 77e4acd

5 files changed

Lines changed: 108 additions & 28 deletions

File tree

.github/workflows/release-announcements.yml

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ jobs:
1313
runs-on: ubuntu-latest
1414
permissions:
1515
contents: write
16+
pull-requests: write
1617

1718
steps:
1819
- name: Extract version from branch name
@@ -43,13 +44,25 @@ jobs:
4344
CLAUDE_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
4445
run: yarn generate:announcements --version ${{ env.VERSION }}
4546

46-
- name: Commit and push announcements to master
47+
- name: Commit and push announcements to branch
4748
run: |
4849
git config user.name "webiny-bot"
4950
git config user.email "webiny-bot@webiny.com"
51+
git checkout -b release-announcements/${{ env.VERSION }}
5052
git add docs/release-notes/${{ env.VERSION }}/announcements/
5153
git commit -m "chore: add announcements for ${{ env.VERSION }}"
52-
git push origin master
54+
git push origin release-announcements/${{ env.VERSION }}
55+
56+
- name: Create PR
57+
env:
58+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
59+
run: |
60+
PR_URL=$(gh pr create \
61+
--title "chore: add announcements for ${{ env.VERSION }}" \
62+
--body "Release announcements for ${{ env.VERSION }} — please review and merge to publish." \
63+
--base master \
64+
--head release-announcements/${{ env.VERSION }})
65+
echo "PR_URL=$PR_URL" >> $GITHUB_ENV
5366
5467
- name: Send Slack announcement
5568
env:
@@ -58,28 +71,33 @@ jobs:
5871
run: |
5972
VERSION="${{ env.VERSION }}"
6073
BASE="docs/release-notes/${VERSION}/announcements"
61-
SLACK_URL="${REPO_URL}/blob/master/${BASE}/slack.md"
62-
SOCIAL_URL="${REPO_URL}/blob/master/${BASE}/social.md"
74+
ANNOUNCE_BRANCH="release-announcements/${VERSION}"
75+
SLACK_URL="${REPO_URL}/blob/${ANNOUNCE_BRANCH}/${BASE}/slack.md"
76+
SOCIAL_URL="${REPO_URL}/blob/${ANNOUNCE_BRANCH}/${BASE}/social.md"
77+
TWEETS_URL="${REPO_URL}/blob/${ANNOUNCE_BRANCH}/${BASE}/tweets.md"
78+
PR_URL="${{ env.PR_URL }}"
6379
6480
jq -n \
6581
--arg version "$VERSION" \
82+
--arg pr_url "$PR_URL" \
6683
--arg slack_url "$SLACK_URL" \
6784
--arg social_url "$SOCIAL_URL" \
85+
--arg tweets_url "$TWEETS_URL" \
6886
'{
69-
"text": ("Release " + $version + " announcements ready"),
87+
"text": ("Release " + $version + " announcements ready for review"),
7088
"blocks": [
7189
{
7290
"type": "section",
7391
"text": {
7492
"type": "mrkdwn",
75-
"text": ("*Release " + $version + " docs merged* — announcements ready :tada:")
93+
"text": ("*Release " + $version + " announcements ready* — please review and merge :eyes:")
7694
}
7795
},
7896
{
7997
"type": "section",
8098
"text": {
8199
"type": "mrkdwn",
82-
"text": ("• *Slack* — <" + $slack_url + "|view / edit>\n• *X / LinkedIn* — <" + $social_url + "|view / edit>")
100+
"text": ("• *PR* — <" + $pr_url + "|review / merge>\n• *Slack* — <" + $slack_url + "|view / edit>\n• *X / LinkedIn* — <" + $social_url + "|view / edit>\n• *Follow-up tweets* — <" + $tweets_url + "|view / edit>")
83101
}
84102
},
85103
{

docs/release-notes/6.3.0/announcements/slack.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@ Hello @channel! :wave:
22

33
Webiny 6.3.0 is out! :rocket:
44

5-
This is a big one for AI capabilities! We've introduced AI PowerUps that let you generate page content directly in the Website Builder using OpenAI or Anthropic. Plus, images uploaded to File Manager now automatically get AI-generated tags and descriptions for better searchability — all happening in the background so it doesn't slow you down.
5+
This is a big one! We're introducing AI PowerUps you can now configure OpenAI or Anthropic in your Admin settings and use AI to generate page content directly in the Website Builder. Plus, images uploaded to the File Manager automatically get AI-generated tags and descriptions for better searchability.
66

7-
On the developer side, there's a ton of goodies: a new declarative FormModel API for building admin forms, a Tasks SDK module for interacting with background tasks, a built-in encryption service, and mailer configuration now lives in your webiny.config.ts. We've also upgraded TypeScript to 6.0.3 and Storybook to v10.
7+
On the developer experience side, there's a ton of improvements. The new FormModel API gives you a declarative way to build admin forms, the SDK now includes a tasks module for managing background tasks from external apps, and we've added a built-in encryption service for handling sensitive data. TypeScript has been upgraded to 6.0.3, and there's better input validation with more descriptive errors across the board.
8+
9+
We've also reorganised the admin sidebar with a new Dev Tools section, rebuilt Page Settings using the FormModel architecture with proper extension points, and added mailer configuration directly in webiny.config.ts. Check out the changelog to learn more.
810

9-
The Admin UI got some love too — the new Dev Tools sidebar section keeps GraphQL and SDK Playground handy, and Page Settings has been completely rebuilt with the new FormModel architecture, making it much easier to extend. Check out the changelog to learn more.
1011
1112

1213
As usual, the release notes can be found on the following links:point_down::skin-tone-2::
1314
Changelog: https://www.webiny.com/docs/release-notes/6.3.0/changelog
1415
How To Upgrade: https://www.webiny.com/docs/release-notes/6.3.0/upgrade-guide
16+
1517
1618

17-
Lots of AI magic in this onenow go build something smart! :zap:
19+
Lots of exciting stuff packed into this releasecan't wait to see what you build with it! :rocket:
Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
Webiny 6.3.0 is here, and it's one of our most feature-rich releases yet 🚀
1+
Webiny 6.3.0 is here! 🚀
22

3-
This release introduces AI PowerUps, bringing intelligent content generation directly into the Website Builder. Configure OpenAI or Anthropic in your Admin settings, then use natural language prompts to generate page sections and content. The File Manager also gets smarter — uploaded images are now automatically enriched with AI-generated tags and descriptions, making your media library instantly more searchable without manual effort.
3+
This release introduces AI PowerUps — you can now connect OpenAI or Anthropic in Admin settings and generate page content directly in Website Builder using natural language prompts. Images uploaded to File Manager are automatically enriched with AI-generated tags and descriptions, making assets easier to find without manual metadata entry.
44

5-
The admin interface sees several quality-of-life improvements. A new Dev Tools sidebar section consolidates the GraphQL Playground and SDK Playground links with proper permission controls. The new DatePicker component supports everything from simple date selection to date ranges and multiple selections. Page Settings has been completely rebuilt using our new FormModel architecture, making it far easier to extend with custom settings groups and fields.
5+
For extension developers, there's a lot to dig into. The new FormModel API provides a declarative way to build admin forms with tabs, validation, computed fields, and dynamic zones. The SDK now includes a tasks module for triggering and managing background tasks from external apps, and all SDK methods validate inputs before hitting the network with descriptive error messages when something's off.
66

7-
For developers, this release brings a powerful new FormModel API for building declarative admin forms with tabs, validation, computed fields, and conditional logic. The SDK now includes a tasks module for triggering and managing background tasks from external applications. Speaking of background tasks, they can now be configured to clean up after themselves automatically. We've also added a built-in encryption service using AES-256-GCM, and the mailer now supports configuration directly in webiny.config.ts.
7+
Infrastructure and deployment also got attention — a built-in encryption service is available in the API layer, Pulumi extensions now have proper TypeScript typing, and old Pulumi plugin versions clean themselves up automatically.
88

9-
On the infrastructure side, TypeScript has been upgraded to 6.0.3, Storybook to version 10, and numerous dependency updates improve security and compatibility. The upgrade command now includes a force flag and better default logging, while old Pulumi plugin versions are automatically cleaned up to save disk space.
10-
11-
We're excited to see what you build with these new capabilities. Give 6.3.0 a try and let us know what you think.
9+
Check the full changelog and let us know what you're building with these new capabilities.
1210

1311
Changelog: https://www.webiny.com/docs/release-notes/6.3.0/changelog
1412
Upgrade guide: https://www.webiny.com/docs/release-notes/6.3.0/upgrade-guide
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
Fresh in Webiny 6.3.0 — AI PowerUps let you generate page content directly in the Website Builder using natural language prompts. Configure your OpenAI or Anthropic connection in Admin settings and let AI draft sections while you focus on the bigger picture.
2+
3+
https://www.webiny.com/docs/release-notes/6.3.0/changelog
4+
5+
---
6+
7+
Ever upload an image and immediately forget what it was? Webiny's File Manager now enriches uploads automatically — AI analyzes each image and assigns tags plus a description, all in the background. Search just got smarter. 🔍
8+
9+
https://www.webiny.com/docs/release-notes/6.3.0/changelog
10+
11+
---
12+
13+
The new Tasks SDK module opens up background task orchestration to external applications. List definitions, trigger runs, fetch logs, abort jobs — all through the SDK with full TypeScript support.
14+
15+
https://www.webiny.com/docs/release-notes/6.3.0/changelog
16+
17+
---
18+
19+
Need to encrypt sensitive values in your API extensions? Webiny 6.3.0 ships with a built-in encryption service using AES-256-GCM. Inject `Encryption` into any feature and you're set — no external dependencies required.
20+
21+
https://www.webiny.com/docs/release-notes/6.3.0/changelog

scripts/generate-announcements.ts

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,11 @@ Rules:
9191
- Do NOT add any extra sections, bullet lists, or formatting beyond what is described above.
9292
- "Webiny" is always capitalised.
9393
- Keep the whole message short — it should be readable in 30 seconds.
94+
- Do NOT mention CLI flags, upgrade command options, logging settings, or other low-level tooling
95+
details (e.g. --force flags, default logging changes). Focus on product and developer experience.
96+
- Do NOT mention low-level infrastructure internals in the highlights — no Pulumi hooks, env hooks,
97+
plugin cleanup, OpenSearch prefixing, or deployment plumbing. If infra improvements are worth
98+
mentioning at all, describe them in terms of developer benefit, not implementation details.
9499
95100
Here is a real example of the style to match:
96101
@@ -106,25 +111,58 @@ Use blank lines between paragraphs.
106111
107112
Structure:
108113
109-
- Opening hook (1–2 sentences): grab attention, announce the release. Make it feel significant.
114+
- Opening line: announce the release. 1 sentence.
110115
- Blank line
111-
- 2–4 body paragraphs: each covers a theme from the changelog. Write in a professional but warm tone.
112-
Be specific about what changed and why it matters to developers or teams using Webiny.
113-
Each paragraph 2–4 sentences.
116+
- 2–3 body paragraphs. Group changes into themes rather than listing every item. Each paragraph
117+
1–3 sentences. Be warm and specific but don't try to cover everything — pick the highlights.
114118
- Blank line
115-
- Closing paragraph: forward-looking, invite engagement (e.g. "Give it a try and let us know what you think.").
119+
- Closing line: forward-looking, invite engagement. 1 sentence.
116120
- Blank line
117121
- Links (plain text):
118122
"Changelog: https://www.webiny.com/docs/release-notes/VERSION/changelog"
119123
"Upgrade guide: https://www.webiny.com/docs/release-notes/VERSION/upgrade-guide"
120124
121125
Rules:
122126
- Replace VERSION with the actual release version number in the URLs.
123-
- Use real Unicode emoji very sparingly — at most 2 in the entire post, only in the opening or closing.
127+
- Use real Unicode emoji very sparingly — at most 1 in the entire post, only in the opening or closing.
124128
- "Webiny" is always capitalised.
125129
- Tone: professional, developer-focused, enthusiastic but not hype-y.
130+
- Keep the whole post short — roughly the same length as a Slack announcement.
126131
- Do NOT use hashtags.
127132
- Do NOT use bullet points or numbered lists anywhere.
133+
- Do NOT mention CLI flags, upgrade command options, logging settings, or low-level infrastructure
134+
details (e.g. Pulumi internals, env hooks, --force flags). Stick to product and developer experience highlights.
135+
- Do NOT end with a catch-all paragraph listing minor fixes. If there's nothing left worth highlighting
136+
at that point, stop — the closing line is enough.
137+
`.trim();
138+
139+
const FOLLOWUP_TWEETS_PROMPT = `
140+
You write follow-up tweets for Webiny releases. Webiny is an open-source serverless CMS platform.
141+
These tweets will be posted one per day in the days after the release to keep content flowing.
142+
143+
Pick 3–4 of the most interesting features or improvements from the changelog. Write one standalone
144+
tweet per feature. Each tweet must work completely on its own — no references to "yesterday's release"
145+
or numbering like "1/4".
146+
147+
Format: separate each tweet with a blank line and a "---" divider.
148+
149+
Each tweet:
150+
- 1–3 sentences. Focused on one specific thing.
151+
- Concrete and specific — name the actual feature, explain what it does or why it matters.
152+
- Vary the structure — don't make every tweet feel the same. Some can open with a question,
153+
some can frame a problem the feature solves, some can just lead with the capability.
154+
- End with the changelog link: https://www.webiny.com/docs/release-notes/VERSION/changelog
155+
- At most 1 emoji per tweet, only where genuinely fitting.
156+
157+
Rules:
158+
- Replace VERSION with the actual release version number in the URL.
159+
- "Webiny" is always capitalised.
160+
- Tone: excited but technical. Speak to developers.
161+
- Do NOT use hashtags.
162+
- Do NOT start every tweet with "Webiny" — vary the openings.
163+
- Do NOT use backticks or any code formatting — plain text only.
164+
- Do NOT mention CLI flags, upgrade command options, logging settings, or low-level infrastructure
165+
details. Focus on product and developer experience.
128166
`.trim();
129167

130168
// ---------------------------------------------------------------------------
@@ -185,19 +223,21 @@ async function main(): Promise<void> {
185223
}
186224
const client = new Anthropic({ apiKey });
187225

188-
console.log(" Generating Slack and social posts in parallel...");
226+
console.log(" Generating Slack, social, and follow-up tweets in parallel...");
189227

190-
const [slack, social] = await Promise.all([
228+
const [slack, social, tweets] = await Promise.all([
191229
generate(client, SLACK_PROMPT, changelog, version, "Slack"),
192-
generate(client, SOCIAL_PROMPT, changelog, version, "social")
230+
generate(client, SOCIAL_PROMPT, changelog, version, "social"),
231+
generate(client, FOLLOWUP_TWEETS_PROMPT, changelog, version, "follow-up tweets")
193232
]);
194233

195234
const outDir = join(process.cwd(), "docs", "release-notes", version, "announcements");
196235
mkdirSync(outDir, { recursive: true });
197236

198237
const files: Array<[string, string]> = [
199238
["slack.md", slack],
200-
["social.md", social]
239+
["social.md", social],
240+
["tweets.md", tweets]
201241
];
202242

203243
for (const [filename, content] of files) {
@@ -207,6 +247,7 @@ async function main(): Promise<void> {
207247

208248
printSection("SLACK", slack);
209249
printSection("SOCIAL (X / LinkedIn)", social);
250+
printSection("FOLLOW-UP TWEETS", tweets);
210251

211252
console.log();
212253
}

0 commit comments

Comments
 (0)