You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Rationale

We have a number of automated processes which make use of the Git repositories as a source of truth:

  • generating a default.xml manifest for repo checkout
  • generating Jenkins jobs

However, we often have the need to override some of the logic on a per-module basis:

  • building a project with multiple JDKs
  • including certain modules in repo groups or creating special profiles for them

In the future, we may look into other automation, such as:

  • generating a Jenkinsfile per each module
  • automatically maintaining a README.md which points to documentation URLs or the build Job

Therefore it is proposed to allow the existence of a Sling module descriptor file in the root of each Git repository. If no descriptor exists, the module is processed by various tools in the default manner. If it exists, the tools must inspect it for custom settings and apply them.

Structure

The module file will be named .sling-module.xml . It is a "dotfile" as it is not usually touched during regular development. The XML format easy consumption from various tools and , compared to JSON, allows defining comments.

Rather than listing a specification, a full example is provided below:

sling-module.xml example
<sling-module>
	<jenkins> <!-- settings inspected by Jenkins -->
		<jdks> <!-- replaces the default jdks when present -->
			<jdk>1.8</jdk>
			<jdk>9</jdk>
		</jdks>
		<downstreamProjects> <!-- adds more downstream projects when present -->
			<downstreamProject>sling-org-apache-sling-launchpad-testing</downstreamProject>
		</downstreamProjects>
		<archivePatterns> <!-- adds more archive patterns when present -->
			<archivePattern>**/sling/logs/error.log</archivePattern>
		</archivePatterns>
		<!-- overrides the default goal when set -->
		<mavenGoal>install</mavenGoal>
		<!-- Additional parameters to pass to the Maven invocation -->
		<additionalMavenParams>-Dorg.ops4j.pax.url.mvn.repositories=http://repo.maven.apache.org/maven2@id=apache-releases,http://repository.apache.org/content/groups/snapshots-group@snapshots@noreleases@id=apache-snapshots</additionalMavenParams>
		<!-- rebuilds the job periodically when defined -->
		<rebuildFrequency>@weekly</rebuildFrequency>
	    <!-- when set to true, xvfb support is enabled -->
        <enableXvfb>true</enableXvfb>
		<!-- No Jenkins job generated when set to false -->
		<enabled>false</enabled>
    </jenkins>
	<aggregator> <!-- setting inspected by sling-aggregator tooling -->
		<groups> <!-- generates repo "groups" settings and separate Maven profile in the global reactor pom, when present -->
			<group>scripting</group>
			<group>sightly</group>
		</groups>
	</aggregator>
</sling-module>
  • No labels