Files
tfm_ainventory/scripts/save_version.py

92 lines
2.8 KiB
Python

import json
import subprocess
import os
import sys
from datetime import datetime
VERSION_FILE = 'frontend/VERSION.json'
GIT_PATH_FILE = '.git_path'
def get_git_path():
if os.path.exists(GIT_PATH_FILE):
with open(GIT_PATH_FILE, 'r') as f:
return f.read().strip()
return 'git'
def run_command(cmd):
print(f"Executing: {' '.join(cmd)}")
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
print(f"Error: {result.stderr}")
sys.exit(1)
return result.stdout.strip()
def main():
git = get_git_path()
# 1. Read and Parse Version
if not os.path.exists(VERSION_FILE):
print(f"Error: {VERSION_FILE} not found.")
sys.exit(1)
with open(VERSION_FILE, 'r') as f:
data = json.load(f)
old_version = data.get('version', '1.0.0')
parts = old_version.split('.')
if len(parts) < 3:
parts.extend(['0'] * (3 - len(parts)))
# Check for --minor or --major flags
if '--minor' in sys.argv:
parts[1] = str(int(parts[1]) + 1)
parts[2] = '0'
elif '--major' in sys.argv:
parts[0] = str(int(parts[0]) + 1)
parts[1] = '0'
parts[2] = '0'
else:
# Default: patch increment
parts[2] = str(int(parts[2]) + 1)
new_version = '.'.join(parts)
data['version'] = new_version
data['last_build'] = datetime.now().strftime("%Y-%m-%d-%H%M")
# Get current git commit (short)
try:
commit_hash = run_command([git, 'rev-parse', '--short', 'HEAD'])
data['commit'] = commit_hash
except Exception:
data['commit'] = 'unknown'
# Optional: Rotate changelog if needed, but for now just update version
print(f"Incrementing version: {old_version} -> {new_version} (commit: {data['commit']})")
with open(VERSION_FILE, 'w') as f:
json.dump(data, f, indent=2)
# 2. Git Operations
run_command([git, 'add', '.'])
run_command([git, 'commit', '-m', f"Build [v{new_version}]"])
# 3. Create branch (snapshot)
branch_name = f"v{new_version}"
run_command([git, 'branch', branch_name])
# 4. Update master branch
print(f"🔄 Updating 'master' branch to v{new_version}...")
current_branch = run_command([git, 'rev-parse', '--abbrev-ref', 'HEAD'])
run_command([git, 'checkout', 'master'])
run_command([git, 'merge', current_branch])
run_command([git, 'checkout', current_branch])
# 5. Create Production Bundle
print("📦 Generating production bundle...")
run_command(['python3', 'scripts/export_prod.py'])
print(f"Successfully saved version {new_version}, created branch {branch_name}, updated 'master', and generated production archive in backups/.")
if __name__ == "__main__":
main()