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
|
# Package: fabfile
# Date: 18th June 2013
# Author: James Mills, j dot mills at griffith dot edu dot au
"""Development Task"""
from __future__ import print_function
from os import getcwd
from fabric.api import (
abort, cd, execute, hide, hosts,
local, prefix, prompt, run, settings, task
)
import help # noqa
import docs # noqa
import docker # noqa
from .utils import msg, pip, requires, tobool
@task()
@requires("pip")
def build(**options):
"""Build and install required dependencies
Options can be provided to customize the build.
The following options are supported:
- dev -> Whether to install in development mode (Default: Fase)
"""
dev = tobool(options.get("dev", False))
if dev:
pip(requirements="requirements-dev.txt")
with settings(hide("stdout", "stderr"), warn_only=True):
local("python setup.py {0:s}".format("develop" if dev else "install"))
@task()
def clean():
"""Clean up build files and directories"""
files = ["build", ".coverage", "coverage", "dist", "docs/build"]
local("rm -rf {0:s}".format(" ".join(files)))
local("find . -type f -name '*~' -delete")
local("find . -type f -name '*.pyo' -delete")
local("find . -type f -name '*.pyc' -delete")
local("find . -type d -name '__pycache__' -delete")
local("find . -type d -name '*egg-info' -exec rm -rf {} +")
@task()
def develop():
"""Build and Install in Development Mode"""
return execute(build, dev=True)
@task()
@requires("py.test")
def test():
"""Run all unit tests and doctests."""
local("python setup.py test")
@task()
@hosts("localhost")
def release():
"""Performs a full release"""
with cd(getcwd()):
with msg("Creating env"):
run("mkvirtualenv test")
with msg("Bootstrapping"):
with prefix("workon test"):
run("./bootstrap.sh")
with msg("Building"):
with prefix("workon test"):
run("fab develop")
with msg("Running tests"):
with prefix("workon test"):
run("fab test")
with msg("Building docs"):
with prefix("workon test"):
run("pip install -r docs/requirements.txt")
run("fab docs")
version = run("python setup.py --version")
if "dev" in version:
abort("Detected Development Version!")
print("Release version: {0:s}".format(version))
if prompt("Is this ok?", default="Y", validate=r"^[YyNn]?$") in "yY":
run("hg tag {0:s}".format(version))
run("python setup.py egg_info sdist bdist_egg register upload")
run("python setup.py build_sphinx upload_sphinx")
with msg("Destroying env"):
run("rmvirtualenv test")
@task()
def sync(*args):
"""Synchronouse Local Repository with Remote(s)"""
status = local("hg status", capture=True)
if status:
abort(
(
"Repository is not in a clean state! "
"Please commit, revert or shelve!"
)
)
with settings(warn_only=True):
local("hg pull --update")
local("hg pull --update github")
local("hg pull --update upstream")
local("hg bookmark -r tip master")
local("hg push")
local("hg push github")
local("hg push upstream")
|