Authors: Markus Roberts and Bill Kayser
Tendersync allows you to sync documents stored in the
faqs section with a local filesystem, allowing you to manage your
documents with git or subversion.
It includes a command for creating an index document for any given section.
Find out more about Tender by visiting the Tender site.
- List remote sections and documents under the
- Pull single documents or entire tree from Tender site to local filesystem
- Push local changes back to Tender one at a time or en masse
- Manage document meta-data, like keywords, in headers
- Push changed versions to the server
Create a working directory where you want to store the tender docs in a hierarchy and run tendersync from there.
sudo gem install tendersync cd $workdir tendersync -h
To get started, you need to pass in your account information. You
only need to do this once. A local file
.tendersync is created with
the configuration information.
This will get you set up:
tendersync -u firstname.lastname@example.org -p password --docurl=http://company.tenderapp.com
To verify it worked run the
Tender documents are organized into sections defined by you. At New Relic, we have faqs, docs, and troubleshooting. You can specify commands to apply to one or more sections by passing in section names with -s:
tendersync -s docs -s troubleshooting pull
Download all your docs:
Download just the faq docs:
tendersync pull -s faqs
Create a git repository and save all the documents:
git init git add . git commit -m "First version of docs on Tender"
Upload docs to the server:
tendersync post faqs/sinatra_support tendersync post docs/install-* tendersync post -s docs
Upload everything to the server (regardless of whether the content has changed or not):
You can generate a table of contents for any section with the index
command. By default index will generate a single file named
In this file will be a list of all the files in the given section with links to those files. Under each file link will be a bullet list of the topmost sections in the document. If these sections are preceeded by anchor links (A elements with the name attribute) then the bullets will have links to those sections.
It will look something like this:
## Installation and configuration ### [Agent Installation (Ruby)](agent-installation) * [Installing the Plug-in](agent-installation#Installing_the_Plug-in) * [Installing the Gem](agent-installation#Installing_the_Gem)
Customizing the amount of detail in the Index
You can show sections deeper than one level in a particular document
-d option. The default is 1.
tendersync index -d 2
Definiting TOC groups
If you want to divide the table of contents into groups of related documents, you can pass in a title for a group and a regular expression to match against document titles that belong in that group. These group definitions will be saved so you only need to enter them once.
Enter a group using the
-g option passing in a title and regular
expression separated by a semi-colon.
tendersync index -g "Page Details;/page/i"
You can add multiple groups with additional -g options:
tendersync index -g "Page Details;/page/i" -g "Installation Info;/installation/i"
If you want to remove a group definition, you need to remove it
manually from the
All due regards, credit, thanks, etc., to the ENTP team for a great tool.
Copyright (c) 2009 New Relic, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.