This is cool. Relative links that link between folders/files in the github repo are converted to relative links in the documentation.

This commit is contained in:
Anders Ingemann 2015-04-19 13:05:58 +02:00
parent 8fddd9e374
commit 501e6ad97b
7 changed files with 107 additions and 30 deletions

View file

@ -6,7 +6,7 @@ Sending pull requests
Do you want to contribute to the bootstrap-vz project? Nice! Here is the basic workflow:
+ Read the `development guidelines <http://bootstrap-vz.readthedocs.org/en/master/contributing.html#development-guidelines>`__
+ Read the `development guidelines <#development-guidelines>`__
+ Fork this repository.
+ Make any changes you want/need.
+ Check the coding style of your changes using `tox <http://tox.readthedocs.org/>`__ by running `tox -e flake8`
@ -14,7 +14,7 @@ Do you want to contribute to the bootstrap-vz project? Nice! Here is the basic w
This check will be repeated by `Travis CI <https://travis-ci.org/andsens/bootstrap-vz>`__
once you send a pull request, so it's better if you check this beforehand.
+ If the change is significant (e.g. a new plugin, manifest setting or security fix)
add your name and contribution to the `changelog <http://bootstrap-vz.readthedocs.org/en/master/changelog.html>`__.
add your name and contribution to the `changelog <CHANGELOG.rst>`__.
+ Commit your changes.
+ Squash the commits if needed. For instance, it is fine if you have multiple commits describing atomic units
of work, but there's no reason to have many little commits just because of corrected typos.
@ -107,7 +107,7 @@ value to the bootstrap-vz codebase.
This allows other tasks to interleave with the control-flow and add extended
functionality (e.g. because volume creation and mounting are two
separate tasks, `the prebootstrapped plugin
<http://bootstrap-vz.readthedocs.org/en/master/plugins/prebootstrapped.html>`__
<bootstrapvz/plugins/prebootstrapped>`__
can replace the volume creation task with a task of its own that
creates a volume from a snapshot instead, but still reuse the mount task).

View file

@ -7,7 +7,7 @@ bootstrap-vz runs without any user intervention and
generates ready-to-boot images for a number of virtualization
platforms.
Its aim is to provide a reproducable bootstrapping process using
`manifests <http://bootstrap-vz.readthedocs.org/en/master/manifest.html>`__
`manifests <manifests>`__
as well as supporting a high degree of customizability through plugins.
bootstrap-vz was coded from scratch in python once the bash script
@ -21,11 +21,11 @@ Documentation
The documentation for bootstrap-vz is available at
`bootstrap-vz.readthedocs.org <http://bootstrap-vz.readthedocs.org/en/master>`__.
There, you can discover `what the
dependencies <http://bootstrap-vz.readthedocs.org/en/master/index.html#dependencies>`__
dependencies <#dependencies>`__
for a specific cloud provider are, `see a list of available
plugins <http://bootstrap-vz.readthedocs.org/en/master/plugins>`__ and
plugins <bootstrapvz/plugins>`__ and
learn `how you create a
manifest <http://bootstrap-vz.readthedocs.org/en/master/manifest.html>`__.
manifest <manifests>`__.
Installation
------------
@ -68,7 +68,7 @@ VirtualBox Vagrant
root@host:~# pip install termcolor jsonschema fysom docopt pyyaml # Install python dependencies
root@host:~# bootstrap-vz/bootstrap-vz bootstrap-vz/manifests/virtualbox-vagrant.manifest.yml
If you want to use the `minimize\_size <http://bootstrap-vz.readthedocs.org/en/master/plugins/minimize_size.html>`__
If you want to use the `minimize\_size <bootstrapvz/plugins/minimize_size>`__
plugin, you will have to install the ``zerofree`` package and `VMWare
Workstation <https://my.vmware.com/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation/10_0>`__
as well.
@ -113,7 +113,7 @@ Dependencies
------------
bootstrap-vz has a number of dependencies depending on the target
platform and `the selected plugins <http://bootstrap-vz.readthedocs.org/en/master/plugins>`__.
platform and `the selected plugins <bootstrapvz/plugins>`__.
At a bare minimum the following python libraries are needed:
* `termcolor <https://pypi.python.org/pypi/termcolor>`__
@ -142,7 +142,7 @@ Contributing
------------
Contribution guidelines are described in the documentation under
`Contributing <http://bootstrap-vz.readthedocs.org/en/master/developers/contributing.html>`__.
`Contributing <CONTRIBUTING.rst>`__.
There's also
`a topic <http://bootstrap-vz.readthedocs.org/en/master/developers/contributing.html#coding-style>`__
`a topic <CONTRIBUTING.rst#coding-style>`__
regarding the coding style.

View file

@ -7,7 +7,7 @@ once it is done and registers it as an AMI. EBS volume backing only
works on an EC2 host while S3 backed volumes *should* work locally (at
this time however they do not, a fix is in the works).
Unless `the cloud-init plugin <http://bootstrap-vz.readthedocs.org/en/master/plugins/cloud_init.html>`__
Unless `the cloud-init plugin <../../plugins/cloud_init>`__
is used, special startup scripts will be installed that automatically fetch the
configured authorized\_key from the instance metadata and save or run
any userdata supplied (if the userdata begins with ``#!`` it will be

View file

@ -9,4 +9,4 @@ interoperability (e.g.
*should* support vdi files, but since they have no identifier URL not
even VirtualBox itself can import them). VirtualBox Guest Additions can
be installed automatically if the ISO is `provided in the
manifest <http://bootstrap-vz.readthedocs.org/en/master/manifest.html#bootstrapper>`__.
manifest <../../../manifests#bootstrapper>`__.

View file

@ -272,17 +272,19 @@ import os.path
for readme_path in glob.glob('../bootstrapvz/providers/*/README.rst'):
provider_name = os.path.basename(os.path.dirname(readme_path))
include_path = os.path.join('providers', provider_name + '.rst')
path_to_readme = os.path.join('../../bootstrapvz/providers', provider_name, 'README.rst')
with open(include_path, 'w') as include:
include.write('.. include:: ' + path_to_readme)
if not os.path.exists(include_path):
path_to_readme = os.path.join('../../bootstrapvz/providers', provider_name, 'README.rst')
with open(include_path, 'w') as include:
include.write('.. include:: ' + path_to_readme)
for readme_path in glob.glob('../bootstrapvz/plugins/*/README.rst'):
plugin_name = os.path.basename(os.path.dirname(readme_path))
include_path = os.path.join('plugins', plugin_name + '.rst')
path_to_readme = os.path.join('../../bootstrapvz/plugins', plugin_name, 'README.rst')
with open(include_path, 'w') as include:
include.write('.. include:: ' + path_to_readme)
if not os.path.exists(include_path):
path_to_readme = os.path.join('../../bootstrapvz/plugins', plugin_name, 'README.rst')
with open(include_path, 'w') as include:
include.write('.. include:: ' + path_to_readme)
# -- Create task overview graph data --------------------------------------

View file

@ -1,19 +1,94 @@
import re
def setup(app):
app.connect('doctree-resolved', replace_rtd_links)
return {'version': '0.1'}
# Maps from files in docs/ to folders/files in repo
includes_mapping = {
r'^index$': r'',
r'^(providers|plugins)/index$': r'bootstrapvz/\1/',
r'^(providers|plugins)/(?!index)([^/]+)$': r'bootstrapvz/\1/\2/',
r'^manifest$': r'manifests/',
r'^testing/index$': r'testing/',
r'^testing/(?!index)([^/]+)_tests$': r'testing/\1/',
r'^remote_bootstrapping$': r'bootstrapvz/remote/',
r'^developers/index$': r'bootstrapvz/',
r'^developers/contributing$': r'CONTRIBUTING.rst',
r'^changelog$': r'CHANGELOG.rst',
}
# Maps from links in repo to files/folders in docs/
links_mapping = {
r'^$': r'',
r'^bootstrapvz/(providers|plugins)$': r'\1',
r'^bootstrapvz/(providers|plugins)/([^/]+)$': r'\1/\2.html',
r'^testing$': r'testing',
r'^manifests$': r'manifest.html',
r'^testing/([^/]+)$': r'testing/\1_tests.html',
r'^bootstrapvz/remote$': r'remote_bootstrapping.html',
r'^bootstrapvz$': r'developers',
r'^CONTRIBUTING\.rst$': r'developers/contributing.html',
r'^CHANGELOG\.rst$': r'changelog.html',
}
for key, val in includes_mapping.items():
del includes_mapping[key]
includes_mapping[re.compile(key)] = val
for key, val in links_mapping.items():
del links_mapping[key]
links_mapping[re.compile(key)] = val
def find_original(path):
for key, val in includes_mapping.items():
if re.match(key, path):
return re.sub(key, val, path)
return None
def find_docs_link(link):
try:
# Preserve anchor when doing lookups
link, anchor = link.split('#', 1)
anchor = '#' + anchor
except ValueError:
# No anchor, keep the original link
anchor = ''
for key, val in links_mapping.items():
if re.match(key, link):
return re.sub(key, val, link) + anchor
return None
def replace_rtd_links(app, doctree, fromdocname):
from docutils import nodes
import re
# Convert relative links in repo into relative links in docs.
# We do this by first figuring out whether the current document
# has been included from outside docs/ and only continue if so.
# Next we take the repo path matching the current document
# (lookup through 'includes_mapping'), tack the link onto the dirname
# of that path and normalize it using os.path.normpath.
# The result is the path to a document/folder in the repo.
# We then convert this path into one that works in the documentation
# (lookup through 'links_mapping').
# If a mapping is found we, create a relative link from the current document.
from docutils import nodes
import os.path
original_path = find_original(fromdocname)
if original_path is None:
return
rtd_baseurl = 'http://bootstrap-vz.readthedocs.org/en/master/'
search = re.compile('^' + re.escape(rtd_baseurl) + '(.*)$')
for node in doctree.traverse(nodes.reference):
if 'refuri' not in node:
continue
if not node['refuri'].startswith(rtd_baseurl):
if node['refuri'].startswith('http'):
continue
node['refuri'] = re.sub(search, r'\1', node['refuri'])
abs_link = os.path.normpath(os.path.join(os.path.dirname(original_path), node['refuri']))
docs_link = find_docs_link(abs_link)
if docs_link is None:
continue
node['refuri'] = os.path.relpath(docs_link, os.path.dirname(fromdocname))

View file

@ -39,7 +39,7 @@ name of the provider itself.
- **``name``**: target virtualization platform of the installation
*``required``*
Consult the `providers <http://bootstrap-vz.readthedocs.org/en/master/providers>`__ section of the documentation
Consult the `providers <../bootstrapvz/providers>`__ section of the documentation
for a list of valid values.
Bootstrapper
@ -76,7 +76,7 @@ are 4 possible settings:
Accepts a list of package names.
*``optional``*
- **``guest_additions``**: This setting is only relevant for the
`virtualbox provider <http://bootstrap-vz.readthedocs.org/en/master/providers/virtualbox.html>`__.
`virtualbox provider <../bootstrapvz/providers/virtualbox.html>`__.
It specifies the path to the VirtualBox Guest Additions ISO, which, when specified,
will be mounted and used to install the VirtualBox Guest Additions.
*``optional``*
@ -216,7 +216,7 @@ boot, root and swap.
optional setting overrides the command bootstrap-vz would normally
use to format the partition. The command is specified as a string
array where each option/argument is an item in that array (much
like the `image\_commands <http://bootstrap-vz.readthedocs.org/en/master/plugins/image_commands.html>`__ plugin).
like the `image\_commands <../bootstrapvz/plugins/image_commands.html>`__ plugin).
*``optional``* The following variables are available:
- **``{fs}``**: The filesystem of the partition.
- **``{device_path}``**: The device path of the partition.
@ -237,5 +237,5 @@ Plugins
~~~~~~~
The plugins section is a map of plugin names to whatever configuration a
plugin requires. Go to the `plugin section <http://bootstrap-vz.readthedocs.org/en/master/plugins>`__
plugin requires. Go to the `plugin section <../bootstrapvz/plugins>`__
of the documentation, to see the configuration for a specific plugin.