<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
<document>

  <header>
    
    <title>Apache Gump&#x2122;</title>

  	<authors>
  		<person name="Sam Ruby" email="rubys AT us.ibm DOT com"/>
  		<person name="Adam Jack" email="ajack AT sybase DOT com"/>
  		<person name="Community" email="general AT gump DOT apache DOT org"/>
  	</authors>
  </header>
<body>

  <section><title>What is Apache Gump&#x2122;?</title>

  <p>
The Apache Gump continuous integration tool was the first one
developed at
the <fork href="https://www.apache.org/">Apache Software Foundation</fork>. It is written in Python and fully supports Apache Ant, 
Apache Maven (1.x to 3.x) and <link href="metadata/builder.html">other build tools</link>. Gump is unique in that it builds and compiles software against 
the latest development versions of those projects. This allows Gump to detect potentially 
incompatible changes to that software just a few hours after those changes are checked into the 
version control system. Notifications are sent to the project team as soon as such a change is 
detected, referencing more detailed reports available online.
  </p>

  <p>
You can set up and run Gump on your own machine and run it on your own projects, however it is 
currently most famous for building many of Apache's projects and their dependencies. For this purpose, the 
Gump project maintains its own dedicated server.
  </p>

  </section>

  <section><title>How does Gump work?</title>

    <p>
      With Gump, <link href="https://svn.apache.org/viewcvs/gump/metadata/project">
      project</link> definitions are mapped from XML into in memory
      objects for processing. Scripts execute SCM update
      commands for every module which contains a project being built, and
      invoke builds for each project in an order that ensures that dependencies
      are satisfied. Build outputs are processed and, if successful, dependent projects
      are then built on these outputs.
    </p>

    <p>
      The commands use the actual build.xml/Makefile/pom.xml files
      from the projects, but in general do
      not use the scripts or jar files checked into CVS/SVN.  Instead,
      Gump tries to play several tricks in order to ensure that Gump's
      versions of files are used.
    </p>
    
    <p>
      In order to really build against the latest versions of
      everything, Gump will need support from the build process, the
      build tool or has to find its way around the build tool.
    </p>

    <p>
      The <fork
      href="http://vmgump.apache.org/apache-httpd/apache-httpd-buildconf/index.html">Apache HTTPd
        builds</fork> are an example for a build process that supports
      Gump.  HTTPd needs APR and Gump can provide the path to the
      freshly built APR files as command line options to the buildconf
      and/or configure scripts.
    </p>

    <p>
      For builds using Apache Ant,
    	Gump sets <link href="https://ant.apache.org/manual/sysclasspath.html">build.sysclasspath</link> property of Ant to <strong>only</strong> and manages the system classpath:<br/><br/>
    	To quote Ant manual:<br/>
    	<em>Only the system classpath is used and classpaths specified in build files, etc are ignored. 
            This situation could be considered as the person running the build file knows more about the environment than the person writing the build file</em>.<br/><br/>
      Note that Gump uses the lastest version of Ant (from tip of master branch in their Git repository) when building Ant projects.
    </p>

    <p>
      For Apache Maven 1.x builds, Gump runs Maven with the --offline switch
      and uses jar overrides.  Sometimes the artifact ids expected by
      maven and Gump's names of the jars don't match, in which case
      &lt;property&gt; elements have to be used to get the correct
      artifact ids.
    </p>

    <p>
      So far Gump's support for Apache Maven 2.x and later uses the most complex
      approach, using a proxy server. For the full story see <link
      href="metadata/builder.html#mvn2">the section on the mvn2
      builder</link>.
    </p>

    <p>
      Support for Gradle hooks into the approach
      taken for Maven and uses the same local repositories and
      repository proxy.
    </p>

    <p>
      The net effect is that every project is built every day with the latest
      version of every dependency - including the latest Ant, latest JUnit,
      latest XML parser.
    </p>

    <p>
      The results are captured into html pages. An extensive amount of hypertext
      links are added to allow quick and easy navigation, and failures are
      color coded on the main build page.
    </p>

    <p>
      The "official" Gump run on vmgump will optionally send
      e-mails to various newsgroups upon build failures.
    </p>
  </section>

  <section><title>Where is Gump?</title>
    <ul>
      <li><link href="https://svn.apache.org/repos/asf/gump/">Source</link></li>
    </ul>
  </section>

  <section><title>When does Gump run?</title>

    <!--p>
      Gump runs continually in various locations, primarily on Apache hardware, see below.	  
    </p>

	<note>
        Gump operates best when distributed (over various servers). Please contact us if you are willing to
	contribute resources to this project.
        </note-->
	
    <table>
      <tr>
        <th>Site</th>
        <th>JVM</th>
        <th>Comments</th>
      </tr>
      <tr>
        <td><fork href="http://vmgump.apache.org/">Apache
            (vmgump - Ubuntu Linux 18.04)</fork> </td>
        <td>Oracle Java 8</td>
        <td>up to 4 times daily</td>
      </tr>
      <!--tr>
        <td><fork href="http://gump.zones.apache.org/gump/public/">Apache (FreeBSD)</fork> </td>
        <td>1.6</td>
        <td>up to 4 times daily</td>
      </tr>
      <tr>
        <td><fork href="http://adam.apache.org/gump/">Apache
            (Adam - Mac OS X Server)</fork> </td>
        <td>Apple's Java 1.6</td>
        <td>up to 4 times daily</td>
      </tr-->
    </table>

  </section>

  <section><title>Who is Gump?</title>
    <p>
      Gump was named after
      <fork href="https://www.google.com/search?q=Forrest+Gump">Forrest Gump</fork>,
      the title character in a movie.  The process for building was to do a
      "Generate", followed by cvs "Updates", followed by a "Build All".  This
      was repetitive, so a command was created to combine these operations -
      and it was named "guba".  This sound this made when spoken reminded me
      of "Bubba Gump".
    </p>

    <p>
      This seemed oddly appropriate as much of the motivation for Gump
      derived from the frustrations building Cocoon.  The FAQ for
      that project indicate that the project was named after a movie that the
      creator of that project was particularly fond of, so it seemed fitting
      that this effort would be named after a movie.
    </p>

    <p>
      A number of other fortunate coincidences proved this was the right choice for a name.  
      From the role of the feather in the
      opening and closing scenes (something adapted to the Apache
      feature for the Gump icon), to the catch phase of "Stupid is as Stupid
      does" - something that captures the spirit of a large number of build
      errors caught by this process.  And most significantly (to some) - the
      wisdom passed on from Gump's mother that "Life is like a box of
      chocolates - you never know what you are going to get!".  I can think
      of no more apt description of a build process which takes the absolute
      latest versions of almost everything and attempts to build them together!
    </p>
  </section>

  <section><title>Why was Gump written?</title>
    <p>
      That question is complex enough that it deserves a
      <link href="why.html">separate page</link>.
    </p>
  </section>

  <section><title>Trademarks</title>
    <p>Apache Gump, Gump, Apache, the Apache feather logo, and the
      Apache Gump project logos are trademarks of The Apache Software
      Foundation.</p>

      <p>Java is a registered trademarks of Oracle Corporation.  All
      other product names mentioned herein and throughout the entire
      web site are trademarks of their respective owners.</p>
  </section>
</body>
</document>
