def deploy(): HEAD = tools.hash_for_name("HEAD") MASTER = tools.hash_for_name("origin/master") print("Current head: ", HEAD) print("Current master:", MASTER) if not tools.is_ancestor(HEAD, MASTER): print("Not deploying due to not being on master") sys.exit(0) if "TWINE_PASSWORD" not in os.environ: print("Running without access to secure variables, so no deployment") sys.exit(0) tools.configure_git() for project in tools.all_projects(): do_release(project) sys.exit(0)
def check_installed(): """No-op task that can be used to test for a successful install (so we don't fail to run if a previous install failed midway).""" @task() def lint(): pip_tool( "flake8", *[f for f in tools.all_files() if f.endswith(".py")], "--config", os.path.join(tools.ROOT, ".flake8"), ) HEAD = tools.hash_for_name("HEAD") MASTER = tools.hash_for_name("origin/master") def do_release(package): if not package.has_release(): print("No release for %s" % (package.__name__, )) return os.chdir(package.BASE_DIR) print("Updating changelog and version") package.update_changelog_and_version() print("Committing changes") rm.commit_pending_release(package)
DIST = os.path.join(tools.ROOT, 'dist') PENDING_STATUS = ('started', 'created') if __name__ == '__main__': last_release = tools.latest_version() print('Current version: %s. Latest released version: %s' % ( tools.__version__, last_release )) HEAD = tools.hash_for_name('HEAD') MASTER = tools.hash_for_name('origin/master') print('Current head:', HEAD) print('Current master:', MASTER) on_master = tools.is_ancestor(HEAD, MASTER) has_release = tools.has_release() if has_release: print('Updating changelog and version') tools.update_for_pending_release() print('Building an sdist...') if os.path.exists(DIST): shutil.rmtree(DIST)
import hypothesistooling as tools sys.path.append(os.path.dirname(__file__)) # noqa DIST = os.path.join(tools.ROOT, 'dist') PENDING_STATUS = ('started', 'created') if __name__ == '__main__': last_release = tools.latest_version() print('Current version: %s. Latest released version: %s' % (tools.__version__, last_release)) HEAD = tools.hash_for_name('HEAD') MASTER = tools.hash_for_name('origin/master') print('Current head:', HEAD) print('Current master:', MASTER) on_master = tools.is_ancestor(HEAD, MASTER) has_release = tools.has_release() if has_release: print('Updating changelog and version') tools.update_for_pending_release() print('Building an sdist...') if os.path.exists(DIST): shutil.rmtree(DIST)
def deploy(): os.chdir(tools.HYPOTHESIS_PYTHON) last_release = tools.latest_version() print('Current version: %s. Latest released version: %s' % (tools.__version__, last_release)) HEAD = tools.hash_for_name('HEAD') MASTER = tools.hash_for_name('origin/master') print('Current head:', HEAD) print('Current master:', MASTER) on_master = tools.is_ancestor(HEAD, MASTER) has_release = tools.has_release() if has_release: print('Updating changelog and version') tools.update_for_pending_release() print('Building an sdist...') if os.path.exists(DIST): shutil.rmtree(DIST) subprocess.check_output([ sys.executable, 'setup.py', 'sdist', '--dist-dir', DIST, ]) if not on_master: print('Not deploying due to not being on master') sys.exit(0) if not has_release: print('Not deploying due to no release') sys.exit(0) start_time = time() prev_pending = None # We time out after an hour, which is a stupidly long time and it should # never actually take that long: A full Travis run only takes about 20-30 # minutes! This is really just here as a guard in case something goes # wrong and we're not paying attention so as to not be too mean to Travis.. while time() <= start_time + 60 * 60: jobs = tools.build_jobs() failed_jobs = [(k, v) for k, vs in jobs.items() if k not in PENDING_STATUS + ('passed', ) for v in vs] if failed_jobs: print('Failing this due to failure of jobs %s' % (', '.join('%s(%s)' % (s, j) for j, s in failed_jobs), )) sys.exit(1) else: pending = [j for s in PENDING_STATUS for j in jobs.get(s, ())] try: # This allows us to test the deploy job for a build locally. pending.remove('deploy') except ValueError: pass if pending: still_pending = set(pending) if prev_pending is None: print('Waiting for the following jobs to complete:') for p in sorted(still_pending): print(' * %s' % (p, )) print() else: completed = prev_pending - still_pending if completed: print('%s completed since last check.' % (', '.join(sorted(completed)), )) prev_pending = still_pending naptime = 10.0 * (2 + random.random()) print('Waiting %.2fs for %d more job%s to complete' % ( naptime, len(pending), 's' if len(pending) > 1 else '', )) sleep(naptime) else: break else: print("We've been waiting for an hour. That seems bad. Failing now.") sys.exit(1) print('Looks good to release!') if os.environ.get('TRAVIS_SECURE_ENV_VARS', None) != 'true': print("But we don't have the keys to do it") sys.exit(0) print('Decrypting secrets') tools.decrypt_secrets() print('Release seems good. Pushing to github now.') tools.create_tag_and_push() print('Now uploading to pypi.') subprocess.check_call([ sys.executable, '-m', 'twine', 'upload', '--config-file', tools.PYPIRC, os.path.join(DIST, '*'), ]) sys.exit(0)
PENDING_STATUS = ('started', 'created') if __name__ == '__main__': last_release = tools.latest_version() print('Current version: %s. Latest released version: %s' % ( tools.__version__, last_release )) tools.add_ssh_origin() tools.git("fetch", "ssh-origin") HEAD = tools.hash_for_name('HEAD') MAIN = tools.hash_for_name('ssh-origin/main') print('Current head: ', HEAD) print('Current main:', MAIN) on_main = tools.is_ancestor(HEAD, MAIN) has_release = tools.has_release() if has_release: print('Updating changelog and version') tools.update_for_pending_release() print('Building an sdist...') if os.path.exists(DIST): shutil.rmtree(DIST)
"--config", os.path.join(tools.ROOT, ".flake8"), ) # Check for redefined test functions, where e.g. a copy-pasted definition # will shadow the earlier test and Pytest never sees or executes it. pip_tool( "pylint", "--score=n", "--jobs=0", "--disable=all", "--enable=function-redefined", "hypothesis-python/tests/", ) HEAD = tools.hash_for_name("HEAD") MASTER = tools.hash_for_name("origin/master") def do_release(package): if not package.has_release(): print("No release for %s" % (package.__name__,)) return os.chdir(package.BASE_DIR) print("Updating changelog and version") package.update_changelog_and_version() print("Committing changes") rm.commit_pending_release(package)