Update a comment on a pull request

Updates a specific pull request comment.

Script bitbucket Verified

by hugo697 ยท 10/24/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 375 days ago
1
type Bitbucket = {
2
  username: string;
3
  password: string;
4
};
5
/**
6
 * Update a comment on a pull request
7
 * Updates a specific pull request comment.
8
 */
9
export async function main(
10
  auth: Bitbucket,
11
  comment_id: string,
12
  pull_request_id: string,
13
  repo_slug: string,
14
  workspace: string,
15
  body: ({ type: string; [k: string]: unknown } & {
16
    id?: number;
17
    created_on?: string;
18
    updated_on?: string;
19
    content?: {
20
      raw?: string;
21
      markup?: "markdown" | "creole" | "plaintext";
22
      html?: string;
23
    };
24
    user?: { type: string; [k: string]: unknown } & {
25
      links?: {
26
        avatar?: { href?: string; name?: string };
27
        [k: string]: unknown;
28
      };
29
      created_on?: string;
30
      display_name?: string;
31
      username?: string;
32
      uuid?: string;
33
      [k: string]: unknown;
34
    };
35
    deleted?: boolean;
36
    parent?: unknown;
37
    inline?: { from?: number; to?: number; path: string };
38
    links?: {
39
      self?: { href?: string; name?: string };
40
      html?: { href?: string; name?: string };
41
      code?: { href?: string; name?: string };
42
    };
43
    [k: string]: unknown;
44
  }) & {
45
    pullrequest?: { type: string; [k: string]: unknown } & {
46
      links?: {
47
        self?: { href?: string; name?: string };
48
        html?: { href?: string; name?: string };
49
        commits?: { href?: string; name?: string };
50
        approve?: { href?: string; name?: string };
51
        diff?: { href?: string; name?: string };
52
        diffstat?: { href?: string; name?: string };
53
        comments?: { href?: string; name?: string };
54
        activity?: { href?: string; name?: string };
55
        merge?: { href?: string; name?: string };
56
        decline?: { href?: string; name?: string };
57
      };
58
      id?: number;
59
      title?: string;
60
      rendered?: {
61
        title?: {
62
          raw?: string;
63
          markup?: "markdown" | "creole" | "plaintext";
64
          html?: string;
65
        };
66
        description?: {
67
          raw?: string;
68
          markup?: "markdown" | "creole" | "plaintext";
69
          html?: string;
70
        };
71
        reason?: {
72
          raw?: string;
73
          markup?: "markdown" | "creole" | "plaintext";
74
          html?: string;
75
        };
76
      };
77
      summary?: {
78
        raw?: string;
79
        markup?: "markdown" | "creole" | "plaintext";
80
        html?: string;
81
      };
82
      state?: "OPEN" | "MERGED" | "DECLINED" | "SUPERSEDED";
83
      author?: { type: string; [k: string]: unknown } & {
84
        links?: {
85
          avatar?: { href?: string; name?: string };
86
          [k: string]: unknown;
87
        };
88
        created_on?: string;
89
        display_name?: string;
90
        username?: string;
91
        uuid?: string;
92
        [k: string]: unknown;
93
      };
94
      source?: {
95
        repository?: { type: string; [k: string]: unknown } & {
96
          links?: {
97
            self?: { href?: string; name?: string };
98
            html?: { href?: string; name?: string };
99
            avatar?: { href?: string; name?: string };
100
            pullrequests?: { href?: string; name?: string };
101
            commits?: { href?: string; name?: string };
102
            forks?: { href?: string; name?: string };
103
            watchers?: { href?: string; name?: string };
104
            downloads?: { href?: string; name?: string };
105
            clone?: { href?: string; name?: string }[];
106
            hooks?: { href?: string; name?: string };
107
          };
108
          uuid?: string;
109
          full_name?: string;
110
          is_private?: boolean;
111
          parent?: unknown;
112
          scm?: "git";
113
          owner?: { type: string; [k: string]: unknown } & {
114
            links?: {
115
              avatar?: { href?: string; name?: string };
116
              [k: string]: unknown;
117
            };
118
            created_on?: string;
119
            display_name?: string;
120
            username?: string;
121
            uuid?: string;
122
            [k: string]: unknown;
123
          };
124
          name?: string;
125
          description?: string;
126
          created_on?: string;
127
          updated_on?: string;
128
          size?: number;
129
          language?: string;
130
          has_issues?: boolean;
131
          has_wiki?: boolean;
132
          fork_policy?: "allow_forks" | "no_public_forks" | "no_forks";
133
          project?: { type: string; [k: string]: unknown } & {
134
            links?: {
135
              html?: { href?: string; name?: string };
136
              avatar?: { href?: string; name?: string };
137
            };
138
            uuid?: string;
139
            key?: string;
140
            owner?: ({ type: string; [k: string]: unknown } & {
141
              links?: {
142
                avatar?: { href?: string; name?: string };
143
                [k: string]: unknown;
144
              };
145
              created_on?: string;
146
              display_name?: string;
147
              username?: string;
148
              uuid?: string;
149
              [k: string]: unknown;
150
            }) & {
151
              links?: {
152
                avatar?: { href?: string; name?: string };
153
                [k: string]: unknown;
154
              } & {
155
                self?: { href?: string; name?: string };
156
                html?: { href?: string; name?: string };
157
                members?: { href?: string; name?: string };
158
                projects?: { href?: string; name?: string };
159
                repositories?: { href?: string; name?: string };
160
                [k: string]: unknown;
161
              };
162
              [k: string]: unknown;
163
            };
164
            name?: string;
165
            description?: string;
166
            is_private?: boolean;
167
            created_on?: string;
168
            updated_on?: string;
169
            has_publicly_visible_repos?: boolean;
170
            [k: string]: unknown;
171
          };
172
          mainbranch?: {
173
            type: string;
174
            links?: {
175
              self?: { href?: string; name?: string };
176
              commits?: { href?: string; name?: string };
177
              html?: { href?: string; name?: string };
178
            };
179
            name?: string;
180
            target?: ({ type: string; [k: string]: unknown } & {
181
              hash?: string;
182
              date?: string;
183
              author?: { type: string; [k: string]: unknown } & {
184
                raw?: string;
185
                user?: { type: string; [k: string]: unknown } & {
186
                  links?: {
187
                    avatar?: { href?: string; name?: string };
188
                    [k: string]: unknown;
189
                  };
190
                  created_on?: string;
191
                  display_name?: string;
192
                  username?: string;
193
                  uuid?: string;
194
                  [k: string]: unknown;
195
                };
196
                [k: string]: unknown;
197
              };
198
              message?: string;
199
              summary?: {
200
                raw?: string;
201
                markup?: "markdown" | "creole" | "plaintext";
202
                html?: string;
203
              };
204
              parents?: unknown[];
205
              [k: string]: unknown;
206
            }) & {
207
              repository?: unknown;
208
              participants?: ({ type: string; [k: string]: unknown } & {
209
                user?: { type: string; [k: string]: unknown } & {
210
                  links?: {
211
                    avatar?: { href?: string; name?: string };
212
                    [k: string]: unknown;
213
                  };
214
                  created_on?: string;
215
                  display_name?: string;
216
                  username?: string;
217
                  uuid?: string;
218
                  [k: string]: unknown;
219
                };
220
                role?: "PARTICIPANT" | "REVIEWER";
221
                approved?: boolean;
222
                state?: "approved" | "changes_requested" | null;
223
                participated_on?: string;
224
                [k: string]: unknown;
225
              })[];
226
              [k: string]: unknown;
227
            };
228
            [k: string]: unknown;
229
          } & {
230
            merge_strategies?: ("merge_commit" | "squash" | "fast_forward")[];
231
            default_merge_strategy?: string;
232
            [k: string]: unknown;
233
          };
234
          [k: string]: unknown;
235
        };
236
        branch?: {
237
          name?: string;
238
          merge_strategies?: ("merge_commit" | "squash" | "fast_forward")[];
239
          default_merge_strategy?: string;
240
        };
241
        commit?: { hash?: string };
242
      };
243
      destination?: {
244
        repository?: { type: string; [k: string]: unknown } & {
245
          links?: {
246
            self?: { href?: string; name?: string };
247
            html?: { href?: string; name?: string };
248
            avatar?: { href?: string; name?: string };
249
            pullrequests?: { href?: string; name?: string };
250
            commits?: { href?: string; name?: string };
251
            forks?: { href?: string; name?: string };
252
            watchers?: { href?: string; name?: string };
253
            downloads?: { href?: string; name?: string };
254
            clone?: { href?: string; name?: string }[];
255
            hooks?: { href?: string; name?: string };
256
          };
257
          uuid?: string;
258
          full_name?: string;
259
          is_private?: boolean;
260
          parent?: unknown;
261
          scm?: "git";
262
          owner?: { type: string; [k: string]: unknown } & {
263
            links?: {
264
              avatar?: { href?: string; name?: string };
265
              [k: string]: unknown;
266
            };
267
            created_on?: string;
268
            display_name?: string;
269
            username?: string;
270
            uuid?: string;
271
            [k: string]: unknown;
272
          };
273
          name?: string;
274
          description?: string;
275
          created_on?: string;
276
          updated_on?: string;
277
          size?: number;
278
          language?: string;
279
          has_issues?: boolean;
280
          has_wiki?: boolean;
281
          fork_policy?: "allow_forks" | "no_public_forks" | "no_forks";
282
          project?: { type: string; [k: string]: unknown } & {
283
            links?: {
284
              html?: { href?: string; name?: string };
285
              avatar?: { href?: string; name?: string };
286
            };
287
            uuid?: string;
288
            key?: string;
289
            owner?: ({ type: string; [k: string]: unknown } & {
290
              links?: {
291
                avatar?: { href?: string; name?: string };
292
                [k: string]: unknown;
293
              };
294
              created_on?: string;
295
              display_name?: string;
296
              username?: string;
297
              uuid?: string;
298
              [k: string]: unknown;
299
            }) & {
300
              links?: {
301
                avatar?: { href?: string; name?: string };
302
                [k: string]: unknown;
303
              } & {
304
                self?: { href?: string; name?: string };
305
                html?: { href?: string; name?: string };
306
                members?: { href?: string; name?: string };
307
                projects?: { href?: string; name?: string };
308
                repositories?: { href?: string; name?: string };
309
                [k: string]: unknown;
310
              };
311
              [k: string]: unknown;
312
            };
313
            name?: string;
314
            description?: string;
315
            is_private?: boolean;
316
            created_on?: string;
317
            updated_on?: string;
318
            has_publicly_visible_repos?: boolean;
319
            [k: string]: unknown;
320
          };
321
          mainbranch?: {
322
            type: string;
323
            links?: {
324
              self?: { href?: string; name?: string };
325
              commits?: { href?: string; name?: string };
326
              html?: { href?: string; name?: string };
327
            };
328
            name?: string;
329
            target?: ({ type: string; [k: string]: unknown } & {
330
              hash?: string;
331
              date?: string;
332
              author?: { type: string; [k: string]: unknown } & {
333
                raw?: string;
334
                user?: { type: string; [k: string]: unknown } & {
335
                  links?: {
336
                    avatar?: { href?: string; name?: string };
337
                    [k: string]: unknown;
338
                  };
339
                  created_on?: string;
340
                  display_name?: string;
341
                  username?: string;
342
                  uuid?: string;
343
                  [k: string]: unknown;
344
                };
345
                [k: string]: unknown;
346
              };
347
              message?: string;
348
              summary?: {
349
                raw?: string;
350
                markup?: "markdown" | "creole" | "plaintext";
351
                html?: string;
352
              };
353
              parents?: unknown[];
354
              [k: string]: unknown;
355
            }) & {
356
              repository?: unknown;
357
              participants?: ({ type: string; [k: string]: unknown } & {
358
                user?: { type: string; [k: string]: unknown } & {
359
                  links?: {
360
                    avatar?: { href?: string; name?: string };
361
                    [k: string]: unknown;
362
                  };
363
                  created_on?: string;
364
                  display_name?: string;
365
                  username?: string;
366
                  uuid?: string;
367
                  [k: string]: unknown;
368
                };
369
                role?: "PARTICIPANT" | "REVIEWER";
370
                approved?: boolean;
371
                state?: "approved" | "changes_requested" | null;
372
                participated_on?: string;
373
                [k: string]: unknown;
374
              })[];
375
              [k: string]: unknown;
376
            };
377
            [k: string]: unknown;
378
          } & {
379
            merge_strategies?: ("merge_commit" | "squash" | "fast_forward")[];
380
            default_merge_strategy?: string;
381
            [k: string]: unknown;
382
          };
383
          [k: string]: unknown;
384
        };
385
        branch?: {
386
          name?: string;
387
          merge_strategies?: ("merge_commit" | "squash" | "fast_forward")[];
388
          default_merge_strategy?: string;
389
        };
390
        commit?: { hash?: string };
391
      };
392
      merge_commit?: { hash?: string };
393
      comment_count?: number;
394
      task_count?: number;
395
      close_source_branch?: boolean;
396
      closed_by?: { type: string; [k: string]: unknown } & {
397
        links?: {
398
          avatar?: { href?: string; name?: string };
399
          [k: string]: unknown;
400
        };
401
        created_on?: string;
402
        display_name?: string;
403
        username?: string;
404
        uuid?: string;
405
        [k: string]: unknown;
406
      };
407
      reason?: string;
408
      created_on?: string;
409
      updated_on?: string;
410
      reviewers?: ({ type: string; [k: string]: unknown } & {
411
        links?: {
412
          avatar?: { href?: string; name?: string };
413
          [k: string]: unknown;
414
        };
415
        created_on?: string;
416
        display_name?: string;
417
        username?: string;
418
        uuid?: string;
419
        [k: string]: unknown;
420
      })[];
421
      participants?: ({ type: string; [k: string]: unknown } & {
422
        user?: { type: string; [k: string]: unknown } & {
423
          links?: {
424
            avatar?: { href?: string; name?: string };
425
            [k: string]: unknown;
426
          };
427
          created_on?: string;
428
          display_name?: string;
429
          username?: string;
430
          uuid?: string;
431
          [k: string]: unknown;
432
        };
433
        role?: "PARTICIPANT" | "REVIEWER";
434
        approved?: boolean;
435
        state?: "approved" | "changes_requested" | null;
436
        participated_on?: string;
437
        [k: string]: unknown;
438
      })[];
439
      [k: string]: unknown;
440
    };
441
    resolution?: {
442
      type: string;
443
      user?: { type: string; [k: string]: unknown } & {
444
        links?: {
445
          avatar?: { href?: string; name?: string };
446
          [k: string]: unknown;
447
        };
448
        created_on?: string;
449
        display_name?: string;
450
        username?: string;
451
        uuid?: string;
452
        [k: string]: unknown;
453
      };
454
      created_on?: string;
455
      [k: string]: unknown;
456
    };
457
    pending?: boolean;
458
    [k: string]: unknown;
459
  }
460
) {
461
  const url = new URL(
462
    `https://api.bitbucket.org/2.0/repositories/${workspace}/${repo_slug}/pullrequests/${pull_request_id}/comments/${comment_id}`
463
  );
464

465
  const response = await fetch(url, {
466
    method: "PUT",
467
    headers: {
468
      "Content-Type": "application/json",
469
      Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
470
    },
471
    body: JSON.stringify(body),
472
  });
473
  if (!response.ok) {
474
    const text = await response.text();
475
    throw new Error(`${response.status} ${text}`);
476
  }
477
  return await response.json();
478
}
479