Update configuration

Update the pipelines configuration for a repository.

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 configuration
7
 * Update the pipelines configuration for a repository.
8
 */
9
export async function main(
10
  auth: Bitbucket,
11
  workspace: string,
12
  repo_slug: string,
13
  body: { type: string; [k: string]: unknown } & {
14
    enabled?: boolean;
15
    repository?: { type: string; [k: string]: unknown } & {
16
      links?: {
17
        self?: { href?: string; name?: string };
18
        html?: { href?: string; name?: string };
19
        avatar?: { href?: string; name?: string };
20
        pullrequests?: { href?: string; name?: string };
21
        commits?: { href?: string; name?: string };
22
        forks?: { href?: string; name?: string };
23
        watchers?: { href?: string; name?: string };
24
        downloads?: { href?: string; name?: string };
25
        clone?: { href?: string; name?: string }[];
26
        hooks?: { href?: string; name?: string };
27
      };
28
      uuid?: string;
29
      full_name?: string;
30
      is_private?: boolean;
31
      parent?: unknown;
32
      scm?: "git";
33
      owner?: { 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
      name?: string;
45
      description?: string;
46
      created_on?: string;
47
      updated_on?: string;
48
      size?: number;
49
      language?: string;
50
      has_issues?: boolean;
51
      has_wiki?: boolean;
52
      fork_policy?: "allow_forks" | "no_public_forks" | "no_forks";
53
      project?: { type: string; [k: string]: unknown } & {
54
        links?: {
55
          html?: { href?: string; name?: string };
56
          avatar?: { href?: string; name?: string };
57
        };
58
        uuid?: string;
59
        key?: string;
60
        owner?: ({ type: string; [k: string]: unknown } & {
61
          links?: {
62
            avatar?: { href?: string; name?: string };
63
            [k: string]: unknown;
64
          };
65
          created_on?: string;
66
          display_name?: string;
67
          username?: string;
68
          uuid?: string;
69
          [k: string]: unknown;
70
        }) & {
71
          links?: {
72
            avatar?: { href?: string; name?: string };
73
            [k: string]: unknown;
74
          } & {
75
            self?: { href?: string; name?: string };
76
            html?: { href?: string; name?: string };
77
            members?: { href?: string; name?: string };
78
            projects?: { href?: string; name?: string };
79
            repositories?: { href?: string; name?: string };
80
            [k: string]: unknown;
81
          };
82
          [k: string]: unknown;
83
        };
84
        name?: string;
85
        description?: string;
86
        is_private?: boolean;
87
        created_on?: string;
88
        updated_on?: string;
89
        has_publicly_visible_repos?: boolean;
90
        [k: string]: unknown;
91
      };
92
      mainbranch?: {
93
        type: string;
94
        links?: {
95
          self?: { href?: string; name?: string };
96
          commits?: { href?: string; name?: string };
97
          html?: { href?: string; name?: string };
98
        };
99
        name?: string;
100
        target?: ({ type: string; [k: string]: unknown } & {
101
          hash?: string;
102
          date?: string;
103
          author?: { type: string; [k: string]: unknown } & {
104
            raw?: string;
105
            user?: { type: string; [k: string]: unknown } & {
106
              links?: {
107
                avatar?: { href?: string; name?: string };
108
                [k: string]: unknown;
109
              };
110
              created_on?: string;
111
              display_name?: string;
112
              username?: string;
113
              uuid?: string;
114
              [k: string]: unknown;
115
            };
116
            [k: string]: unknown;
117
          };
118
          message?: string;
119
          summary?: {
120
            raw?: string;
121
            markup?: "markdown" | "creole" | "plaintext";
122
            html?: string;
123
          };
124
          parents?: unknown[];
125
          [k: string]: unknown;
126
        }) & {
127
          repository?: unknown;
128
          participants?: ({ type: string; [k: string]: unknown } & {
129
            user?: { type: string; [k: string]: unknown } & {
130
              links?: {
131
                avatar?: { href?: string; name?: string };
132
                [k: string]: unknown;
133
              };
134
              created_on?: string;
135
              display_name?: string;
136
              username?: string;
137
              uuid?: string;
138
              [k: string]: unknown;
139
            };
140
            role?: "PARTICIPANT" | "REVIEWER";
141
            approved?: boolean;
142
            state?: "approved" | "changes_requested" | null;
143
            participated_on?: string;
144
            [k: string]: unknown;
145
          })[];
146
          [k: string]: unknown;
147
        };
148
        [k: string]: unknown;
149
      } & {
150
        merge_strategies?: ("merge_commit" | "squash" | "fast_forward")[];
151
        default_merge_strategy?: string;
152
        [k: string]: unknown;
153
      };
154
      [k: string]: unknown;
155
    };
156
    [k: string]: unknown;
157
  }
158
) {
159
  const url = new URL(
160
    `https://api.bitbucket.org/2.0/repositories/${workspace}/${repo_slug}/pipelines_config`
161
  );
162

163
  const response = await fetch(url, {
164
    method: "PUT",
165
    headers: {
166
      "Content-Type": "application/json",
167
      Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
168
    },
169
    body: JSON.stringify(body),
170
  });
171
  if (!response.ok) {
172
    const text = await response.text();
173
    throw new Error(`${response.status} ${text}`);
174
  }
175
  return await response.json();
176
}
177