Author: ludo
Date: Wed Mar  9 17:13:29 2011
New Revision: 26238
URL: https://svn.nixos.org/websvn/nix/?rev=26238&sc=1

Log:
doc: Reintegrate the intro by Visser & Dolstra from `manual.html'.

The `manual.html' file had been deleted in r21718 ("Hydra/28: Rename
"scheduler" to "evaluator"".)

Modified:
   hydra/trunk/doc/manual/introduction.xml
   hydra/trunk/doc/manual/manual.xml

Modified: hydra/trunk/doc/manual/introduction.xml
==============================================================================
--- hydra/trunk/doc/manual/introduction.xml     Wed Mar  9 16:55:09 2011        
(r26237)
+++ hydra/trunk/doc/manual/introduction.xml     Wed Mar  9 17:13:29 2011        
(r26238)
@@ -2,6 +2,259 @@
          xmlns:xlink="http://www.w3.org/1999/xlink";
          xml:id="chap-introduction">
 
-<title>Introduction</title>
+  <title>Introduction</title>
+
+  <section>
+    <title>About Hydra</title>
+
+    <para>
+      Hydra is a tool for continuous integration testing and software
+      release that uses a purely functional language to describe build jobs
+      and their dependencies.  Continuous integration is a simple technique
+      to improve the quality of the software development process.  An
+      automated system continuously or periodically checks out the source
+      code of a project, builds it, runs tests, and produces reports for the
+      developers.  Thus, various errors that might accidentally be committed
+      into the code base are automatically caught.  Such a system allows
+      more in-depth testing than what developers could feasibly do manually:
+
+      <itemizedlist>
+       <listitem> <emphasis>Portability testing</emphasis>: The
+       software may need to be built and tested on many different
+       platforms.  It is infeasible for each developer to do this
+       before every commit.
+       </listitem>
+
+       <listitem> Likewise, many projects have very large test sets
+       (e.g., regression tests in a compiler, or stress tests in a
+       DBMS) that can take hours or days to run to completion.
+       </listitem>
+
+       <listitem> Many kinds of static and dynamic analyses can be
+       performed as part of the tests, such as code coverage runs and
+       static analyses.
+       </listitem>
+
+       <listitem> It may also be necessary to build many different
+       <emphasis>variants</emphasis> of the software.  For instance,
+       it may be necessary to verify that the component builds with
+       various versions of a compiler.
+       </listitem>
+
+       <listitem> Developers typically use incremental building to
+       test their changes (since a full build may take too long), but
+       this is unreliable with many build management tools (such as
+       Make), i.e., the result of the incremental build might differ
+       from a full build.
+       </listitem>
+
+       <listitem> It ensures that the  software can be built from the
+       sources under  revision control.  Users  of version management
+       systems  such as  CVS  and Subversion  often  forget to  place
+       source files under revision control.
+       </listitem>
+
+       <listitem> The machines on which the continuous integration
+       system runs ideally provides a clean, well-defined build
+       environment.  If this environment is administered through
+       proper SCM techniques, then builds produced by the system can
+       be reproduced.  In contrast, developer work environments are
+       typically not under any kind of SCM control.
+       </listitem>
+
+       <listitem> In large projects, developers often work on a
+       particular component of the project, and do not build and test
+       the composition of those components (again since this is
+       likely to take too long).  To prevent the phenomenon of ``big
+       bang integration'', where components are only tested together
+       near the end of the development process, it is important to
+       test components together as soon as possible (hence
+       <emphasis>continuous integration</emphasis>).
+       </listitem>
+
+       <listitem> It allows software to be
+       <emphasis>released</emphasis> by automatically creating
+       packages that users can download and install.  To do this
+       manually represents an often prohibitive amount of work, as
+       one may want to produce releases for many different platforms:
+       e.g., installers for Windows and Mac OS X, RPM or Debian
+       packages for certain Linux distributions, and so on.
+       </listitem>
+
+      </itemizedlist>
+    </para>
+
+    <para>
+      In its simplest form, a continuous integration tool sits in a
+      loop building and releasing software components from a version
+      management system.  For each component, it performs the
+      following tasks:
+
+      <itemizedlist>
+
+       <listitem>It obtains the latest version of the component's
+       source code from the version management system.
+       </listitem>
+
+       <listitem> It runs the component's build process (which
+       presumably includes the execution of the component's test
+       set).
+       </listitem>
+
+       <listitem> It presents the results of the build (such as error
+       logs and releases) to the developers, e.g., by producing a web
+       page.
+       </listitem>
+
+      </itemizedlist>
+
+      Examples of continuous integration tools include Jenkins,
+      CruiseControl Tinderbox, Sisyphus, Anthill and BuildBot. These
+      tools have various limitations.
+
+      <itemizedlist>
+
+       <listitem> They do not manage the <emphasis>build
+       environment</emphasis>.  The build environment consists of the
+       dependencies necessary to perform a build action, e.g.,
+       compilers, libraries, etc.  Setting up the environment is
+       typically done manually, and without proper SCM control (so it
+       may be hard to reproduce a build at a later time).  Manual
+       management of the environment scales poorly in the number of
+       configurations that must be supported.  For instance, suppose
+       that we want to build a component that requires a certain
+       compiler X.  We then have to go to each machine and install X.
+       If we later need a newer version of X, the process must be
+       repeated all over again.  An ever worse problem occurs if
+       there are conflicting, mutually exclusive versions of the
+       dependencies.  Thus, simply installing the latest version is
+       not an option.  Of course, we can install these components in
+       different directories and manually pass the appropriate paths
+       to the build processes of the various components.  But this is
+       a rather tiresome and error-prone process.
+       </listitem>
+
+       <listitem> They do not easily support <emphasis>variability in software
+       systems</emphasis>.  A system may have a great deal of build-time
+       variability: optional functionality, whether to build a debug or
+       production version, different versions of dependencies, and so on.
+       (For instance, the Linux kernel now has over 2,600 build-time
+       configuration switches.)  It is therefore important that a continuous
+       integration tool can easily select and test different instances from
+       the configuration space of the system to reveal problems, such as
+       erroneous interactions between features.  In a continuous integration
+       setting, it is also useful to test different combinations of versions
+       of subsystems, e.g., the head revision of a component against stable
+       releases of its dependencies, and vice versa, as this can reveal
+       various integration problems.
+       </listitem>
+
+      </itemizedlist>
+    </para>
+
+    <para>
+      <emphasis>Hydra</emphasis>, is a continuous integration tool
+      that solves these problems.  It is built on top of the <link
+      xlink:href="http://nixos.org/nix/";>Nix package manager</link>,
+      which has a purely functional language for describing package
+      build actions and their dependencies.  This allows the build
+      environment for projects to be produced automatically and
+      deterministically, and variability in components to be expressed
+      naturally using functions; and as such is an ideal fit for a
+      continuous build system.
+    </para>
+
+  </section>
+
+  <section>
+    <title>About Us</title>
+
+    <para>
+      Hydra is the successor of the Nix Buildfarm, which was developed
+      in tandem with the Nix software deployment system. Nix was
+      originally developed at the Department of Information and
+      Computing Sciences, Utrecht University by the TraCE project
+      (2003-2008). The project was funded by the Software Engineering
+      Research Program Jacquard to improve the support for variability
+      in software systems.  Funding for the development of Nix and
+      Hydra is now provided by the NIRICT LaQuSo Build Farm project.
+    </para>
+  </section>
+
+  <section>
+    <title>About this Manual</title>
+
+    <para>
+      This manual tells you how to install the Hydra buildfarm
+      software on your own server and how to operate that server using
+      its web interface.
+    </para>
+  </section>
+
+
+  <section>
+    <title>License</title>
+
+    <para>
+      Hydra is free software: you can redistribute it and/or
+      modify it under the terms of the GNU General Public License as
+      published by the Free Software Foundation, either version 3 of
+      the License, or (at your option) any later version.
+    </para>
+
+    <para>
+      Hydra is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      <link xlink:href="http://www.gnu.org/licenses/";>GNU General
+      Public License</link> for more details.
+    </para>
+  </section>
+
+  <section>
+    <title>Hydra at <literal>nixos.org</literal></title>
+
+    <para>
+      The <literal>nixos.org</literal> installation of Hydra runs at
+      <link
+      
xlink:href="http://hydra.nixos.org/";><literal>http://hydra.nixos.org/</literal></link>.
+
+      That installation is used to build software components from the 
+      <link xlink:href="http://nixos.org";>Nix</link>, 
+      <link xlink:href="http://nixos.org/nixos";>NixOS</link>,
+      <link xlink:href="http://www.gnu.org/";>GNU</link>,
+      <link xlink:href="http://strategoxt.org";>Stratego/XT</link>,
+      and related projects.
+    </para>
+
+    <para>
+      If you are one of the developers on those projects, it is likely
+      that you will be using the NixOS Hydra server in some way. If
+      you need to administer automatic builds for your project, you
+      should pull the right strings to get an account on the
+      server. This manual will tell you how to set up new projects and
+      build jobs within those projects and write a release.nix file to
+      describe the build process of your project to Hydra. You can
+      skip the next chapter.
+    </para>
+
+    <para>
+      If your project does not yet have automatic builds within the
+      NixOS Hydra server, it may actually be eligible. We are in the
+      process of setting up a large buildfarm that should be able to
+      support open source and academic software projects. Get in
+      touch.
+    </para>
+  </section>
+
+  <section>
+    <title>Hydra on your own buildfarm</title>
+
+    <para>
+      If you need to run your own Hydra installation, <xref
+      linkend="chap-installation" /> explains how to download and
+      install the system on your own server.
+    </para>
+  </section>
 
 </chapter>

Modified: hydra/trunk/doc/manual/manual.xml
==============================================================================
--- hydra/trunk/doc/manual/manual.xml   Wed Mar  9 16:55:09 2011        (r26237)
+++ hydra/trunk/doc/manual/manual.xml   Wed Mar  9 17:13:29 2011        (r26238)
@@ -30,6 +30,17 @@
         </affiliation>
         <contrib>Author</contrib>
       </author>
+      <author>
+        <personname>
+          <firstname>Eelco</firstname>
+          <surname>Visser</surname>
+        </personname>
+        <affiliation>
+          <orgname>Delft University of Technology</orgname>
+          <orgdiv>Department of Software Technology</orgdiv>
+        </affiliation>
+        <contrib>Author</contrib>
+      </author>
     </authorgroup>
 
 
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits

Reply via email to