testing new_package.py with some fixes
This commit is contained in:
		
							parent
							
								
									fe6f5f2f45
								
							
						
					
					
						commit
						47db71ebee
					
				@ -6,6 +6,7 @@ import shutil
 | 
				
			|||||||
import subprocess
 | 
					import subprocess
 | 
				
			||||||
import hashlib
 | 
					import hashlib
 | 
				
			||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
 | 
					import gnupg
 | 
				
			||||||
import git  # python-gitpython in AUR
 | 
					import git  # python-gitpython in AUR
 | 
				
			||||||
import menu3  # python-menu3 in AUR
 | 
					import menu3  # python-menu3 in AUR
 | 
				
			||||||
import jinja2  # python-jinja in community
 | 
					import jinja2  # python-jinja in community
 | 
				
			||||||
@ -19,6 +20,8 @@ gpgkey = ['748231EBCBD808A14F5E85D28C004C2F93481F6B']  # https://wiki.archlinux.
 | 
				
			|||||||
maintname = 'brent s. <bts[at]square-r00t[dot]net>'  # your name and email address, feel free to obfuscate though
 | 
					maintname = 'brent s. <bts[at]square-r00t[dot]net>'  # your name and email address, feel free to obfuscate though
 | 
				
			||||||
pkgbuild_dir = '/opt/dev/arch'  # what dir do the pkgbuilds/AUR checkouts live?
 | 
					pkgbuild_dir = '/opt/dev/arch'  # what dir do the pkgbuilds/AUR checkouts live?
 | 
				
			||||||
aur_pkgs_dir = pkgbuild_dir  # should be the dir where the aur_pkgs repo checkout lives. it's recommended you keep this the same as pkgbuild_dir
 | 
					aur_pkgs_dir = pkgbuild_dir  # should be the dir where the aur_pkgs repo checkout lives. it's recommended you keep this the same as pkgbuild_dir
 | 
				
			||||||
 | 
					git_name = 'brent s.'  # the name to use in AUR git commits
 | 
				
			||||||
 | 
					git_email = 'bts@square-r00t.net'  # the email to use in AUR git commits
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## BUILD THE GUI ##
 | 
					## BUILD THE GUI ##
 | 
				
			||||||
def gui_init():
 | 
					def gui_init():
 | 
				
			||||||
@ -72,7 +75,7 @@ def gui_init():
 | 
				
			|||||||
        pkg['srcfile'] = re.sub('^\s*(https?|ftp).*/(.*)\s*$', '\\2', pkg['srcurl'], re.IGNORECASE)
 | 
					        pkg['srcfile'] = re.sub('^\s*(https?|ftp).*/(.*)\s*$', '\\2', pkg['srcurl'], re.IGNORECASE)
 | 
				
			||||||
        pkg['type'] = 'release'
 | 
					        pkg['type'] = 'release'
 | 
				
			||||||
        # And here's where we download the source file for hashing
 | 
					        # And here's where we download the source file for hashing
 | 
				
			||||||
        pkg['src_dl'] = gettempdir() + "/" + pkg['srcfile']
 | 
					        pkg['src_dl'] = "{0}/.aur_pkgs/{1}".format(gettempdir(), pkg['srcfile'])
 | 
				
			||||||
        print("Please wait while we download {0} to {1}...\n".format(pkg['srcfile'], pkg['src_dl']))
 | 
					        print("Please wait while we download {0} to {1}...\n".format(pkg['srcfile'], pkg['src_dl']))
 | 
				
			||||||
        datastream = urlopen(pkg['srcurl'])
 | 
					        datastream = urlopen(pkg['srcurl'])
 | 
				
			||||||
        data_in = datastream.read()
 | 
					        data_in = datastream.read()
 | 
				
			||||||
