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 |
|