Run a pipeline

Endpoint to create and initiate a pipeline.

Script bitbucket Verified

by hugo697 ยท 10/25/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
 * 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