<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Core on</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/</link><description>Recent content in Core on</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Sat, 26 Sep 2026 21:35:17 +0200</lastBuildDate><atom:link href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/index.xml" rel="self" type="application/rss+xml"/><item><title>Configuration</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/configuration/</link><pubDate>Tue, 13 Oct 2020 15:21:01 +0200</pubDate><guid>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/configuration/</guid><description>&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Updatecli requires a configuration file, or &amp;#34;manifest&amp;#34;, which describes the update pipeline.&#10;A manifest describes the &amp;#34;what&amp;#34;, the &amp;#34;when&amp;#34;, and the &amp;#34;where&amp;#34; of the update pipeline.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Source</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/source/</link><pubDate>Sat, 09 Jan 2021 15:21:01 +0200</pubDate><guid>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/source/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="_description"&gt;Description&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;The &amp;#34;source&amp;#34; stage retrieves information from a third &amp;#34;resource&amp;#34; like a file, or an API and then uses that information in later stages.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;A source is the only stage that never modifies anything: it just reads a value, optionally reshapes it with&#10;&lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/transformer/"&gt;transformers&lt;/a&gt;, and hands it over to the conditions and targets of the manifest.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Most sources return a list of candidate versions and pick one according to their &lt;code&gt;versionfilter&lt;/code&gt;.&#10;See &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/versionfilter/"&gt;version filter&lt;/a&gt; for the available strategies.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="admonitionblock tip"&gt;&#10;&lt;table&gt;&#10;&lt;tbody&gt;&lt;tr&gt;&#10;&lt;td class="icon"&gt;&#10;&lt;div class="title"&gt;Tip&lt;/div&gt;&#10;&lt;/td&gt;&#10;&lt;td class="content"&gt;&#10;Within a single Updatecli run, sources sharing the same &lt;code&gt;kind&lt;/code&gt;, &lt;code&gt;spec&lt;/code&gt;, and resolved repository are executed only once, and the result is reused. Naming them differently, or attaching different transformers, does not trigger a second call (which keeps API rate limits under control when many pipelines track the same dependency).&#10;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Condition</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/condition/</link><pubDate>Sat, 09 Jan 2021 15:21:01 +0200</pubDate><guid>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/condition/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="_description"&gt;Description&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;A &amp;#34;condition&amp;#34; stage defines whether to run the &lt;a href="../target"&gt;&amp;#34;Target&amp;#34; stage&lt;/a&gt; stage of a pipeline.&#10;It runs a check (depending on the resource kind) that returns a boolean indicating its success (&lt;code&gt;true&lt;/code&gt;) or failure (&lt;code&gt;false&lt;/code&gt;).&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Please look at each kind of resource (shell, file, etc.) for details about &amp;#34;how is the success/failure determined?&amp;#34;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;By default, &lt;strong&gt;every target of a manifest waits for &lt;/strong&gt;every&lt;strong&gt; condition to succeed&lt;/strong&gt;.&#10;A single failing condition is enough to skip all the targets.&#10;That default can be changed per target, see &lt;a href="#_scoping_conditions_to_specific_targets"&gt;Scoping conditions to specific targets&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Target</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/target/</link><pubDate>Sat, 09 Jan 2021 15:21:01 +0200</pubDate><guid>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/target/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="_description"&gt;Description&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;The &amp;#34;target&amp;#34; stage applies the value retrieved by a &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/source/"&gt;source&lt;/a&gt; to a &amp;#34;resource&amp;#34;, such as a file in a Git repository.&#10;It is the only stage allowed to modify something, and it runs only once every &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/condition/"&gt;condition&lt;/a&gt; succeeded.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;A target reports one of three outcomes:&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;success&lt;/strong&gt; - the resource already holds the expected value, nothing to do&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;attention&lt;/strong&gt; - the resource is out of date. In &lt;code&gt;diff&lt;/code&gt; mode Updatecli only reports the change, in &lt;code&gt;apply&lt;/code&gt; mode it writes it&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;failure&lt;/strong&gt; - the target could not be evaluated&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;When a target is attached to an &lt;code&gt;scmid&lt;/code&gt;, applying a change also commits it and pushes it to the configured branch,&#10;which in turn triggers the &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/action/"&gt;actions&lt;/a&gt; depending on that scm.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Action</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/action/</link><pubDate>Fri, 11 Apr 2025 15:21:01 +0200</pubDate><guid>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/action/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="_description"&gt;Description&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;An Updatecli action defines what happens after a change is detected and validated. While Updatecli’s sources find changes (like a new version), and targets define where to apply them (like a file), actions describe what to do next, such as creating a pull request.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;An action is bound to an &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/scm/"&gt;scm&lt;/a&gt; through its &lt;code&gt;scmid&lt;/code&gt;, and runs when a&#10;&lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/target/"&gt;target&lt;/a&gt; using that same scm pushed a change.&#10;Targets working on the local directory, or on another scm, do not trigger it.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;An action is only carried out in &lt;code&gt;apply&lt;/code&gt; mode with push enabled.&#10;&lt;code&gt;updatecli pipeline diff&lt;/code&gt;, and &lt;code&gt;updatecli pipeline apply --push=false&lt;/code&gt;, describe the action that&#10;&lt;strong&gt;would&lt;/strong&gt; be taken, including its title and body, without contacting the forge.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="admonitionblock note"&gt;&#10;&lt;table&gt;&#10;&lt;tbody&gt;&lt;tr&gt;&#10;&lt;td class="icon"&gt;&#10;&lt;div class="title"&gt;Note&lt;/div&gt;&#10;&lt;/td&gt;&#10;&lt;td class="content"&gt;&#10;When none of the related targets changed, Updatecli does not simply skip the action: it still looks for a pull request opened by a previous run, so that an update which became obsolete is reported rather than left dangling.&#10;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Scm</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/scm/</link><pubDate>Sat, 09 Jan 2021 15:21:01 +0200</pubDate><guid>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/scm/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="_description"&gt;Description&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;An scm configuration provides the git repository information used by a source, a condition, a target,&#10;an &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/action/"&gt;action&lt;/a&gt;, or &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/autodiscovery/"&gt;autodiscovery&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;When an updatecli pipeline is triggered, the first thing updatecli does, is clone all referenced git repositories into a temporary directory.&#10;Resources referencing that scm through their &lt;code&gt;scmid&lt;/code&gt; key then operate on the clone rather than on the&#10;current working directory, and a target that changes a file there gets its change committed and pushed&#10;to a branch named after the pipeline &lt;code&gt;pipelineid&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;A resource without an &lt;code&gt;scmid&lt;/code&gt; simply works on the current working directory, and Updatecli neither&#10;clones nor commits anything for it. A manifest can ask for its own directory to be used instead, with&#10;&lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/configuration/#_relative_paths"&gt;&lt;code&gt;options.relativepaths&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect2"&gt;&#10;&lt;h3 id="_the_local_scm"&gt;The &lt;code&gt;local&lt;/code&gt; scm&lt;/h3&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;code&gt;local&lt;/code&gt; is a reserved scm identifier.&#10;Referencing &lt;code&gt;scmid: local&lt;/code&gt; from a resource or an action, without declaring &lt;code&gt;scms.local&lt;/code&gt; yourself,&#10;asks Updatecli to auto-detect the git repository of the current directory: its root, its remote,&#10;and its branch. This is how you commit changes to the repository you are already in, rather than to&#10;a clone.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Declaring &lt;code&gt;scms.local&lt;/code&gt; explicitly overrides that detection, and setting &lt;code&gt;disabled: true&lt;/code&gt; on it opts&#10;out of the auto-detection entirely.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;targets:&#10; version:&#10; kind: file&#10; # Commit the change to the repository Updatecli runs in&#10; scmid: local&#10; spec:&#10; file: VERSION&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Transformer</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/transformer/</link><pubDate>Sat, 09 Jan 2021 15:21:01 +0200</pubDate><guid>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/transformer/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="_description"&gt;Description&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;The &amp;#34;transformers&amp;#34; parameter can be used by any stage definition as a &amp;#34;source&amp;#34;, &amp;#34;condition&amp;#34;, or &amp;#34;target&amp;#34;.&#10;A &amp;#34;transformers&amp;#34; object contains a list of transformers. Each kind of transformer rules applies a string manipulation like adding or removing characters.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;strong&gt;source&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Source returns information modified by a list of transformers.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;strong&gt;condition&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;A condition receives information from the source then modifies that value using transformers before using it in the resource.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;strong&gt;target&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;A target receives information from the source then modifies that value with the transformers rule before using the resource.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Version Filter</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/versionfilter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/versionfilter/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="_description"&gt;Description&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Most &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/source/"&gt;sources&lt;/a&gt; do not return a single value: a Docker registry returns every&#10;tag of an image, a GitHub repository every release, a package registry every published version.&#10;The &lt;code&gt;versionfilter&lt;/code&gt; key decides which one of them the source actually returns.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Two things happen, depending on the &lt;code&gt;kind&lt;/code&gt;:&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;sorting&lt;/strong&gt; - &lt;code&gt;semver&lt;/code&gt;, &lt;code&gt;regex/semver&lt;/code&gt;, &lt;code&gt;time&lt;/code&gt;, &lt;code&gt;regex/time&lt;/code&gt;, &lt;code&gt;pep440&lt;/code&gt;, and &lt;code&gt;lex&lt;/code&gt; order the versions themselves, so the &lt;strong&gt;highest&lt;/strong&gt; or &lt;strong&gt;most recent&lt;/strong&gt; one wins whatever order the resource used.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;filtering&lt;/strong&gt; - &lt;code&gt;pattern&lt;/code&gt; restricts the candidates, for instance to a major version, a release branch, or a date format.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;code&gt;latest&lt;/code&gt; and &lt;code&gt;regex&lt;/code&gt; only filter: they keep the order given by the resource, which is usually the&#10;publication order.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;The filter runs before the &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/transformer/"&gt;transformers&lt;/a&gt;, so transformers reshape the&#10;version that the filter selected, and never influence the selection itself.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect2"&gt;&#10;&lt;h3 id="_kinds"&gt;Kinds&lt;/h3&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;code&gt;versionFilter&lt;/code&gt; allows to specify the kind of version retrieved from a resource and its version pattern.&#10;Default value is &amp;#34;latest&amp;#34; as we want to retrieve the newest version from a resource.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;A version filter accepts the following keys:&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;table class="tableblock frame-all grid-all stretch"&gt;&#10;&lt;colgroup&gt;&#10;&lt;col style="width: 20%;"/&gt;&#10;&lt;col style="width: 20%;"/&gt;&#10;&lt;col style="width: 60%;"/&gt;&#10;&lt;/colgroup&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th class="tableblock halign-left valign-top"&gt;Name&lt;/th&gt;&#10;&lt;th class="tableblock halign-left valign-top"&gt;Default&lt;/th&gt;&#10;&lt;th class="tableblock halign-left valign-top"&gt;Description&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;kind&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;latest&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;One of &lt;code&gt;latest&lt;/code&gt;, &lt;code&gt;lex&lt;/code&gt;, &lt;code&gt;regex&lt;/code&gt;, &lt;code&gt;semver&lt;/code&gt;, &lt;code&gt;regex/semver&lt;/code&gt;, &lt;code&gt;time&lt;/code&gt;, &lt;code&gt;regex/time&lt;/code&gt;, &lt;code&gt;pep440&lt;/code&gt;. An unsupported value stops the run with an error.&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;pattern&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;depends on &lt;code&gt;kind&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;The constraint applied to the versions, interpreted according to &lt;code&gt;kind&lt;/code&gt;. Defaults to &lt;code&gt;.&lt;strong&gt;&lt;/strong&gt;&lt;/code&gt;&lt;strong&gt; for &lt;code&gt;regex&lt;/code&gt;, &lt;code&gt;&lt;/code&gt;&lt;/strong&gt; for &lt;code&gt;semver&lt;/code&gt; and &lt;code&gt;pep440&lt;/code&gt;, and &lt;code&gt;2006-01-02&lt;/code&gt; for &lt;code&gt;time&lt;/code&gt; and &lt;code&gt;regex/time&lt;/code&gt;.&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;regex&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;-&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Used by &lt;code&gt;regex/semver&lt;/code&gt; and &lt;code&gt;regex/time&lt;/code&gt; only, to extract the version from a longer string. The &lt;strong&gt;first capture group&lt;/strong&gt; is the value being filtered.&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;replaceall&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;-&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;An optional find-and-replace applied to each version &lt;strong&gt;before&lt;/strong&gt; the filter, with the sub-keys &lt;code&gt;pattern&lt;/code&gt; (a regular expression) and &lt;code&gt;replacement&lt;/code&gt; (which may reference capture groups with &lt;code&gt;$1&lt;/code&gt;, &lt;code&gt;$2&lt;/code&gt;, …).&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;strict&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;false&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Used by &lt;code&gt;semver&lt;/code&gt; and &lt;code&gt;regex/semver&lt;/code&gt; only. When &lt;code&gt;true&lt;/code&gt;, only strictly formatted &lt;code&gt;MAJOR.MINOR.PATCH&lt;/code&gt; versions are considered, so a lenient version such as &lt;code&gt;1.2&lt;/code&gt; is dropped instead of being read as &lt;code&gt;1.2.0&lt;/code&gt;.&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="admonitionblock note"&gt;&#10;&lt;table&gt;&#10;&lt;tbody&gt;&lt;tr&gt;&#10;&lt;td class="icon"&gt;&#10;&lt;div class="title"&gt;Note&lt;/div&gt;&#10;&lt;/td&gt;&#10;&lt;td class="content"&gt;&#10;Versions that cannot be parsed for the selected kind are silently skipped, not treated as errors. When nothing is left after filtering, the resource fails with &amp;#34;no version found&amp;#34;.&#10;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect3"&gt;&#10;&lt;h4 id="_latest"&gt;latest&lt;/h4&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;If kind is set to &lt;code&gt;latest&lt;/code&gt; then there is no need to specify a pattern, as Updatecli returns the last&#10;version provided by the resource, in the order the resource returned them.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="admonitionblock important"&gt;&#10;&lt;table&gt;&#10;&lt;tbody&gt;&lt;tr&gt;&#10;&lt;td class="icon"&gt;&#10;&lt;div class="title"&gt;Important&lt;/div&gt;&#10;&lt;/td&gt;&#10;&lt;td class="content"&gt;&#10;&lt;code&gt;latest&lt;/code&gt; does not compare versions, it trusts the ordering of the resource. For a Docker registry, that is the most recently pushed tag, which is not necessarily the highest version number. Use &lt;code&gt;semver&lt;/code&gt; when you need the highest version.&#10;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect4"&gt;&#10;&lt;h5 id="_example"&gt;Example&lt;/h5&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code&gt;sources:&#10; kubectl:&#10; kind: githubRelease&#10; spec:&#10; owner: &amp;#34;kubernetes&amp;#34;&#10; repository: &amp;#34;kubectl&amp;#34;&#10; token: &amp;#34;{{ requiredEnv .github.token }}&amp;#34;&#10; username: &amp;#34;john&amp;#34;&#10; versionFilter:&#10; kind: latest&#10; transformers:&#10; - trimPrefix: &amp;#34;kubernetes-&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Return the latest Github release and remove &amp;#34;kubernetes-&amp;#34; from it.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect3"&gt;&#10;&lt;h4 id="_lex"&gt;Lex&lt;/h4&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;If the kind is set to &lt;code&gt;lex&lt;/code&gt; then Updatecli returns the latest version sorted lexicographically.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Sorting versions lexicographically means arranging them based on their lexicographic order, which is essentially alphabetical order as used in dictionaries, but applied to version strings.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;For example, in lexicographic order:&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="literalblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre&gt;&amp;#34;1.10&amp;#34; comes before &amp;#34;1.2&amp;#34;, because it compares character by character:&#10; Compare &amp;#34;1&amp;#34; vs. &amp;#34;1&amp;#34; → equal.&#10; Compare &amp;#34;.&amp;#34; vs &amp;#34;.&amp;#34; → equal.&#10; Compare &amp;#34;1&amp;#34; vs. &amp;#34;2&amp;#34; → &amp;#34;1&amp;#34; is smaller, so &amp;#34;1.10&amp;#34; &amp;lt; &amp;#34;1.2&amp;#34;.&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This ordering does not account for numerical values of version components. For meaningful version comparisons, semantic versioning is typically preferred, where &amp;#34;1.2&amp;#34; &amp;lt; &amp;#34;1.10&amp;#34; because &amp;#34;2&amp;#34; is numerically smaller than &amp;#34;10&amp;#34;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect4"&gt;&#10;&lt;h5 id="_example_2"&gt;Example&lt;/h5&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;sources:&#10; ubuntu-focal:&#10; name: Get latest ubuntu focal docker image tag using regex/time versionfilter&#10; kind: dockerimage&#10; spec:&#10; image: ubuntu&#10; versionfilter:&#10; kind: lex&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect3"&gt;&#10;&lt;h4 id="_regex"&gt;regex&lt;/h4&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;If &lt;code&gt;versionFilter.kind&lt;/code&gt; is set to &lt;code&gt;regex&lt;/code&gt; then we can use &lt;code&gt;versionFilter.pattern&lt;/code&gt; to specify a regular expression to&#10;return the newest version returned from a resource matching the regex&#10;If no versionFilter.pattern is provided then it uses &amp;#39;.*&amp;#39; which return the newest version&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="admonitionblock note"&gt;&#10;&lt;table&gt;&#10;&lt;tbody&gt;&lt;tr&gt;&#10;&lt;td class="icon"&gt;&#10;&lt;div class="title"&gt;Note&lt;/div&gt;&#10;&lt;/td&gt;&#10;&lt;td class="content"&gt;&#10;Like &lt;code&gt;latest&lt;/code&gt;, &lt;code&gt;regex&lt;/code&gt; walks the versions in the order the resource returned them and stops on the first match, starting from the end. It filters, it does not sort. To compare version numbers, use &lt;code&gt;regex/semver&lt;/code&gt;.&#10;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;code&gt;versionFilter.replaceall&lt;/code&gt; can optionally be used to transform version strings before the regex is applied.&#10;It accepts a &lt;code&gt;pattern&lt;/code&gt; (regex) and a &lt;code&gt;replacement&lt;/code&gt; string, similar to a find-and-replace operation.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code&gt;sources:&#10; kubectl:&#10; kind: githubRelease&#10; spec:&#10; owner: &amp;#34;kubernetes&amp;#34;&#10; repository: &amp;#34;kubectl&amp;#34;&#10; token: &amp;#34;{{ requiredEnv .github.token }}&amp;#34;&#10; username: &amp;#34;john&amp;#34;&#10; versionFilter:&#10; kind: regex&#10; pattern: &amp;#34;kubernetes-1.(\\d*).(\\d*)$&amp;#34;&#10; transformers:&#10; - trimPrefix: &amp;#34;kubernetes-&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;⇒ Return the newest kubectl version matching pattern &amp;#34;kubernetes-1.(\\d*).(\\d*)$&amp;#34; and remove &amp;#34;kubernetes-&amp;#34; from it&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect4"&gt;&#10;&lt;h5 id="_example_with_replaceall"&gt;Example with replaceall&lt;/h5&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Some projects use version tags that are not directly compatible with the regex pattern. For example, curl uses tags like&#10;&lt;code&gt;curl-8_11_1&lt;/code&gt; where underscores separate version components.&#10;The &lt;code&gt;replaceall&lt;/code&gt; option can be used to normalize these tags before applying the regex.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;sources:&#10; curl:&#10; kind: githubRelease&#10; spec:&#10; owner: &amp;#34;curl&amp;#34;&#10; repository: &amp;#34;curl&amp;#34;&#10; versionFilter:&#10; kind: regex&#10; pattern: &amp;#39;curl-\d+\.\d+\.\d+&amp;#39;&#10; replaceall:&#10; pattern: &amp;#34;_&amp;#34;&#10; replacement: &amp;#34;.&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;⇒ The &lt;code&gt;replaceall&lt;/code&gt; converts &lt;code&gt;curl-8_11_1&lt;/code&gt; to &lt;code&gt;curl-8.11.1&lt;/code&gt;, and the newest tag matching &lt;code&gt;pattern&lt;/code&gt; is returned as &lt;code&gt;curl-8.11.1&lt;/code&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="admonitionblock important"&gt;&#10;&lt;table&gt;&#10;&lt;tbody&gt;&lt;tr&gt;&#10;&lt;td class="icon"&gt;&#10;&lt;div class="title"&gt;Important&lt;/div&gt;&#10;&lt;/td&gt;&#10;&lt;td class="content"&gt;&#10;With &lt;code&gt;kind: regex&lt;/code&gt;, the returned value is the whole transformed version, not a capture group - the &lt;code&gt;regex&lt;/code&gt; key is ignored, only &lt;code&gt;pattern&lt;/code&gt; is read. Use &lt;code&gt;kind: regex/semver&lt;/code&gt; when you need to extract &lt;code&gt;8.11.1&lt;/code&gt; out of &lt;code&gt;curl-8.11.1&lt;/code&gt;, and add a &lt;code&gt;trimprefix&lt;/code&gt; transformer otherwise.&#10;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect3"&gt;&#10;&lt;h4 id="_semver"&gt;semver&lt;/h4&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;If &lt;code&gt;versionFilter.kind&lt;/code&gt; is set to &lt;code&gt;semver&lt;/code&gt; then we can use &lt;code&gt;versionFilter.pattern&lt;/code&gt; to specify version pattern as explained &lt;a href="https://github.com/Masterminds/semver#checking-version-constraints"&gt;here&lt;/a&gt;. In the process we also sort.&#10;If no &lt;code&gt;versionFilter.pattern&lt;/code&gt; is provided then it falls back to &amp;#39;*&amp;#39; which returns the newest version.&#10;Versions that do not respect semantic versioning are ignored.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Setting &lt;code&gt;versionFilter.strict&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; additionally rejects versions that are only loosely&#10;semantic, such as &lt;code&gt;1.2&lt;/code&gt; or &lt;code&gt;v1&lt;/code&gt;, instead of completing them with zeros.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;strong&gt;Remark&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;In the process we drop any characters not respecting semantic version like in this version &amp;#34;v1.0.0&amp;#34;, we drop the &amp;#34;v&amp;#34; but we can add it back using &lt;code&gt;transformers&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect4"&gt;&#10;&lt;h5 id="_autodiscovery_patterns"&gt;Autodiscovery patterns&lt;/h5&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;On top of the standard constraints, &lt;code&gt;semver&lt;/code&gt; accepts the following keywords, which are resolved&#10;against the version currently in use. They are what the &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/autodiscovery/"&gt;autodiscovery&lt;/a&gt;&#10;crawlers use to restrict the scope of an update.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;table class="tableblock frame-all grid-all stretch"&gt;&#10;&lt;colgroup&gt;&#10;&lt;col style="width: 25%;"/&gt;&#10;&lt;col style="width: 75%;"/&gt;&#10;&lt;/colgroup&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th class="tableblock halign-left valign-top"&gt;Pattern&lt;/th&gt;&#10;&lt;th class="tableblock halign-left valign-top"&gt;Meaning&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;patch&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Only patch updates, keeping the same major and minor.&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;minor&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Minor and patch updates, keeping the same major.&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;minoronly&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Minor updates only, excluding patch updates within the current minor.&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;major&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Any update from the current major upwards.&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;majoronly&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Major updates only.&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;prerelease&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Pre-releases of the current version.&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect4"&gt;&#10;&lt;h5 id="_example_3"&gt;Example&lt;/h5&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code&gt; jenkins-wiki-exporter:&#10; kind: githubRelease&#10; spec:&#10; owner: &amp;#34;jenkins-infra&amp;#34;&#10; repository: &amp;#34;jenkins-wiki-exporter&amp;#34;&#10; token: &amp;#34;{{ requiredEnv .github.token }}&amp;#34;&#10; username: &amp;#34;john&amp;#34;&#10; versionFilter:&#10; kind: semver&#10; pattern: &amp;#34;~1.10&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;⇒ Return the version &amp;#34;v1.10.3&amp;#34;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect3"&gt;&#10;&lt;h4 id="_regexsemver"&gt;regex/semver&lt;/h4&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;If &lt;code&gt;versionFilter.kind&lt;/code&gt; is set to &lt;code&gt;regex/semver&lt;/code&gt; then we can use &lt;code&gt;versionFilter.regex&lt;/code&gt; to specify a regular expression to extract version numbers.&#10;The regular expression should return the semantic version in the first capturing group.&#10;We can then use &lt;code&gt;versionFilter.pattern&lt;/code&gt; to specify version pattern as explained &lt;a href="https://github.com/Masterminds/semver#checking-version-constraints"&gt;here&lt;/a&gt;. In the process we also sort.&#10;If no &lt;code&gt;versionFilter.pattern&lt;/code&gt; is provided then it falls back to &amp;#39;*&amp;#39; which returns the newest version.&#10;Extracted values that do not respect semantic versioning are ignored.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;&lt;code&gt;versionFilter.replaceall&lt;/code&gt; can optionally be used to transform version strings before the regex is applied.&#10;It accepts a &lt;code&gt;pattern&lt;/code&gt; (regex) and a &lt;code&gt;replacement&lt;/code&gt; string, similar to a find-and-replace operation.&#10;See the &lt;a href="#_regex"&gt;regex section&lt;/a&gt; for an example.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="admonitionblock important"&gt;&#10;&lt;table&gt;&#10;&lt;tbody&gt;&lt;tr&gt;&#10;&lt;td class="icon"&gt;&#10;&lt;div class="title"&gt;Important&lt;/div&gt;&#10;&lt;/td&gt;&#10;&lt;td class="content"&gt;&#10;The regular expression must define at least one capture group; a version without one is skipped. &lt;code&gt;pattern&lt;/code&gt; filters the extracted value, &lt;code&gt;regex&lt;/code&gt; extracts it (the two are not interchangeable).&#10;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect4"&gt;&#10;&lt;h5 id="_example_4"&gt;Example&lt;/h5&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code&gt;sources:&#10; default:&#10; name: Get latest version&#10; kind: githubrelease&#10; spec:&#10; owner: yarnpkg&#10; repository: berry&#10; token: &amp;#39;{{ requiredEnv &amp;#34;GITHUB_TOKEN&amp;#34; }}&amp;#39;&#10; versionfilter:&#10; kind: regex/semver&#10; regex: &amp;#34;@yarnpkg/cli/(\\d*\\.\\d*\\.\\d*)&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;⇒ Return the version &amp;#34;4.5.3&amp;#34;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect3"&gt;&#10;&lt;h4 id="_regextime"&gt;regex/time&lt;/h4&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;If &lt;code&gt;versionFilter.kind&lt;/code&gt; is set to &lt;code&gt;regex/time&lt;/code&gt; then we can use &lt;code&gt;versionFilter.regex&lt;/code&gt; to specify a regular expression to extract dates.&#10;The regular expression should return the date in the first capturing group.&#10;We can then use &lt;code&gt;versionFilter.pattern&lt;/code&gt; to specify date pattern as explained &lt;a href="https://golang.org/pkg/time/#Time.Format"&gt;here&lt;/a&gt;. In the process we also sort.&#10;If no &lt;code&gt;versionFilter.pattern&lt;/code&gt; is provided then it falls back to &amp;#39;2006-01-02&amp;#39; which returns the newest version using date format YYYY-MM-DD.&#10;Extracted values that do not match the date pattern are ignored.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;To define your own format/pattern, write down what the reference time would look like formatted your way; The model is to demonstrate what the reference time looks like so that the Format and Parse methods can apply the same transformation to a general time value.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Here is a summary of the components of a layout string. Each element shows by example the formatting of an element of the reference time. Only these values are recognized. Text in the layout string that is not recognized as part of the reference time is echoed verbatim during Format and expected to appear verbatim in the input to Parse.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code&gt;Year: &amp;#34;2006&amp;#34; &amp;#34;06&amp;#34;&#10;Month: &amp;#34;Jan&amp;#34; &amp;#34;January&amp;#34; &amp;#34;01&amp;#34; &amp;#34;1&amp;#34;&#10;Day of the week: &amp;#34;Mon&amp;#34; &amp;#34;Monday&amp;#34;&#10;Day of the month: &amp;#34;2&amp;#34; &amp;#34;_2&amp;#34; &amp;#34;02&amp;#34;&#10;Day of the year: &amp;#34;__2&amp;#34; &amp;#34;002&amp;#34;&#10;Hour: &amp;#34;15&amp;#34; &amp;#34;3&amp;#34; &amp;#34;03&amp;#34; (PM or AM)&#10;Minute: &amp;#34;4&amp;#34; &amp;#34;04&amp;#34;&#10;Second: &amp;#34;5&amp;#34; &amp;#34;05&amp;#34;&#10;AM/PM mark: &amp;#34;PM&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;You can get inspiration from the following examples&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;table class="tableblock frame-all grid-all stretch"&gt;&#10;&lt;colgroup&gt;&#10;&lt;col style="width: 50%;"/&gt;&#10;&lt;col style="width: 50%;"/&gt;&#10;&lt;/colgroup&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Pattern&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Example&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;2006-01-02&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;2021-01-02 (YYYY-MM-DD)&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;20060102&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;20210102 (YYYYMMDD)&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;20060201&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;20260201 (YYYYDDMM)&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="sect4"&gt;&#10;&lt;h5 id="_example_5"&gt;Example&lt;/h5&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;sources:&#10; ubuntu-focal:&#10; name: Get latest ubuntu focal docker image tag using regex/time versionfilter&#10; kind: dockerimage&#10; spec:&#10; image: ubuntu&#10; versionfilter:&#10; kind: &amp;#39;regex/time&amp;#39;&#10; regex: &amp;#39;^focal-(\d*)$&amp;#39;&#10; pattern: &amp;#34;20060102&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect3"&gt;&#10;&lt;h4 id="_time"&gt;time&lt;/h4&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;If &lt;code&gt;versionFilter.kind&lt;/code&gt; is set to &lt;code&gt;time&lt;/code&gt; then we can use &lt;code&gt;versionFilter.pattern&lt;/code&gt; to specify date pattern as explained &lt;a href="https://golang.org/pkg/time/#Time.Format"&gt;here&lt;/a&gt;. In the process we also sort.&#10;If no &lt;code&gt;versionFilter.pattern&lt;/code&gt; is provided then it fallback to &amp;#39;2006-01-02&amp;#39; which return the newest version using date format YYYY-MM-DD.&#10;Please note date time not matching the pattern will be ignored.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;To define your own format/pattern, write down what the reference time would look like formatted your way; The model is to demonstrate what the reference time looks like so that the Format and Parse methods can apply the same transformation to a general time value.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Here is a summary of the components of a layout string. Each element shows by example the formatting of an element of the reference time. Only these values are recognized. Text in the layout string that is not recognized as part of the reference time is echoed verbatim during Format and expected to appear verbatim in the input to Parse.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code&gt;Year: &amp;#34;2006&amp;#34; &amp;#34;06&amp;#34;&#10;Month: &amp;#34;Jan&amp;#34; &amp;#34;January&amp;#34; &amp;#34;01&amp;#34; &amp;#34;1&amp;#34;&#10;Day of the week: &amp;#34;Mon&amp;#34; &amp;#34;Monday&amp;#34;&#10;Day of the month: &amp;#34;2&amp;#34; &amp;#34;_2&amp;#34; &amp;#34;02&amp;#34;&#10;Day of the year: &amp;#34;__2&amp;#34; &amp;#34;002&amp;#34;&#10;Hour: &amp;#34;15&amp;#34; &amp;#34;3&amp;#34; &amp;#34;03&amp;#34; (PM or AM)&#10;Minute: &amp;#34;4&amp;#34; &amp;#34;04&amp;#34;&#10;Second: &amp;#34;5&amp;#34; &amp;#34;05&amp;#34;&#10;AM/PM mark: &amp;#34;PM&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;You can get inspiration from the following examples&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;table class="tableblock frame-all grid-all stretch"&gt;&#10;&lt;colgroup&gt;&#10;&lt;col style="width: 50%;"/&gt;&#10;&lt;col style="width: 50%;"/&gt;&#10;&lt;/colgroup&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Pattern&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Example&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;2006-01-02&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;2021-01-02 (YYYY-MM-DD)&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;20060102&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;20210102 (YYYYMMDD)&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;20060201&lt;/p&gt;&lt;/td&gt;&#10;&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;20260201 (YYYYDDMM)&lt;/p&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="sect4"&gt;&#10;&lt;h5 id="_example_6"&gt;Example&lt;/h5&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;sources:&#10; ubuntu:&#10; name: Get latest ubuntu docker image tag using time versionfilter&#10; kind: dockerimage&#10; spec:&#10; image: ubuntu&#10; versionfilter:&#10; kind: &amp;#39;time&amp;#39;&#10; pattern: &amp;#34;06.01&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect3"&gt;&#10;&lt;h4 id="_pep440"&gt;pep440&lt;/h4&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;If &lt;code&gt;versionFilter.kind&lt;/code&gt; is set to &lt;code&gt;pep440&lt;/code&gt; then versions are parsed and sorted according to the&#10;Python &lt;a href="https://peps.python.org/pep-0440/"&gt;PEP 440&lt;/a&gt; specification, and &lt;code&gt;versionFilter.pattern&lt;/code&gt; is a&#10;PEP 440 specifier such as &lt;code&gt;&amp;gt;=1.0,&amp;lt;2.0&lt;/code&gt;.&#10;Versions that are not valid PEP 440 versions are ignored.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;This is the right choice for Python packages, whose versions are not semantic versions: PEP 440&#10;understands epochs (&lt;code&gt;1!2.0&lt;/code&gt;), post-releases (&lt;code&gt;1.0.post1&lt;/code&gt;), development releases (&lt;code&gt;1.0.dev1&lt;/code&gt;), and&#10;pre-release spellings such as &lt;code&gt;1.0rc1&lt;/code&gt; or &lt;code&gt;1.0a1&lt;/code&gt;, which &lt;code&gt;semver&lt;/code&gt; rejects or misorders.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;If no &lt;code&gt;versionFilter.pattern&lt;/code&gt; is provided then it falls back to &lt;code&gt;*&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="admonitionblock important"&gt;&#10;&lt;table&gt;&#10;&lt;tbody&gt;&lt;tr&gt;&#10;&lt;td class="icon"&gt;&#10;&lt;div class="title"&gt;Important&lt;/div&gt;&#10;&lt;/td&gt;&#10;&lt;td class="content"&gt;&#10;With &lt;code&gt;*&lt;/code&gt;, or with no pattern at all, Updatecli returns the newest &lt;strong&gt;stable&lt;/strong&gt; version and only falls back to a pre-release when no stable version exists. An explicit specifier does not apply that preference: it returns the newest version satisfying it, pre-release or not.&#10;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;div class="sect4"&gt;&#10;&lt;h5 id="_example_7"&gt;Example&lt;/h5&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;sources:&#10; ansible:&#10; name: Get the latest stable Ansible release&#10; kind: pypi&#10; spec:&#10; name: ansible&#10; versionfilter:&#10; kind: pep440&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Manifest Order</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/order/</link><pubDate>Wed, 15 Apr 2026 07:21:01 +0200</pubDate><guid>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/order/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="_description"&gt;Description&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Updatecli orders execution at two different levels:&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="ulist"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;between manifests&lt;/strong&gt;, with the root keys &lt;code&gt;id&lt;/code&gt; and &lt;code&gt;dependson&lt;/code&gt;, described on this page&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;between the resources of one manifest&lt;/strong&gt;, with the resource key &lt;code&gt;dependson&lt;/code&gt;, described in &lt;a href="#_resource_ordering"&gt;Resource ordering&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;The two are independent: &lt;code&gt;dependson&lt;/code&gt; at the root of a manifest refers to other manifests, while&#10;&lt;code&gt;dependson&lt;/code&gt; inside a source, condition, or target refers to other resources of the same manifest.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Labels</title><link>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/label/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/core/label/</guid><description>&lt;div class="sect1"&gt;&#10;&lt;h2 id="_overview"&gt;Overview&lt;/h2&gt;&#10;&lt;div class="sectionbody"&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Pipeline labels are arbitrary key/value pairs attached to a pipeline manifest that allow you to categorize, organize, and filter pipelines during execution and reporting.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="title"&gt;updatecli.yaml&lt;/div&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;name: &amp;#34;docs: update Golang version throughout the documentation&amp;#34;&#10;&#10;# Pipeline labels: key/value pairs used to filter and organize pipelines in Updatecli and Udash.&#10;labels:&#10; ecosystem: go&#10;&#10;actions:&#10; default:&#10; kind: github/pullrequest&#10; spec:&#10; # PR labels: applied to the pull request on the SCM (e.g. GitHub). Different from pipeline labels above.&#10; labels:&#10; - dependencies&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;These labels can be used for two main purposes:&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="olist arabic"&gt;&#10;&lt;ol class="arabic"&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Filtering pipeline execution&lt;/strong&gt; - Use labels to run only specific pipelines matching given criteria.&lt;/p&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;For example, only apply pipelines tagged with &lt;code&gt;ecosystem: go&lt;/code&gt;:&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="listingblock"&gt;&#10;&lt;div class="content"&gt;&#10;&lt;pre class="highlight"&gt;&lt;code class="language-bash" data-lang="bash"&gt;updatecli compose apply --labels=&amp;#34;ecosystem:go&amp;#34;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Pipelines matching the filter will execute. Pipelines without the label or with a different value will be skipped.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Filtering pipeline reports&lt;/strong&gt; in &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/udash/"&gt;Udash&lt;/a&gt;, where labels group pipelines from many repositories into one view. See &lt;a href="https://deploy-preview-3765--amazing-golick-2d0138.netlify.app/docs/udash/dashboards/#_filtering_by_label"&gt;Filtering by label&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item></channel></rss>