Skip to content

Commit 044c208

Browse files
committed
- Add utils
1 parent 91ae5a5 commit 044c208

File tree

6 files changed

+182
-6
lines changed

6 files changed

+182
-6
lines changed

Makefile

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,23 @@ init: ## Initialize the project based on an application template.
115115
@./.github/init.sh
116116

117117

118-
# This project has been generated from rochacbruno/python-project-template
119-
# __author__ = 'rochacbruno'
120-
# __repo__ = https://github.com/rochacbruno/python-project-template
121-
# __sponsor__ = https://github.com/sponsors/rochacbruno/
118+
install-keras:
119+
@echo "Installing Keras..."
120+
sudo apt-get update -y
121+
sudo apt-get install graphviz -y
122+
pip install -r requirements.txt
123+
@echo "Done."
124+
125+
create-requirement-full:
126+
@echo "Creating requirements.txt..."
127+
@echo "Reading requirements.txt..."
128+
@cat requirements.txt >> requirements-full.txt
129+
@echo "Reading requirements-test.txt..."
130+
@cat requirements-test.txt >> requirements-full.txt
131+
@echo "Reading requirements-keras.txt..."
132+
@cat requirements-keras.txt >> requirements-full.txt
133+
@echo "requirements-full.txt created."
134+
135+
release:
136+
@echo "Creating release"
137+
python scripts/create-new-release.py

requirements-full.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
scikit-learn
2+
matplotlib
3+
xgboost
4+
dtreeviz
5+
tabulate
6+
seaborn
7+
pandas# This requirements are for development and testing only, not for production.
8+
pytest
9+
coverage
10+
flake8
11+
black
12+
isort
13+
pytest-cov
14+
codecov
15+
mypy
16+
gitchangelog
17+
mkdocs
18+
jax[cuda12_pip]
19+
keras

requirements-keras.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
jax[cuda12_pip]
2+
keras

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ xgboost
44
dtreeviz
55
tabulate
66
seaborn
7-
pandas
7+
pandas
8+
python-dotenv

scripts/create-new-release.py

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
import argparse
2+
import os
3+
import subprocess
4+
from glob import glob
5+
6+
import git
7+
import requests
8+
from dotenv import load_dotenv
9+
10+
load_dotenv()
11+
github_token = os.environ.get("GITHUB_TOKEN")
12+
13+
if not github_token:
14+
raise ValueError("GITHUB_TOKEN is not set")
15+
16+
headers = {
17+
"Authorization": f"token {github_token}",
18+
"Accept": "application/vnd.github.v3+json",
19+
}
20+
21+
22+
def get_user_and_email():
23+
url = "https://api.github.com/user"
24+
res = requests.get(url, headers=headers)
25+
data = res.json()
26+
user_name = data["login"]
27+
email = data["email"]
28+
return user_name, email
29+
30+
31+
def bump_version(version):
32+
version_path = glob("**/VERSION", recursive=True)[0]
33+
with open(version_path, "w") as f:
34+
f.write(version)
35+
36+
# set current user email and name
37+
username, email = get_user_and_email()
38+
subprocess.run(["git", "config", "user.email", email])
39+
subprocess.run(["git", "config", "user.name", username])
40+
41+
# commit the change
42+
subprocess.run(["git", "add", version_path])
43+
subprocess.run(["git", "commit", "-m", f"Bump version to {version}"])
44+
subprocess.run(["git", "push"])
45+
print(f"Bumped version to {version}")
46+
47+
48+
def get_version():
49+
version_file = glob("**/VERSION", recursive=True)[0]
50+
with open(version_file, "r") as f:
51+
return f.read().strip()
52+
53+
54+
def get_next_version(version):
55+
major, minor, patch = version.split(".")
56+
return f"{major}.{minor}.{int(patch) + 1}"
57+
58+
59+
def get_diff_between_versions(old_version, new_version):
60+
return subprocess.run(
61+
["git", "log", f"{old_version}..{new_version}", "--oneline"],
62+
capture_output=True,
63+
).stdout.decode()
64+
65+
66+
def get_current_user_name_with_github_token():
67+
url = "https://api.github.com/user"
68+
69+
res = requests.get(url, headers=headers)
70+
res.raise_for_status()
71+
return res.json()["login"]
72+
73+
74+
def get_current_repo_name():
75+
current_path = os.getcwd()
76+
77+
repo = git.Repo(current_path)
78+
return repo.remotes.origin.url.split("/")[-1].replace(".git", "")
79+
80+
81+
def create_release(next_version=None):
82+
from_version = get_version()
83+
next_version = next_version or get_next_version(from_version)
84+
current_user_name = get_current_user_name_with_github_token()
85+
current_repo = get_current_repo_name()
86+
bump_version(next_version)
87+
88+
# create tag
89+
tag_url = (
90+
f"https://api.github.com/repos/{current_user_name}/{current_repo}/git/refs"
91+
)
92+
current_commit_id = subprocess.run(
93+
["git", "rev-parse", "HEAD"], capture_output=True
94+
).stdout.decode()
95+
tag_data = {"ref": f"refs/tags/{next_version}", "sha": current_commit_id.strip()}
96+
97+
res = requests.post(tag_url, headers=headers, json=tag_data)
98+
res.raise_for_status()
99+
100+
change_log = get_diff_between_versions(from_version, next_version)
101+
release_url = (
102+
f"https://api.github.com/repos/{current_user_name}/{current_repo}/releases"
103+
)
104+
release_data = {"tag_name": next_version, "name": next_version, "body": change_log}
105+
106+
res = requests.post(release_url, headers=headers, json=release_data)
107+
res.raise_for_status()
108+
print(f"Release created for version {next_version}")
109+
print(f"Change log: {change_log}")
110+
print(f'Release URL: {res.json()["html_url"]}')
111+
print(f'Release ID: {res.json()["id"]}')
112+
return next_version
113+
114+
115+
if __name__ == "__main__":
116+
117+
# Define the parser
118+
parser = argparse.ArgumentParser()
119+
120+
# Define an argument "-v" for version
121+
parser.add_argument("-v", "--version", help="version number like 1.0.0")
122+
123+
# Parse the arguments
124+
args = parser.parse_args()
125+
version = args.version
126+
if version:
127+
create_release(version)
128+
else:
129+
current_version = get_version()
130+
next_version = get_next_version(current_version)
131+
input(
132+
f"Version is not provided. Press Enter to create a release for '{current_version} --> {next_version}'"
133+
)
134+
create_release()

setup.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,9 @@ def read_requirements(path):
4141
packages=find_packages(exclude=["tests", ".github"]),
4242
install_requires=read_requirements("requirements.txt"),
4343
entry_points={"console_scripts": ["evo_science = evo_science.__main__:main"]},
44-
extras_require={"test": read_requirements("requirements-test.txt")},
44+
extras_require={
45+
"test": read_requirements("requirements-test.txt"),
46+
"keras": read_requirements("requirements-keras.txt"),
47+
"full": read_requirements("requirements-full.txt"),
48+
},
4549
)

0 commit comments

Comments
 (0)