Create comment for a commit

Creates new comment on the specified commit. To post a reply to an existing comment, include the `parent.id` field: ``` $ curl https://api.bitbucket.org/2.0/repositories/atlassian/prlinks/commit/db9ba1e031d07a02603eae0e559a7adc010257fc/comments/ \ -X POST -u evzijst \ -H 'Content-Type: application/json' \ -d '{"content": {"raw": "One more thing!"}, "parent": {"id": 5728901}}' ```

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
 * Create comment for a commit
7
 * Creates new comment on the specified commit.
8

9
To post a reply to an existing comment, include the `parent.id` field:
10

11
```
12
$ curl https://api.bitbucket.org/2.0/repositories/atlassian/prlinks/commit/db9ba1e031d07a02603eae0e559a7adc010257fc/comments/ \
13
  -X POST -u evzijst \
14
  -H 'Content-Type: application/json' \
15
  -d '{"content": {"raw": "One more thing!"},
16
       "parent": {"id": 5728901}}'
17
```
18
 */
19
export async function main(
20
  auth: Bitbucket,
21
  commit: string,
22
  repo_slug: string,
23
  workspace: string,
24
  body: ({ type: string; [k: string]: unknown } & {
25
    id?: number;
26
    created_on?: string;
27
    updated_on?: string;
28
    content?: {
29
      raw?: string;
30
      markup?: "markdown" | "creole" | "plaintext";
31
      html?: string;
32
    };
33
    user?: { type: string; [k: string]: unknown } & {
34
      links?: {
35
        avatar?: { href?: string; name?: string };
36
        [k: string]: unknown;
37
      };
38
      created_on?: string;
39
      display_name?: string;
40
      username?: string;
41
      uuid?: string;
42
      [k: string]: unknown;
43
    };
44
    deleted?: boolean;
45
    parent?: unknown;
46
    inline?: { from?: number; to?: number; path: string };
47
    links?: {
48
      self?: { href?: string; name?: string };
49
      html?: { href?: string; name?: string };
50
      code?: { href?: string; name?: string };
51
    };
52
    [k: string]: unknown;
53
  }) & {
54
    commit?: ({ type: string; [k: string]: unknown } & {
55
      hash?: string;
56
      date?: string;
57
      author?: { type: string; [k: string]: unknown } & {
58
        raw?: string;
59
        user?: { type: string; [k: string]: unknown } & {
60
          links?: {
61
            avatar?: { href?: string; name?: string };
62
            [k: string]: unknown;
63
          };
64
          created_on?: string;
65
          display_name?: string;
66
          username?: string;
67
          uuid?: string;
68
          [k: string]: unknown;
69
        };
70
        [k: string]: unknown;
71
      };
72
      message?: string;
73
      summary?: {
74
        raw?: string;
75
        markup?: "markdown" | "creole" | "plaintext";
76
        html?: string;
77
      };
78
      parents?: unknown[];
79
      [k: string]: unknown;
80
    }) & {
81
      repository?: { type: string; [k: string]: unknown } & {
82
        links?: {
83
          self?: { href?: string; name?: string };
84
          html?: { href?: string; name?: string };
85
          avatar?: { href?: string; name?: string };
86
          pullrequests?: { href?: string; name?: string };
87
          commits?: { href?: string; name?: string };
88
          forks?: { href?: string; name?: string };
89
          watchers?: { href?: string; name?: string };
90
          downloads?: { href?: string; name?: string };
91
          clone?: { href?: string; name?: string }[];
92
          hooks?: { href?: string; name?: string };
93
        };
94
        uuid?: string;
95
        full_name?: string;
96
        is_private?: boolean;
97
        parent?: unknown;
98
        scm?: "git";
99
        owner?: { type: string; [k: string]: unknown } & {
100
          links?: {
101
            avatar?: { href?: string; name?: string };
102
            [k: string]: unknown;
103
          };
104
          created_on?: string;
105
          display_name?: string;
106
          username?: string;
107
          uuid?: string;
108
          [k: string]: unknown;
109
        };
110
        name?: string;
111
        description?: string;
112
        created_on?: string;
113
        updated_on?: string;
114
        size?: number;
115
        language?: string;
116
        has_issues?: boolean;
117
        has_wiki?: boolean;
118
        fork_policy?: "allow_forks" | "no_public_forks" | "no_forks";
119
        project?: { type: string; [k: string]: unknown } & {
120
          links?: {
121
            html?: { href?: string; name?: string };
122
            avatar?: { href?: string; name?: string };
123
          };
124
          uuid?: string;
125
          key?: string;
126
          owner?: ({ type: string; [k: string]: unknown } & {
127
            links?: {
128
              avatar?: { href?: string; name?: string };
129
              [k: string]: unknown;
130
            };
131
            created_on?: string;
132
            display_name?: string;
133
            username?: string;
134
            uuid?: string;
135
            [k: string]: unknown;
136
          }) & {
137
            links?: {
138
              avatar?: { href?: string; name?: string };
139
              [k: string]: unknown;
140
            } & {
141
              self?: { href?: string; name?: string };
142
              html?: { href?: string; name?: string };
143
              members?: { href?: string; name?: string };
144
              projects?: { href?: string; name?: string };
145
              repositories?: { href?: string; name?: string };
146
              [k: string]: unknown;
147
            };
148
            [k: string]: unknown;
149
          };
150
          name?: string;
151
          description?: string;
152
          is_private?: boolean;
153
          created_on?: string;
154
          updated_on?: string;
155
          has_publicly_visible_repos?: boolean;
156
          [k: string]: unknown;
157
        };
158
        mainbranch?: {
159
          type: string;
160
          links?: {
161
            self?: { href?: string; name?: string };
162
            commits?: { href?: string; name?: string };
163
            html?: { href?: string; name?: string };
164
          };
165
          name?: string;
166
          target?: unknown;
167
          [k: string]: unknown;
168
        } & {
169
          merge_strategies?: ("merge_commit" | "squash" | "fast_forward")[];
170
          default_merge_strategy?: string;
171
          [k: string]: unknown;
172
        };
173
        [k: string]: unknown;
174
      };
175
      participants?: ({ type: string; [k: string]: unknown } & {
176
        user?: { type: string; [k: string]: unknown } & {
177
          links?: {
178
            avatar?: { href?: string; name?: string };
179
            [k: string]: unknown;
180
          };
181
          created_on?: string;
182
          display_name?: string;
183
          username?: string;
184
          uuid?: string;
185
          [k: string]: unknown;
186
        };
187
        role?: "PARTICIPANT" | "REVIEWER";
188
        approved?: boolean;
189
        state?: "approved" | "changes_requested" | null;
190
        participated_on?: string;
191
        [k: string]: unknown;
192
      })[];
193
      [k: string]: unknown;
194
    };
195
    [k: string]: unknown;
196
  }
197
) {
198
  const url = new URL(
199
    `https://api.bitbucket.org/2.0/repositories/${workspace}/${repo_slug}/commit/${commit}/comments`
200
  );
201

202
  const response = await fetch(url, {
203
    method: "POST",
204
    headers: {
205
      "Content-Type": "application/json",
206
      Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
207
    },
208
    body: JSON.stringify(body),
209
  });
210
  if (!response.ok) {
211
    const text = await response.text();
212
    throw new Error(`${response.status} ${text}`);
213
  }
214
  return await response.text();
215
}
216