Merge pull request #670 from cyian-1756/automaticRelease
Releases are now automatic
This commit is contained in:
commit
b0875402b0
96
release.py
Normal file
96
release.py
Normal file
@ -0,0 +1,96 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import re
|
||||
|
||||
import os
|
||||
|
||||
import sys
|
||||
from hashlib import sha256
|
||||
from github import Github
|
||||
import json
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description="Make a new ripme release on github")
|
||||
parser.add_argument("-f", "--file", help="Path to the version of ripme to release")
|
||||
parser.add_argument("-t", "--token", help="Your github personal access token")
|
||||
parser.add_argument("-d", "--debug", help="Run in debug mode", action="store_true")
|
||||
parser.add_argument("-n", "--non-interactive", help="Do not ask for any input from the user", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
input = raw_input
|
||||
except NameError:
|
||||
pass
|
||||
|
||||
|
||||
# Make sure the file the user selected is a jar
|
||||
def isJar(filename):
|
||||
if debug:
|
||||
print("Checking if {} is a jar file".format(filename))
|
||||
return filename.endswith("jar")
|
||||
|
||||
|
||||
# Returns true if last entry to the "changeList" section of ripme.json is in the format of $number.$number.$number: and
|
||||
# false if not
|
||||
def isValidCommitMessage(message):
|
||||
if debug:
|
||||
print("Checking if {} matchs pattern ^\d+\.\d+\.\d+:".format(message))
|
||||
pattern = re.compile("^\d+\.\d+\.\d+:")
|
||||
return re.match(pattern, message)
|
||||
|
||||
|
||||
ripmeJson = json.loads(open("ripme.json").read())
|
||||
fileToUploadPath = args.file
|
||||
InNoninteractiveMode = args.non_interactive
|
||||
commitMessage = ripmeJson.get("changeList")[0]
|
||||
releaseVersion = ripmeJson.get("latestVersion")
|
||||
debug = args.debug
|
||||
accessToken = args.token
|
||||
repoOwner = "ripmeapp"
|
||||
repoName = "ripme"
|
||||
|
||||
if not os.path.isfile(fileToUploadPath):
|
||||
print("[!] Error: {} does not exist".format(fileToUploadPath))
|
||||
sys.exit(1)
|
||||
|
||||
if not isJar(fileToUploadPath):
|
||||
print("[!] Error: {} is not a jar file!".format(fileToUploadPath))
|
||||
sys.exit(1)
|
||||
|
||||
if not isValidCommitMessage(commitMessage):
|
||||
print("[!] Error: {} is not a valid commit message as it does not start with a version".format(fileToUploadPath))
|
||||
sys.exit(1)
|
||||
|
||||
ripmeUpdate = open(fileToUploadPath, mode='rb').read()
|
||||
|
||||
# The hash that we expect the update to have
|
||||
expectedHash = ripmeJson.get("currentHash")
|
||||
|
||||
# The actual hash of the file on disk
|
||||
actualHash = sha256(ripmeUpdate).hexdigest()
|
||||
|
||||
# Make sure that the hash of the file we're uploading matches the hash in ripme.json. These hashes not matching will
|
||||
# cause ripme to refuse to install the update for all users who haven't disabled update hash checking
|
||||
if expectedHash != actualHash:
|
||||
print("[!] Error: expected hash of file and actual hash differ")
|
||||
print("[!] Expected hash is {}".format(expectedHash))
|
||||
print("[!] Actual hash is {}".format(actualHash))
|
||||
sys.exit(1)
|
||||
|
||||
# Ask the user to review the information before we precede
|
||||
# This only runs in we're in interactive mode
|
||||
if not InNoninteractiveMode:
|
||||
print("File path: {}".format(fileToUploadPath))
|
||||
print("Release title: {}".format(commitMessage))
|
||||
print("Repo: {}/{}".format(repoOwner, repoName))
|
||||
input("\nPlease review the information above and ensure it is correct and then press enter")
|
||||
|
||||
print("Accessing github using token")
|
||||
g = Github(accessToken)
|
||||
|
||||
|
||||
print("Creating release")
|
||||
release = g.get_user(repoOwner).get_repo(repoName).create_git_release(releaseVersion, commitMessage, "")
|
||||
|
||||
print("Uploading file")
|
||||
release.upload_asset(fileToUploadPath, "ripme.jar")
|
Loading…
Reference in New Issue
Block a user