type Bitbucket = {
username: string;
password: string;
};
/**
* Fork a repository
* Creates a new fork of the specified repository.
*/
export async function main(
auth: Bitbucket,
repo_slug: string,
workspace: string,
body: { type: string; [k: string]: unknown } & {
links?: {
self?: { href?: string; name?: string };
html?: { href?: string; name?: string };
avatar?: { href?: string; name?: string };
pullrequests?: { href?: string; name?: string };
commits?: { href?: string; name?: string };
forks?: { href?: string; name?: string };
watchers?: { href?: string; name?: string };
downloads?: { href?: string; name?: string };
clone?: { href?: string; name?: string }[];
hooks?: { href?: string; name?: string };
};
uuid?: string;
full_name?: string;
is_private?: boolean;
parent?: unknown;
scm?: "git";
owner?: { type: string; [k: string]: unknown } & {
links?: {
avatar?: { href?: string; name?: string };
[k: string]: unknown;
};
created_on?: string;
display_name?: string;
username?: string;
uuid?: string;
[k: string]: unknown;
};
name?: string;
description?: string;
created_on?: string;
updated_on?: string;
size?: number;
language?: string;
has_issues?: boolean;
has_wiki?: boolean;
fork_policy?: "allow_forks" | "no_public_forks" | "no_forks";
project?: { type: string; [k: string]: unknown } & {
links?: {
html?: { href?: string; name?: string };
avatar?: { href?: string; name?: string };
};
uuid?: string;
key?: string;
owner?: ({ type: string; [k: string]: unknown } & {
links?: {
avatar?: { href?: string; name?: string };
[k: string]: unknown;
};
created_on?: string;
display_name?: string;
username?: string;
uuid?: string;
[k: string]: unknown;
}) & {
links?: {
avatar?: { href?: string; name?: string };
[k: string]: unknown;
} & {
self?: { href?: string; name?: string };
html?: { href?: string; name?: string };
members?: { href?: string; name?: string };
projects?: { href?: string; name?: string };
repositories?: { href?: string; name?: string };
[k: string]: unknown;
};
[k: string]: unknown;
};
name?: string;
description?: string;
is_private?: boolean;
created_on?: string;
updated_on?: string;
has_publicly_visible_repos?: boolean;
[k: string]: unknown;
};
mainbranch?: {
type: string;
links?: {
self?: { href?: string; name?: string };
commits?: { href?: string; name?: string };
html?: { href?: string; name?: string };
};
name?: string;
target?: ({ type: string; [k: string]: unknown } & {
hash?: string;
date?: string;
author?: { type: string; [k: string]: unknown } & {
raw?: string;
user?: { type: string; [k: string]: unknown } & {
links?: {
avatar?: { href?: string; name?: string };
[k: string]: unknown;
};
created_on?: string;
display_name?: string;
username?: string;
uuid?: string;
[k: string]: unknown;
};
[k: string]: unknown;
};
message?: string;
summary?: {
raw?: string;
markup?: "markdown" | "creole" | "plaintext";
html?: string;
};
parents?: unknown[];
[k: string]: unknown;
}) & {
repository?: unknown;
participants?: ({ type: string; [k: string]: unknown } & {
user?: { type: string; [k: string]: unknown } & {
links?: {
avatar?: { href?: string; name?: string };
[k: string]: unknown;
};
created_on?: string;
display_name?: string;
username?: string;
uuid?: string;
[k: string]: unknown;
};
role?: "PARTICIPANT" | "REVIEWER";
approved?: boolean;
state?: "approved" | "changes_requested" | null;
participated_on?: string;
[k: string]: unknown;
})[];
[k: string]: unknown;
};
[k: string]: unknown;
} & {
merge_strategies?: ("merge_commit" | "squash" | "fast_forward")[];
default_merge_strategy?: string;
[k: string]: unknown;
};
[k: string]: unknown;
}
) {
const url = new URL(
`https://api.bitbucket.org/2.0/repositories/${workspace}/${repo_slug}/forks`
);
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
},
body: JSON.stringify(body),
});
if (!response.ok) {
const text = await response.text();
throw new Error(`${response.status} ${text}`);
}
return await response.json();
}
Submitted by hugo697 429 days ago
type Bitbucket = {
username: string;
password: string;
};
/**
* Fork a repository
* Creates a new fork of the specified repository.
#### Forking a repository
To create a fork, specify the workspace explicitly as part of the
request body:
```
$ curl -X POST -u jdoe https://api.bitbucket.org/2.0/repositories/atlassian/bbql/forks \
-H 'Content-Type: application/json' -d '{
"name": "bbql_fork",
"workspace": {
"slug": "atlassian"
}
}'
```
To fork a repository into the same workspace, also specify a new `name`.
When you specify a value for `name`, it will also affect the `slug`.
The `slug` is reflected in the repository URL of the new fork. It is
derived from `name` by substituting non-ASCII characters, removes
whitespace, and changes characters to lower case. For example,
`My repo` would turn into `my_repo`.
You need contributor access to create new forks within a workspace.
#### Change the properties of a new fork
By default the fork inherits most of its properties from the parent.
However, since the optional POST body document follows the normal
`repository` JSON schema and you can override the new fork's
properties.
Properties that can be overridden include:
* description
* fork_policy
* language
* mainbranch
* is_private (note that a private repo's fork_policy might prohibit
the creation of public forks, in which `is_private=False` would fail)
* has_issues (to initialize or disable the new repo's issue tracker --
note that the actual contents of the parent repository's issue
tracker are not copied during forking)
* has_wiki (to initialize or disable the new repo's wiki --
note that the actual contents of the parent repository's wiki are not
copied during forking)
* project (when forking into a private project, the fork's `is_private`
must be `true`)
Properties that cannot be modified include:
* scm
* parent
* full_name
*/
export async function main(
auth: Bitbucket,
repo_slug: string,
workspace: string,
body: { type: string; [k: string]: unknown } & {
links?: {
self?: { href?: string; name?: string };
html?: { href?: string; name?: string };
avatar?: { href?: string; name?: string };
pullrequests?: { href?: string; name?: string };
commits?: { href?: string; name?: string };
forks?: { href?: string; name?: string };
watchers?: { href?: string; name?: string };
downloads?: { href?: string; name?: string };
clone?: { href?: string; name?: string }[];
hooks?: { href?: string; name?: string };
};
uuid?: string;
full_name?: string;
is_private?: boolean;
parent?: unknown;
scm?: "git";
owner?: { type: string; [k: string]: unknown } & {
links?: {
avatar?: { href?: string; name?: string };
[k: string]: unknown;
};
created_on?: string;
display_name?: string;
username?: string;
uuid?: string;
[k: string]: unknown;
};
name?: string;
description?: string;
created_on?: string;
updated_on?: string;
size?: number;
language?: string;
has_issues?: boolean;
has_wiki?: boolean;
fork_policy?: "allow_forks" | "no_public_forks" | "no_forks";
project?: { type: string; [k: string]: unknown } & {
links?: {
html?: { href?: string; name?: string };
avatar?: { href?: string; name?: string };
};
uuid?: string;
key?: string;
owner?: ({ type: string; [k: string]: unknown } & {
links?: {
avatar?: { href?: string; name?: string };
[k: string]: unknown;
};
created_on?: string;
display_name?: string;
username?: string;
uuid?: string;
[k: string]: unknown;
}) & {
links?: {
avatar?: { href?: string; name?: string };
[k: string]: unknown;
} & {
self?: { href?: string; name?: string };
html?: { href?: string; name?: string };
members?: { href?: string; name?: string };
projects?: { href?: string; name?: string };
repositories?: { href?: string; name?: string };
[k: string]: unknown;
};
[k: string]: unknown;
};
name?: string;
description?: string;
is_private?: boolean;
created_on?: string;
updated_on?: string;
has_publicly_visible_repos?: boolean;
[k: string]: unknown;
};
mainbranch?: {
type: string;
links?: {
self?: { href?: string; name?: string };
commits?: { href?: string; name?: string };
html?: { href?: string; name?: string };
};
name?: string;
target?: ({ type: string; [k: string]: unknown } & {
hash?: string;
date?: string;
author?: { type: string; [k: string]: unknown } & {
raw?: string;
user?: { type: string; [k: string]: unknown } & {
links?: {
avatar?: { href?: string; name?: string };
[k: string]: unknown;
};
created_on?: string;
display_name?: string;
username?: string;
uuid?: string;
[k: string]: unknown;
};
[k: string]: unknown;
};
message?: string;
summary?: {
raw?: string;
markup?: "markdown" | "creole" | "plaintext";
html?: string;
};
parents?: unknown[];
[k: string]: unknown;
}) & {
repository?: unknown;
participants?: ({ type: string; [k: string]: unknown } & {
user?: { type: string; [k: string]: unknown } & {
links?: {
avatar?: { href?: string; name?: string };
[k: string]: unknown;
};
created_on?: string;
display_name?: string;
username?: string;
uuid?: string;
[k: string]: unknown;
};
role?: "PARTICIPANT" | "REVIEWER";
approved?: boolean;
state?: "approved" | "changes_requested" | null;
participated_on?: string;
[k: string]: unknown;
})[];
[k: string]: unknown;
};
[k: string]: unknown;
} & {
merge_strategies?: ("merge_commit" | "squash" | "fast_forward")[];
default_merge_strategy?: string;
[k: string]: unknown;
};
[k: string]: unknown;
}
) {
const url = new URL(
`https://api.bitbucket.org/2.0/repositories/${workspace}/${repo_slug}/forks`
);
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
},
body: JSON.stringify(body),
});
if (!response.ok) {
const text = await response.text();
throw new Error(`${response.status} ${text}`);
}
return await response.json();
}
Submitted by hugo697 429 days ago