Skip to content

Commit dbdf45f

Browse files
committed
first version of the generator
1 parent 46a2759 commit dbdf45f

File tree

6 files changed

+84
-0
lines changed

6 files changed

+84
-0
lines changed

gitlabrng/VERSION

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0.1.0

gitlabrng/__init__.py

Whitespace-only changes.

gitlabrng/generate.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import gitlab
2+
from datetime import datetime
3+
4+
5+
def generate_release_notes(project_id, gitlab_url='https://gitlab.com/'):
6+
"""
7+
Generate the release notes of a gitlab project from the last release
8+
"""
9+
gl = gitlab.Gitlab(gitlab_url)
10+
project = gl.projects.get(project_id)
11+
12+
if not project.mergerequests.list(state='merged'):
13+
raise ValueError(f"There is not merged merge request for project {project_id} {project.name}")
14+
15+
last_mr_date = datetime.fromisoformat(project.mergerequests.list(state='merged', order_by='updated_at', per_page=1)[0].merged_at)
16+
if not project.releases.list():
17+
last_release_date = datetime(1900, 1, 1)
18+
log = f"Changelog :\n"
19+
else:
20+
last_release = project.releases.list()[0]
21+
last_release_date = datetime.fromisoformat(last_release.created_at)
22+
if last_mr_date < last_release_date:
23+
raise ValueError(f"There is no merged merge request after the last release {last_release.name}")
24+
log = f"Changelog since release {last_release.name} :\n"
25+
26+
print(log)
27+
page = 0
28+
while last_mr_date > last_release_date:
29+
for imr, mr in enumerate(eossr.mergerequests.list(state='merged', order_by='updated_at', page=page)):
30+
last_mr_date = datetime.fromisoformat(mr.merged_at)
31+
if last_mr_date < last_release_date:
32+
continue
33+
line = f" * {mr.title} (@{mr.author['username']})"
34+
log += line
35+
print(line)
36+
page+=1

requirements-test.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pytest

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
python-gitlab>=3.0

setup.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
"""Python setup.py for testtemplate2 package"""
2+
import io
3+
import os
4+
from setuptools import find_packages, setup
5+
6+
7+
def read(*paths, **kwargs):
8+
"""Read the contents of a text file safely.
9+
>>> read("gitlabrng", "VERSION")
10+
'0.1.0'
11+
>>> read("README.md")
12+
...
13+
"""
14+
content = ""
15+
with io.open(
16+
os.path.join(os.path.dirname(__file__), *paths),
17+
encoding=kwargs.get("encoding", "utf8"),
18+
) as open_file:
19+
content = open_file.read().strip()
20+
return content
21+
22+
23+
def read_requirements(path):
24+
return [
25+
line.strip()
26+
for line in read(path).split("\n")
27+
if not line.startswith(('"', "#", "-", "git+"))
28+
]
29+
30+
31+
setup(
32+
name="gitlabrenogen",
33+
version=read("gitlabrng", "VERSION"),
34+
description="Generate release notes for a gitlab project",
35+
url="https://github.com/vuillaut/GitlabReleaseNotesGenerator/",
36+
long_description=read("README.md"),
37+
long_description_content_type="text/markdown",
38+
author="vuillaut",
39+
packages=find_packages(exclude=["tests", ".github"]),
40+
install_requires=read_requirements("requirements.txt"),
41+
entry_points={
42+
"console_scripts": ["testtemplate2 = gitlabrng.__main__:main"]
43+
},
44+
extras_require={"test": read_requirements("requirements-test.txt")},
45+
)

0 commit comments

Comments
 (0)