Files
@ b66725ba01ed
Branch filter:
Location: kallithea/setup.py - annotation
b66725ba01ed
4.8 KiB
text/x-python
cli: add command 'kallithea-cli front-end-build'
Kallithea is under the GPL license, and we can thus only distribute any
generated code if we also ship the corresponding source.
We are moving towards a web front-end that use npm to download and compile
various open source components. The components might not be GPL, but if we
distribute any parts of their code (compiled or converted to other
representation), then we also must distribute the corresponding source under
the GPL.
It doesn't seem feasible for us to distribute the source of everything that
npm downloads and includes when we are building. It thus also doesn't seem
feasible for us to build and ship the compiled (possibly minified) front-end
code. Instead, we have to make it as smooth as possible for our users to
get up and running.
It doesn't seem feasible for us to ship or install npm. We must assume it is
available. That requirement must be documented clearly, and we must recommend
how to install npm for the most common platforms.
We could perhaps just document what manual steps to run. Kallithea doesn't
work out of the box anyway - it has to be configured and initialized. Extra
steps might not be a big problem.
Another approach is to call out to npm while pip is installing Kallithea and
download the requirements and build the files. It can be done by customizing
setuptools commands in setup.py. But: Python packaging is fragile. Even
though we only support pip, it really isn't built for things like this.
Custom output is muted and buffered and only shown if running with -v or the
command fails. And pip and setup.py can be used to build and install in so
many ways that we probably can't make it work reliably with all ways of
installing Kallithea.
The approach implemented by this commit is to add a custom cli command
'front-end-build' to run the required commands. This single user-facing
command can internally run various steps as needed. The only current
requirement is the presence of npm and an internet connection.
For now, this will just create/update style.css ... but currently probably
without any actual changes. The files created by npm (and the node_modules
directory) must *not* be a part of the release package made with 'setup.py
sdist'.
(Commit message is mostly written by Mads Kiilerich)
Kallithea is under the GPL license, and we can thus only distribute any
generated code if we also ship the corresponding source.
We are moving towards a web front-end that use npm to download and compile
various open source components. The components might not be GPL, but if we
distribute any parts of their code (compiled or converted to other
representation), then we also must distribute the corresponding source under
the GPL.
It doesn't seem feasible for us to distribute the source of everything that
npm downloads and includes when we are building. It thus also doesn't seem
feasible for us to build and ship the compiled (possibly minified) front-end
code. Instead, we have to make it as smooth as possible for our users to
get up and running.
It doesn't seem feasible for us to ship or install npm. We must assume it is
available. That requirement must be documented clearly, and we must recommend
how to install npm for the most common platforms.
We could perhaps just document what manual steps to run. Kallithea doesn't
work out of the box anyway - it has to be configured and initialized. Extra
steps might not be a big problem.
Another approach is to call out to npm while pip is installing Kallithea and
download the requirements and build the files. It can be done by customizing
setuptools commands in setup.py. But: Python packaging is fragile. Even
though we only support pip, it really isn't built for things like this.
Custom output is muted and buffered and only shown if running with -v or the
command fails. And pip and setup.py can be used to build and install in so
many ways that we probably can't make it work reliably with all ways of
installing Kallithea.
The approach implemented by this commit is to add a custom cli command
'front-end-build' to run the required commands. This single user-facing
command can internally run various steps as needed. The only current
requirement is the presence of npm and an internet connection.
For now, this will just create/update style.css ... but currently probably
without any actual changes. The files created by npm (and the node_modules
directory) must *not* be a part of the release package made with 'setup.py
sdist'.
(Commit message is mostly written by Mads Kiilerich)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | bf011c9f7f58 266a3cbc0302 9382e88eae22 65c27fd21769 9382e88eae22 9382e88eae22 a922e91a4f02 a9a1560dad79 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 7e5f8c12a3fc 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 9382e88eae22 3a1cf70e0f42 2d7a94f3eaae 9382e88eae22 55fc0bcce916 9ec1d2ac4529 55fc0bcce916 55fc0bcce916 55fc0bcce916 55fc0bcce916 55fc0bcce916 9ec1d2ac4529 55fc0bcce916 55fc0bcce916 55fc0bcce916 55fc0bcce916 55fc0bcce916 55fc0bcce916 66bd06015fb1 55fc0bcce916 55fc0bcce916 55fc0bcce916 55fc0bcce916 55fc0bcce916 33bdabfa67b8 55fc0bcce916 475d54df23f5 55fc0bcce916 55fc0bcce916 5746cc3b3fa5 e4b9a1d1fea1 9382e88eae22 9382e88eae22 d4f6dc38d625 9ec1d2ac4529 bda2bd2558b1 9382e88eae22 953ee49f3b30 55fc0bcce916 a1fba57f46fa 880a39e5d8df 880a39e5d8df 880a39e5d8df fc6063e6630b cc48c1541c7e fc6063e6630b fc6063e6630b fc6063e6630b fc6063e6630b fc6063e6630b fc6063e6630b fc6063e6630b fc6063e6630b cc48c1541c7e fc6063e6630b a60cd29ba7e2 b0e2c949c34b 2afa6b8c2ade 2afa6b8c2ade 65c27fd21769 65c27fd21769 24c0d584ba86 326a9336fbe5 faad9dd06b58 266a3cbc0302 266a3cbc0302 7e5f8c12a3fc 266a3cbc0302 266a3cbc0302 266a3cbc0302 266a3cbc0302 2afa6b8c2ade 266a3cbc0302 65c27fd21769 7c732f2047f8 d69aa464f373 266a3cbc0302 7c732f2047f8 7c732f2047f8 266a3cbc0302 ad2e97c6f17f 2642f128ad46 a922e91a4f02 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 c79e4f89bfd3 a922e91a4f02 564e40829f80 a922e91a4f02 24c0d584ba86 9382e88eae22 ad2e97c6f17f 2642f128ad46 2d7a94f3eaae f4807acf643d 9382e88eae22 3315e9263a53 880a39e5d8df 9382e88eae22 2642f128ad46 a60cd29ba7e2 2642f128ad46 65c27fd21769 20dc7a5eb748 7e5f8c12a3fc 564e40829f80 564e40829f80 0e6035a85980 564e40829f80 20dc7a5eb748 20dc7a5eb748 7ac09514a178 9793473d74be 9793473d74be 9793473d74be e4b9a1d1fea1 7ac09514a178 564e40829f80 7e5f8c12a3fc 564e40829f80 2c3d30095d5e 7e5f8c12a3fc 564e40829f80 564e40829f80 | #!/usr/bin/env python2
# -*- coding: utf-8 -*-
import os
import sys
import platform
if sys.version_info < (2, 6) or sys.version_info >= (3,):
raise Exception('Kallithea requires python 2.6 or 2.7')
here = os.path.abspath(os.path.dirname(__file__))
def _get_meta_var(name, data, callback_handler=None):
import re
matches = re.compile(r'(?:%s)\s*=\s*(.*)' % name).search(data)
if matches:
if not callable(callback_handler):
callback_handler = lambda v: v
return callback_handler(eval(matches.groups()[0]))
_meta = open(os.path.join(here, 'kallithea', '__init__.py'), 'rb')
_metadata = _meta.read()
_meta.close()
callback = lambda V: ('.'.join(map(str, V[:3])) + '.'.join(V[3:]))
__version__ = _get_meta_var('VERSION', _metadata, callback)
__license__ = _get_meta_var('__license__', _metadata)
__author__ = _get_meta_var('__author__', _metadata)
__url__ = _get_meta_var('__url__', _metadata)
# defines current platform
__platform__ = platform.system()
is_windows = __platform__ in ['Windows']
requirements = [
"alembic >= 0.8.0, < 1.1",
"gearbox < 1",
"waitress >= 0.8.8, < 1.2",
"WebOb >= 1.7, < 1.8", # turbogears2 2.3.12 requires WebOb<1.8.0
"backlash >= 0.1.2, < 1",
"TurboGears2 >= 2.3.10, < 3",
"tgext.routes >= 0.2.0, < 1",
"Beaker >= 1.7.0, < 2",
"WebHelpers >= 1.3, < 1.4",
"FormEncode >= 1.2.4, < 1.4",
"SQLAlchemy >= 1.1, < 1.3",
"Mako >= 0.9.0, < 1.1",
"Pygments >= 1.5, < 2.3",
"Whoosh >= 2.5.0, < 2.8",
"celery >= 3.1, < 4.0", # celery 4 doesn't work
"Babel >= 0.9.6, < 2.7",
"python-dateutil >= 1.5.0, < 2.8",
"Markdown >= 2.2.1, < 2.7",
"docutils >= 0.8.1, < 0.15",
"URLObject >= 2.3.4, < 2.5",
"Routes >= 1.13, < 2",
"dulwich >= 0.14.1, < 0.20",
"mercurial >= 4.1.1, < 4.9",
"decorator >= 3.3.2, < 4.4",
"Paste >= 2.0.3, < 3",
"bleach >= 3.0, < 3.1",
"Click >= 7.0, < 8",
]
if sys.version_info < (2, 7):
requirements.append("importlib == 1.0.1")
requirements.append("argparse")
if not is_windows:
requirements.append("bcrypt >= 3.1.0, < 3.2")
dependency_links = [
]
classifiers = [
'Development Status :: 4 - Beta',
'Environment :: Web Environment',
'Framework :: Pylons',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU General Public License (GPL)',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Topic :: Software Development :: Version Control',
]
# additional files from project that goes somewhere in the filesystem
# relative to sys.prefix
data_files = []
description = ('Kallithea is a fast and powerful management tool '
'for Mercurial and Git with a built in push/pull server, '
'full text search and code-review.')
keywords = ' '.join([
'kallithea', 'mercurial', 'git', 'code review',
'repo groups', 'ldap', 'repository management', 'hgweb replacement',
'hgwebdir', 'gitweb replacement', 'serving hgweb',
])
# long description
README_FILE = 'README.rst'
try:
long_description = open(README_FILE).read()
except IOError as err:
sys.stderr.write(
"[WARNING] Cannot find file specified as long_description (%s)\n"
% README_FILE
)
long_description = description
import setuptools
# monkey patch setuptools to use distutils owner/group functionality
from setuptools.command import sdist
sdist_org = sdist.sdist
class sdist_new(sdist_org):
def initialize_options(self):
sdist_org.initialize_options(self)
self.owner = self.group = 'root'
sdist.sdist = sdist_new
packages = setuptools.find_packages(exclude=['ez_setup'])
setuptools.setup(
name='Kallithea',
version=__version__,
description=description,
long_description=long_description,
keywords=keywords,
license=__license__,
author=__author__,
author_email='kallithea@sfconservancy.org',
dependency_links=dependency_links,
url=__url__,
install_requires=requirements,
classifiers=classifiers,
data_files=data_files,
packages=packages,
include_package_data=True,
message_extractors={'kallithea': [
('**.py', 'python', None),
('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}),
('templates/**.html', 'mako', {'input_encoding': 'utf-8'}),
('public/**', 'ignore', None)]},
zip_safe=False,
entry_points="""
[console_scripts]
kallithea-api = kallithea.bin.kallithea_api:main
kallithea-gist = kallithea.bin.kallithea_gist:main
kallithea-config = kallithea.bin.kallithea_config:main
kallithea-cli = kallithea.bin.kallithea_cli:cli
[paste.app_factory]
main = kallithea.config.middleware:make_app
[gearbox.commands]
upgrade-db=kallithea.lib.dbmigrate:UpgradeDb
""",
)
|