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