Update a repository

Since this endpoint can be used to both update and to create a repository, the request body depends on the intent.

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

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