Skip to content

Commit 402e463

Browse files
committed
Added git commit/push to bump script
1 parent c76a344 commit 402e463

6 files changed

Lines changed: 169 additions & 7 deletions

File tree

remove-json-keys/utils/bump.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
from pathlib import Path
33
from types import SimpleNamespace as sn
44

5-
from lib import toml
5+
from lib import git, toml
66

77
paths = sn(root=Path(__file__).parent.parent)
88
paths.pyproject = paths.root / 'pyproject.toml'
9-
paths.package_data = paths.root / 'src/translate_messages/assets/data/package_data.json'
9+
paths.package_data = paths.root / 'src/remove_json_keys/assets/data/package_data.json'
1010
paths.readme = paths.root / 'docs/README.md'
1111
paths.msgs = paths.root / 'utils/data/messages.json'
1212
sys.path.insert(0, str(paths.root / 'src'))
@@ -20,6 +20,8 @@ def parse_args():
2020
argp.add_argument('-M', '--major', action='store_true', help=msgs.help_MAJOR)
2121
argp.add_argument('-m', '--minor', action='store_true', help=msgs.help_MINOR)
2222
argp.add_argument('-p', '--patch', action='store_true', help=msgs.help_PATCH)
23+
argp.add_argument('-n', '--no-commit', '--skip-commit', action='store_true', help=msgs.help_NO_COMMIT)
24+
argp.add_argument('-N', '--no-push', '--skip-push', action='store_true', help=msgs.help_NO_PUSH)
2325
argp.add_argument('-h', '--help', action='help', help=msgs.help_HELP)
2426
return argp.parse_args()
2527

@@ -80,4 +82,22 @@ def main():
8082
bump_package_data_ver(project, new_ver)
8183
update_readme_vers(new_ver)
8284

85+
# Git commit/push
86+
if args.no_commit:
87+
log.info(f'{msgs.log_SKIPPING_GIT_COMMIT}...')
88+
else:
89+
git.init_kudo_sync_bot(msgs)
90+
log.info(f'{msgs.log_COMMITTING_CHANGES}...')
91+
git.commit([str(paths.pyproject), str(paths.package_data)], f'Bumped {project.name} versions to {new_ver}')
92+
git.commit([str(paths.readme)], f'Updated {project.name} versions in README URLs to {new_ver}')
93+
if args.no_push:
94+
log.info(f'{msgs.log_SKIPPING_GIT_PUSH}...')
95+
else:
96+
log.info(f'{msgs.log_PUSHING_CHANGES}...')
97+
git.push()
98+
log.success(f'{msgs.log_PUSHED_ALL_COMMITS}')
99+
git.restore_og_config(msgs)
100+
101+
log.success(f'\n{msgs.log_SUCCESS}! {project.name} {msgs.log_BUMPED_TO} v{new_ver}!')
102+
83103
if __name__ == '__main__' : main()

