release-it
Version:
Generic CLI tool to automate versioning and package publishing-related tasks.
91 lines (83 loc) • 2.68 kB
JavaScript
const getProjectId = ({ projectId, group, owner, project }) =>
String(projectId ?? [group, owner, project].filter(Boolean).join('%2F'));
export const interceptMembers = (server, { owner = 'emma' } = {}) => {
server.get(`/projects/john%2Frepo/members/all/1`, { status: 200, username: owner });
};
export const interceptUser = (server, { owner = 'user' } = {}, options = {}) => {
server.get({ url: '/user', ...options }, { status: 200, body: { id: 1, username: owner } });
};
export const interceptCollaborator = (
server,
{ owner = 'user', project = 'repo', group, projectId, userId = 1 } = {},
options = {}
) =>
server.get(
{
url: `/projects/${getProjectId({ projectId, group, owner, project })}/members/all/${userId}`,
...options
},
{
status: 200,
body: { id: userId, username: owner, access_level: 30 }
}
);
export const interceptPublish = (server, { owner = 'user', project = 'repo', projectId, body } = {}) =>
server.post(
{ url: `/projects/${getProjectId({ projectId, owner, project })}/releases`, body },
{
status: 200,
body: {
_links: {
self: `https://gitlab.com/${owner}/${project}/-/releases/${body?.tag_name ?? '1.0.0'}`
}
}
}
);
export const interceptMilestones = (server, { owner = 'user', project = 'repo', query = {}, milestones = [] } = {}) =>
server.get(
{
url: `/projects/${owner}%2F${project}/milestones`,
query: {
include_parent_milestones: 'true',
...query
}
},
{
status: 200,
body: milestones
}
);
export const interceptAsset = (server, { owner = 'user', project = 'repo', projectId } = {}) =>
server.post(
{
url: `/projects/${getProjectId({ projectId, owner, project })}/uploads`
},
async request => {
const formData = await request.formData();
const { name } = formData.get('file');
return {
status: 200,
body: {
alt: name,
url: `/uploads/7e8bec1fe27cc46a4bc6a91b9e82a07c/${name}`,
full_path: `/-/project/1234/uploads/7e8bec1fe27cc46a4bc6a91b9e82a07c/${name}`,
markdown: `[${name}](/uploads/7e8bec1fe27cc46a4bc6a91b9e82a07c/${name})`,
_links: {
self: `https://gitlab.com/${owner}/${project}/-/releases/${name}`
}
}
};
}
);
export const interceptAssetGeneric = (server, { owner = 'user', project = 'repo' } = {}) =>
server.put(
{
url: `/projects/${owner}%2F${project}/packages/generic/release-it/2.0.1/file-v2.0.1.txt`
},
{
status: 200,
body: {
message: '201 Created'
}
}
);