@ -84,37 +87,37 @@ def gui_init():
 | 
				
			|||||||
    pkg['desc'] = input("\nWhat is a short description of {0}?\n".format(pkg['name']))
 | 
					    pkg['desc'] = input("\nWhat is a short description of {0}?\n".format(pkg['name']))
 | 
				
			||||||
    pkg['site'] = input("\nWhat is {0}'s website?\n".format(pkg['name']))
 | 
					    pkg['site'] = input("\nWhat is {0}'s website?\n".format(pkg['name']))
 | 
				
			||||||
    pkg['license'] = []
 | 
					    pkg['license'] = []
 | 
				
			||||||
    license_raw = input("\nWhat is {0}'s license(s)? (See https://wiki.archlinux.org/index.php/PKGBUILD#license)\n" +
 | 
					    license_raw = input(("\nWhat is {0}'s license(s)? (See https://wiki.archlinux.org/index.php/PKGBUILD#license)\n" +
 | 
				
			||||||
                        "If you have more than one, separate them by spaces.\n".format(pkg['name']).upper())
 | 
					                        "If you have more than one, separate them by spaces.\n").format(pkg['name'])).upper()
 | 
				
			||||||
    pkg['license'] = list(map(str, license_raw.split()))
 | 
					    pkg['license'] = list(map(str, license_raw.split()))
 | 
				
			||||||
    pkg['deps'] = []
 | 
					    pkg['deps'] = []
 | 
				
			||||||
    deps_raw = input("\nWhat does {0} depend on for runtime? if no packages, just hit enter.\n" +
 | 
					    deps_raw = input(("\nWhat does {0} depend on for runtime? if no packages, just hit enter.\n" +
 | 
				
			||||||
                    "Make sure they correspond to Arch/AUR package names.\n" +
 | 
					                    "Make sure they correspond to Arch/AUR package names.\n" +
 | 
				
			||||||
                    "If you have more than one, separate them by spaces.\n".format(pkg['name']))
 | 
					                    "If you have more than one, separate them by spaces.\n").format(pkg['name']))
 | 
				
			||||||
    if deps_raw:
 | 
					    if deps_raw:
 | 
				
			||||||
        pkg['deps'] = list(map(str, deps_raw.split()))
 | 
					        pkg['deps'] = list(map(str, deps_raw.split()))
 | 
				
			||||||
    pkg['optdeps'] = []
 | 
					    pkg['optdeps'] = []
 | 
				
			||||||
    optdeps_raw = input("\nWhat does {0} optionally depend on (runtime)? if no packages, just hit enter.\n" +
 | 
					    optdeps_raw = input(("\nWhat does {0} optionally depend on (runtime)? if no packages, just hit enter.\n" +
 | 
				
			||||||
                        "Make sure they correspond to Arch/AUR package names.\n" +
 | 
					                        "Make sure they correspond to Arch/AUR package names.\n" +
 | 
				
			||||||
                        "If you have more than one, separate them by COMMAS.\n" + 
 | 
					                        "If you have more than one, separate them by COMMAS.\n" + 
 | 
				
			||||||
                        "They should follow this format:\n" +
 | 
					                        "They should follow this format:\n" +
 | 
				
			||||||
                        "pkgname: some reason why it should be installed\n".format(pkg['name']))
 | 
					                        "pkgname: some reason why it should be installed\n").format(pkg['name']))
 | 
				
			||||||
    if optdeps_raw:
 | 
					    if optdeps_raw:
 | 
				
			||||||
        pkg['optdeps'] = list(map(str, optdeps_raw.split(',')))
 | 
					        pkg['optdeps'] = list(map(str, optdeps_raw.split(',')))
 | 
				
			||||||
    pkg['makedeps'] = []
 | 
					    pkg['makedeps'] = []
 | 
				
			||||||
    makedeps_raw = input("\nWhat dependencies are required for building/making {0}? If no packages, just hit enter.\n" +
 | 
					    makedeps_raw = input(("\nWhat dependencies are required for building/making {0}? If no packages, just hit enter.\n" +
 | 
				
			||||||
                        "Make sure they correspond to Arch/AUR package names.\n" +
 | 
					                        "Make sure they correspond to Arch/AUR package names.\n" +
 | 
				
			||||||
                        "If you have more than one, separate them by spaces.\n".format(pkg['name']))
 | 
					                        "If you have more than one, separate them by spaces.\n").format(pkg['name']))
 | 
				
			||||||
    if makdepds_raw:
 | 
					    if makedeps_raw:
 | 
				
			||||||
        pkg['makedeps'] = list(map(str, makedeps_raw.split()))
 | 
					        pkg['makedeps'] = list(map(str, makedeps_raw.split()))
 | 
				
			||||||
    if pkg['type'] == 'vcs':
 | 
					    if pkg['type'] == 'vcs':
 | 
				
			||||||
        pkg['provides'] = [pkg['name'].split('-')[0]]
 | 
					        pkg['provides'] = [pkg['name'].split('-')[0]]
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        pkg['provides'] = [pkg['name']]
 | 
					        pkg['provides'] = [pkg['name']]
 | 
				
			||||||
    pkg['provides'] = []
 | 
					    pkg['provides'] = []
 | 
				
			||||||
    provides_raw = input("\nWhat package names, if any besides itself, does {0} provide?\n" +
 | 
					    provides_raw = input(("\nWhat package names, if any besides itself, does {0} provide?\n" +
 | 
				
			||||||
                        "(If {0} is a VCS package, do NOT include the non-VCS package name- that's added by default!)\n" +
 | 
					                        "(If {0} is a VCS package, do NOT include the non-VCS package name- that's added by default!)\n" +
 | 
				
			||||||
                        "If you have more than one, separate them by spaces.\n".format(pkg['name']))
 | 
					                        "If you have more than one, separate them by spaces.\n").format(pkg['name']))
 | 
				
			||||||
    if provides_raw:
 | 
					    if provides_raw:
 | 
				
			||||||
        provides_list = list(map(str, provides_raw.split()))
 | 
					        provides_list = list(map(str, provides_raw.split()))
 | 
				
			||||||
        pkg['provides'] = pkg['provides'] + provides_list
 | 
					        pkg['provides'] = pkg['provides'] + provides_list
 | 
				
			||||||
