Skip to content

Commit 4e02d62

Browse files
authored
refactor: handle GitLab API error cause details for tracing (#158)
1 parent 3826317 commit 4e02d62

File tree

4 files changed

+97
-41
lines changed

4 files changed

+97
-41
lines changed

.changeset/silent-cameras-explain.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"changesets-gitlab": patch
3+
---
4+
5+
refactor: handle GitLab API error cause details for tracing

package.json

+6-5
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,19 @@
6565
"unified": "^11.0.4"
6666
},
6767
"devDependencies": {
68-
"@1stg/lib-config": "^12.0.0",
68+
"@1stg/lib-config": "^12.0.1",
6969
"@changesets/changelog-github": "^0.4.8",
7070
"@changesets/cli": "^2.26.2",
7171
"@types/global-agent": "^2.1.3",
72-
"@types/jest": "^29.5.8",
72+
"@types/jest": "^29.5.11",
7373
"@types/js-yaml": "^4.0.9",
74-
"@types/micromatch": "^4.0.5",
74+
"@types/micromatch": "^4.0.6",
75+
"@types/web": "^0.0.128",
7576
"jest": "^29.7.0",
7677
"ts-jest": "^29.1.1",
77-
"ts-node": "^10.9.1",
78+
"ts-node": "^10.9.2",
7879
"type-coverage": "^2.27.0",
79-
"typescript": "^5.2.2",
80+
"typescript": "^5.3.3",
8081
"yarn-deduplicate": "^6.0.2"
8182
},
8283
"jest": {

src/comment.ts

+46-1
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,36 @@ const hasChangesetBeenAdded = async (
208208
})
209209
}
210210

211+
/**
212+
* @see https://github.com/jdalrymple/gitbeaker/blob/52ef0e622de304d98afb811f4937560edefd8889/packages/rest/src/Requester.ts#L79-L86
213+
*/
214+
export interface GitLabAPIError extends Error {
215+
cause: {
216+
description: string
217+
request: Request
218+
response: Response
219+
}
220+
}
221+
222+
const GITLAB_API_ERROR_CAUSE_KEYS = new Set([
223+
'description',
224+
'request',
225+
'response',
226+
])
227+
228+
// eslint-disable-next-line @typescript-eslint/unbound-method
229+
const { toString } = Object.prototype
230+
231+
const isError = (value: unknown): value is Error =>
232+
toString.call(value) === '[object Error]'
233+
234+
const isGitLabAPIError = (error: unknown): error is GitLabAPIError =>
235+
isError(error) &&
236+
!!error.cause &&
237+
typeof error.cause === 'object' &&
238+
Object.keys(error.cause).every(key => GITLAB_API_ERROR_CAUSE_KEYS.has(key))
239+
240+
// eslint-disable-next-line sonarjs/cognitive-complexity
211241
export const comment = async () => {
212242
const mrBranch = env.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
213243
if (!mrBranch) {
@@ -320,7 +350,22 @@ export const comment = async () => {
320350
}
321351
}
322352
} catch (err: unknown) {
323-
console.error(err)
353+
if (isGitLabAPIError(err)) {
354+
const {
355+
cause: { description, request, response },
356+
} = err
357+
console.error(description)
358+
try {
359+
console.error('request:', await request.text())
360+
} catch {
361+
console.error("The error's request could not be used as plain text")
362+
}
363+
try {
364+
console.error('response:', await response.text())
365+
} catch {
366+
console.error("The error's response could not be used as plain text")
367+
}
368+
}
324369
throw err
325370
}
326371
}

yarn.lock

+40-35
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,20 @@
3535
"@commitlint/config-lerna-scopes" "^17.0.2"
3636
"@pkgr/utils" "^2.3.1"
3737

