def do_create_zip_release(user: User, package: Package, title: str, file, min_v: MinetestRelease = None, max_v: MinetestRelease = None, reason: str = None, commit_hash: str = None): check_can_create_release(user, package) if commit_hash: commit_hash = commit_hash.lower() if not (len(commit_hash) == 40 and re.match(r"^[0-9a-f]+$", commit_hash)): raise LogicError( 400, "Invalid commit hash; it must be a 40 character long base16 string" ) uploaded_url, uploaded_path = upload_file(file, "zip", "a zip file") rel = PackageRelease() rel.package = package rel.title = title rel.url = uploaded_url rel.task_id = uuid() rel.commit_hash = commit_hash rel.min_rel = min_v rel.max_rel = max_v db.session.add(rel) if reason is None: msg = "Created release {}".format(rel.title) else: msg = "Created release {} ({})".format(rel.title, reason) addAuditLog(AuditSeverity.NORMAL, user, msg, package.getURL("packages.view"), package) db.session.commit() checkZipRelease.apply_async((rel.id, uploaded_path), task_id=rel.task_id) return rel
def update_from_release(package): if not package.checkPerm(current_user, Permission.REIMPORT_META): flash("You don't have permission to reimport meta", "danger") return redirect(package.getDetailsURL()) release = package.releases.first() if not release: flash("Release needed", "danger") return redirect(package.getDetailsURL()) msg = "Updated meta from latest release" addNotification(package.maintainers, current_user, NotificationType.PACKAGE_EDIT, msg, package.getDetailsURL(), package) severity = AuditSeverity.NORMAL if current_user in package.maintainers else AuditSeverity.EDITOR addAuditLog(severity, current_user, msg, package.getDetailsURL(), package) db.session.commit() task_id = uuid() zippath = release.url.replace("/uploads/", app.config["UPLOAD_DIR"]) checkZipRelease.apply_async((release.id, zippath), task_id=task_id) return redirect(url_for("tasks.check", id=task_id, r=package.getEditURL()))
def create_release(package): if not package.checkPerm(current_user, Permission.MAKE_RELEASE): return redirect(package.getDetailsURL()) # Initial form class from post data and default data form = CreatePackageReleaseForm() if package.repo is not None: form["uploadOpt"].choices = [("vcs", "From Git Commit or Branch"), ("upload", "File Upload")] if request.method != "POST": form["uploadOpt"].data = "vcs" if request.method == "POST" and form.validate(): if form["uploadOpt"].data == "vcs": rel = PackageRelease() rel.package = package rel.title = form["title"].data rel.url = "" rel.task_id = uuid() rel.min_rel = form["min_rel"].data.getActual() rel.max_rel = form["max_rel"].data.getActual() db.session.add(rel) db.session.commit() makeVCSRelease.apply_async((rel.id, form["vcsLabel"].data), task_id=rel.task_id) msg = "{}: Release {} created".format(package.title, rel.title) triggerNotif(package.author, current_user, msg, rel.getEditURL()) db.session.commit() return redirect( url_for("tasks.check", id=rel.task_id, r=rel.getEditURL())) else: uploadedUrl, uploadedPath = doFileUpload(form.fileUpload.data, "zip", "a zip file") if uploadedUrl is not None: rel = PackageRelease() rel.package = package rel.title = form["title"].data rel.url = uploadedUrl rel.task_id = uuid() rel.min_rel = form["min_rel"].data.getActual() rel.max_rel = form["max_rel"].data.getActual() db.session.add(rel) db.session.commit() checkZipRelease.apply_async((rel.id, uploadedPath), task_id=rel.task_id) msg = "{}: Release {} created".format(package.title, rel.title) triggerNotif(package.author, current_user, msg, rel.getEditURL()) db.session.commit() return redirect( url_for("tasks.check", id=rel.task_id, r=rel.getEditURL())) return render_template("packages/release_new.html", package=package, form=form)