Skip to content

Commit f2bdd1f

Browse files
authored
chore(publish): Publish NPM packages in order of dependency tree (#8579)
Following up on #inc-456, this patch splits the previously universal `npm` target that took care of publishing all packages at once into multiple targets (one for each package). This will ensure that packages are published in the correct order of their sentry dependency tree (e.g. core -> browser -> react, etc..) Furthermore, this theoretically also lets us disable the release of individual packages (which we might want to do if a package was already released).
1 parent 7c51b9e commit f2bdd1f

File tree

2 files changed

+115
-3
lines changed

2 files changed

+115
-3
lines changed

.craft.yml

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,107 @@ minVersion: '0.23.1'
22
changelogPolicy: simple
33
preReleaseCommand: bash scripts/craft-pre-release.sh
44
targets:
5+
# NPM Targets
6+
## 1. Base Packages, node or browser SDKs depend on
7+
## 1.1 Types
8+
- name: npm
9+
id: "@sentry/types"
10+
includeNames: /^sentry-types-\d.*\.tgz$/
11+
## 1.2 Utils
12+
- name: npm
13+
id: "@sentry/utils"
14+
includeNames: /^sentry-utils-\d.*\.tgz$/
15+
## 1.3 Core SDK
16+
- name: npm
17+
id: "@sentry/core"
18+
includeNames: /^sentry-core-\d.*\.tgz$/
19+
## 1.4 Tracing package
20+
- name: npm
21+
id: "@sentry-internal/tracing"
22+
includeNames: /^sentry-internal-tracing-\d.*\.tgz$/
23+
## 1.5 Replay package (browser only)
24+
- name: npm
25+
id: "@sentry/replay"
26+
includeNames: /^sentry-replay-\d.*\.tgz$/
27+
28+
## 2. Browser & Node SDKs
29+
- name: npm
30+
id: "@sentry/browser"
31+
includeNames: /^sentry-browser-\d.*\.tgz$/
32+
- name: npm
33+
id: "@sentry/node"
34+
includeNames: /^sentry-node-\d.*\.tgz$/
35+
36+
## 3 Browser-based Packages
37+
- name: npm
38+
id: "@sentry/angular-ivy"
39+
includeNames: /^sentry-angular-ivy-\d.*\.tgz$/
40+
- name: npm
41+
id: "@sentry/angular"
42+
includeNames: /^sentry-angular-\d.*\.tgz$/
43+
- name: npm
44+
id: "@sentry/ember"
45+
includeNames: /^sentry-ember-\d.*\.tgz$/
46+
- name: npm
47+
id: "@sentry/react"
48+
includeNames: /^sentry-react-\d.*\.tgz$/
49+
- name: npm
50+
id: "@sentry/svelte"
51+
includeNames: /^sentry-svelte-\d.*\.tgz$/
52+
- name: npm
53+
id: "@sentry/vue"
54+
includeNames: /^sentry-vue-\d.*\.tgz$/
55+
- name: npm
56+
id: "@sentry/wasm"
57+
includeNames: /^sentry-wasm-\d.*\.tgz$/
58+
- name: npm
59+
id: "@sentry/integrations"
60+
includeNames: /^sentry-integrations-\d.*\.tgz$/
61+
62+
## 4. Node-based Packages
63+
- name: npm
64+
id: "@sentry/serverless"
65+
includeNames: /^sentry-serverless-\d.*\.tgz$/
66+
- name: npm
67+
id: "@sentry/opentelemetry-node"
68+
includeNames: /^sentry-opentelemetry-node-\d.*\.tgz$/
69+
70+
## 5. Fullstack/Meta Frameworks (depending on Node and Browser or Framework SDKs)
71+
- name: npm
72+
id: "@sentry/nextjs"
73+
includeNames: /^sentry-nextjs-\d.*\.tgz$/
74+
- name: npm
75+
id: "@sentry/remix"
76+
includeNames: /^sentry-remix-\d.*\.tgz$/
77+
- name: npm
78+
id: "@sentry/sveltekit"
79+
includeNames: /^sentry-sveltekit-\d.*\.tgz$/
80+
- name: npm
81+
id: "@sentry/gatsby"
82+
includeNames: /^sentry-gatsby-\d.*\.tgz$/
83+
84+
## 6. Other Packages
85+
## 6.1
86+
- name: npm
87+
id: "@sentry-internal/typescript"
88+
includeNames: /^sentry-internal-typescript-\d.*\.tgz$/
89+
- name: npm
90+
id: "@sentry-internal/eslint-plugin-sdk"
91+
includeNames: /^sentry-internal-eslint-plugin-sdk-\d.*\.tgz$/
92+
## 6.2
93+
- name: npm
94+
id: "@sentry-internal/eslint-config-sdk"
95+
includeNames: /^sentry-internal-eslint-config-sdk-\d.*\.tgz$/
96+
97+
## 7. Deprecated packages we still release (but no packages depend on them anymore)
98+
- name: npm
99+
id: "@sentry/hub"
100+
includeNames: /^sentry-hub-\d.*\.tgz$/
101+
- name: npm
102+
id: "@sentry/tracing"
103+
includeNames: /^sentry-tracing-\d.*\.tgz$/
104+
105+
# AWS Lambda Layer target
5106
- name: aws-lambda-layer
6107
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha)\.\d+)?\.zip$/
7108
layerName: SentryNodeServerlessSDK
@@ -14,16 +115,22 @@ targets:
14115
- nodejs16.x
15116
- nodejs18.x
16117
license: MIT
118+
119+
# CDN Bundle Target
17120
- name: gcs
121+
id: "browser-cdn-bundles"
18122
includeNames: /.*\.js.*$/
19123
bucket: sentry-js-sdk
20124
paths:
21125
- path: /{{version}}/
22126
metadata:
23127
cacheControl: 'public, max-age=31536000'
128+
129+
# Github Release Target
24130
- name: github
25131
includeNames: /^sentry-.*$/
26-
- name: npm
132+
133+
# Sentry Release Registry Target
27134
- name: registry
28135
sdks:
29136
'npm:@sentry/browser':

docs/new-sdk-release-checklist.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,13 @@ When you’re ready to make the first release, there are a couple of steps that
5858
- [ ] 1) If not yet done, be sure to remove the `private: true` property from your SDK’s `package.json`. Additionally, ensure that `"publishConfig": {"access": "public"}` is set.
5959
- [ ] 2) Make sure that the new SDK is **not added** in`[craft.yml](https://github.com/getsentry/sentry-javascript/blob/master/.craft.yml)` as a target for the **Sentry release registry**\
6060
*Once this is added, craft will try to publish an entry in the next release which does not work and caused failed release runs in the past*
61-
- [ ] 3) Make sure the new SDK is not excluded from the github & npm targets in `.craft.yml`
62-
- [ ] 4) Cut a new release (as usual, via GH release action and Craft)
61+
- [ ] 3) Add an `npm` target in `craft.yml` for the new package. Make sure to insert it in the right place, after all the Sentry dependencies of your package but before packages that depend on your new package (if applicable).
62+
```yml
63+
- name: npm
64+
id: npm:@sentry/[yourPackage]
65+
includeNames: /^sentry-[yourPackage]-\d.*\.tgz$/
66+
```
67+
- [ ] 4) Cut a new release (as usual, see [Publishing Release](https://github.com/getsentry/sentry-javascript/blob/develop/docs/publishing-a-release.md))
6368
6469
### After the Release
6570

0 commit comments

Comments
 (0)