38-
"@1stg/common-config@^9.0.0":
39-
version "9.0.0"
40-
resolved "https://registry.yarnpkg.com/@1stg/common-config/-/common-config-9.0.0.tgz#7755fb2b47f7e5020c7a65944aaaca4a02bba8a4"
41-
integrity sha512-4eObSMl7h7ZJZeat82SQykv4H38QVp38kB/nxZyIwRWhBptHpXvEIA62AQ5pear/+qJkQ6blq78X86lgbh90dg==
38+
"@1stg/common-config@^9.0.1":
39+
version "9.0.1"
40+
resolved "https://registry.yarnpkg.com/@1stg/common-config/-/common-config-9.0.1.tgz#6398ee154a277ef52193ffd9e2671b14a8ed18fc"
41+
integrity sha512-XEAcqqjQyRcDyqYXRLgPLs12Vi6sLqQMjkgewJo3awXVUuFgJD2ppHdSjS9AlBujsf9XwYeEBBWAk2CJUVmD2Q==
4242
dependencies:
4343
"@1stg/babel-preset" "^3.2.3"
4444
"@1stg/commitlint-config" "^3.2.0"
45-
"@1stg/eslint-config" "^7.0.0"
45+
"@1stg/eslint-config" "^7.0.1"
4646
"@1stg/lint-staged" "^3.4.1"
4747
"@1stg/markuplint-config" "^3.0.1"
4848
"@1stg/prettier-config" "^3.9.2"
4949
"@1stg/remark-preset" "^2.0.0"
5050
"@1stg/simple-git-hooks" "^0.2.3"
51-
"@1stg/tsconfig" "^2.3.2"
51+
"@1stg/tsconfig" "^2.3.3"
5252
"@babel/core" "^7.22.5"
5353
"@commitlint/cli" "^17.6.5"
5454
eslint "^8.43.0"
@@ -63,10 +63,10 @@
6363
resolved "https://registry.yarnpkg.com/@1stg/config/-/config-0.2.1.tgz#12d35ff8e243bd4b35b55c2f244cd5cbfea844d4"
6464
integrity sha512-fStBgzyQnL0/bdIcHCplmrjFN9SBfnkldQ+TnpKnBFmp7jIxoggSRL3kaEFbGlq2lbV/H7Udy3bmJWTtdDH5Iw==
6565

66-
"@1stg/eslint-config@^7.0.0":
67-
version "7.0.0"
68-
resolved "https://registry.yarnpkg.com/@1stg/eslint-config/-/eslint-config-7.0.0.tgz#986eb594bc3cb6957cbb30e2a1ebddfda071b472"
69-
integrity sha512-J1+0FbTvZK2CB/JokzP/D37GhAtJi42yAJep1wBw213QdDhktI2iV7VmwKvoPlLL8CB8JwF955UFKusG9lC7tA==
66+
"@1stg/eslint-config@^7.0.1":
67+
version "7.0.1"
68+
resolved "https://registry.yarnpkg.com/@1stg/eslint-config/-/eslint-config-7.0.1.tgz#3e814033ce327ef59205b068fc353cfcfecbd0f7"
69+
integrity sha512-qdGayfrv/LPanOs4N/yjt1yfMyeqYHGen/33wbBDVs9mmAJ+W9LCeueYaSfEzm0GOWeIJ6qIiLSHYiTcpGCDnw==
7070
dependencies:
7171
"@1stg/config" "^0.2.1"
7272
"@angular-eslint/eslint-plugin" "^16.0.3"
@@ -108,12 +108,12 @@
108108
eslint-plugin-vue "^9.15.0"
109109
eslint-plugin-yml "^1.8.0"
110110

111-
"@1stg/lib-config@^12.0.0":
112-
version "12.0.0"
113-
resolved "https://registry.yarnpkg.com/@1stg/lib-config/-/lib-config-12.0.0.tgz#843891ecd0478efd5ae28b74c22d88d9f6884dce"
114-
integrity sha512-Dkz0ouc5M9DvkY0EG/RXNjTkcE544e5gScU2mKBInc8W7QOidBjji9OCsw29jxjS0o6cPRSELXZJbSJC2xfkrg==
111+
"@1stg/lib-config@^12.0.1":
112+
version "12.0.1"
113+
resolved "https://registry.yarnpkg.com/@1stg/lib-config/-/lib-config-12.0.1.tgz#1fdf045b6ab57439eba4df1ab8a5cfc26909ac91"
114+
integrity sha512-IovDXaUtwI4+mb0Ker81Hb618jDsaz1qXaQ+gMFX52l6G93DTFdULqfwCsqu0Mie4787bxL8l3r6ORHwuVq2Ww==
115115
dependencies:
116-
"@1stg/common-config" "^9.0.0"
116+
"@1stg/common-config" "^9.0.1"
117117
"@pkgr/rollup" "^4.1.1"
118118

119119
"@1stg/lint-staged@^3.4.1":
@@ -177,10 +177,10 @@
177177
dependencies:
178178
"@pkgr/utils" "^2.3.1"
179179

180-
"@1stg/tsconfig@^2.3.2":
181-
version "2.3.2"
182-
resolved "https://registry.yarnpkg.com/@1stg/tsconfig/-/tsconfig-2.3.2.tgz#d843c542845d4d14350162507f711f216159cd8c"
183-
integrity sha512-vNYoC1cvdGHCA3tJMUskaVsNVTt6QIOFO+eDtdO4JvqHllvi+o2QSqy5vTpAGMODSqbyFcLdPW7sD5kj9VQmNA==
180+
"@1stg/tsconfig@^2.3.2", "@1stg/tsconfig@^2.3.3":
181+
version "2.3.3"
182+
resolved "https://registry.yarnpkg.com/@1stg/tsconfig/-/tsconfig-2.3.3.tgz#dc598fea2f75bf24a6da6039827679ca0213ece3"
183+
integrity sha512-JHXiryRSs4w/ho/Uf3lDMlrYIf2p8+2gMgp23/j/HJfGF2+XwgRCnPgLA2VZ+LtGdqYX8ZJ4EmMgjFDdEdTMbg==
184184

