Skip to content

Commit

Permalink
Autotest: Introducing setup.py script to install autotest files
Browse files Browse the repository at this point in the history
In order to support packaging, we need the ability to determine
which file goes where and which ones get packaged.

I decided to use the standard setup.py approach to accomplish
this. This is an initial first cut and should be reviewed and
tweaked as needed.

Changes from v3:
 * More fixes with regards to file positioning inside FS
 * Corrected system wide prefixes

Changes from v2:
 * Updated several entry points to the current status
   of the tree

Changes from v1:
 * Starting the tweaks - Change references to author
 * Remove unneeded glob imports

Signed-off-by: Lucas Meneghel Rodrigues <[email protected]>
  • Loading branch information
lmr committed Apr 11, 2012
1 parent a7b2669 commit 1d742a2
Show file tree
Hide file tree
Showing 10 changed files with 368 additions and 0 deletions.
31 changes: 31 additions & 0 deletions cli/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from distutils.core import setup
import os, sys

try:
import autotest.common as common
except ImportError:
import common

from autotest_lib.client.common_lib import version

# Mostly needed when called one level up
cli_dir = os.path.dirname(sys.modules[__name__].__file__) or '.'
autotest_dir = os.path.abspath(os.path.join(cli_dir, ".."))

setup(name='autotest',
description='Autotest framework - cli interface to rpc server',
author='Autotest Team',
author_email='[email protected]',
version=version.get_git_version(),
url='autotest.kernel.org',
package_dir={'autotest.cli': cli_dir },
package_data={'autotest.cli' : ['contrib/*' ] },
packages=['autotest.cli' ],
scripts=[cli_dir + '/autotest-rpc-client',
cli_dir + '/autotest-rpc-change-protection-level',
cli_dir + '/autotest-rpc-compose-query',
cli_dir + '/autotest-rpc-migrate-host',
cli_dir + '/autotest-rpc-query-keyvals',
cli_dir + '/autotest-rpc-query-results',
],
)
69 changes: 69 additions & 0 deletions client/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
from distutils.core import setup
import os, sys

try:
import autotest.common as common
except ImportError:
import common

from autotest_lib.client.common_lib import version

# Mostly needed when called one level up
client_dir = os.path.dirname(sys.modules[__name__].__file__) or '.'
autotest_dir = os.path.abspath(os.path.join(client_dir, ".."))

def get_data_files(path):
'''
Given a path, return all the files in there to package
'''
flist=[]
for root, _, files in sorted(os.walk(path)):
for name in files:
fullname = os.path.join(root, name)
flist.append(fullname)
return flist

# Some stuff is too hard to package. just grab every file in these directories
# and call it a day. we can clean up some other time
pd_filelist=['virt/scripts/*.py', 'virt/*.sample', 'virt/passfd.c', 'config/*' ]
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'profilers')))
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'samples')))
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'tests')))
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'virt', 'autoit')))
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'virt', 'autotest_control')))
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'virt', 'blkdebug')))
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'virt', 'deps')))
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'virt', 'steps')))
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'virt', 'tests')))
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'virt', 'unattended')))
pd_filelist.extend(get_data_files(os.path.join(client_dir, 'tools')))


setup(name='autotest',
description='Autotest test framework - local module',
author='Autotest Team',
author_email='[email protected]',
version=version.get_git_version(),
url='autotest.kernel.org',
package_dir={'autotest.client': client_dir,
'autotest' : autotest_dir,
},
package_data={'autotest.client' : pd_filelist },
packages=['autotest.client.common_lib',
'autotest.client.common_lib.hosts',
'autotest.client.common_lib.test_utils',
'autotest.client.bin',
'autotest.client.bin.net',
'autotest.client.tools',
'autotest.client.profilers',
'autotest.client.tests',
'autotest.client.virt',
'autotest.client',
'autotest',
],
scripts=[client_dir + '/bin/autotest-local'],
data_files=[('/etc/autotest', [autotest_dir + '/global_config.ini',
autotest_dir + '/shadow_config.ini',
]),
],
)
25 changes: 25 additions & 0 deletions database/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from distutils.core import setup
import os, sys

