diff --git a/src/tasks/tidy.ts b/src/tasks/tidy.ts
index f84951c4..45060557 100644
--- a/src/tasks/tidy.ts
+++ b/src/tasks/tidy.ts
@@ -13,14 +13,7 @@
* this program. If not, see .
*/
import {Api} from '@openstapps/gitlab-api';
-import {
- AccessLevel,
- IssueState,
- MembershipScope,
- Milestone,
- Project,
- Scope,
-} from '@openstapps/gitlab-api/lib/types';
+import {AccessLevel, IssueState, MembershipScope, Milestone, Project, Scope} from '@openstapps/gitlab-api/lib/types';
import {asyncPool} from 'async-pool-native/dist/async-pool';
import {flatten2dArray, getProjects, logger} from '../common';
import {GROUPS, NEEDED_LABELS, NEEDED_MILESTONES, NOTE_PREFIX, PROTECTED_BRANCHES, SCHOOLS} from '../configuration';
@@ -228,6 +221,40 @@ export async function tidyProtectedBranches(api: Api, projects: Project[]): Prom
logger.ok('Tidied protected branches.');
}
+/**
+ * Tidy protected tags
+ *
+ * @param api GitLab API instance to use for the requests
+ * @param projects List of projects to tidy protected tags on
+ */
+export async function tidyProtectedTags(api: Api, projects: Project[]): Promise {
+ await asyncPool(2, projects, async (project) => {
+ const protectedTags: Array<{
+ create_access_levels: Array<{
+ access_level: AccessLevel,
+ access_level_description: string;
+ }>;
+ name: string;
+ }> = await api.makeGitLabAPIRequest(`projects/${project.id}/protected_tags`);
+
+ if (!protectedTags.find((protectedTag) => {
+ return protectedTag.name === 'v*';
+ })) {
+ await api.makeGitLabAPIRequest(`projects/${project.id}/protected_tags`, {
+ data: {
+ create_access_level: AccessLevel.Maintainer,
+ name: 'v*',
+ },
+ method: 'POST',
+ });
+
+ logger.log(`Added protected version tag in project '${project.name_with_namespace}'.`);
+ }
+ });
+
+ logger.ok('Tidied protected tags.');
+}
+
/**
* Tidy "sub" group members
*
@@ -320,6 +347,7 @@ export async function tidy(api: Api) {
tidyLabels(api, projects),
tidyMilestones(api, projects),
tidyProtectedBranches(api, projects),
+ tidyProtectedTags(api, projects),
tidySubGroupMembers(api),
]);