parent
a9bfd762b3
commit
68b4daa0ac
@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (C) 2018-2022 Lubuntu Team
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import tempfile
|
||||
import os
|
||||
import subprocess
|
||||
import requests
|
||||
|
||||
RELEASE = "lunar"
|
||||
PREVRELEASE = "kinetic"
|
||||
REPOLISTPATH = "./repo-list"
|
||||
CLONEBASE = "https://username:password@git.lubuntu.me/Lubuntu/"
|
||||
APITOKEN = "apitoken"
|
||||
|
||||
# NOTE: When using Git management functions in here, use os.chdir() FIRST to select the directory you want to be affected. All Git management functions operate in the current working directory.
|
||||
|
||||
def gitclone(repoURI): # Clones a Git repo in the current os dir.
|
||||
subprocess.run(["git", "clone", repoURI])
|
||||
|
||||
def gitcheckout(checkoutTarget): # Checks out a branch or tag in the current Git repo.
|
||||
subprocess.run(["git", "checkout", checkoutTarget])
|
||||
|
||||
def gitbranch(newBranch): # Creates a new branch in the current Git repo.
|
||||
subprocess.run(["git", "branch", newBranch])
|
||||
|
||||
def gitpush(mode): # Pushes the current Git repo to the currently selected remote.
|
||||
subprocess.run(["git", "push", mode])
|
||||
|
||||
def gitcurrentbranch(): # Gets the name of the current branch of the current Git repo and returns it as a string.
|
||||
gitResult = subprocess.run(["git", "branch", "--show-current"], capture_output=True, encoding="utf-8")
|
||||
return gitResult.stdout
|
||||
|
||||
def main():
|
||||
with tempfile.TemporaryDirectory() as workingdir:
|
||||
for line in open(REPOLISTPATH):
|
||||
repository = line.strip("\n")
|
||||
print("Acting on " + repository + "...")
|
||||
# Clone the repository and push the new branch
|
||||
os.chdir(workingdir)
|
||||
gitclone(CLONEBASE + repository + ".git")
|
||||
os.chdir(repository)
|
||||
gitcheckout("ubuntu/" + PREVRELEASE) # TODO: Change this to checkout "ci/stable" once Drone is set up.
|
||||
repoWorks = True
|
||||
currentBranch = gitcurrentbranch()
|
||||
currentBranch = currentBranch.strip()
|
||||
if currentBranch != "ubuntu/" + PREVRELEASE:
|
||||
print("!!!!!!!!!!!!!!!!!!!!!!!!!! ALERT ALERT ALERT !!!!!!!!!!!!!!!!!! Failed to process repo" + repository + "!")
|
||||
repoWorks = False
|
||||
if repoWorks:
|
||||
gitbranch("ubuntu/" + RELEASE) # This *may* fail but if it does we don't care since we just want to make sure the branch exists in the first place.
|
||||
gitcheckout("ubuntu/" + RELEASE) # TODO: Is this line even necessary?
|
||||
gitpush("--all")
|
||||
print("Cloned " + repository + ".")
|
||||
# Change the default branch in Gitea
|
||||
r = requests.patch("https://git.lubuntu.me/api/v1/repos/Lubuntu/" + repository, headers={"Authorization": "token " + APITOKEN}, json={"default_branch": "ubuntu/" + RELEASE})
|
||||
repoName = r.json()["name"]
|
||||
repoDefaultBranch = r.json()["default_branch"]
|
||||
print("Changed the default branch of " + repoName + " to " + repoDefaultBranch + " in Gitea.")
|
||||
|
||||
main()
|
Loading…
Reference in new issue