try:
import autotest.common as common
except ImportError:
import common

from autotest_lib.client.common_lib import version

# Mostly needed when called one level up
db_dir = os.path.dirname(sys.modules[__name__].__file__) or '.'
autotest_dir = os.path.abspath(os.path.join(db_dir, ".."))

setup(name='autotest',
description='Autotest test framework - results database module',
author='Autotest Team',
author_email='[email protected]',
version=version.get_git_version(),
url='autotest.kernel.org',
package_dir={'autotest.database': db_dir },
package_data={'autotest.database' : ['*.sql' ] },
packages=['autotest.database' ],
scripts=[db_dir + '/autotest-upgrade-db'],
)
57 changes: 57 additions & 0 deletions frontend/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from distutils.core import setup
import os, sys

try:
import autotest.common as common
except ImportError:
import common

from autotest_lib.client.common_lib import version

# Mostly needed when called one level up
fe_dir = os.path.dirname(sys.modules[__name__].__file__) or '.'

# TODO: handle the client directory
def get_data_files(path):
'''
Given a path, return all the files in there to package
'''
flist=[]
for root, _, files in sorted(os.walk(path)):
for name in files:
fullname = os.path.join(root, name)
flist.append(fullname)
return flist

# Some stuff is too hard to package. just grab every file in these directories
# and call it a day. we can clean up some other time
pd_filelist=[]
pd_filelist.extend(get_data_files(os.path.join(fe_dir, 'client')))
pd_filelist.extend(get_data_files(os.path.join(fe_dir, 'afe', 'doctests')))
pd_filelist.extend(get_data_files(os.path.join(fe_dir, 'afe', 'fixtures')))
pd_filelist.extend(get_data_files(os.path.join(fe_dir, 'afe', 'templates')))
pd_filelist.extend(get_data_files(os.path.join(fe_dir, 'static')))
pd_filelist.extend(get_data_files(os.path.join(fe_dir, 'templates')))
pd_filelist.extend(get_data_files(os.path.join(fe_dir, 'tko', 'preconfigs')))

setup(name='autotest',
description='Autotest test framework - rpc server',
author='Autotest Team',
author_email='[email protected]',
version=version.get_git_version(),
url='autotest.kernel.org',
package_dir={'autotest.frontend': fe_dir },
package_data={'autotest.frontend' : pd_filelist },
packages=['autotest.frontend.afe',
'autotest.frontend.afe.feeds',
'autotest.frontend.afe.json_rpc',
'autotest.frontend.db',
'autotest.frontend.db.backends',
'autotest.frontend.db.backends.afe',
'autotest.frontend.db.backends.afe_sqlite',
'autotest.frontend.migrations',
'autotest.frontend.shared',
'autotest.frontend.tko',
'autotest.frontend',
],
)
24 changes: 24 additions & 0 deletions mirror/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from distutils.core import setup
import os, sys

try:
import autotest.common as common
except ImportError:
import common

from autotest_lib.client.common_lib import version

# Mostly needed when called one level up
mirror_dir = os.path.dirname(sys.modules[__name__].__file__) or '.'
autotest_dir = os.path.abspath(os.path.join(mirror_dir, ".."))

setup(name='autotest',
description='Autotest testing framework - mirror module',
author='Autotest Team',
author_email='[email protected]',
version=version.get_git_version(),
url='autotest.kernel.org',
package_dir={'autotest.mirror': mirror_dir },
packages=['autotest.mirror' ],
data_files=[('share/autotest/mirror', [ mirror_dir + '/mirror' ])],
)
27 changes: 27 additions & 0 deletions scheduler/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from distutils.core import setup
import os, sys

try:
import autotest.common as common
except ImportError:
import common

from autotest_lib.client.common_lib import version

#mostly needed when called one level up
scheduler_dir = os.path.dirname(sys.modules[__name__].__file__) or '.'
autotest_dir = os.path.abspath(os.path.join(scheduler_dir, ".."))

