зеркало из https://github.com/mozilla/pjs.git
173 строки
9.0 KiB
Plaintext
173 строки
9.0 KiB
Plaintext
|
|
Overview of the Tinderbox System
|
|
--------------------------------
|
|
|
|
Tinderbox2 is an information display system. It runs on a machine with
|
|
a web server and will periodically write static HTML files to the disk
|
|
so that the web server can serve these documents.
|
|
|
|
Tinderbox2 is run out of cron as often as your needs require and gathers
|
|
up information from various databases including: Repository Logs, Bonsai
|
|
and Perforce. It will also process mail which is sent to it from Bug
|
|
Ticketing software and Build/Test Machines. All this information is
|
|
combined to produce the HTML pages.
|
|
|
|
Since no two companies will structure their development processes the
|
|
same way, the Tinderbox2 code has to be highly configurable to account
|
|
for most possible uses. There is a main configuration file which
|
|
allows most of the major user configurable variables to be set.
|
|
Novice users can expect to edit only this file and get a working
|
|
Tinderbox2 system.
|
|
|
|
Additionally each library has been broken into two parts. One part is
|
|
the library specific configurations. This file is expected to need
|
|
modifications in some installations. All of the library configurations
|
|
are located in one directory to make it easy to find the parts of Tinderbox2
|
|
which are easy to modify. Each configuration library can be thought of
|
|
as a table which might need to be edited or extended for use at your company.
|
|
The defaults provide a working system but may not suit your needs. These
|
|
tables can be easily changed in small ways by simply looking at the file
|
|
and making obvious changes.
|
|
|
|
Changes are not made to the files which have been provided but rather
|
|
the changes are made to copies of the files which are stored in a local
|
|
configuration directory. This ensures that you can easily version the
|
|
Tinderbox2 code as it is provided to you from the official distribution
|
|
and you can separately version the local configurations which you
|
|
make. It is also easy to see the local configurations since you have
|
|
both the original and the modified code on the same server and can
|
|
difference the two.
|
|
|
|
As an example you might need to change the BuildStatus - assuming that
|
|
you have the following possible build outcomes (Build in progress,
|
|
Build failed, Build succeded but tests failed, Build and all tests were
|
|
successful.) You may have additional outcomes to specify which kind of
|
|
tests failed (unit test failed, not enough unit test coverage, performance
|
|
tests failed). Similarly you may have unusual requirements for how the
|
|
filesystem should be laid out.
|
|
|
|
The build machines are not considered part of the Tinderbox2 server.
|
|
They are clients just like Bug Ticketing systems and Version Control
|
|
systems are clients. Build machines mail their build logs to the
|
|
server in a special format. This format specifies that name/value
|
|
pairs must appear at the top of the mail message followed by the
|
|
complete build log.
|
|
|
|
Scripts for setting up a Tinderbox2 build client can be found in the
|
|
clientbin directory but you may have other build needs and may use any
|
|
build methods you choose.
|
|
|
|
The central concept of the Tinderbox2 system is the notion of a 'Tree'.
|
|
|
|
When several different groups are working out of the same version
|
|
control system often the files are partitioned into separate modules
|
|
with each group working on one or more disjoint modules. Over time
|
|
the developers need to branch their code because several different
|
|
versions of the files are under development at the same time. A tree
|
|
is a module/branch pair and corresponds to a set of files which can
|
|
be checked out and built. Tinderbox2 creates one page for each tree and
|
|
displays what work is being done on that tree.
|
|
|
|
While most version control systems know about modules and branches, they
|
|
do not know about trees and it is not possible to give a branch/module pair
|
|
a name. The Tinderbox2 TreeData provides the mappings between treenames
|
|
and branch/module pairs.
|
|
|
|
Tinderbox2 displays the updates to bug tickets on the appropriate tree
|
|
page. This requires an easy mapping between bug tickets and a tree. One
|
|
example of a complex function to determine tree name would be if each
|
|
of the product types listed in the bug tracking database refers to one
|
|
development project, except for a particular feature/platform of one
|
|
particular project which is being developed by a separate group of
|
|
developers. So the version control notion of trees (a set of modules
|
|
on a branch) may not have a direct map into the bug tracking database
|
|
at all times.
|
|
|
|
In large projects it is sometimes convenient to have a tree called 'ALL'
|
|
which is used to display all checkins performed on any trees and all bug
|
|
tickets worked on by any programmers. It is not possible to build or
|
|
test the 'ALL' tree and neither the version control nor bug ticketing
|
|
system knows of its existence.
|
|
|
|
The Bug Tracking code was intended to be as general as possible.
|
|
Most bug ticketing systems send mail when tickets change state. The
|
|
mail is often of the same form. It is a name/value pair which the
|
|
separator being the string ": ". Tinderbox2 will parse mail of this
|
|
form and display the interesting fields on the appropriate tree page.
|
|
The configuration of this module involves specifying which bug ticket
|
|
names are interesting and should be displayed.
|
|
|
|
You will need to specify how to map a bug ticket into a tree, this
|
|
could be very simple if each bug ticket has a field which represents
|
|
the tree it is applicable to, in this case the tree would equal the
|
|
project. Or it can be very complex if the tree must be computed by the
|
|
values of a set of fields.
|
|
|
|
Also Tinderbox2 keeps track of which bugs are "reopened" and displays
|
|
them in a different column. The idea is that some bugs are moving
|
|
backwards and creating duplicate work. These tickets are particularly
|
|
troublesome and should be watched specially. So possibly all ticket
|
|
status are partitioned into "progress" or "slippage" categories. You
|
|
will need to specify what status values are possible for your ticket
|
|
system and you will also need to specify the set of columns which you
|
|
would like to see on the status page.
|
|
|
|
The heart of the Tinderbox2 system is the 'status table'. This is an
|
|
HTML table which graphically shows how the changes made to the
|
|
development databases. It will show what is going on in the version
|
|
control system, the bug tracking system, the build system, automatic
|
|
regression tests and provide a notice board for developers to inform
|
|
each other of current news.
|
|
|
|
By placing all this information in the same table it is possible to
|
|
correlate and cross check how different types of changes effected each
|
|
other and what was going on with the whole project at different times
|
|
in the day.
|
|
|
|
The rows of the table represent time with the most current events at the
|
|
top of the page. There are different sets of columns for each database
|
|
which needs to be displayed. The sets of columns are managed by
|
|
independent modules.
|
|
|
|
There is one module for each version control system and each bug
|
|
tracking system which Tinderbox2 knows how to interface with. It is
|
|
easy to port the system to new databases by just adding a new module
|
|
using the same style as the existing modules. Modules never share or
|
|
peek at each others data and all combining of data is done by the humans
|
|
who stare at the table and interpret what is going on.
|
|
|
|
The main Tinderbox2 system does not know how many columns the final
|
|
table will have - it only knows about a list of table modules.
|
|
Each module in the list is called in turn to generate the complete row
|
|
then the entire row is displayed. The user must configure Tinderbox2 with
|
|
the list of modules which are of important to their own environment.
|
|
There is no restriction on the number of modules which may be configured,
|
|
though due to implementation details each module can only appear once
|
|
in the table.
|
|
|
|
There are many pop up windows embedded in the status table these will
|
|
provide extra level of detail when a mouse is placed over the link.
|
|
By moving your mouse around the page you may effectively drill down
|
|
into an item of interest and learn more about it without leaving the page.
|
|
Most of the links will click through to the appropriate database.
|
|
Thus if you need more data about an item you can click on the link and
|
|
query the database directly.
|
|
|
|
Besides the status table there is one other feature of the status
|
|
page. The status page displays some information which is not correlated
|
|
through time and with other data. This information is called status
|
|
table headers.
|
|
|
|
The main headers are the message of the day (MOTD), and the Tree State
|
|
though there are a few others headers of mainly historical interest.
|
|
The important issue with the headers is that they are not optional.
|
|
Tinderbox2 can render a table with as little or as many columns in the
|
|
status table as you wish but each of the headers has a particular place
|
|
on the status page and needs to be rendered in a particular way
|
|
(font size, font type, etc) thus the Tinderbox2 server must know where
|
|
each header must go and how to specify the appropriate HTML context for
|
|
the header. Users may set null defaults for headers that they do not
|
|
need but it is much harder for a user to add new headers to the code
|
|
in a modular fashion.
|
|
|