remove-json-keys/utils/data/messages.json

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44
"help_MAJOR": { "message": "Bump the major (\\033[1mx\\033[0m.y.z) version" },
55
"help_MINOR": { "message": "Bump the minor (x.\\033[1my\\033[0m.z) version" },
66
"help_PATCH": { "message": "Bump the patch (x.y.\\033[1mz\\033[0m) version" },
7+
"help_NO_COMMIT": { "message": "Skip Git commit" },
8+
"help_NO_PUSH": { "message": "Skip Git push" },
79
"help_HELP": { "message": "Show help screen" },
8-
"err_MISSING_BUMP_TYPE_ARG": { "message": "You must pass --<major|minor|patch> as an argument." },
10+
"err_MISSING_BUMP_TYPE_ARG": { "message": "You must pass --<major|minor|patch> as an argument" },
11+
"err_GIT_CMD_FAILED": { "message": "Git command failed" },
12+
"warn_GIT_CONFIG_BACKUP_NOT_FOUND": { "message": "No git config backup found" },
913
"log_LOADING_PYPROJECT": { "message": "Loading {pyproject_path}" },
1014
"log_BUMPED_PROJECT_VER": { "message": "Bumped project.version in pyproject.toml from [{prev_ver}] to [{new_ver}]" },
1115
"log_GENERATED_CLOG_URL": { "message": "Generated Changelog URL" },
@@ -14,7 +18,16 @@
1418
"log_BUMPING_VER_IN": { "message": "Bumping version in" },
1519
"log_BUMPED_PACKAGE_DATA_VER": { "message": "Bumped version in package_data.json from [{prev_ver}] to [{new_ver}]!" },
1620
"log_UPDATING_VERS_IN": { "message": "Updating versions in" },
17-
"log_UPDATED_README_VERS": { "message": "Updated versions in README URLs to [{new_ver}]!" }
21+
"log_UPDATED_README_VERS": { "message": "Updated versions in README URLs to [{new_ver}]!" },
22+
"log_SWITCHING_TO_KUDO_SYNC_BOT": { "message": "Switching Git committer to kudo-sync-bot" },
23+
"log_SKIPPING_GIT_COMMIT": { "message": "Skipping Git commit (--no-commit used)" },
24+
"log_SKIPPING_GIT_PUSH": { "message": "Skipping Git push (--no-push used)" },
25+
"log_COMMITTING_CHANGES": { "message": "Committing changes to Git" },
26+
"log_PUSHING_CHANGES": { "message": "Pushing changes to Git" },
27+
"log_PUSHED_ALL_COMMITS": { "message": "Pushed all commits to remote" },
28+
"log_RESTORING_OG_GIT_CONFIG": { "message": "Restoring original Git config" },
29+
"log_SUCCESS": { "message": "Success" },
30+
"log_BUMPED_TO": { "message": "bumped to" }
1831
},
1932
"clean": {
2033
"log_REMOVED": { "message": "Removed" },

remove-json-keys/utils/lib/git.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from pathlib import Path
2+
import sys, subprocess, os
3+
4+
sys.path.insert(0, str(Path(__file__).parent.parent.parent / 'src'))
5+
from translate_messages.lib import log # type: ignore
6+
7+
def commit(files, msg) : run('add', *files) ; run('commit', '-n', '-m', msg)
8+
9+
def init_kudo_sync_bot(msgs):
10+
log.info(f'{msgs.log_SWITCHING_TO_KUDO_SYNC_BOT}...\n')
11+
with open(Path.home() / '.gitconfig.backup', 'w') as file: # back up git config
12+
file.write(run('config', '--global', '--list'))
13+
gpg_keys_path = os.environ.get('GPG_KEYS_PATH')
14+
if gpg_keys_path:
15+
key_path = Path(gpg_keys_path) / 'kudo-sync-bot-private-key.asc'
16+
if key_path.exists():
17+
subprocess.run(['gpg', '--batch', '--import', str(key_path)], check=True)
18+
key_id_path = Path(gpg_keys_path) / 'kudo-sync-bot-key-id.txt'
19+
if key_id_path.exists():
20+
key_id = key_id_path.read_text().strip()
21+
run('config', '--global', 'user.signingkey', key_id)
22+
run('config', '--global', 'commit.gpgsign', 'true')
23+
run('config', '--global', 'user.name', 'kudo-sync-bot')
24+
run('config', '--global', 'user.email', 'auto-sync@kudoai.com')
25+
return True
26+
27+
def push() : run('push')
28+
29+
def restore_og_config(msgs):
30+
log.info(f'{msgs.log_RESTORING_OG_GIT_CONFIG}...')
31+
backup_path = Path.home() / '.gitconfig.backup'
32+
if backup_path.exists():
33+
with open(backup_path) as file:
34+
for line in file:
35+
if '=' in line:
36+
key, val = line.strip().split('=', 1)
37+
run('config', '--global', key, val)
38+
backup_path.unlink()
39+
else:
40+
log.warn(msgs.warn_GIT_CONFIG_BACKUP_NOT_FOUND)
41+
42+
def run(*args):
43+
result = subprocess.run(['git'] + list(args), capture_output=True, text=True)
44+
if result.returncode != 0:
45+
log.error(f"Git command failed: {' '.join(['git'] + list(args))}")
46+
log.error(result.stderr)
47+
sys.exit(1)
48+
return result.stdout.strip()

translate-messages/utils/bump.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pathlib import Path
33
from types import SimpleNamespace as sn
44

5-
from lib import toml
5+
from lib import git, toml
66

77
paths = sn(root=Path(__file__).parent.parent)
88
paths.pyproject = paths.root / 'pyproject.toml'
@@ -20,6 +20,8 @@ def parse_args():
2020
argp.add_argument('-M', '--major', action='store_true', help=msgs.help_MAJOR)
2121
argp.add_argument('-m', '--minor', action='store_true', help=msgs.help_MINOR)
2222
argp.add_argument('-p', '--patch', action='store_true', help=msgs.help_PATCH)
23+
argp.add_argument('-n', '--no-commit', '--skip-commit', action='store_true', help=msgs.help_NO_COMMIT)
24+
argp.add_argument('-N', '--no-push', '--skip-push', action='store_true', help=msgs.help_NO_PUSH)
2325
argp.add_argument('-h', '--help', action='help', help=msgs.help_HELP)
2426
return argp.parse_args()
2527

@@ -80,4 +82,22 @@ def main():
8082
bump_package_data_ver(project, new_ver)
8183
update_readme_vers(new_ver)
8284

85+
# Git commit/push
86+
if args.no_commit:
87+
log.info(f'{msgs.log_SKIPPING_GIT_COMMIT}...')
88+
else:
89+
git.init_kudo_sync_bot(msgs)
90+
log.info(f'{msgs.log_COMMITTING_CHANGES}...')
91+
git.commit([str(paths.pyproject), str(paths.package_data)], f'Bumped {project.name} versions to {new_ver}')
92+
git.commit([str(paths.readme)], f'Updated {project.name} versions in README URLs to {new_ver}')
93+
if args.no_push:
94+
log.info(f'{msgs.log_SKIPPING_GIT_PUSH}...')
95+
else:
96+
log.info(f'{msgs.log_PUSHING_CHANGES}...')
97+
git.push()
98+
log.success(f'{msgs.log_PUSHED_ALL_COMMITS}')
99+
git.restore_og_config(msgs)
100+
101+
log.success(f'\n{msgs.log_SUCCESS}! {project.name} {msgs.log_BUMPED_TO} v{new_ver}!')
102+
83103
if __name__ == '__main__' : main()

translate-messages/utils/data/messages.json

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44
"help_MAJOR": { "message": "Bump the major (\\033[1mx\\033[0m.y.z) version" },
55
"help_MINOR": { "message": "Bump the minor (x.\\033[1my\\033[0m.z) version" },
66
"help_PATCH": { "message": "Bump the patch (x.y.\\033[1mz\\033[0m) version" },
7+
"help_NO_COMMIT": { "message": "Skip Git commit" },
8+
"help_NO_PUSH": { "message": "Skip Git push" },
79
"help_HELP": { "message": "Show help screen" },
8-
"err_MISSING_BUMP_TYPE_ARG": { "message": "You must pass --<major|minor|patch> as an argument." },
10+
"err_MISSING_BUMP_TYPE_ARG": { "message": "You must pass --<major|minor|patch> as an argument" },
11+
"err_GIT_CMD_FAILED": { "message": "Git command failed" },
12+
"warn_GIT_CONFIG_BACKUP_NOT_FOUND": { "message": "No git config backup found" },
913
"log_LOADING_PYPROJECT": { "message": "Loading {pyproject_path}" },
1014
"log_BUMPED_PROJECT_VER": { "message": "Bumped project.version in pyproject.toml from [{prev_ver}] to [{new_ver}]" },
1115
"log_GENERATED_CLOG_URL": { "message": "Generated Changelog URL" },
@@ -14,7 +18,16 @@
1418
"log_BUMPING_VER_IN": { "message": "Bumping version in" },
1519
"log_BUMPED_PACKAGE_DATA_VER": { "message": "Bumped version in package_data.json from [{prev_ver}] to [{new_ver}]!" },
1620
"log_UPDATING_VERS_IN": { "message": "Updating versions in" },
17-
"log_UPDATED_README_VERS": { "message": "Updated versions in README URLs to [{new_ver}]!" }
21+
"log_UPDATED_README_VERS": { "message": "Updated versions in README URLs to [{new_ver}]!" },
22+
"log_SWITCHING_TO_KUDO_SYNC_BOT": { "message": "Switching Git committer to kudo-sync-bot" },
23+
"log_SKIPPING_GIT_COMMIT": { "message": "Skipping Git commit (--no-commit used)" },
24+
"log_SKIPPING_GIT_PUSH": { "message": "Skipping Git push (--no-push used)" },
25+
"log_COMMITTING_CHANGES": { "message": "Committing changes to Git" },
26+
"log_PUSHING_CHANGES": { "message": "Pushing changes to Git" },
27+
"log_PUSHED_ALL_COMMITS": { "message": "Pushed all commits to remote" },
28+
"log_RESTORING_OG_GIT_CONFIG": { "message": "Restoring original Git config" },
29+
"log_SUCCESS": { "message": "Success" },
30+
"log_BUMPED_TO": { "message": "bumped to" }
1831
},
1932
"clean": {
2033
"log_REMOVED": { "message": "Removed" },
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from pathlib import Path
2+
import sys, subprocess, os
3+
4+
sys.path.insert(0, str(Path(__file__).parent.parent.parent / 'src'))
5+
from translate_messages.lib import log # type: ignore
6+
7+
def commit(files, msg) : run('add', *files) ; run('commit', '-n', '-m', msg)
8+
9+
def init_kudo_sync_bot(msgs):
10+
log.info(f'{msgs.log_SWITCHING_TO_KUDO_SYNC_BOT}...\n')
11+
with open(Path.home() / '.gitconfig.backup', 'w') as file: # back up git config
12+
file.write(run('config', '--global', '--list'))
13+
gpg_keys_path = os.environ.get('GPG_KEYS_PATH')
14+
if gpg_keys_path:
15+
key_path = Path(gpg_keys_path) / 'kudo-sync-bot-private-key.asc'
16+
if key_path.exists():
17+
subprocess.run(['gpg', '--batch', '--import', str(key_path)], check=True)
18+
key_id_path = Path(gpg_keys_path) / 'kudo-sync-bot-key-id.txt'
19+
if key_id_path.exists():
20+
key_id = key_id_path.read_text().strip()
21+
run('config', '--global', 'user.signingkey', key_id)
22+
run('config', '--global', 'commit.gpgsign', 'true')
23+
run('config', '--global', 'user.name', 'kudo-sync-bot')
24+
run('config', '--global', 'user.email', 'auto-sync@kudoai.com')
25+
return True
26+
27+
def push() : run('push')
28+
29+
def restore_og_config(msgs):
30+
log.info(f'{msgs.log_RESTORING_OG_GIT_CONFIG}...')
31+
backup_path = Path.home() / '.gitconfig.backup'
32+
if backup_path.exists():
33+
with open(backup_path) as file:
34+
for line in file:
35+
if '=' in line:
36+
key, val = line.strip().split('=', 1)
37+
run('config', '--global', key, val)
38+
backup_path.unlink()
39+
else:
40+
log.warn(msgs.warn_GIT_CONFIG_BACKUP_NOT_FOUND)
41+
42+
def run(*args):
43+
result = subprocess.run(['git'] + list(args), capture_output=True, text=True)
44+
if result.returncode != 0:
45+
log.error(f"Git command failed: {' '.join(['git'] + list(args))}")
46+
log.error(result.stderr)
47+
sys.exit(1)
48+
return result.stdout.strip()

0 commit comments

Comments
 (0)