| Index: bootstrap/README.md
|
| diff --git a/bootstrap/README.md b/bootstrap/README.md
|
| deleted file mode 100644
|
| index 2527c4947cfc7c259c4dafd083b272a5b8a5c0ea..0000000000000000000000000000000000000000
|
| --- a/bootstrap/README.md
|
| +++ /dev/null
|
| @@ -1,195 +0,0 @@
|
| -# Bootstrapping the Chromium Infra Repo
|
| -
|
| -The infra/infra repo uses python [wheel files][1], [virtualenv][2] and [pip][3]
|
| -to manage dependencies. The process for bootstrapping these is contained
|
| -entirely within the bootstrap directory.
|
| -
|
| -1: http://legacy.python.org/dev/peps/pep-0427/
|
| -2: https://github.com/pypa/virtualenv
|
| -3: https://github.com/pypa/pip
|
| -
|
| -
|
| -## TL;DR - Workflows
|
| -
|
| -### Setting up the env with already-built-deps
|
| - gclient sync # OR
|
| - gclient runhooks
|
| -
|
| -### Adding a new dep
|
| -Say we want to add a stock `my_pkg` python package at version 1.2.3
|
| -
|
| - ```
|
| - # If it comes from a tarball
|
| - $ ./bootstrap/ingest_source.py <tarball>
|
| - ...
|
| - deadbeefdeadbeefdeadbeefdeadbeef.tar.gz
|
| - ```
|
| -
|
| - # If it comes from a repo
|
| - # File a ticket to have it mirrored (no matter what VCS!) to
|
| - # `chromium.googlesource.com/infra/third_party/my_pkg`
|
| - # Grab the git commit hash of the commit to build:
|
| - # badc0ffeebadc0ffeebadc0ffeebadc0
|
| -
|
| -Then add the actual dep
|
| -
|
| - ```
|
| - $ vim bootstrap/deps.pyl # add a new entry (see `deps.pyl` section)
|
| - ...
|
| - 'my_pkg' : {
|
| - 'version': '1.2.3',
|
| - 'build': 0, # This is the first build
|
| - 'gs': 'deadbeefdeadbeefdeadbeefdeadbeef.tar.gz', # if tarball
|
| - 'rev': 'badc0ffeebadc0ffeebadc0ffeebadc0', # if repo
|
| - }
|
| - ...
|
| - ```
|
| -
|
| -Then build it
|
| -
|
| - ```
|
| - $ ./bootstrap/build_deps.py
|
| - # builds and uploads my_pkg-1.2.3-0_deadbeef...-....whl to google storage
|
| - ```
|
| -
|
| -If your dep is not pure-python, you will have to run `build_deps.py` for each
|
| -platform.
|
| -
|
| -
|
| -### If your dep needs special treatment
|
| -Do everything in the 'Adding a new dep' section, but before running
|
| -`build_deps.py`, add a file `bootstrap/custom_builds/{wheel package name}.py`.
|
| -This file is expected to implement:
|
| -
|
| - `def Build(source_path, wheelhouse_path)`
|
| -
|
| -See 'custom builds' for more detail.
|
| -
|
| -
|
| -## `bootstrap.py` (a.k.a. "I just want a working infra repo!")
|
| -Run `gclient runhooks`. Under the hood, this is running
|
| -`./bootstrap/bootstrap.py --deps_file bootstrap/deps.pyl`.
|
| -
|
| -This creates a virtualenv called `{repo_root}/ENV` with all the deps contained
|
| -in `bootstrap/deps.pyl`. You must be online, or must already have the wheels for
|
| -your system cached in `{repo_root}/.wheelcache`.
|
| -
|
| -If you already have an ENV, `bootstrap.py` will check the manifest in ENV to
|
| -see if it matches `deps.pyl` (i.e. the diff is zero). If it's not, then ENV
|
| -will be re-created _from scratch_.
|
| -
|
| -`{repo_root}/run.py` will automatically use the environment ENV. It is an error
|
| -to use run.py without first setting up ENV.
|
| -
|
| -
|
| -## `deps.pyl`
|
| -This file is a python dictionary containing the exact versions of all python
|
| -module dependencies. These versions are the standard upstream package versions
|
| -(e.g. '0.8.0'), plus the commit hash or sha1.{ext} of an ingested source bundle
|
| -(see `inject_source.py`).
|
| -
|
| -The format of this file is `{'package_name': <values>}`. This file is a python
|
| -[ast literal][4], so comments are allowed and encouraged.
|
| -
|
| -Values are:
|
| - * version: The pip version of the module
|
| - * build: An integer representing which build of this version/hash. If you
|
| - modify the _way_ that a requirement is built, but not the source hash, you
|
| - can bump the build number to get a new pinned dependency.
|
| -
|
| -And either:
|
| - * rev: The revision or sha1 of the source for this module.
|
| - * The repo is
|
| - 'git+https://chromium.googlesource.com/infra/third_party/{package_name}'
|
| - * gs: '{sha1}.{ext}' indicates file
|
| - 'gs://chrome-infra-wheelhouse/sources/{sha1}.{ext}'. The sha1 will be
|
| - checked against the content of the file.
|
| -
|
| -And optionally:
|
| - * implicit: A boolean indicating that this dep should only be installed as a
|
| - dependency of some other dep. For example, you want package A, which
|
| - depends on package Z, but you don't really care about Z. You should mark
|
| - Z as 'implicit' to allow it to be pinned correctly, but not to
|
| - deliberately install it.
|
| -
|
| -4: https://docs.python.org/2/library/ast.html#ast.literal_eval
|
| -
|
| -
|
| -## `ingest_source.py`
|
| -Some python modules don't have functional python repos (i.e. ones that pip
|
| -can natively clone+build), and thus ship their source in tarballs. To ingest
|
| -such a tarball into the infra google storage bucket, use
|
| - `ingest_source.py /path/to/archive`.
|
| -This will print the value for the 'gs' key for a `deps.pyl` entry.
|
| -
|
| -
|
| -## `build_deps.py` / rolling deps
|
| -Any time a new dependency/version is introduced into `deps.pyl`, you must run
|
| -`build_deps.py`. If the dependency is a pure-python dependency (i.e. no compiled
|
| -extensions), you only need to run it once on CPython 2.7. You can tell that it's
|
| -a pure python module by looking at the name of the wheel file. For example:
|
| -
|
| - requests-2.3.0-py2.py3-none-any.whl
|
| -
|
| -Is compatible with Python 2 and Python 3 (py2.py3) any python ABI (none), and
|
| -any OS platform (any).
|
| -
|
| -If the module does contain compiled extensions, you must run `build_deps.py` on
|
| -the following systems (all with CPython 2.7):
|
| - * OS X 10.9 - `x86_64`
|
| - * Windows 7 - `x86_64`
|
| - * Linux - `x86_64`
|
| -
|
| - TODO(iannucci): Add job to build wheels on all appropriate systems.
|
| -
|
| -Once a wheel is sucessfully built, it is uploaded to
|
| -`gs://chrome-python-wheelhouse/wheels` if it is not there already.
|
| -
|
| -Running `build_deps.py` will only attempt to build dependencies which are
|
| -missing for the current platform.
|
| -
|
| -`build_deps.py` assumes that it can find `gsutil` on PATH, so go ahead and
|
| -install it appropriately for whichever platform you're on.
|
| -
|
| -
|
| -## custom builds
|
| -Sometimes building a wheel is a bit trickier than `pip wheel {repo}@{hash}`. In
|
| -order to support this, add a script named `custom_builds/{name}.py`. This module
|
| -should have a function defined like:
|
| -
|
| - `def Build(source_path, wheelhouse_path)`
|
| -
|
| -Where `source_path` is a string path to the checked-out / unpacked source code,
|
| -and `wheelhouse_path` is a string path where `build_deps.py` expects to find
|
| -a .whl file after Build completes.
|
| -
|
| -
|
| -## rolling the version of wheel
|
| -Since wheel is a package needed to build the wheels, it has a slightly different
|
| -treatment. To roll wheel, bump the version in deps.pyl, and then run
|
| - `bootstrap_wheel_wheel.sh`
|
| -to build and upload the wheel for 'wheel' pinned at the version in `deps.pyl`.
|
| -
|
| -Once you do that, `build_deps.py` will continue working as expected.
|
| -
|
| -
|
| -## Building deps on Windows
|
| -TODO(iannucci): actually implement this
|
| -
|
| -Windows builds require a slightly more care when building, due to the
|
| -complexities of getting a compile environment. To this effect, `build_deps.py`
|
| -relies on the `depot_tools/win_toolchain` functionality to get a hermetic
|
| -windows compiler toolchain. This should not be an issue for chromium devs
|
| -working on windows, since they should already have this installed by compiling
|
| -chromium, but it's something to be aware of.
|
| -
|
| -
|
| -## modified (non-upstream) deps
|
| -If it is necessary to roll a patched version of a library, we should branch it
|
| -in the infra googlesource mirror. This branch should be named `{version}-cr`,
|
| -and will build packages whose version is `{version}.{cr_version}` (e.g. modify
|
| -setup.py on this branch to add an additional component to the version field).
|
| -
|
| -For example, given the package `jane` at version `2.1.3`, we would create
|
| -a branch `2.1.3-cr`. On this branch we would commit any changes necessary to
|
| -`2.1.3`, and would adjust the version number in the builds to be e.g. `2.1.3.0`.
|
|
|