Sync docs from master to gh-pages

This commit is contained in:
buildmaster
2018-10-17 07:17:40 +00:00
parent ffaf16e240
commit 1bc2b80e3e
3 changed files with 46 additions and 34 deletions

View File

@@ -1,7 +1,7 @@
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>1.&nbsp;Spring Cloud Release Tools</title><link rel="stylesheet" type="text/css" href="css/manual-multipage.css"><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="multi_spring-cloud-release-tools.html" title="Spring Cloud Release Tools"><link rel="up" href="multi_spring-cloud-release-tools.html" title="Spring Cloud Release Tools"><link rel="prev" href="multi_spring-cloud-release-tools.html" title="Spring Cloud Release Tools"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1.&nbsp;Spring Cloud Release Tools</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="multi_spring-cloud-release-tools.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="_spring_cloud_release_tools" href="#_spring_cloud_release_tools"></a>1.&nbsp;Spring Cloud Release Tools</h1></div></div></div><p>Spring Cloud projects reuse the same pattern of building and deploying the applications. That&#8217;s
why this tool makes it easy to automate the release / dependency update process of our applications.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_what_does_it_do" href="#_what_does_it_do"></a>1.1&nbsp;What does it do?</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_single_project" href="#_single_project"></a>1.1.1&nbsp;Single project</h3></div></div></div><p>For a single project</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">Clones the Spring Cloud Release project and picks all versions (Boot + Cloud projects)</li><li class="listitem"><p class="simpara">Modifies the project versions with values from SC-Release</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">throws an exception when we bump versions to release and there&#8217;s a SNAPSHOT version referenced in the POM</li></ul></div></li><li class="listitem"><p class="simpara">Performs the build and checks if the <code class="literal">docs</code> modules have properly created the documentation</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">throws an exception when in the <code class="literal">docs</code> module there&#8217;s an unresolved tag in any HTML file</li></ul></div></li><li class="listitem">Commits changed poms (ONLY FOR NON-SNAPSHOT VERSIONS)</li><li class="listitem">Creates a tag for the release / milestone (ONLY FOR NON-SNAPSHOT VERSIONS)</li><li class="listitem">Runs the deployment of the artifacts</li><li class="listitem">Publishes the docs (to <code class="literal">spring-cloud-static</code> for non-snapshots, to <code class="literal">gh-pages</code> for snapshots)</li><li class="listitem">Reverts back to snapshots, bumps the version by a patch (<code class="literal">1.0.1.RELEASE</code> &#8594; <code class="literal">1.0.2.BUILD-SNAPSHOT</code>) (ONLY FOR RELEASE VERSIONS)</li><li class="listitem">Closes the milestone on Github (e.g. <code class="literal">v1.0.1.RELEASE</code>) (ONLY FOR NON-SNAPSHOT VERSIONS)</li></ul></div><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>Starting with version that does Sagan integration, you MUST pass the OAuth token,
why this tool makes it easy to automate the release / dependency update process of our applications.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_what_does_it_do" href="#_what_does_it_do"></a>1.1&nbsp;What does it do?</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_single_project" href="#_single_project"></a>1.1.1&nbsp;Single project</h3></div></div></div><p>For a single project</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">Clones the Spring Cloud Release project and picks all versions (Boot + Cloud projects)</li><li class="listitem"><p class="simpara">Modifies the project versions with values from a BOM (e.g. for Spring Cloud it&#8217;s Spring Cloud Release)</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">throws an exception when we bump versions to release and there&#8217;s a SNAPSHOT version referenced in the POM</li></ul></div></li><li class="listitem"><p class="simpara">Performs the build and checks if the <code class="literal">docs</code> modules have properly created the documentation</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">throws an exception when in the <code class="literal">docs</code> module there&#8217;s an unresolved tag in any HTML file</li></ul></div></li><li class="listitem">Commits changed poms (ONLY FOR NON-SNAPSHOT VERSIONS)</li><li class="listitem">Creates a tag for the release / milestone (ONLY FOR NON-SNAPSHOT VERSIONS)</li><li class="listitem">Runs the deployment of the artifacts</li><li class="listitem">Publishes the docs (to <code class="literal">spring-cloud-static</code> for non-snapshots, to <code class="literal">gh-pages</code> for snapshots)</li><li class="listitem">Reverts back to snapshots, bumps the version by a patch (<code class="literal">1.0.1.RELEASE</code> &#8594; <code class="literal">1.0.2.BUILD-SNAPSHOT</code>) (ONLY FOR RELEASE VERSIONS)</li><li class="listitem">Closes the milestone on Github (e.g. <code class="literal">v1.0.1.RELEASE</code>) (ONLY FOR NON-SNAPSHOT VERSIONS)</li></ul></div><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>Starting with version that does Sagan integration, you MUST pass the OAuth token,
otherwise the application will fail to start</p></td></tr></table></div><p>After project release</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">Generates an email template under <code class="literal">target/email.txt</code> (ONLY FOR NON-SNAPSHOT VERSIONS)</li><li class="listitem">Generates a blog template under <code class="literal">target/blog.md</code> (ONLY FOR NON-SNAPSHOT VERSIONS)</li><li class="listitem">Generates a tweet template under <code class="literal">target/tweet.txt</code> (ONLY FOR NON-SNAPSHOT VERSIONS)</li><li class="listitem">Generates a release notes template under <code class="literal">target/notes.md</code> (ONLY FOR NON-SNAPSHOT VERSIONS)</li><li class="listitem">Updates project information in Sagan (<a class="link" href="http://spring.io" target="_top">http://spring.io</a>) (ONLY FOR SNAPSHOT / RELEASE VERSIONS)</li><li class="listitem">For <code class="literal">GA</code>/ <code class="literal">SR</code> release will create an issue in Spring Guides under <a class="link" href="https://github.com/spring-guides/getting-started-guides/issues/" target="_top">https://github.com/spring-guides/getting-started-guides/issues/</a></li><li class="listitem">For <code class="literal">GA</code>/ <code class="literal">SR</code> release will update the links under <a class="link" href="https://github.com/spring-cloud/spring-cloud-static/tree/gh-pages/current" target="_top">https://github.com/spring-cloud/spring-cloud-static/tree/gh-pages/current</a></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_meta_release" href="#_meta_release"></a>1.1.2&nbsp;Meta-release</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">Uses the fixed versions to clone and check out each project (e.g. <code class="literal">spring-cloud-sleuth: 2.1.0.RELEASE</code>)</li><li class="listitem"><p class="simpara">From the version analyzes the branch and checks it out. E.g.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">for <code class="literal">spring-cloud-release&#8217;s `Finchley.RELEASE</code> version will resolve either <code class="literal">Finchley</code> branch or will fallback to <code class="literal">master</code> if there&#8217;s no <code class="literal">Finchley</code> branch.</li><li class="listitem">for <code class="literal">spring-cloud-sleuth&#8217;s `2.1.0.RELEASE</code> version will resolve <code class="literal">2.1.x</code> branch</li></ul></div></li><li class="listitem">Performs the release tasks per each project</li><li class="listitem">Performs the post release tasks at the end of the release</li></ul></div><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>For the meta-releaser to work we assume that the path to the
custom configuration file for each project is always <code class="literal">config/releaser.yml</code>.</p></td></tr></table></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_what_should_i_do_first" href="#_what_should_i_do_first"></a>1.2&nbsp;What should I do first?</h2></div></div></div><p>Members of the Spring Cloud Team typically use this tool as follows. They first
clone the releaser locally and build the jar manually</p><pre class="programlisting">$ git clone git@github.com:spring-cloud/spring-cloud-release-tools.git
@@ -113,15 +113,15 @@ in the `--"releaser.fixed-versions[project-name]=project-version" format</p><pre
the project names, not task names. E.g. you can start from <code class="literal">spring-cloud-netflix</code> project,
or build only tasks with names <code class="literal">spring-cloud-build,spring-cloud-sleuth</code>.</p></td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="_project_options" href="#_project_options"></a>1.6&nbsp;Project options</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">releaser.fixed-versions</code> - A String to String mapping of manually set versions. E.g. <code class="literal">"spring-cloud-cli" &#8594; "1.0.0.RELEASE"</code> will set
the <code class="literal">spring-cloud-cli.version</code> to <code class="literal">1.0.0.RELEASE</code> regardless of what was set in <code class="literal">spring-cloud-release</code> project. Example <code class="literal">--releaser.fixed-versions[spring-cloud-cli]=1.0.0.RELEASE</code>.
Use these properties to provide versions for the meta release.</li><li class="listitem"><code class="literal">releaser.meta-release.enabled</code> - You have to turn it on to enable a meta release. Defaults to <code class="literal">false</code></li><li class="listitem"><code class="literal">releaser.meta-release.release-train-project-name</code> - Name of the project that represents the BOM of the release train. Defaults to <code class="literal">spring-cloud-release</code></li><li class="listitem"><code class="literal">releaser.meta-release.git-org-url</code> - The URL of the Git organization. We&#8217;ll append each project&#8217;s name to it.
Use these properties to provide versions for the meta release.</li><li class="listitem"><code class="literal">releaser.meta-release.enabled</code> - You have to turn it on to enable a meta release. Defaults to <code class="literal">false</code></li><li class="listitem"><code class="literal">releaser.meta-release.git-org-url</code> - The URL of the Git organization. We&#8217;ll append each project&#8217;s name to it.
Defaults to <code class="literal"><a class="link" href="https://github.com/spring-cloud" target="_top">https://github.com/spring-cloud</a></code></li><li class="listitem"><code class="literal">releaser.meta-release.projects-to-skip</code> - List of projects that we should not clone and release. Spring Cloud release
train depends on projects that got already released. We default this list to <code class="literal">[spring-boot, spring-cloud-stream, spring-cloud-task]</code>.</li><li class="listitem"><code class="literal">releaser.git.fetch-versions-from-git</code> - If <code class="literal">true</code> then should fill the map of versions from Git. If <code class="literal">false</code> then picks fixed versions</li><li class="listitem"><code class="literal">releaser.git.clone-destination-dir</code> - Where should the Spring Cloud Release repo get cloned to. If null defaults to a temporary directory</li><li class="listitem"><code class="literal">releaser.git.spring-cloud-release-git-url</code> - URL to Spring Cloud Release Git repository. Defaults to <code class="literal"><a class="link" href="https://github.com/spring-cloud/spring-cloud-release" target="_top">https://github.com/spring-cloud/spring-cloud-release</a></code></li><li class="listitem"><code class="literal">releaser.git.documentation-url</code> - URL to the documentation Git repository. Defaults to <code class="literal"><a class="link" href="https://github.com/spring-cloud/spring-cloud-static" target="_top">https://github.com/spring-cloud/spring-cloud-static</a></code></li><li class="listitem"><code class="literal">releaser.git.documentation-branch</code> - Branch to check out for the documentation project. Defaults to <code class="literal">gh-pages</code></li><li class="listitem"><code class="literal">releaser.git.update-documentation-repo</code> - If <code class="literal">true</code> then will update documentation repository with the <code class="literal">current</code> URL. Defaults to <code class="literal">true</code></li><li class="listitem"><code class="literal">releaser.git.update-spring-guides</code> - If <code class="literal">true</code> then will update Spring Guides with the current release train. Defaults to <code class="literal">true</code></li><li class="listitem"><code class="literal">releaser.git.oauth-token</code> - GitHub OAuth token to be used to interact with GitHub repo.</li><li class="listitem"><code class="literal">releaser.git.username</code> - Optional Git username. If not passed keys will be used for authentication.</li><li class="listitem"><code class="literal">releaser.git.password</code> - Optional Git password. If not passed keys will be used for authentication.</li><li class="listitem"><code class="literal">releaser.git.number-of-checked-milestones</code> - In order not to iterate endlessly over milestones we introduce a threshold of milestones that
we will go through to find the matching milestone. Defaults to <code class="literal">10</code></li><li class="listitem"><code class="literal">releaser.maven.build-command</code> - Command to be executed to build the project. Defaults to <code class="literal">./mvnw clean install -Pdocs</code></li><li class="listitem"><code class="literal">releaser.maven.deploy-command</code> - Command to be executed to deploy a built project". Defaults to <code class="literal">./mvnw deploy -DskipTests -Pfast</code></li><li class="listitem"><code class="literal">releaser.maven.publish-docs-commands</code> - Command to be executed to deploy a built project. If present <code class="literal">{{version}}</code> will be replaced by the proper version.
Defaults to the standard Spring Cloud wget and execution of ghpages.</li><li class="listitem"><code class="literal">releaser.maven.system-properties</code> - Additional system properties that should be passed to any commands. If present <code class="literal">{{systemProps}}</code> will be replaced by the contents of this property.</li><li class="listitem"><code class="literal">releaser.maven.wait-time-in-minutes</code> - Max wait time in minutes for the process to finish. Defaults to <code class="literal">20</code></li><li class="listitem"><code class="literal">releaser.gradle.gradle-props-substitution</code> - a map containing a <code class="literal">key</code> which is a property key inside <code class="literal">gradle.properties</code> and a <code class="literal">value</code> of
train depends on projects that got already released. We default this list to <code class="literal">[spring-boot, spring-cloud-stream, spring-cloud-task]</code>.</li></ul></div><p>The following properties are used for both meta release and a release of an individual module.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><code class="literal">releaser.meta-release.release-train-project-name</code> - Name of the project that represents the BOM of the release train. Defaults to <code class="literal">spring-cloud-release</code>.</li><li class="listitem"><code class="literal">releaser.git.fetch-versions-from-git</code> - If <code class="literal">true</code> then should fill the map of versions from Git. If <code class="literal">false</code> then picks fixed versions.</li><li class="listitem"><code class="literal">releaser.git.clone-destination-dir</code> - Where should the Spring Cloud Release repo get cloned to. If null defaults to a temporary directory.</li><li class="listitem"><code class="literal">releaser.git.release-train-bom-url</code> - URL to a project containing a BOM. Defaults to Spring Cloud Release Git repository: <code class="literal"><a class="link" href="https://github.com/spring-cloud/spring-cloud-release" target="_top">https://github.com/spring-cloud/spring-cloud-release</a></code>.</li><li class="listitem"><code class="literal">releaser.git.documentation-url</code> - URL to the documentation Git repository. Defaults to <code class="literal"><a class="link" href="https://github.com/spring-cloud/spring-cloud-static" target="_top">https://github.com/spring-cloud/spring-cloud-static</a></code>.</li><li class="listitem"><code class="literal">releaser.git.documentation-branch</code> - Branch to check out for the documentation project. Defaults to <code class="literal">gh-pages</code>.</li><li class="listitem"><code class="literal">releaser.git.update-documentation-repo</code> - If <code class="literal">true</code> then will update documentation repository with the <code class="literal">current</code> URL. Defaults to <code class="literal">true</code>.</li><li class="listitem"><code class="literal">releaser.git.update-spring-guides</code> - If <code class="literal">true</code> then will update Spring Guides with the current release train. Defaults to <code class="literal">true</code>.</li><li class="listitem"><code class="literal">releaser.git.oauth-token</code> - GitHub OAuth token to be used to interact with GitHub repo.</li><li class="listitem"><code class="literal">releaser.git.username</code> - Optional Git username. If not passed keys will be used for authentication.</li><li class="listitem"><code class="literal">releaser.git.password</code> - Optional Git password. If not passed keys will be used for authentication.</li><li class="listitem"><code class="literal">releaser.git.number-of-checked-milestones</code> - In order not to iterate endlessly over milestones we introduce a threshold of milestones that
we will go through to find the matching milestone. Defaults to <code class="literal">10</code>.</li><li class="listitem"><code class="literal">releaser.maven.build-command</code> - Command to be executed to build the project. Defaults to <code class="literal">./mvnw clean install -Pdocs</code>.</li><li class="listitem"><code class="literal">releaser.maven.deploy-command</code> - Command to be executed to deploy a built project". Defaults to <code class="literal">./mvnw deploy -DskipTests -Pfast</code>.</li><li class="listitem"><code class="literal">releaser.maven.publish-docs-commands</code> - Command to be executed to deploy a built project. If present <code class="literal">{{version}}</code> will be replaced by the proper version.
Defaults to the standard Spring Cloud wget and execution of ghpages.</li><li class="listitem"><code class="literal">releaser.maven.system-properties</code> - Additional system properties that should be passed to any commands. If present <code class="literal">{{systemProps}}</code> will be replaced by the contents of this property.</li><li class="listitem"><code class="literal">releaser.maven.wait-time-in-minutes</code> - Max wait time in minutes for the process to finish. Defaults to <code class="literal">20</code>.</li><li class="listitem"><code class="literal">releaser.gradle.gradle-props-substitution</code> - a map containing a <code class="literal">key</code> which is a property key inside <code class="literal">gradle.properties</code> and a <code class="literal">value</code> of
a project name. E.g. in <code class="literal">gradle.properties</code> you have <code class="literal">foo=1.0.0.BUILD-SNAPSHOT</code> and you would like <code class="literal">spring-cloud-contract</code> version to
be set there. Just provide a mapping for the <code class="literal">gradle-props-substition</code> looking like this <code class="literal">foo=spring-cloud-contract</code> and the result
(e.g for sc-contract version <code class="literal">2.0.0.RELEASE</code>) will be an updated <code class="literal">gradle.properties</code> with entry <code class="literal">foo=2.0.0.RELEASE</code></li><li class="listitem"><code class="literal">releaser.pom.branch</code> - Which branch of Spring Cloud Release should be checked out. Defaults to "master",</li><li class="listitem"><code class="literal">releaser.pom.ignored-pom-regex</code> - List of regular expressions of ignored poms. Defaults to test projects and samples.
Example: <code class="literal">"--releaser.pom.ignored-pom-regex=".*\\.git/.*$,.{asterisk}spring-cloud-contract-maven-plugin/src/test/projects/.*$,.*spring-cloud-contract-maven-plugin/target/.*$,.*samples/standalone/[a-z]+/.*$"</code></li><li class="listitem"><code class="literal">releaser.working-dir</code> - By default Releaser assumes running the program from the current working directory.</li><li class="listitem"><code class="literal">releaser.template.template-folder</code> - Tells which subfolder with templates to pick for blog, email etc. generation. Defaults to <code class="literal">cloud</code></li></ul></div><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Tip"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="images/tip.png"></td><th align="left">Tip</th></tr><tr><td align="left" valign="top"><p>You can pass the options either via system properties or via application arguments.
(e.g for sc-contract version <code class="literal">2.0.0.RELEASE</code>) will be an updated <code class="literal">gradle.properties</code> with entry <code class="literal">foo=2.0.0.RELEASE</code>.</li><li class="listitem"><code class="literal">releaser.pom.branch</code> - Which branch of Spring Cloud Release should be checked out. Defaults to <code class="literal">master</code>.</li><li class="listitem"><code class="literal">releaser.pom.pom-with-boot-starter-parent</code> - What is the location of the <code class="literal">pom.xml</code> that contains the <code class="literal">spring-boot-starter-parent</code> as its parent pom. Defaults to <code class="literal">spring-cloud-starter-parent/pom.xml</code>.</li><li class="listitem"><code class="literal">releaser.pom.this-train-bom</code> - What is the location of the <code class="literal">pom.xml</code> that contains all the versions for the release train. Defaults to <code class="literal">spring-cloud-dependencies/pom.xml</code>.</li><li class="listitem"><code class="literal">releaser.pom.bom-version-pattern</code> - Regular expression that will match the versions of projects in the BOM pom.xml. Defaults to <code class="literal">^(spring-cloud-.*)\.version$</code>.</li><li class="listitem"><code class="literal">releaser.pom.ignored-pom-regex</code> - List of regular expressions of ignored poms. Defaults to test projects and samples.
Example: <code class="literal">"--releaser.pom.ignored-pom-regex=".*\\.git/.*$,.{asterisk}spring-cloud-contract-maven-plugin/src/test/projects/.*$,.*spring-cloud-contract-maven-plugin/target/.*$,.*samples/standalone/[a-z]+/.*$"</code>.</li><li class="listitem"><code class="literal">releaser.working-dir</code> - By default Releaser assumes running the program from the current working directory.</li><li class="listitem"><code class="literal">releaser.template.template-folder</code> - Tells which subfolder with templates to pick for blog, email etc. generation. Defaults to <code class="literal">cloud</code>.</li></ul></div><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Tip"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="images/tip.png"></td><th align="left">Tip</th></tr><tr><td align="left" valign="top"><p>You can pass the options either via system properties or via application arguments.
Example for system properties: <code class="literal">java -Dreleaser.pom.branch=Camden.SR6 -jar target/spring-cloud-release-tools-spring-1.0.0.M1.jar</code>
Example for application arguments: <code class="literal">java -jar target/spring-cloud-release-tools-spring-1.0.0.M1.jar --releaser.pom.branch=Camden.SR6</code></p></td></tr></table></div><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top"><p>For the GA release to be successful, it&#8217;s important that if the <code class="literal">build</code> / <code class="literal">deploy</code> command
run a script (e.g. <code class="literal">scripts/foo.sh</code>) then inside <code class="literal">foo.sh</code> if you call a Maven build <code class="literal">./mvnw clean install</code>