python-pid/archive/setup.py
2023-02-23 22:05:14 +02:00

199 lines
6.7 KiB
Python
Executable File

#!/usr/bin/python3
"""
Copyright (c) 2019-2020, Ian Santopietro
All rights reserved.
This file is part of RepoLib.
RepoLib is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
RepoLib 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 Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with RepoLib. If not, see <https://www.gnu.org/licenses/>.
"""
#pylint: skip-file
# We don't need to check these in setup
import os
import subprocess
from setuptools import setup, find_packages, Command
def get_version():
""" Get the program version. """
#pylint: disable=exec-used
# Just getting the version.
version = {}
with open(os.path.join('repolib', '__version__.py')) as fp:
exec(fp.read(), version)
return version['__version__']
with open("README.rst", "r") as fh:
long_description = fh.read()
classifiers = [
'Environment :: Console',
'Intended Audience :: System Administrators',
'Intended Audience :: End Users/Desktop',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)',
'Natural Language :: English',
'Operating System :: POSIX :: Linux',
'Programming Language :: Python :: 3',
'Topic :: Software Development :: Libraries :: Python Modules',
'Topic :: System'
]
class Release(Command):
""" Generate a release and push it to git."""
description = "Generate a release and push it to git."
user_options = [
('dry-run', None, 'Skip the actual release and do a dry run instead.'),
('skip-deb', None, 'Skip doing a debian update for this release.'),
('skip-git', None, 'Skip committing to git at the end.'),
('prerelease=', None, 'Release a pre-release version (alpha,beta,rc)'),
('increment=', None, 'Manually specify the desired increment (MAJOR, MINOR, PATCH)')
]
def initialize_options(self):
self.dry_run = False
self.skip_deb = False
self.skip_git = False
self.prerelease = None
self.increment = None
def finalize_options(self):
pass
def run(self):
cz_command = ['cz', 'bump', '--yes']
ch_command = ['dch']
git_command = ['git', 'add', '.']
def capture_version(sp_complete):
output = sp_complete.stdout.decode('UTF-8').split('\n')
print('\n'.join(output))
for line in output:
if 'tag to create' in line:
version_line = line
try:
return version_line.split()[-1].replace('v', '')
except UnboundLocalError:
stderr = sp_complete.stderr.decode('UTF-8')
print("WARNING: Couldn't get updated version! Using current.")
print(stderr)
return get_version()
if self.dry_run:
print('Dry run: Not making actual changes')
cz_command.append('--dry-run')
if self.prerelease:
if self.prerelease.lower() not in ['alpha', 'beta', 'rc']:
raise Exception(
f'{self.prerelease} is not a valid prerelease type. Please '
'use one of "alpha", "beta", or "rc".'
)
cz_command.append('--prerelease')
cz_command.append(self.prerelease.lower())
if self.increment:
if self.increment.upper() not in ['MAJOR', 'MINOR', 'PATCH']:
raise Exception(
f'{self.increment} is not a valid increments. Please use '
'one of MAJOR, MINOR, or PATCH.'
)
cz_command.append('--increment')
cz_command.append(self.increment.upper())
# We need to get the new version from CZ, as the file hasn't been
# updated yet.
version_command = cz_command.copy()
version_command.append('--dry-run')
version_complete = subprocess.run(version_command, capture_output=True)
version = capture_version(version_complete)
print(f'Old Version: {get_version()}')
print(f'New version: {version}')
ch_command.append(f'-v{version}')
if not self.skip_deb:
print(ch_command)
if not self.dry_run:
subprocess.run(ch_command)
subprocess.run(['dch', '-r', '""'])
if not self.skip_git:
print(git_command)
if not self.dry_run:
subprocess.run(git_command)
print(' '.join(cz_command))
if not self.dry_run:
subprocess.run(cz_command)
class Test(Command):
""" Run pyflakes and pytest"""
description = 'Run pyflakes, pytest, and pylint'
user_options = [
('run-flakes', None, 'Run pyflakes'),
('skip-test', None, 'Skip running pytest'),
('skip-lint', None, 'Skip running pylint')
]
def initialize_options(self):
self.run_flakes = True
self.skip_test = False
self.skip_lint = False
def finalize_options(self):
pass
def run(self):
pytest_command = ['pytest-3']
flakes_command = ['pyflakes3', 'repolib']
lint_command = ['pylint', 'repolib']
if not self.skip_test:
subprocess.run(pytest_command)
if not self.run_flakes:
subprocess.run(flakes_command)
if not self.skip_lint:
subprocess.run(lint_command)
setup(
name='repolib',
version=get_version(),
author='Ian Santopietro',
author_email='ian@system76.com',
url='https://github.com/pop-os/repolib',
description='Easily manage software sources',
download_url='https://github.com/pop-os/repolib/releases',
long_description=long_description,
tests_require=['pytest'],
license='LGPLv3',
packages=['repolib', 'repolib/command', 'repolib/shortcuts', 'repolib/unittest'],
cmdclass={'release': Release, 'test': Test},
scripts=['bin/apt-manage'],
data_files=[
('share/bash-completion/completions', ['data/bash-completion/apt-manage']),
('share/zsh/vendor-completions', ['data/zsh-completion/_apt-manage']),
('/usr/share/dbus-1/system-services', ['data/org.pop_os.repolib.service']),
('/usr/share/polkit-1/actions', ['data/org.pop_os.repolib.policy']),
('/etc/dbus-1/system.d/', ['data/org.pop_os.repolib.conf']),
('/usr/lib/repolib', ['data/service.py', 'bin/add-apt-repository'])
]
)