@ -122,30 +125,31 @@ def gui_init():
 | 
				
			|||||||
        pkg['conflicts'] = [pkg['name'].split('-')[0]]
 | 
					        pkg['conflicts'] = [pkg['name'].split('-')[0]]
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        pkg['conflicts'] = [pkg['name']]
 | 
					        pkg['conflicts'] = [pkg['name']]
 | 
				
			||||||
    conflicts_raw = input("\nWhat package names, if any, does {0} conflict with?\n" +
 | 
					    conflicts_raw = input(("\nWhat package names, if any, does {0} conflict with?\n" +
 | 
				
			||||||
                        "(If {0} is a VCS package, do NOT include the non-VCS package name- that's added by default!)\n" +
 | 
					                        "(If {0} is a VCS package, do NOT include the non-VCS package name- that's added by default!)\n" +
 | 
				
			||||||
                        "If you have more than one, separate them by spaces.\n".format(pkg['name']))
 | 
					                        "If you have more than one, separate them by spaces.\n").format(pkg['name']))
 | 
				
			||||||
    if conflicts_raw:
 | 
					    if conflicts_raw:
 | 
				
			||||||
        conflicts_list = list(map(str, conflicts_raw.split()))
 | 
					        conflicts_list = list(map(str, conflicts_raw.split()))
 | 
				
			||||||
        pkg['conflicts'] = pkg['conflicts'] + conflicts_list
 | 
					        pkg['conflicts'] = pkg['conflicts'] + conflicts_list
 | 
				
			||||||
    return(pkg)
 | 
					    return(pkg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## MAKE SURE SOME PREREQS HAPPEN ##
 | 
					## MAKE SURE SOME PREREQS HAPPEN ##
 | 
				
			||||||
def sanity_checks(pkg):
 | 
					def sanity_checks():
 | 
				
			||||||
    try:
 | 
					    os.makedirs(pkgbuild_dir, exist_ok = True)
 | 
				
			||||||
        os.makedirs(pkgbuild_dir)
 | 
					 | 
				
			||||||
    except OSError as exception:
 | 
					 | 
				
			||||||
        if exception.errno != errno.EEXIST:
 | 
					 | 
				
			||||||
            raise
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## REGISTER IN THE AUR AND MAKE FIRST COMMIT ##
 | 
					## REGISTER IN THE AUR AND MAKE FIRST COMMIT ##
 | 
				
			||||||
def aur_create(pkg):
 | 
					def aur_create(pkg):
 | 
				
			||||||
    # git clone from AUR to create repository, add .gitignore
 | 
					    # git clone from AUR to create repository, add .gitignore
 | 
				
			||||||
    tmpcheckout = os.path.join(gettempdir(), '.aur_pkgs')
 | 
					    tmpcheckout = os.path.join(gettempdir(), '.aur_pkgs')
 | 
				
			||||||
    repo_dir = tmpcheckout + '/' + pkg['name']
 | 
					    repo_dir = tmpcheckout + '/' + pkg['name']
 | 
				
			||||||
    aur_repo = git.Repo.clone_from('aur@aur.archlinux.org:' + pkg['name'], git.osp.join(tmpcheckout, pkg['name']), branch='master')
 | 
					    if os.path.exists(repo_dir):
 | 
				
			||||||
    shutil.copy2(aur_pkgs_dir + "/_docs/PKGBUILD.templates.d/gitignore", tmpcheckout + "/.gitignore")
 | 
					        shutil.rmtree(repo_dir)
 | 
				
			||||||
    aur_repo.index.add('.gitignore')
 | 
					    git_repo_dir = git.osp.join(tmpcheckout, pkg['name'])
 | 
				
			||||||
 | 
					    # oops. originally had branch='master', which causes it to die since we're cloneing an empty repo
 | 
				
			||||||
 | 
					    aur_repo = git.Repo.clone_from('aur@aur.archlinux.org:' + pkg['name'], git_repo_dir)
 | 
				
			||||||
 | 
					    repo_dir = aur_repo.working_tree_dir
 | 
				
			||||||
 | 
					    shutil.copy2(aur_pkgs_dir + "/_docs/PKGBUILD.templates.d/gitignore", repo_dir + "/.gitignore")
 | 
				
			||||||
 | 
					    aur_repo.index.add(['.gitignore'])
 | 
				
			||||||
    # Create the initial PKGBUILD
 | 
					    # Create the initial PKGBUILD
 | 
				
			||||||
    tpl_dir = aur_pkgs_dir + '/_docs/PKGBUILD.templates.d.python'
 | 
					    tpl_dir = aur_pkgs_dir + '/_docs/PKGBUILD.templates.d.python'
 | 
				
			||||||
    tpl_meta = aur_pkgs_dir + '/_docs/PKGBUILD.templates.d.python' + '/' + pkg['type'] + '.all'
 | 
					    tpl_meta = aur_pkgs_dir + '/_docs/PKGBUILD.templates.d.python' + '/' + pkg['type'] + '.all'
 | 
				
			||||||
@ -158,29 +162,32 @@ def aur_create(pkg):
 | 
				
			|||||||
                                                                        maintname = maintname,
 | 
					                                                                        maintname = maintname,
 | 
				
			||||||
                                                                        gpgkey = gpgkey,
 | 
					                                                                        gpgkey = gpgkey,
 | 
				
			||||||
                                                                        pkgbuild_list = pkgbuild_list)
 | 
					                                                                        pkgbuild_list = pkgbuild_list)
 | 
				
			||||||
    with open(repo_dir + "/PKGBUILD", "wb") as pkgbuild_file:
 | 
					    with open(repo_dir + "/PKGBUILD", "w+") as pkgbuild_file:
 | 
				
			||||||
        pkgbuild_file.write(pkgbuild_out)
 | 
					        pkgbuild_file.write(pkgbuild_out)
 | 
				
			||||||
    # Move the source file
 | 
					    # Move the source file
 | 
				
			||||||
    if pkg['srcfile']:
 | 
					    if pkg['srcfile']:
 | 
				
			||||||
        os.rename(pkg['src_dl'], repodir + '/' + pkg['srcfile'])
 | 
					        # sign with GPG
 | 
				
			||||||
        # And sign with GPG
 | 
					 | 
				
			||||||
        gpg = gnupg.GPG()
 | 
					        gpg = gnupg.GPG()
 | 
				
			||||||
        datastream = open(pkg['dl_src'], 'rb')
 | 
					        datastream = open(pkg['src_dl'], 'rb')
 | 
				
			||||||
        gpg.sign_file(datastream, keyid = gpgkey[0], detach = True, clearsign = False, output = repodir + '/' + pkg['srcfile'] + '.sig')
 | 
					        print("If you see an error about 'KEY_CONSIDERED', you most likely can ignore it.")
 | 
				
			||||||
 | 
					        gpg.sign_file(datastream, keyid = gpgkey[0], detach = True, clearsign = False, output = repo_dir + '/' + pkg['srcfile'] + '.sig')
 | 
				
			||||||
        datastream.close()
 | 
					        datastream.close()
 | 
				
			||||||
        aur.repo.indes.add(pkg['srcfile'] + '.sig')
 | 
					        aur_repo.index.add([pkg['srcfile'] + '.sig'])
 | 
				
			||||||
    aur.repo.index.add('PKGBUILD')
 | 
					    aur_repo.index.add(['PKGBUILD'])
 | 
				
			||||||
    # TODO: SRCINFO!
 | 
					    # TODO: SRCINFO!
 | 
				
			||||||
    now = datetime.datetime.utcnow().strftime("%a %b %d %H:%M:%S UTC %Y")
 | 
					    now = datetime.datetime.utcnow().strftime("%a %b %d %H:%M:%S UTC %Y")
 | 
				
			||||||
    srcinfo_out = tpl_env.get_template('srcinfo.j2').render(pkg = pkg, now = now )
 | 
					    srcinfo_out = tpl_env.get_template('srcinfo.j2').render(pkg = pkg, now = now )
 | 
				
			||||||
    with open(repo_dir + "/.SRCINFO", "wb") as srcinfo_file:
 | 
					    with open(repo_dir + "/.SRCINFO", "w+") as srcinfo_file:
 | 
				
			||||||
        srcinfo_file.write(srcinfo_out)
 | 
					        srcinfo_file.write(srcinfo_out)
 | 
				
			||||||
 | 
					    aur_repo.index.add(['.SRCINFO'])
 | 
				
			||||||
    # commit to git
 | 
					    # commit to git
 | 
				
			||||||
    aur_repo.index.commit("initial commit; setting up .gitignores and skeleton PKGBUILD")
 | 
					    aur_repo.index.commit("initial commit; setting up .gitignores and skeleton PKGBUILD")
 | 
				
			||||||
    # and push...
 | 
					    # and push...
 | 
				
			||||||
    aur_repo.push()
 | 
					    aur_repo.push()
 | 
				
			||||||
    # and delete the repo
 | 
					    # and delete the repo and source file
 | 
				
			||||||
    shutil.rmtree(repo_dir)
 | 
					    shutil.rmtree(repo_dir)
 | 
				
			||||||
 | 
					    if pkg['srcfile']:
 | 
				
			||||||
 | 
					        os.remove(pkg['src_dl'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## ADD THE SUBMODULE TO THE MAIN AUR TREE ##
 | 
					## ADD THE SUBMODULE TO THE MAIN AUR TREE ##
 | 
				
			||||||
def aur_submodule(pkg):
 | 
					def aur_submodule(pkg):
 | 
				
			||||||
@ -202,3 +209,9 @@ def aur_submodule(pkg):
 | 
				
			|||||||
#pprint.pprint(gui_init())
 | 
					#pprint.pprint(gui_init())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#aur_create(gui_init())
 | 
					#aur_create(gui_init())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ ==  "__main__":
 | 
				
			||||||
 | 
					    pkg = gui_init()
 | 
				
			||||||
 | 
					    sanity_checks()
 | 
				
			||||||
 | 
					    aur_create(pkg)
 | 
				
			||||||
 | 
					    aur_submodule(pkg)
 | 
				
			||||||
 | 
				
			|||||||
@ -7,3 +7,6 @@ also implement https://github.com/thp/urlwatch support because:
 | 
				
			|||||||
-Pushover support via chump \o/
 | 
					-Pushover support via chump \o/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
in README, need to mention HOW to use scripts- and how to sign packages, how to upload GPG key to keyservers, etc.
 | 
					in README, need to mention HOW to use scripts- and how to sign packages, how to upload GPG key to keyservers, etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					python rewrite of new packages is almost done. the biggest part is done, anyways- still need the other menu options fleshed out and to bring it all together under a __main__
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user