mirror of
https://github.com/minetest/contentdb.git
synced 2024-12-22 22:12:24 +01:00
parent
c21337b9ff
commit
4ad8e3605b
@ -35,7 +35,7 @@ from app.models import AuditSeverity, db, NotificationType, PackageRelease, Meta
|
|||||||
from app.tasks import celery, TaskError
|
from app.tasks import celery, TaskError
|
||||||
from app.utils import random_string, post_bot_message, add_system_notification, add_system_audit_log, \
|
from app.utils import random_string, post_bot_message, add_system_notification, add_system_audit_log, \
|
||||||
get_games_from_list, add_audit_log
|
get_games_from_list, add_audit_log
|
||||||
from app.utils.git import clone_repo, get_latest_tag, get_latest_commit, get_temp_dir
|
from app.utils.git import clone_repo, get_latest_tag, get_latest_commit, get_temp_dir, get_release_notes
|
||||||
from .minetestcheck import build_tree, MinetestCheckError, ContentType, PackageTreeNode
|
from .minetestcheck import build_tree, MinetestCheckError, ContentType, PackageTreeNode
|
||||||
from .webhooktasks import post_discord_webhook
|
from .webhooktasks import post_discord_webhook
|
||||||
from app import app
|
from app import app
|
||||||
@ -197,6 +197,12 @@ def post_release_check_update(self, release: PackageRelease, path):
|
|||||||
except IOError:
|
except IOError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# Build release notes from git log
|
||||||
|
if release.commit_hash and release.release_notes is None:
|
||||||
|
previous_release = package.releases.filter(PackageRelease.id != release.id).first()
|
||||||
|
if previous_release and previous_release.commit_hash:
|
||||||
|
release.release_notes = get_release_notes(package.repo, previous_release.commit_hash, release.commit_hash)
|
||||||
|
|
||||||
# Update game support
|
# Update game support
|
||||||
if package.type == PackageType.MOD or package.type == PackageType.TXP:
|
if package.type == PackageType.MOD or package.type == PackageType.TXP:
|
||||||
game_is_supported = {}
|
game_is_supported = {}
|
||||||
@ -335,6 +341,7 @@ def make_vcs_release(self, id, branch):
|
|||||||
raise TaskError("No package attached to release")
|
raise TaskError("No package attached to release")
|
||||||
|
|
||||||
with clone_repo(release.package.repo, ref=branch, recursive=True) as repo:
|
with clone_repo(release.package.repo, ref=branch, recursive=True) as repo:
|
||||||
|
release.commit_hash = repo.head.object.hexsha
|
||||||
post_release_check_update(self, release, repo.working_tree_dir)
|
post_release_check_update(self, release, repo.working_tree_dir)
|
||||||
|
|
||||||
filename = random_string(10) + ".zip"
|
filename = random_string(10) + ".zip"
|
||||||
@ -352,7 +359,6 @@ def make_vcs_release(self, id, branch):
|
|||||||
|
|
||||||
release.url = "/uploads/" + filename
|
release.url = "/uploads/" + filename
|
||||||
release.task_id = None
|
release.task_id = None
|
||||||
release.commit_hash = repo.head.object.hexsha
|
|
||||||
release.approve(release.package.author)
|
release.approve(release.package.author)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
@ -16,8 +16,7 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from app.utils.git import get_latest_tag, get_latest_commit, clone_repo
|
from app.utils.git import get_latest_tag, get_latest_commit, clone_repo, get_commit_list
|
||||||
|
|
||||||
|
|
||||||
test_repo = "https://gitlab.com/rubenwardy/testmod"
|
test_repo = "https://gitlab.com/rubenwardy/testmod"
|
||||||
master_head = "23d12265ff6de84548b2e3e90dc7351a54f63f00"
|
master_head = "23d12265ff6de84548b2e3e90dc7351a54f63f00"
|
||||||
@ -37,6 +36,19 @@ def test_get_latest_commit():
|
|||||||
assert get_latest_commit(test_repo, "test-branch") == test_branch_head
|
assert get_latest_commit(test_repo, "test-branch") == test_branch_head
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_commit_list():
|
||||||
|
result = get_commit_list(test_repo, "4fd0d06df2cc502b0cbc3ee932217b540f0d92ad", "23d12265ff6de84548b2e3e90dc7351a54f63f00")
|
||||||
|
assert result == [
|
||||||
|
"Update .cdb.json",
|
||||||
|
"Update mod.conf",
|
||||||
|
"Update mod.conf",
|
||||||
|
"Update mod.conf",
|
||||||
|
"Update mod.conf",
|
||||||
|
"Update mod.conf",
|
||||||
|
"Update mod.conf",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def test_git_clone_head():
|
def test_git_clone_head():
|
||||||
with clone_repo(test_repo, recursive=True) as repo:
|
with clone_repo(test_repo, recursive=True) as repo:
|
||||||
assert repo.head.commit.hexsha == master_head
|
assert repo.head.commit.hexsha == master_head
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
|
|
||||||
import contextlib
|
import contextlib
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
import git
|
import git
|
||||||
import gitdb
|
import gitdb
|
||||||
import os
|
import os
|
||||||
@ -26,7 +28,7 @@ from urllib.parse import urlsplit
|
|||||||
from git import GitCommandError
|
from git import GitCommandError
|
||||||
|
|
||||||
from app.tasks import TaskError
|
from app.tasks import TaskError
|
||||||
from app.utils import random_string
|
from app.utils import random_string, normalize_line_endings
|
||||||
|
|
||||||
|
|
||||||
def generate_git_url(urlstr):
|
def generate_git_url(urlstr):
|
||||||
@ -122,3 +124,23 @@ def get_latest_tag(git_url):
|
|||||||
tag = hash_ref_list[1].replace("refs/tags/", "")
|
tag = hash_ref_list[1].replace("refs/tags/", "")
|
||||||
commit_hash = repo.git.rev_parse(tag + "^{}")
|
commit_hash = repo.git.rev_parse(tag + "^{}")
|
||||||
return tag, commit_hash
|
return tag, commit_hash
|
||||||
|
|
||||||
|
|
||||||
|
def get_commit_list(git_url: str, start: str, end: str) -> List[str]:
|
||||||
|
with (get_temp_dir() as git_dir):
|
||||||
|
repo = git.Repo.init(git_dir)
|
||||||
|
origin = repo.create_remote("origin", url=git_url)
|
||||||
|
origin.fetch()
|
||||||
|
|
||||||
|
commits = repo.iter_commits(f"{start}..{end}")
|
||||||
|
ret = [commit.summary for commit in commits]
|
||||||
|
ret.reverse()
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def get_release_notes(git_url: str, start: str, end: str) -> Optional[str]:
|
||||||
|
commits = get_commit_list(git_url, start, end)
|
||||||
|
if len(commits) == 0:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return normalize_line_endings("\n".join(map(lambda x: f"- {x}", commits)) + f"\n<!-- auto from {start} to {end} -->")
|
||||||
|
Loading…
Reference in New Issue
Block a user