  <project cat='proj'>
    <title>Jenkins Continuous Integration for &os;</title>

    <contact>
      <person>
	<name>
	  <given>Craig</given>
	  <common>Rodrigues</common>
	</name>
	<email>rodrigc@FreeBSD.org</email>
      </person>

      <person>
	<name>Jenkins Administrators</name>
	<email>jenkins-admin@FreeBSD.org</email>
      </person>

      <person>
	<name>&os; Testing</name>
	<email>freebsd-testing@FreeBSD.org</email>
      </person>
    </contact>

    <links>
      <url href="https://jenkins.freebsd.org">The Jenkins CI server in the &os; cluster</url>
      <url href="https://github.com/Ultima1252/portest">Portest script</url>
      <url href="https://github.com/jenkinsci/workflow-plugin">Jenkins workflow plugin</a>
      <url href="https://cloudbees.com">Cloudbees</a>
      <url href="https://github.com/uber/phabricator-jenkins-plugin">Jenkins Phabricator plugin</url>
      <url href="https://github.com/uber/phabricator-jenkins-plugin/pull/110">Phabricator plugin fixes</url>
      <url href="https://github.com/jenkinsci/durable-task-plugin/pull/14">Durable task plugin fixes</url>
      <url href="https://github.com/jenkinsci/clang-scanbuild-plugin/commits/master">Clang scanbuild plugin fixes</url>
      <url href="https://github.com/jenkinsci/multiple-scms-plugin/commits/master">Multiple SCMs plugin fixes</url>
      <url href="https://github.com/jenkinsci/scm-sync-configuration-plugin/commits/master">SCM sync configuration plugin fixes</url>
      <url href="https://lists.freebsd.org/pipermail/freebsd-testing/2016-January/001285.html">Porting jobs to Workflow plugin</url>
      <url href="https://github.com/kohsuke/akuma/pull/9">Akuma fixes for FreeBSD</url>
      <url href="https://github.com/jmmv/kyua/pull/148">Kyua fix for invalid characters</url>
    </links>

    <body>
      <p>The Jenkins Continuous Integration and Testing
	project has been helping to improve the quality of &os;.
	Since the last status report, we have quickly found commits
	which caused build breakage or test failures.  &os; developers
	saw these problems and quickly fixed them.  Some of the
	highlights include:</p>

      <ul>
	<li><p>Ricky Gallagher wrote a script named portest,
           which can take a patch to the &os; ports tree as input,
           and can generate a sequence of commands to check out
           the ports tree from Subversion, apply the patch, and then
           invoke the poudriere script to build the affected part of the
           ports tree.  Ricky consulted with Torsten Zühlsdorff on this.</p>
          <p>This script will be used later to test changes to the ports tree.</p>
        </li>
        <li><p>&a.rodrigc; converted some Jenkins builds to use the Workflow plugin.
           Workflow is a plugin written by Jesse Glick and other developers at Cloudbees,
           the main company providing commercial support for Jenkins.  With this plugin,
           a Jenkins job can be written in a Domain Specific Language (DSL) which is
           written in the Groovy scripting language.  Workflow scripts are meant to
           provide sophisticated access to Jenkins functionality, in a simple scripting language.
           As Jenkins jobs get more complicated and have more interdependencies, using a DSL
           is easier for maintainability instead of creating Jenkins jobs via menus.</p>
           <p>&a.rodrigc; worked with Jesse Glick to identify and fix a problem with the Durable Task plugin
           used by the workflow plugin.  This problem seemed to show up mostly on non-Linux platforms
           such as Linux and &os;.</p>
        </li>
	<li><p>&a.eadler; worked with &a.rodrigc; to test a Jenkins plugin
           written by Aiden Scandella at Uber which integrates Phabricator and Jenkins.
           With this plugin, if someone submits a code review with Phabricator's Differential
           tool, a Jenkins build with this code change will be triggered.  The Phabricator
           code review will be updated with the result of the build.</p>
           <p>&a.eadler; and &a.rodrigc; had some initial success testing this plugin
           using the &os; docs repository, but this plugin still has a lot of hardcoded
           dependencies specific to Uber's environment which make it difficult to use out of the box
           for &os;.</p>
           <p>Alexander Yerenkow submitted some patches upstream to fix some of these problems.</p>
           <p>This plugin still needs more work.</p>
           <p>&a.rodrigc; thinks that it might be better to write a workflow script to call Phabricator commands
           directly.</p>
        </li>
        <li><p>&a.rodrigc; pushed fixes upstream to several plugins including:
               <ul>
                 <li>SCM Sync configuration plugin</li>
                 <li>NodeLabel parameter plugin</li>
                 <li>Subversion plugin</li>
                 <li>Multiple SCMs plugin</li>
                 <li>Clang Scanbuild plugin</li>
               </ul>
            </p>
            <p>&a.rodrigc; was granted commit access to SCM Sync configuration plugin,
               Multiple SCMs plugin, and Clang Scanbuild plugin.</p>
        </li>
        <li><p>&a.lwhsu; set up multiple builds using jails on machines located at NYI and
            administered by the &os; Cluster Administrators.  One of these builds
            included building for 64-bit ARM.</p>
        </li>
        <li><p>Michael Zhilin fixed the Akuma library for FreeBSD.  The Akuma
            library used by Jenkins to determine what command-line arguments were passed
            to a running process.  To fix this, Michael invoked FreeBSD-specific sysctl() with
            KERN_PROC_ARGS to determine the arguments for a running pid.</p>
            <p>This fix allows a running Jenkins instance to restart itself after new plugins are installed.</p>
        </li>
        <li><p>&a.jmmv; accepted a fix for Kyua from &a.rodrigc; to fix writing out XML characters
            to test report files.</p>
        </li>
      </ul>
    </body>

    <help>
      <task>
	<p>Work more on using the workflow plugin for various builds.</p>
      </task>
      <task>
	<p>Set up build to test bmake meta-mode.</p>
      </task>
      <task>
        <p>Finish off integration with Phabricator.</p>
      </task>
      <task>
	<p>People interested in helping out should join the
	  freebsd-testing@FreeBSD.org list.</p>
      </task>
    </help>
  </project>