185185
"@aashutoshrathi/word-wrap@^1.2.3":
186186
version "1.2.6"
@@ -3092,10 +3092,10 @@
30923092
dependencies:
30933093
"@types/istanbul-lib-report" "*"
30943094

3095-
"@types/jest@^29.5.8":
3096-
version "29.5.8"
3097-
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.8.tgz#ed5c256fe2bc7c38b1915ee5ef1ff24a3427e120"
3098-
integrity sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==
3095+
"@types/jest@^29.5.11":
3096+
version "29.5.11"
3097+
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.11.tgz#0c13aa0da7d0929f078ab080ae5d4ced80fa2f2c"
3098+
integrity sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==
30993099
dependencies:
31003100
expect "^29.0.0"
31013101
pretty-format "^29.0.0"
@@ -3131,10 +3131,10 @@
31313131
dependencies:
31323132
meow "*"
31333133

3134-
"@types/micromatch@^4.0.5":
3135-
version "4.0.5"
3136-
resolved "https://registry.yarnpkg.com/@types/micromatch/-/micromatch-4.0.5.tgz#a88fb878f7f7e7e1909c1db50f97acfede6b4d85"
3137-
integrity sha512-B1o0zVdb9GsbKT4Fucy3oeG9G1qy/TOHrYM+NsEPazT+ktsGXOJSb1+Bg9hP7BH14Bv4dd5m7r+FohwXkY/39A==
3134+
"@types/micromatch@^4.0.6":
3135+
version "4.0.6"
3136+
resolved "https://registry.yarnpkg.com/@types/micromatch/-/micromatch-4.0.6.tgz#340535c2b90098ace8fc5e7eaec8562deedb4f2f"
3137+
integrity sha512-2eulCHWqjEpk9/vyic4tBhI8a9qQEl6DaK2n/sF7TweX9YESlypgKyhXMDGt4DAOy/jhLPvVrZc8pTDAMsplJA==
31383138
dependencies:
31393139
"@types/braces" "*"
31403140

@@ -3220,6 +3220,11 @@
32203220
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.7.tgz#b14cebc75455eeeb160d5fe23c2fcc0c64f724d8"
32213221
integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==
32223222

3223+
"@types/web@^0.0.128":
3224+
version "0.0.128"
3225+
resolved "https://registry.yarnpkg.com/@types/web/-/web-0.0.128.tgz#a431a051fbed2a03da97f032990d27c27150735c"
3226+
integrity sha512-STOv2gEXqlhUSB8ea9Tm3MlGrG9Pn+mh5+Eg8Rt6oC6Ju92kAK109/KzRb/F1PvBg+G1fX0cQayDZbvBqBET4Q==
3227+
32233228
"@types/whatwg-mimetype@3.0.1":
32243229
version "3.0.1"
32253230
resolved "https://registry.yarnpkg.com/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.1.tgz#7aa02e0340e69b94aa549a3c72ad3c8be65bc370"
@@ -11404,10 +11409,10 @@ ts-jest@^29.1.1:
1140411409
semver "^7.5.3"
1140511410
yargs-parser "^21.0.1"
1140611411

11407-
ts-node@^10.8.1, ts-node@^10.9.1:
11408-
version "10.9.1"
11409-
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
11410-
integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
11412+
ts-node@^10.8.1, ts-node@^10.9.1, ts-node@^10.9.2:
11413+
version "10.9.2"
11414+
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
11415+
integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
1141111416
dependencies:
1141211417
"@cspotcode/source-map-support" "^0.8.0"
1141311418
"@tsconfig/node10" "^1.0.7"
@@ -11602,10 +11607,10 @@ typedarray@^0.0.6:
1160211607
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
1160311608
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
1160411609

11605-
"typescript@^4.6.4 || ^5.2.2", typescript@^5.2.2:
11606-
version "5.2.2"
11607-
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
11608-
integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
11610+
"typescript@^4.6.4 || ^5.2.2", typescript@^5.2.2, typescript@^5.3.3:
11611+
version "5.3.3"
11612+
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
11613+
integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
1160911614

1161011615
unassert@^2.0.0, unassert@^2.0.2:
1161111616
version "2.0.2"

0 commit comments

Comments
 (0)