1
0
Fork 0

Add auto-updater upgrader

This commit is contained in:
tituspijean 2023-01-29 18:32:39 +01:00
parent bfc5fc1f13
commit 0a0cf347bd
3 changed files with 104 additions and 0 deletions

View file

@ -0,0 +1,14 @@
# Auto-README generation
Browses all repositories in YunoHost-Apps organization, and updates `updater.yml` with latest actions versions.
### Initial install
```
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
This script requires a `.github_token` file with a token with public.repo permission.

View file

@ -0,0 +1,87 @@
#!venv/bin/python3
import sys, os, time
import urllib.request, json
import re
# Debug
from rich.traceback import install
install(show_locals=True)
from github import Github
#####
#
# CONFIG
#
#####
# API token for yunohost-bot, need public.repo permission
g = Github(open(".github_token").read().strip())
# Path to the file to be updated
path=".github/workflows/updater.yml"
# Body of the PR message
body="""
Auto-updater actions need upgrading to continue working:
- actions/checkout@v3
- peter-evans/create-pull-request@v4
"""
# Name of the branch created for the PR
new_branch="upgrade-auto-updater"
#####
#
# CRAWL REPOSITORIES
#
#####
u = g.get_user("yunohost-bot")
org = g.get_organization("yunohost-apps")
# For each repositories belonging to the bot (user `u`)
for repo in org.get_repos():
# Determine base branch, either `testing` or default branch
try:
base_branch = repo.get_branch("testing").name
except:
base_branch = repo.default_branch
# Make sure the repository has an auto-updater
try:
repo.get_contents(path, ref="refs/heads/"+base_branch)
except:
print("No updater in "+repo.full_name)
continue
# Process the repo
try:
print("Processing "+repo.full_name)
# Get the commit base for the new branch, and create it
commit_sha = repo.get_branch(base_branch).commit.sha
new_branch_ref = repo.create_git_ref(ref="refs/heads/"+new_branch, sha=commit_sha)
# Get current file contents
contents = repo.get_contents(path, ref=new_branch_ref.ref)
# Update the file
updater_yml = contents.decoded_content.decode("unicode_escape")
updater_yml = re.sub(r'(?m)uses: actions/checkout@v[\d]+', "uses: actions/checkout@v3", updater_yml)
updater_yml = re.sub(r'(?m)uses: peter-evans/create-pull-request@v[\d]+', "uses: peter-evans/create-pull-request@v4", updater_yml)
updated = repo.update_file(path=contents.path,
message="Upgrade auto-updater",
content=updater_yml,
sha=contents.sha,
branch=new_branch)
# Open the PR
pr = repo.create_pull(title="Upgrade auto-updater", body=body, head=new_branch, base=base_branch)
print(repo.full_name+" updated with PR \#"+ pr.id)
break
except Exception as e:
print(e)
print("...failed. Deleting new branch.")
repo.get_git_ref("heads/"+new_branch).delete()
break

View file

@ -0,0 +1,3 @@
rich
PyGithub