Skip to content

Commit 5bfc868

Browse files
authored
Merge pull request #15 from neatc0der/feature/build-info
Feature/build info
2 parents 83a8371 + 77e392d commit 5bfc868

File tree

4 files changed

+102
-2
lines changed

4 files changed

+102
-2
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import json
2+
from typing import Dict, List
3+
from urllib3.poolmanager import PoolManager
4+
from urllib3.response import HTTPResponse
5+
6+
from github.GitRelease import GitRelease
7+
8+
from mkdocs_markmap.__meta__ import PROJECT_NAME
9+
from .common import GithubHandler
10+
11+
12+
PYPI_URL = f'https://pypi.org/pypi/{PROJECT_NAME}/json'
13+
14+
15+
class ReleaseInfo(GithubHandler):
16+
def print(self, github: bool = True, pypi: bool = False) -> None:
17+
if github:
18+
self._print_github()
19+
if pypi:
20+
self._print_pypi()
21+
22+
def _print_github(self) -> None:
23+
release: GitRelease
24+
if self.tag is None:
25+
release = self.repository.get_latest_release()
26+
27+
else:
28+
try:
29+
release = next(r for r in self.repository.get_releases() if r.tag_name == self.tag)
30+
except StopIteration:
31+
print(f'release not found on github: {self.tag}')
32+
return
33+
34+
print(f"""
35+
Release: {release.title}
36+
Url: {release.url}
37+
Created: {release.created_at}
38+
Published: {release.published_at}
39+
Draft: {release.draft}
40+
Prerelease: {release.prerelease}
41+
Assets: {', '.join(a.name for a in release.get_assets())}
42+
""")
43+
44+
def _print_pypi(self) -> None:
45+
http: PoolManager = PoolManager()
46+
response: HTTPResponse = http.request('GET', PYPI_URL)
47+
if response.status != 200:
48+
print(f'error on pypi request: {response._request_url} ({response.status})')
49+
return
50+
51+
project_data = json.loads(response.data)
52+
release_url: str = project_data['info']['release_url']
53+
downloads: Dict[str, int] = project_data['info']['downloads']
54+
55+
version: str
56+
if self.tag is None:
57+
version = project_data['info']['version']
58+
else:
59+
version = self.tag[1:]
60+
release_url = release_url.replace(project_data['info']['version'], version)
61+
62+
try:
63+
assets: List[Dict[str, str]] = project_data['releases'][version]
64+
except KeyError:
65+
print(f'release not found on pypi: {self.tag}')
66+
return
67+
68+
uploaded: str
69+
if not any(assets):
70+
uploaded = 'no assets!'
71+
else:
72+
uploaded = assets[0]['upload_time'].replace('T', ' ')
73+
74+
print(f"""
75+
Release: {version}
76+
Url: {release_url}
77+
Assets: {', '.join(a['filename'] for a in assets)}
78+
Uploaded: {uploaded}
79+
Downloads:
80+
Last Month: {downloads['last_month']}
81+
Last Week: {downloads['last_week']}
82+
Last Day: {downloads['last_day']}
83+
""")

.github/workflows/distribute.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
release:
55
types:
66
- published
7+
- released
78

89
jobs:
910
build:

.github/workflows/release.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,6 @@ jobs:
3030
- name: Create Release
3131
env:
3232
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
33-
run: inv release --no-dry-run
33+
run: |
34+
inv release --no-dry-run
35+
inv latest --github

tasks.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
sys.path.insert(0, str(PROJECT_PATH / '.build'))
99

1010
from mkdocs_markmap.__meta__ import PROJECT_VERSION
11-
from mkdocs_markmap_build.common import ChangelogLoader
1211
from mkdocs_markmap_build.distribution import DistributionHandler
12+
from mkdocs_markmap_build.info import ReleaseInfo
1313
from mkdocs_markmap_build.release import ReleaseHandler
1414

1515

@@ -49,6 +49,20 @@ def release(c, commit=None, tag=TARGET_TAG, dry_run=True):
4949
handler.create(commit, dry_run=dry_run)
5050

5151

52+
@task
53+
def info(c, tag=None, github=False, pypi=False):
54+
if tag is None:
55+
print('show latest release info')
56+
else:
57+
print(f'show release info: {tag}')
58+
59+
print_github = github or not (github or pypi)
60+
print_pypi = pypi or not (github or pypi)
61+
62+
release: ReleaseInfo = ReleaseInfo(tag)
63+
release.print(github=print_github, pypi=print_pypi)
64+
65+
5266
@task
5367
def distribute(c, tag=TARGET_TAG, dry_run=True):
5468
print(f'distribute release: {tag}')

0 commit comments

Comments
 (0)