/update-configs/apply-all/", methods=["POST"])
+@login_required
+def apply_all_updates(username):
+ user: User = User.query.filter_by(username=username).first()
+ if not user:
+ abort(404)
+
+ if current_user != user and not current_user.rank.atLeast(UserRank.EDITOR):
+ abort(403)
+
+ outdated_packages = user.maintained_packages \
+ .filter(Package.state != PackageState.DELETED,
+ Package.update_config.has(PackageUpdateConfig.outdated_at.isnot(None))) \
+ .order_by(db.asc(Package.title)).all()
+
+ for package in outdated_packages:
+ if not package.checkPerm(current_user, Permission.MAKE_RELEASE):
+ continue
+
+ if package.releases.filter(or_(PackageRelease.task_id.isnot(None),
+ PackageRelease.commit_hash==package.update_config.last_commit)).count():
+ continue
+
+ title = package.update_config.get_title()
+ ref = package.update_config.get_ref()
+
+ rel = PackageRelease()
+ rel.package = package
+ rel.title = title
+ rel.url = ""
+ rel.task_id = uuid()
+ db.session.add(rel)
+ db.session.commit()
+
+ makeVCSRelease.apply_async((rel.id, ref),
+ task_id=rel.task_id)
+
+ msg = "Created release {} (Applied all Git Update Config)".format(rel.title)
+ addNotification(package.maintainers, current_user, NotificationType.PACKAGE_EDIT, msg,
+ rel.getEditURL(), package)
+ addAuditLog(AuditSeverity.NORMAL, current_user, msg, package.getDetailsURL(), package)
+ db.session.commit()
+
+ return redirect(url_for("todo.view_user", username=username))
+
+
@bp.route("/todo/outdated/")
@login_required
def outdated():
diff --git a/app/models/packages.py b/app/models/packages.py
index f51b0a9..ccdd6cf 100644
--- a/app/models/packages.py
+++ b/app/models/packages.py
@@ -995,7 +995,11 @@ class PackageUpdateConfig(db.Model):
else:
return "New tag {} found on the Git repo.".format(self.last_tag)
+ def get_title(self):
+ return self.last_tag or self.outdated_at.strftime("%Y-%m-%d")
+
+ def get_ref(self):
+ return self.last_tag or self.last_commit
+
def get_create_release_url(self):
- title = self.last_tag or self.outdated_at.strftime("%Y-%m-%d")
- ref = self.last_tag or self.last_commit
- return self.package.getCreateReleaseURL(title=title, ref=ref)
+ return self.package.getCreateReleaseURL(title=self.get_title(), ref=self.get_ref())
diff --git a/app/templates/todo/user.html b/app/templates/todo/user.html
index feb5edd..eaa9747 100644
--- a/app/templates/todo/user.html
+++ b/app/templates/todo/user.html
@@ -31,9 +31,14 @@
{% endfor %}
-
Help
See all Update Settings
+ {% if outdated_packages %}
+
+ {% endif %}
{{ _("Potentially Outdated Packages") }}
{{ _("New: Git Update Detection has been set up on all packages to send notifications.") }}