Skip to content

Instantly share code, notes, and snippets.

@JonathanDagan
Created August 19, 2024 19:29
Show Gist options
  • Save JonathanDagan/3dcef6a36f03fe3c64a250ee294760ce to your computer and use it in GitHub Desktop.
Save JonathanDagan/3dcef6a36f03fe3c64a250ee294760ce to your computer and use it in GitHub Desktop.
Gitlab Delete Tags Async Parallel
const GITLAB_URL = "https://gitlab.com"; // Replace with your GitLab instance URL
const PROJECT_ID = "<project_id>"; // Replace with your project ID
const PRIVATE_TOKEN = "<token>"; // Replace with your personal access token (needs api read and write scope)
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
const deleteTag = async (tagName) => {
try {
const response = await fetch(`${GITLAB_URL}/api/v4/projects/${PROJECT_ID}/repository/tags/${tagName}`, {
method: 'DELETE',
headers: {
'PRIVATE-TOKEN': PRIVATE_TOKEN
}
});
if (response.ok) {
console.log(`Deleted tag: ${tagName}`);
} else {
console.error(`Failed to delete tag: ${tagName}`, await response.json());
}
} catch (error) {
console.error(`Failed to delete tag: ${tagName}`, error.message);
}
};
const getAllTags = async () => {
let page = 1;
const tags = [];
while (true) {
try {
const response = await fetch(`${GITLAB_URL}/api/v4/projects/${PROJECT_ID}/repository/tags?per_page=100&page=${page}`, {
headers: {
'PRIVATE-TOKEN': PRIVATE_TOKEN
}
});
const data = await response.json();
if (data.length === 0) {
break; // Exit loop if no more tags are found
}
tags.push(...data.map(tag => tag.name));
page += 1;
} catch (error) {
console.error('Failed to fetch tags', error.message);
break;
}
}
return tags;
};
const processDeletionQueue = async (tags) => {
console.log(`Found ${tags.length} tags to delete.`);
const promises = tags.map((tag, index) => {
return new Promise(async (resolve) => {
await sleep(index * 100);
await deleteTag(tag);
resolve();
});
});
await Promise.all(promises);
};
const deleteAllTags = async () => {
const tags = await getAllTags();
await processDeletionQueue(tags);
console.log('All tags deleted.');
};
deleteAllTags().catch(error => console.error('Error in deleting tags:', error));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment