Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
297 commits
Select commit Hold shift + click to select a range
5ae36e3
release: 5.41.1
Bassel17 Apr 1, 2026
07c8b7b
Merge pull request #25884 from strapi/fix/inquirer-cli
Bassel17 Apr 1, 2026
b35ea93
Merge branch 'main' into develop
Bassel17 Apr 1, 2026
71552a0
chore(deps): bump @xmldom/xmldom from 0.8.6 to 0.8.12 (#25877)
dependabot[bot] Apr 1, 2026
a9afb42
RBAC "Move to stage" for review workflows (#25723)
jhoward1994 Apr 1, 2026
3d0e869
chore(deps): bump path-to-regexp from 8.2.0 to 8.4.0 (#25850)
dependabot[bot] Apr 1, 2026
42bc519
chore(deps): bump undici from 6.24.0 to 6.24.1 (#25785)
dependabot[bot] Apr 1, 2026
e49a2e4
chore(deps): bump handlebars from 4.7.7 to 4.7.9 (#25841)
dependabot[bot] Apr 1, 2026
fd2f241
chore(deps): bump yauzl from 3.2.0 to 3.2.1 (#25729)
dependabot[bot] Apr 1, 2026
64da5d2
chore(deps): bump bn.js from 4.12.0 to 4.12.3 (#25691)
dependabot[bot] Apr 1, 2026
4ca1e8a
chore(deps): bump js-yaml from 3.14.1 to 3.14.2 (#25680)
dependabot[bot] Apr 1, 2026
5999c1c
chore(deps): bump mdast-util-to-hast from 13.2.0 to 13.2.1 (#25681)
dependabot[bot] Apr 1, 2026
56713ef
chore(deps): bump path-to-regexp from 8.4.0 to 8.4.1 (#25888)
dependabot[bot] Apr 1, 2026
981e5cf
chore(deps): bump simple-git from 3.21.0 to 3.32.3 (#25704)
dependabot[bot] Apr 1, 2026
3e3a93a
chore(deps): bump file-type from 21.0.0 to 21.3.2 (#25728)
dependabot[bot] Apr 1, 2026
1ff0413
chore(deps): bump @octokit/plugin-paginate-rest from 9.2.1 to 9.2.2 (…
dependabot[bot] Apr 1, 2026
6ed962f
chore(deps): bump @octokit/request from 8.4.0 to 8.4.1 (#25694)
dependabot[bot] Apr 1, 2026
68d802c
chore(deps): bump picomatch from 2.3.1 to 2.3.2 (#25828)
dependabot[bot] Apr 1, 2026
8a31fd2
chore(deps): bump nodemailer from 8.0.1 to 8.0.4 (#25848)
dependabot[bot] Apr 1, 2026
2cc0ba2
test(cli): openapi generations (#25897)
innerdvations Apr 2, 2026
b78c5e7
fix(create-strapi-app): generate .yarnrc.yml for Yarn projects (#25869)
Bassel17 Apr 2, 2026
0d822ad
feat: changing sonar variable
cache-your-dreams Apr 2, 2026
40f9ecd
chore: sonarqube variables like in their docs
cache-your-dreams Apr 2, 2026
e26d274
test(cli): use snapshots for list output (#25898)
innerdvations Apr 2, 2026
2ea4c8c
fix(content-manager): wrap single type displayName with formatMessage…
guoyangzhen Apr 2, 2026
21402c2
feat(data-transfer): add directory export/import format (#25867)
innerdvations Apr 2, 2026
11882cb
Merge branch 'develop' into chore/changing-sonar-variable
cache-your-dreams Apr 2, 2026
ecb3299
Merge pull request #25910 from strapi/chore/changing-sonar-variable
cache-your-dreams Apr 3, 2026
e8a4d91
Merge branch 'develop' into feature/extended-ctb-api-for-plugins
boazpoolman Apr 3, 2026
dd420fd
fix(admin): p is not function error (#25663)
innerdvations Apr 3, 2026
8e11e41
docs: fix typos in documentation plugin README
Adzouz Apr 3, 2026
4ff54bf
fix: typos in documentation plugin README
Adzouz Apr 3, 2026
26d52f8
Remove yarn from Readme
pierreburgy Apr 6, 2026
abc96fc
Remove -app in npx command
pierreburgy Apr 7, 2026
eafa29c
Merge pull request #25942 from pierreburgy/readme-update
alexandrebodin Apr 7, 2026
a089e05
test: unit test transfer CLI command functionality (#25912)
jhoward1994 Apr 7, 2026
12dfbe9
chore: fix typos in comments and docs
NAM-MAN Jan 17, 2026
e9b18d2
chore: adding finnish translation to Strapi Admin (#25620)
wroxbox Apr 7, 2026
949eeba
fix: typo in Russian translation for upload button (#25946)
tonytkachenko Apr 7, 2026
9140779
chore: fix typos in comments and docs
Adzouz Apr 7, 2026
865f586
fix: fixed 9 typos, spelling errors, and duplicate words. (#25936)
yohaann196 Apr 8, 2026
e86a519
release: 5.42.0
markkaylor Apr 8, 2026
62023de
chore: update Polish language translations (#23762)
Magiczne Apr 8, 2026
7e3e065
fix: skip form onChange when markdown updates come from setValue (#25…
mathildeleg Apr 8, 2026
708acde
fix: adjust typo in test (#25960)
mathildeleg Apr 8, 2026
072ad0d
fix(tests): type errors cause build to fail which cause tests to fail
Apr 9, 2026
9b2501c
fix: update snapshot
Apr 9, 2026
f50134d
fix: increase test timeout
Apr 9, 2026
8e9563e
Merge pull request #25969 from strapi/5.42.0/fix-cli-tests
Apr 9, 2026
2554f56
Merge pull request #25957 from strapi/releases/5.42.0
Apr 9, 2026
7d6ce04
Merge branch 'main' into develop
Apr 9, 2026
3fd5f9f
feat: close button for the trial banner
cache-your-dreams Apr 9, 2026
9f7e061
fix(upload): cache busting for cross-origin images in crop (#25950)
Apr 9, 2026
2dfb271
Merge branch 'develop' into feature/button-remove-trial-banner
cache-your-dreams Apr 9, 2026
901465b
feat: adding collapse button
cache-your-dreams Apr 10, 2026
68e2049
chore(deps): bump lodash from 4.17.23 to 4.18.1 (#25919)
dependabot[bot] Apr 10, 2026
c009696
chore(deps): bump lodash-es from 4.17.23 to 4.18.1 (#25906)
dependabot[bot] Apr 10, 2026
f49a157
chore(deps): bump nodemailer from 8.0.4 to 8.0.5 (#25963)
dependabot[bot] Apr 10, 2026
a159fc5
chore(deps): bump axios from 1.13.5 to 1.15.0 (#25980)
dependabot[bot] Apr 10, 2026
5a61cef
chore(deps): bump path-to-regexp from 8.4.1 to 8.4.2 (#25901)
dependabot[bot] Apr 10, 2026
22c0e2f
Merge branch 'develop' into feature/button-remove-trial-banner
cache-your-dreams Apr 10, 2026
1799b42
fix: preserve relations in fill from another locale (#25703)
Adzouz Apr 10, 2026
9e0ee2c
fix(upload-aws-s3): trust S3 response Location URL for compatible pro…
coding-shalabh Apr 13, 2026
3f4ea04
test(cli): fix snapshot updating and replace fixed versions (#25986)
innerdvations Apr 13, 2026
d1cb08f
feat: updating design after Claude comments
cache-your-dreams Apr 13, 2026
7327ea6
Merge branch 'develop' into feature/button-remove-trial-banner
cache-your-dreams Apr 13, 2026
db2ec30
fix(core): add firstPublishedAt field to draft (#25947)
jhoward1994 Apr 13, 2026
4342013
fix(document-service): preserve relations during publish (#25909)
jhoward1994 Apr 13, 2026
f2c18e8
fix: enable save button when re-ordering components or dynamic zones …
mathildeleg Apr 13, 2026
74b523f
fix: made changes to resolve Firefox timepicker issue (#25129) (#25438)
akash-dabhi-qed Apr 13, 2026
6f0f395
chore(examples): delete config.server.url to restore port override ca…
nclsndr Apr 14, 2026
8c649cc
fix(admin): batch content manager permission checks and reuse session…
Bassel17 Apr 14, 2026
74ea15d
chore(data-transfer): isIgnoredContentType helper for filtering (#26004)
jhoward1994 Apr 14, 2026
4db57aa
fix(content-manager): blocks editor errors when image has formats: nu…
Apr 14, 2026
1508d5d
fix: date picker sends date-only format to avoid deprecation warning
kdt523 Apr 14, 2026
08a7283
chore(deps): bump undici from 6.24.1 to 6.25.0 (#26022)
dependabot[bot] Apr 15, 2026
717c387
fix(content-manager): use RBAC-aware populate in countDraftRelations …
Akash504-ai Apr 15, 2026
e339dd0
chore(deps): bump follow-redirects from 1.15.11 to 1.16.0 (#26025)
dependabot[bot] Apr 15, 2026
4e11398
fix(admin): add cursor pointer and fix click behavior on sortable tab…
Eventyret Apr 15, 2026
0be4884
fix(content-type-builder): preserve plugin CT identity in AI chat tra…
innerdvations Apr 15, 2026
7634f2a
revert(admin): drop session ability cache and keep content manager ba…
Bassel17 Apr 15, 2026
4709832
release: 5.42.1
jhoward1994 Apr 15, 2026
f57a81a
fix: bulk publish validation on required components in dz (#25687)
Adzouz Apr 15, 2026
e1e957d
Merge pull request #26029 from strapi/releases/5.42.1
jhoward1994 Apr 15, 2026
520ecfc
fix: build errors
innerdvations Apr 15, 2026
7c53325
enhancement: strapi dev continue watching on build error (#25514)
Bellian Apr 15, 2026
5e82038
fix: use admin basename for 401 redirect path (#25458)
veeceey Apr 16, 2026
9e54504
fix(admin): eliminate several browser race conditions (#26020)
innerdvations Apr 16, 2026
bfcef19
enhancement: add list & delete admin user cli commands (#23022)
derrickmehaffy Apr 16, 2026
399f2a8
Merge pull request #26041 from strapi/main
jhoward1994 Apr 16, 2026
bc0b0e9
feat(core/*): introduce strapi.ai namespace (#25886)
nclsndr Apr 17, 2026
7f17643
fix(upload): content-api does not return signed urls (#26034)
Apr 17, 2026
9a95947
feat:Improve the Chinese (Simplified) translation of the content-type…
JsonLYH Apr 17, 2026
3889b10
fix(upload-aws-s3): support root-level credentials and update AWS SDK…
Schero94 Apr 17, 2026
867a6dd
fix(content-manager): don't allow locale to overwrite list view setti…
mvo-zyres Apr 17, 2026
7ec0f66
fix: auth providers generate unique username on conflict (#23853)
ndinevski Apr 17, 2026
b884809
fix(content-manager): render ID column without number grouping (#25996)
itsmejay80 Apr 17, 2026
7b6dcbf
fix(content-manager): apply i18n translations to dynamic zone compone…
Eventyret Apr 17, 2026
0c912f0
feat(i18n): complete Dutch (nl) translations for admin panel (#25932)
janwillemkeizer Apr 20, 2026
3fff574
Merge remote-tracking branch 'origin/develop' into feature/extended-c…
jhoward1994 Apr 20, 2026
f2b6c2b
fix: enforce minimum length
jhoward1994 Apr 20, 2026
43c03c0
fix: webpack public path was missing a slash at the end (#22654)
axe312ger Apr 20, 2026
bac520e
fix(data-transfer): fix large transfer crashes; show transfer progres…
innerdvations Apr 20, 2026
5af9d07
fix: handle potential null userPermissions in Protect component (#24444)
Callm3thebreeze Apr 20, 2026
e94abcb
test(e2e): fixes for race conditions and file resets (#26019)
innerdvations Apr 20, 2026
ff000af
enhancement(data-transfer): improve progress UX (#25921)
innerdvations Apr 20, 2026
6722bec
security: upgrade to axios 1.15.1 (#26072)
innerdvations Apr 20, 2026
f4857d5
chore: update main README content (#25618)
PaulBratslavsky Apr 21, 2026
eeac518
fix: add responseType to getFetchClient for non-JSON responses (#25974)
Adzouz Apr 21, 2026
030ca00
enhancement: add ESM syntax support for Vite .mts config file (#25238)
leon-win Apr 21, 2026
e66251a
fix(i18n): preserve non-localized media when creating a locale (#26031)
Bassel17 Apr 21, 2026
df2c928
feat: deploy to cloud homepage widget (#25774)
cache-your-dreams Apr 21, 2026
f81ca93
fix(content-manager): prevent duplicate React key in homepage recent-…
derrickmehaffy Apr 22, 2026
460ab0f
chore(scripts/release): fix experimental peer dependencies install (#…
nclsndr Apr 22, 2026
601154b
fix(content-manager): optimize document layout hooks (#26005)
jhoward1994 Apr 22, 2026
1462898
release: 5.43.0
nclsndr Apr 22, 2026
104969f
fix(document-service): support delete selection params (#25097)
laurenskling Apr 23, 2026
deafc2d
Fix drag-and-drop preview in dynamic zones (#25123)
Rowan-Paul Apr 23, 2026
ae80616
release: 5.43.0
nclsndr Apr 23, 2026
c01c775
docs: add AGENTS.md universal agent guide (#26018)
butcherZ Apr 23, 2026
d8c286c
fix(types): align Service.Generic index signature with Controller.Gen…
ayhid Apr 23, 2026
ab7d9c3
fix(document-service): preserve self-referential relations during pub…
butcherZ Apr 23, 2026
7c3fcff
fix: prevent browser defaults for Ctrl+I and other modifier shortcuts…
akash-dabhi-qed Apr 23, 2026
e95b505
fix(openapi): documentation plugin generates OpenAPI with incorrect I…
otociulis Apr 23, 2026
7f7c1c3
fix(database): make 5.0.0-02-created-document-id migration idempotent…
butcherZ Apr 24, 2026
4ccaab3
enhancement(translations): update czech translations (#25824)
fonodi Apr 24, 2026
62a6230
test: relations available status (#26051)
jhoward1994 Apr 24, 2026
6e10c0c
enhancement(i18n): improve Russian translations of tours section in a…
leon-win Apr 24, 2026
ac6cd00
chore(deps): bump multiple dependencies (#26103)
innerdvations Apr 24, 2026
765bd19
Merge branch 'develop' of github.com:strapi/strapi
nclsndr Apr 24, 2026
f36d919
fix(review-workflows): pass locale params to useDocument in StageSele…
bolg55 Apr 24, 2026
f78edc3
chore: release v5.43.0 update develop (#26100)
nclsndr Apr 24, 2026
416f2f1
chore: upgrade contributor docs dependencies (#26073)
innerdvations Apr 27, 2026
d66f95a
chore(deps): bump @xmldom/xmldom from 0.8.12 to 0.8.13 (#26098)
dependabot[bot] Apr 27, 2026
19fef31
chore(examples): migration performance benchmark harness + mariadb/sq…
derrickmehaffy Apr 27, 2026
fed8b43
chore(deps): bump and dedupe pinned subdeps (#26139)
innerdvations Apr 28, 2026
4d3719a
fix: contain absolute descendants in OverflowingItem (#26133)
akash-dabhi-qed Apr 28, 2026
e004e48
Merge remote-tracking branch 'origin' into feature/button-remove-tria…
cache-your-dreams Apr 28, 2026
c5396f1
fix: making button float better
cache-your-dreams Apr 28, 2026
5949886
fix: using isValid & adding translations
cache-your-dreams Apr 28, 2026
f7d4979
fix(content-manager): prevent crash on detached DZ component (#26148)
Adzouz Apr 29, 2026
403491d
fix(upload): sharp concurrency and cache leads to OOM (#26046)
Apr 29, 2026
a33f5f5
fix(document-service): discard-draft 500 on self-referential manyToMa…
butcherZ Apr 29, 2026
9413a06
Merge pull request #25447 from strapi/feature/extended-ctb-api-for-pl…
boazpoolman Apr 29, 2026
11554fe
release: 5.44.0
Adzouz Apr 29, 2026
2933c69
chore: stop tracking vscode settings (#26160)
innerdvations Apr 29, 2026
52b8fd9
feat(admin): api token supports admin permissions and admin user owne…
nclsndr Apr 29, 2026
cd710a1
ci: do not fail fast on api or cli tests (#26159)
innerdvations Apr 29, 2026
36b6d68
fix: prevent trailing ? in URL when params is empty object (#25724) (…
guoyangzhen Apr 30, 2026
c45dc92
CI: reduce stale issue threshold from 1 year to 90 days (#26158)
oiorain Apr 30, 2026
a881d63
chore: release 5.44.0
Adzouz Apr 30, 2026
ec72af9
Fix polymorphic relations in the document service API (#26099)
boazpoolman Apr 30, 2026
8156393
Merge pull request #26170 from strapi/main
Adzouz Apr 30, 2026
fa62991
feat(content-manager): add Zod 4 foundation utilities (#25574)
butcherZ Apr 30, 2026
90623ba
fix(admin): clean up lazy component registration warnings (#25015)
unrevised6419 Apr 30, 2026
036b2c9
chore(ci): send Slack notification when `flag: documentation` label i…
pwizla Apr 30, 2026
9d5a027
fix(review-workflows): implement incremental loading in assignee drop…
nielskaspers Apr 30, 2026
63276b5
fix(admin): type addMenuLink with optional Component for menu-only li…
innerdvations May 4, 2026
86fe764
feat: sort based on publish status (#25689)
dominik-juriga May 4, 2026
b9b8f46
ci: documentation label is no longer blocking (#26200)
innerdvations May 4, 2026
72535fb
fix(database): run cleanOrderColumns updates sequentially (#26134)
innerdvations May 4, 2026
7405122
fix(database): run cleanOrderColumns updates sequentially (#26134)
innerdvations May 4, 2026
8a09307
test(e2e): fix race conditions with drag methods for each browser (#2…
innerdvations May 5, 2026
2c551d4
fix: auto-expand and scroll to newly added dynamic zone components (#…
ace2016 May 5, 2026
7efe492
fix(graphql): isolate root query args per root field (#26178)
cdreier May 5, 2026
559b9b2
chore(security): mark Strapi v4 as End of Life (#26162)
derrickmehaffy May 5, 2026
f7f56e5
fix(core/core): validation uses injected strapi instance (#26211)
nclsndr May 5, 2026
5e0d243
fix: dynamically update rate limit prefix key based on route (#24818)
derrickmehaffy May 5, 2026
0fc5e76
CI: add community-pr-triage action with Linear and Notion reporting (…
butcherZ May 5, 2026
98cb7ee
fix(test): check button attribute differently (#26212)
mathildeleg May 6, 2026
4ec512c
fix: keep draft link on x-to-one relations non-dp to dp (#26179)
jhoward1994 May 6, 2026
c5bc749
release: 5.45.0
Bassel17 May 6, 2026
7365717
Merge branch 'main' into develop
Bassel17 May 6, 2026
2bdd213
feat(content-manager): add possibility to customize blocks (#22063)
alanzdr May 6, 2026
50b2d9f
fix: long component names overflow in dynamic zone picker (#26010)
ddoemonn May 6, 2026
2cc824d
ci: remove build steps from community-label workflow (#26225)
butcherZ May 6, 2026
caeb3ec
ci: bundle all deps into dist so no npm install needed at runtime (#2…
butcherZ May 6, 2026
f04fe97
feat: getting that button to stick while the banner doesn't
cache-your-dreams May 6, 2026
97af864
chore(deps): bump eslint-plugin-react (#26227)
nclsndr May 7, 2026
e696d94
chore: adding translations for the banner
cache-your-dreams May 7, 2026
49951e0
Merge branch 'develop' into feature/button-remove-trial-banner
cache-your-dreams May 7, 2026
45a8e3b
fix(admin): resolve prism is not defined (#25660)
innerdvations May 7, 2026
e907cd1
fix(database): morph typeField wins over same-name fields in populate…
innerdvations May 7, 2026
4002cdf
fix(content-manager): local-storage was not updated if filters were r…
mathildeleg May 7, 2026
216344e
Merge branch 'develop' into feature/button-remove-trial-banner
cache-your-dreams May 7, 2026
d9c1909
feat(email): replace sendmail package with nodemailer in provider (#2…
innerdvations May 8, 2026
7544ed7
fix(utils): throw ValidationError for all invalid query params (not j…
guoyangzhen May 8, 2026
2c48df2
fix(db): deterministic schema hash by sorting tables before hashing (…
Baldinof May 8, 2026
7f4c68c
fix(admin): handle 204 no-content response in fetch client (#25416)
Eventyret May 8, 2026
81420a4
fix(content-manager): skip draft/modified count queries for non-D&P c…
nicosh May 11, 2026
6b4be41
chore(ai): ignore .agents/local-skills and .agents/local-state for lo…
nclsndr May 11, 2026
6d83054
chore(deps): migrate msw 1.x → 2.13.4 across admin test suites (#26065)
unrevised6419 May 11, 2026
2f7d43a
feat: add preview support to images and videos (#25216)
remidej May 11, 2026
4c7cd56
chore(.github): bump CI runners to node 24 (#26231)
nclsndr May 11, 2026
b1e385a
chore(deps): upgrade typedoc to 0.28.19 and related plugins (#26082)
unrevised6419 May 11, 2026
c3775e5
chore: turkish translations for cloud (#26223)
jhoward1994 May 11, 2026
5dd2e73
[admin]key for select component and add missing translations (#26226)
jhoward1994 May 11, 2026
c9db132
hotfix: prevent single-type switch crashes and refresh schema after C…
jhoward1994 May 11, 2026
9300041
release: 5.45.1
jhoward1994 May 11, 2026
c06b10c
chore(upload): add concurrentUploadSize config (#26053)
May 11, 2026
0edbf57
Merge branch 'develop' into feature/button-remove-trial-banner
cache-your-dreams May 11, 2026
59b8fc1
Merge pull request #26278 from strapi/releases/5.45.1
jhoward1994 May 11, 2026
0f82aa1
Merge pull request #25972 from strapi/feature/button-remove-trial-banner
cache-your-dreams May 11, 2026
bdb24ff
fix(database): append primary key to ORDER BY for paginated selects (…
innerdvations May 11, 2026
a2c5ecb
Merge remote-tracking branch 'origin/main' into develop
jhoward1994 May 11, 2026
e875c44
fix: remove await from several telemetry calls to prevent blocking (#…
derrickmehaffy May 11, 2026
b5452ab
chore(eslint): migrate .eslintrc + .eslintignore to .eslintrc.cjs (#2…
unrevised6419 May 12, 2026
cad5c69
fix(review-workflows): add assignee and review stage to list view fil…
Adzouz May 12, 2026
50732df
fix: FK violation publishing self-relation parent & child in one rele…
garrettheaver May 12, 2026
d549037
ci: fix community PR report workflow (#26283)
butcherZ May 12, 2026
8f00fa4
fix(review-workflows): message when single stage (#26229)
Adzouz May 12, 2026
4648a4c
fix(upgrade): use pnpm install when project prefers pnpm (#26246)
innerdvations May 12, 2026
88f57e6
fix(admin): remove year 2041 limit on date/datetime pickers (#26209)
MaksZhukov May 12, 2026
51cec0d
chore(deps): bump ip-address from 10.1.0 to 10.2.0 (#26222)
dependabot[bot] May 12, 2026
c3d9dae
fix(core/admin): admin and content api tokens retro-compatibility (#2…
nclsndr May 13, 2026
7b36fd6
ci: drop explicit triage state lookup and bump checkout to v6 (#26319)
butcherZ May 13, 2026
7f34c4b
release: 5.46.0
markkaylor May 13, 2026
e73ff0d
fix(content-manager): fix getMainField context for component list/edi…
innerdvations May 13, 2026
7023d6b
Merge pull request #26323 from strapi/releases/5.46.0
May 13, 2026
83fec11
Merge remote-tracking branch 'origin/main' into develop
May 13, 2026
8724ba2
ci: add linear-triage-state-id input with name/type fallback (#26325)
butcherZ May 13, 2026
e73364c
fix(upgrade): align scoped @strapi packages in devDependencies (#26248)
innerdvations May 14, 2026
0e843cb
chore(deps): bump @protobufjs/utf8 from 1.1.0 to 1.1.1 (#26311)
dependabot[bot] May 14, 2026
49b96fc
chore(deps): bump axios from 1.15.1 to 1.15.2 (#26177)
dependabot[bot] May 14, 2026
2176b68
chore(deps): bump fast-xml-builder from 1.1.4 to 1.2.0 (#26253)
dependabot[bot] May 14, 2026
6af0c9c
chore(deps): bump fast-uri from 3.0.1 to 3.1.2 (#26254)
dependabot[bot] May 14, 2026
ea813b4
fix(migrations): guard inverseJoinColumn access in discard-drafts mig…
jmichalec-vl May 14, 2026
d9d5ff8
fix(graphql): inherit publication state for i18n localizations (#22163)
cavemon May 14, 2026
1a0cb07
Merge pull request #26242 from strapi/fix/cms-941-rw-select
jhoward1994 May 14, 2026
6ed22b5
security(deps): upgrade multiple dependencies (#26326)
innerdvations May 15, 2026
2982f64
fix: move session-manager jwt check from register to bootstrap (#25412)
Eventyret May 15, 2026
4d412c3
chore: sonarcloud security review (#25949)
cache-your-dreams May 18, 2026
f9c6a23
fix(database): respect nested sort in populate for join-table relatio…
innerdvations May 18, 2026
334ab1f
ci: add needs-qa checklist automation (#26321)
Bassel17 May 18, 2026
df91d08
fix(admin): gate expiresIn deprecation on user auth options (#26298)
singhvishalkr May 18, 2026
59f37e1
chore(examples): remove sdk-plugin from todo-example plugin (#26341)
innerdvations May 18, 2026
39b0713
chore(deps): bump simple-git from 3.32.3 to 3.36.0 (#26220)
dependabot[bot] May 19, 2026
c97abbd
chore(deps): bump sanitize-html from 2.13.0 to 2.17.4 (#26342)
dependabot[bot] May 19, 2026
3c3a923
chore(deps): bump ws from 8.17.1 to 8.20.1 in @strapi/data-transfer (…
innerdvations May 19, 2026
56d7a64
fix(admin): redirect active tab to login on session expiry (#26165)
derrickmehaffy May 19, 2026
ad4a0f0
chore: dedupe yarn.lock file (#26376)
innerdvations May 19, 2026
04ac8c3
release: 5.46.1
Bassel17 May 20, 2026
c579537
Merge branch 'main' into develop
Bassel17 May 20, 2026
2caeaf5
fix(core/core): codeBlockValidator uses language instead of syntax (#…
nclsndr May 20, 2026
05ff01d
feat: publicationFilter param in REST and document service (#25793)
innerdvations May 21, 2026
90c2775
fix(graphql): inherit publicationFilter into populated relations (#26…
innerdvations May 21, 2026
45d7798
chore(strapi): upgrade webpack ecosystem dependencies (#26385)
innerdvations May 21, 2026
1b37af9
enhancement(db): migration performance improvements (#25988)
bartsmartshore May 21, 2026
ebba42a
feat(admin-tokens): remove adminTokens future flag (#26391)
nclsndr May 21, 2026
fd8b901
chore(deps): update Browserslist db
actions-user Jun 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 0 additions & 3 deletions .github/actions/check-pr-status/.eslintignore

This file was deleted.

14 changes: 14 additions & 0 deletions .github/actions/check-pr-status/.eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// @ts-check

/** @type {import('eslint').Linter.Config} */
const config = {
root: true,
extends: ['eslint-config-custom/back'],
ignorePatterns: [
'node_modules/',
'.eslintrc.cjs',
'dist/',
],
};

module.exports = config;
4 changes: 0 additions & 4 deletions .github/actions/check-pr-status/.eslintrc.js

This file was deleted.

47 changes: 47 additions & 0 deletions .github/actions/check-pr-status/__tests__/action.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,53 @@ test.each(action.BLOCKING_LABELS)('Test blocking labels %s', async (label) => {
setFailed.mockRestore();
});

test('Test needs-qa blocks PR without QA completion label', async () => {
github.context = {
payload: {
pull_request: {
labels: [{ name: 'needs-qa' }, { name: 'pr: enhancement' }, { name: 'source: core' }],
},
},
};

const setFailed = jest.spyOn(core, 'setFailed');

await action();

expect(setFailed).toHaveBeenCalled();
expect(setFailed.mock.calls[0][0]).toBe(
`The PR has been labelled with 'needs-qa' and must be resolved with one of: qa-done, qa-skipped.`
);

setFailed.mockRestore();
});

test.each(action.QA_COMPLETION_LABELS)('Test needs-qa allows PR with %s label', async (label) => {
github.context = {
payload: {
pull_request: {
base: {
ref: 'main',
},
labels: [
{ name: 'needs-qa' },
{ name: label },
{ name: 'pr: enhancement' },
{ name: 'source: core' },
],
},
},
};

const setFailed = jest.spyOn(core, 'setFailed');

await action();

expect(setFailed).not.toHaveBeenCalled();

setFailed.mockRestore();
});

test('Test missing source label', async () => {
github.context = {
payload: {
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/check-pr-status/action.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: 'PR Checker'
description: 'Check PR status for mergeability'
runs:
using: 'node20'
using: 'node24'
main: 'dist/index.js'
8 changes: 5 additions & 3 deletions .github/actions/check-pr-status/dist/index.js

Large diffs are not rendered by default.

20 changes: 19 additions & 1 deletion .github/actions/check-pr-status/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
const core = require('@actions/core');
const github = require('@actions/github');

const BLOCKING_LABELS = [`flag: 💥 Breaking change`, `flag: don't merge`, `flag: documentation`];
const BLOCKING_LABELS = [`flag: 💥 Breaking change`, `flag: don't merge`];
const QA_REQUIRED_LABEL = 'needs-qa';
const QA_COMPLETION_LABELS = ['qa-done', 'qa-skipped'];

async function main() {
try {
Expand All @@ -21,6 +23,20 @@ async function main() {
return;
}

const labelNames = labels.map((label) => label.name);
const needsQa = labelNames.includes(QA_REQUIRED_LABEL);
const hasQaResolution = QA_COMPLETION_LABELS.some((label) => labelNames.includes(label));

if (needsQa === true && hasQaResolution === false) {
core.setFailed(
`The PR has been labelled with '${QA_REQUIRED_LABEL}' and must be resolved with one of: ${QA_COMPLETION_LABELS.join(
', '
)}.`
);

return;
}

const sourceLabelCount = labels.filter((label) => label.name.startsWith('source: ')).length;
const issueLabelCount = labels.filter((label) => label.name.startsWith('pr: ')).length;

Expand All @@ -46,6 +62,8 @@ async function main() {
}

main.BLOCKING_LABELS = BLOCKING_LABELS;
main.QA_REQUIRED_LABEL = QA_REQUIRED_LABEL;
main.QA_COMPLETION_LABELS = QA_COMPLETION_LABELS;

if (require.main === module) {
main();
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/check-pr-status/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "check-pr-status",
"version": "5.40.0",
"version": "5.46.1",
"private": true,
"license": "MIT",
"main": "dist/index.js",
Expand Down
3 changes: 3 additions & 0 deletions .github/actions/community-pr-triage/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules/
.env
!dist
117 changes: 117 additions & 0 deletions .github/actions/community-pr-triage/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# Community PR Triage

A GitHub Action that automatically syncs community PRs from [strapi/strapi](https://github.com/strapi/strapi) to [Linear](https://linear.app) and generates weekly reports.

## How it works

```mermaid
flowchart LR
subgraph Triggers
A0[PR opened by\nnon-member] -->|community-label.yml| A
A[PR labeled\n'community'] -->|community-label.yml| B
A2[PR labeled\n'waiting on author'] -->|community-label.yml| WA
C[Monday 9am UTC\nor manual dispatch] -->|community-pr-report.yml| D
end

subgraph sync-pr mode
B[Fetch PR + files] --> E{Ticket\nexists?}
E -->|No| F[Create CPR-NNN\nin Linear]
E -->|Yes| G[Update labels\n+ description]
F --> H[Post GitHub comment\nCPR-NNN]
F --> I[Append 'Fixes CPR-NNN'\nto PR body]
I -.->|on merge| J[Linear auto-closes\nvia GH integration]

WA[Find Linear ticket] --> WA2[Set status:\nWaiting on Author]
end

subgraph weekly-report mode
D --> M0[Maintenance pass]
M0 -->|waiting on author\n> 14 days| M1[Switch to stale\non GitHub + Linear]
M1 -->|stale > 14 days| M2[Close PR\nMark Linear ticket Done]
D --> K[Fetch all open\ncommunity PRs]
K --> L[Analyze: quick wins,\nareas, stale PRs]
L --> M[Refresh labels\non all tickets]
M --> N[Post Linear\nproject update]
M -->|cron or Notion mode| O[Create Notion\nreport page]
end
```

## Modes

| Mode | Trigger | Output |
| --------------- | -------------------------------------- | -------------------------------------------------------- |
| `sync-pr` | PR labeled `community` | Linear ticket, GitHub comment, PR body append |
| `sync-pr` | PR labeled `waiting on author` | Linear ticket status → "Waiting on Author" |
| `weekly-report` | Cron Monday 9am (+ Notion) | Maintenance pass + Linear project update + Notion report |
| `weekly-report` | Manual `weekly-report` dispatch | Maintenance pass + Linear project update only |
| `weekly-report` | Manual `weekly-report-notion` dispatch | Maintenance pass + Linear update + Notion report |
| `notion-report` | Manual `notion-report` dispatch | Notion report page only |

## Signals

The action applies three objective signals — no heuristic scoring:

| Signal | Label | Condition |
| --------- | ---------------------- | ------------------------------------------------- |
| Quick win | `quick-win` | ≤ 100 lines changed and ≤ 5 files |
| Stale | `stale` | No GitHub activity for > 30 days |
| Area | e.g. `content-manager` | From `source:` GitHub label or changed file paths |

Labels are refreshed on all open tickets each weekly run so they stay accurate as PRs age.

## Waiting on author pipeline

When a PR needs a response from the contributor:

1. Manually add the `waiting on author` GitHub label
2. Linear ticket status is immediately set to **Waiting on Author**
3. After **14 days** with no response → label switches to `stale`, Linear status reverts to **Todo**
4. After **14 more days** stale → PR is closed, Linear ticket is marked **Done**

Only PRs that went through this pipeline are auto-closed. Activity-based stale PRs (flagged by the 30-day inactivity check) are not affected.

## Workflows

**`community-label.yml`** — has two jobs:

- `label`: fires when a PR is **opened** targeting the default branch. Automatically adds the `community` label if the author is not an org member/owner/contributor (bots are skipped).
- `triage`: fires when `community` or `waiting on author` is applied to a PR. Runs `sync-pr` mode accordingly.

**`community-pr-report.yml`** — runs every Monday at 9am UTC with Notion enabled. Manual dispatch supports three options: `weekly-report` (Linear only), `weekly-report-notion` (Linear + Notion), `notion-report` (Notion only).

## Secrets

| Secret | Notes |
| -------------------- | -------------------------------------------------- |
| `LINEAR_API_KEY` | Personal API key |
| `LINEAR_CPR_TEAM_ID` | CMS-Community-PRs team (triage tickets live here) |
| `LINEAR_CMS_TEAM_ID` | CMS team (used to detect which PRs were picked up) |
| `LINEAR_PROJECT_ID` | Project that receives weekly update posts |
| `NOTION_API_KEY` | Integration token |
| `NOTION_DATABASE_ID` | Target database for report pages |

`GITHUB_TOKEN` is provided automatically by GitHub Actions.

## Action structure

```
.github/actions/community-pr-triage/
├── action.yml # Input definitions
├── package.json
├── tsconfig.json
├── tsup.config.ts
├── src/
│ ├── index.ts # Entry point — routes by mode
│ ├── modes/
│ │ ├── sync-pr.ts
│ │ ├── weekly-report.ts # includes maintenance pass
│ │ └── notion-report.ts
│ └── lib/
│ ├── github.ts # Octokit wrapper
│ ├── linear.ts # Linear SDK wrapper
│ ├── notion.ts # Notion client
│ ├── analyzer.ts # quick-win / area / stale detection
│ └── types.ts
└── dist/
└── index.cjs # Compiled bundle (committed)
```
42 changes: 42 additions & 0 deletions .github/actions/community-pr-triage/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: 'Community PR Triage'
description: 'Sync community PRs to Linear and generate reports'
inputs:
mode:
description: 'sync-pr | sync-all | linear-weekly-report | notion-report'
required: true
pr-number:
description: 'PR number (sync-pr mode only)'
required: false
trigger-label:
description: 'Label that triggered sync-pr (e.g. "community")'
required: false
github-token:
required: true
linear-api-key:
required: true
linear-cpr-team-id:
required: true
linear-cms-team-id:
required: true
linear-project-id:
required: true
linear-triage-view-url:
description: 'Hardcoded URL to CPR triage view in Linear'
required: false
linear-labels:
description: 'JSON map of label name → ID (skips team labels API call)'
required: false
linear-triage-state-id:
description: 'Linear workflow state ID to assign on ticket creation (falls back to name/type lookup)'
required: false
post-to-notion:
description: 'Also post to Notion when running weekly-report (true/false)'
required: false
default: 'false'
notion-api-key:
required: false
notion-database-id:
required: false
runs:
using: 'node24'
main: 'dist/index.cjs'
Loading