setup(name='autotest',
description='Autotest testing framework - scheduler module',
author='Autotest Team',
author_email='[email protected]',
version=version.get_git_version(),
url='autotest.kernel.org',
package_dir={'autotest.scheduler': scheduler_dir },
package_data={'autotest.scheduler': ['archive_results.control.srv']},
packages=['autotest.scheduler' ],
scripts=[scheduler_dir + '/autotest-scheduler',
scheduler_dir + '/autotest-scheduler-watcher',
],
)
47 changes: 47 additions & 0 deletions server/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
from distutils.core import setup
import os, sys

try:
import autotest.common as common
except ImportError:
import common

from autotest_lib.client.common_lib import version

# Mostly needed when called one level up
server_dir = os.path.dirname(sys.modules[__name__].__file__) or '.'

def get_data_files(path):
'''
Given a path, return all the files in there to package
'''
flist=[]
for root, _, files in sorted(os.walk(path)):
for name in files:
fullname = os.path.join(root, name)
flist.append(fullname)
return flist

# Some stuff is too hard to package. just grab every file in these directories
# and call it a day. we can clean up some other time
pd_filelist=[]
pd_filelist.extend(get_data_files(os.path.join(server_dir, 'control_segments')))
pd_filelist.extend(get_data_files(os.path.join(server_dir, 'hosts', 'monitors')))
pd_filelist.extend(get_data_files(os.path.join(server_dir, 'samples')))
pd_filelist.extend(get_data_files(os.path.join(server_dir, 'tests')))

setup(name='autotest',
description='Autotest testing framework - remote module',
author='Autotest Team',
author_email='[email protected]',
version=version.get_git_version(),
url='autotest.kernel.org',
package_dir={'autotest.server': server_dir },
package_data={'autotest.server' : pd_filelist },
packages=['autotest.server.hosts',
'autotest.server.hosts.monitors',
'autotest.server',
],
scripts=[server_dir + '/autotest-remote',
],
)
10 changes: 10 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# High level way of installing each autotest component
import client.setup
import frontend.setup
import cli.setup
import server.setup
import scheduler.setup
import database.setup
import tko.setup
import utils.setup
import mirror.setup
44 changes: 44 additions & 0 deletions tko/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from distutils.core import setup
from glob import glob
import os, sys

try:
import autotest.common as common
except ImportError:
import common

from autotest_lib.client.common_lib import version

# Mostly needed when called one level up
tko_dir = os.path.dirname(sys.modules[__name__].__file__) or '.'

# TODO: add some toplevel non-python files

setup(name='autotest',
description='Autotest testing framework - tko module',
author='Autotest Team',
author_email='[email protected]',
version=version.get_git_version(),
url='autotest.kernel.org',
package_dir={'autotest.tko': tko_dir },
package_data={'autotest.tko' : ['*.cgi',
],
},
packages=['autotest.tko.migrations',
'autotest.tko.parsers',
'autotest.tko.parsers.test',
'autotest.tko.parsers.test.templates',
'autotest.tko',
],
data_files=[('share/autotest/tko', [ tko_dir + '/blank.gif',
tko_dir + '/draw_graphs',
tko_dir + '/machine_load',
tko_dir + '/parse',
tko_dir + '/plotgraph',
tko_dir + '/retrieve_jobs',
tko_dir + '/tko.proto',
]),
],
scripts=[tko_dir + '/autotest-db-delete-job',
],
)
34 changes: 34 additions & 0 deletions utils/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from distutils.core import setup
import os, sys

try:
import autotest.common as common
except ImportError:
import common

from autotest_lib.client.common_lib import version

# Mostly needed when called one level up
utils_dir = os.path.dirname(sys.modules[__name__].__file__) or '.'

# TODO handle the init scripts

setup(name='autotest',
description='Autotest testing framework - utility scripts',
author='Autotest Team',
author_email='[email protected]',
version=version.get_git_version(),
url='autotest.kernel.org',
package_dir={'autotest.utils': utils_dir },
package_data={'autotest.utils' : ['named_semaphore/*',
'modelviz/*',
],
},
packages=['autotest.utils'],
data_files=[('share/autotest/utils', [ utils_dir + '/autotestd.service',
utils_dir + '/autotest.init',
utils_dir + '/autotest-rh.init',
utils_dir + '/release'
])
],
)

0 comments on commit 1d742a2

Please sign in to comment.