Passer au contenu principal

Supprimer plusieurs tickets d'un coup sur GitLab

But

Avoir des cases à cocher pour sélectionner les tickets que l'on souhaite supprimer.

À ce jour il n'est pas possible de les supprimer en série avec le Bulk edit.

Script

Entrer dans la console des outils de développement le script suivant :

{
	const deleteIssue = async (projectId, issueId) => {
		fetch(
			`https://<GITLAB_URL>/api/v4/projects/${projectId}/issues/${issueId}`,
			{
				method: "DELETE",
				headers: {
					"PRIVATE-TOKEN": "<PRIVATE_TOKEN>",
				},
			}
		);
	};
	const issuesLi = Array.from(document.querySelectorAll("ul.issues-list > li"));
	const issuesNb = Array.from(
		document.getElementsByClassName("issuable-reference")
	).map((el) => parseInt(el.innerText.trim().slice(1)));
	const projectId = document.body.dataset.projectId;

	console.log("Project ID:", projectId);

	issuesLi.forEach((li, id) => {
		const checkbox = document.createElement("input");
		checkbox.type = "checkbox";
		checkbox.className = "delete";
		checkbox.style.marginRight = "1em";
		checkbox.value = issuesNb[id];
		li.insertBefore(checkbox, li.firstChild);
	});

	const deleteButton = document.createElement("button");
	deleteButton.style.position = "fixed";
	deleteButton.style.margin = "20px";
	deleteButton.style.bottom = "20px";
	deleteButton.style.zIndex = "1000";
	deleteButton.style.backgroundColor = "darkred";
	deleteButton.style.color = "wheat";
	deleteButton.style.fontSize = "1.5em";
	deleteButton.style.fontWeight = "bold";
	deleteButton.style.borderRadius = "10px";
	deleteButton.style.transition = "all 0.4s 0.1s ease-in";
	deleteButton.onmouseover = function () {
		this.style.boxShadow = "black -3px 2px 6px";
		this.style.transform = "translate(3px, -2px)";
	};
	deleteButton.onmouseleave = function () {
		this.style.boxShadow = "unset";
		this.style.transform = "translate(-3px, 2px)";
	};
	deleteButton.innerHTML = "Supprimer les tickets";
	document.body.insertBefore(deleteButton, document.body.firstChild);

	const deleteFunction = () => {
		const selectedCheckboxes = document.querySelectorAll(
			"input:checked.delete"
		);
		selectedCheckboxes.forEach((el) => deleteIssue(projectId, el.value));
	};

	deleteButton.addEventListener("click", deleteFunction);
}

TODO

Ajouter le rechargement automatique à la fin de la suppression…

Adapter les valeurs :

  • <GITLAB_URL>, l'URL de l'instance GitLab.
  • <PRIVATE_TOKEN>, la clé privée permettant les actions par l'API. Il faut être administrateur ou propriétaire du projet.

Utilisation

  • Lancer le script avec les touches ctrl+ (ou +).
  • Cocher les cases des tickets que l'on souhaite supprimer.
  • Cliquer sur le bouton Supprimer les tickets.

Attention : Il n'y a pas de confirmation avant la suppression.

Il est possible d'en faire un bookmarklet en supprimant tous les retours à la ligne, ajouter javascript: au départ puis coller tout ça dans un lien de marque-page du navigateur.