mirror of
https://github.com/theniceboy/.config.git
synced 2025-12-26 14:44:57 +08:00
brew upgrade script
This commit is contained in:
parent
ca579774ca
commit
7c141f1fc8
1 changed files with 87 additions and 1 deletions
|
|
@ -265,6 +265,92 @@ def install_brew_packages():
|
||||||
print("✅ All packages already installed")
|
print("✅ All packages already installed")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def get_brew_outdated():
|
||||||
|
result = subprocess.run(
|
||||||
|
['brew', 'outdated', '--greedy', '--verbose', '--json=v2'],
|
||||||
|
capture_output=True,
|
||||||
|
text=True
|
||||||
|
)
|
||||||
|
|
||||||
|
stdout = result.stdout.strip()
|
||||||
|
if not stdout:
|
||||||
|
return []
|
||||||
|
|
||||||
|
try:
|
||||||
|
data = json.loads(stdout)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
return []
|
||||||
|
|
||||||
|
upgrades = []
|
||||||
|
|
||||||
|
for formula in data.get('formulae') or []:
|
||||||
|
name = formula.get('name')
|
||||||
|
installed = formula.get('installed_versions') or []
|
||||||
|
current = formula.get('current_version')
|
||||||
|
if name and installed and current:
|
||||||
|
from_version = installed[-1]
|
||||||
|
upgrades.append(f"{name} {from_version}->{current}")
|
||||||
|
|
||||||
|
for cask in data.get('casks') or []:
|
||||||
|
name = cask.get('name')
|
||||||
|
installed = cask.get('installed_versions') or []
|
||||||
|
current = cask.get('current_version')
|
||||||
|
if isinstance(name, list):
|
||||||
|
name = name[0] if name else None
|
||||||
|
if name and installed and current:
|
||||||
|
from_version = installed[-1]
|
||||||
|
upgrades.append(f"{name} {from_version}->{current}")
|
||||||
|
|
||||||
|
return upgrades
|
||||||
|
|
||||||
|
def create_brew_update_action():
|
||||||
|
def action():
|
||||||
|
if shutil.which('brew') is None:
|
||||||
|
return False, "", "brew not found"
|
||||||
|
|
||||||
|
before = get_brew_outdated()
|
||||||
|
output_parts = []
|
||||||
|
|
||||||
|
update_result = subprocess.run(
|
||||||
|
['brew', 'update'],
|
||||||
|
capture_output=True,
|
||||||
|
text=True
|
||||||
|
)
|
||||||
|
output_parts.extend([update_result.stdout or "", update_result.stderr or ""])
|
||||||
|
if update_result.returncode != 0:
|
||||||
|
return False, "", "".join(output_parts)
|
||||||
|
|
||||||
|
upgrade_result = subprocess.run(
|
||||||
|
['brew', 'upgrade', '--greedy'],
|
||||||
|
capture_output=True,
|
||||||
|
text=True
|
||||||
|
)
|
||||||
|
output_parts.extend([upgrade_result.stdout or "", upgrade_result.stderr or ""])
|
||||||
|
if upgrade_result.returncode != 0:
|
||||||
|
return False, "", "".join(output_parts)
|
||||||
|
|
||||||
|
after = get_brew_outdated()
|
||||||
|
|
||||||
|
note = ""
|
||||||
|
if before:
|
||||||
|
before_names = {entry.split()[0] for entry in before if entry.split()}
|
||||||
|
after_names = {entry.split()[0] for entry in after if entry.split()} if after else set()
|
||||||
|
updated_entries = [entry for entry in before if entry.split() and entry.split()[0] not in after_names]
|
||||||
|
if updated_entries:
|
||||||
|
if len(updated_entries) > 6:
|
||||||
|
shown = ", ".join(updated_entries[:6])
|
||||||
|
note = f"(updated: {shown}, +{len(updated_entries) - 6} more)"
|
||||||
|
else:
|
||||||
|
note = f"(updated: {', '.join(updated_entries)})"
|
||||||
|
else:
|
||||||
|
note = "(brew already up to date)"
|
||||||
|
else:
|
||||||
|
note = "(brew already up to date)"
|
||||||
|
|
||||||
|
return True, note, "".join(output_parts)
|
||||||
|
|
||||||
|
return action
|
||||||
|
|
||||||
def get_npm_updates(packages, locks=None):
|
def get_npm_updates(packages, locks=None):
|
||||||
packages = list(dict.fromkeys(packages))
|
packages = list(dict.fromkeys(packages))
|
||||||
locks = locks or {}
|
locks = locks or {}
|
||||||
|
|
@ -408,7 +494,7 @@ def main():
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
schedule_npm_updates(runner)
|
schedule_npm_updates(runner)
|
||||||
runner.add_task("Homebrew Update", "brew update && brew upgrade --greedy")
|
runner.add_task("Homebrew Update", action=create_brew_update_action())
|
||||||
runner.add_task("Config Git Pull", "cd ~/.config && git pull")
|
runner.add_task("Config Git Pull", "cd ~/.config && git pull")
|
||||||
runner.add_task("Neovim Config Git Pull", "cd ~/.config/nvim && git pull")
|
runner.add_task("Neovim Config Git Pull", "cd ~/.config/nvim && git pull")
|
||||||
runner.add_task("SConfig Git Pull", "cd ~/.sconfig && git pull")
|
runner.add_task("SConfig Git Pull", "cd ~/.sconfig && git pull")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue