diff --git a/404.html b/404.html index 8c58f831..f7b6930c 100644 --- a/404.html +++ b/404.html @@ -137,7 +137,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > diff --git a/about/index.html b/about/index.html index 4418bd7a..efbc6b83 100644 --- a/about/index.html +++ b/about/index.html @@ -156,7 +156,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > diff --git a/blog/2019/12/23/0.3-release/index.html b/blog/2019/12/23/0.3-release/index.html index 449690b6..f01e18f3 100644 --- a/blog/2019/12/23/0.3-release/index.html +++ b/blog/2019/12/23/0.3-release/index.html @@ -27,12 +27,12 @@ - + - + @@ -146,7 +146,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -168,7 +168,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > diff --git a/blog/2019/12/23/website-is-up/index.html b/blog/2019/12/23/website-is-up/index.html index 64add28e..aef3bcf5 100644 --- a/blog/2019/12/23/website-is-up/index.html +++ b/blog/2019/12/23/website-is-up/index.html @@ -27,12 +27,12 @@ - + - + @@ -146,7 +146,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -168,7 +168,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > diff --git a/blog/index.html b/blog/index.html index 834e231b..8b9984b2 100644 --- a/blog/index.html +++ b/blog/index.html @@ -140,7 +140,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -162,7 +162,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > diff --git a/blog/news/index.html b/blog/news/index.html index 6ece7841..2b283d8a 100644 --- a/blog/news/index.html +++ b/blog/news/index.html @@ -138,7 +138,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -160,7 +160,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > diff --git a/blog/releases/index.html b/blog/releases/index.html index cc19fc9f..a1a9e74f 100644 --- a/blog/releases/index.html +++ b/blog/releases/index.html @@ -138,7 +138,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -160,7 +160,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > diff --git a/community/index.html b/community/index.html index 7bda8fb3..ccbda8eb 100644 --- a/community/index.html +++ b/community/index.html @@ -139,7 +139,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > diff --git a/docs/concepts/index.html b/docs/concepts/index.html index 07906b73..fd42ff6d 100644 --- a/docs/concepts/index.html +++ b/docs/concepts/index.html @@ -142,7 +142,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -164,7 +164,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -409,7 +409,7 @@ if (!doNotTrack) {
- Last modified January 30, 2022: :notebook: Add docs alongside (a591a1e) + Last modified February 4, 2022: :notebook: docs: Update repository section (fe504e9)
diff --git a/docs/concepts/overview/build_packages/index.html b/docs/concepts/overview/build_packages/index.html index de8170f7..a90ad7b2 100644 --- a/docs/concepts/overview/build_packages/index.html +++ b/docs/concepts/overview/build_packages/index.html @@ -27,12 +27,12 @@ - + - + @@ -146,7 +146,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -168,7 +168,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -523,7 +523,7 @@ $~/workdir> cat <<EOF > package3/definit
- Last modified January 30, 2022: :notebook: Add docs alongside (a591a1e) + Last modified February 4, 2022: :notebook: docs: Update repository section (fe504e9)
diff --git a/docs/concepts/overview/constraints/index.html b/docs/concepts/overview/constraints/index.html index 1b39f05a..8d3b919d 100644 --- a/docs/concepts/overview/constraints/index.html +++ b/docs/concepts/overview/constraints/index.html @@ -27,12 +27,12 @@ - + - + @@ -146,7 +146,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -168,7 +168,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -403,7 +403,7 @@ They share the same SAT logic of expansion, allowing to swap entire version rang
- Last modified January 30, 2022: :notebook: Add docs alongside (a591a1e) + Last modified February 4, 2022: :notebook: docs: Update repository section (fe504e9)
diff --git a/docs/concepts/overview/index.html b/docs/concepts/overview/index.html index aed5df71..b88364ce 100644 --- a/docs/concepts/overview/index.html +++ b/docs/concepts/overview/index.html @@ -142,7 +142,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -164,7 +164,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -440,7 +440,7 @@ Luet allows also to create packages entirely from Docker images content. In this
- Last modified January 30, 2022: :notebook: Add docs alongside (a591a1e) + Last modified February 4, 2022: :notebook: docs: Update repository section (fe504e9)
diff --git a/docs/concepts/overview/index.xml b/docs/concepts/overview/index.xml index d85a646f..b3d2b420 100644 --- a/docs/concepts/overview/index.xml +++ b/docs/concepts/overview/index.xml @@ -157,6 +157,36 @@ $~/workdir&gt; cat <span style="color:#4e9a06">&lt;&lt <p>After a set of packages has been built, a repository must be created in order to make them accessible by Luet clients. A Repository can be served either local files or via http(s) (at the moment of writing). Luet, by default, supports multiple-repositories with priorities.</p> +<h2 id="repository-fields">Repository fields</h2> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;...&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">description</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;...&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">type</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;docker&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">cached</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">enabled</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">arch</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;amd64&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">priority</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">3</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">urls</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#4e9a06">&#34;...&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span></code></pre></div><p>Repositories have the following fields, notably:</p> +<ul> +<li><code>name</code>: Repository name</li> +<li><code>description</code>: Repository description</li> +<li><code>cached</code>: Enable/disable repository cache</li> +<li><code>enable</code>: Enable/disables the repository</li> +<li><code>urls</code>: A List of urls where the repository is hosted from</li> +<li><code>type</code>: Repository type ( <code>docker</code>, <code>disk</code>, <code>http</code> are currently supported )</li> +<li><code>arch</code>: (optional) Denotes the arch repository. If present, it will enable the repository automatically if the corresponding arch is matching with the host running <code>luet</code>. <code>enable: true</code> would override this behavior</li> +<li><code>reference</code>: (optional) A reference to a repository index file to use to retrieve the repository metadata instead of latest. This can be used to point to a different or an older repository index to act as a &ldquo;wayback machine&rdquo;. The client will consume the repository state from that snapshot instead of latest.</li> +</ul> + + +<div class="alert alert-primary" role="alert"> +<h4 class="alert-heading">Note</h4> + + The <code>reference</code> field has to be a valid tag. For example, if a repository is a docker type, browse the image tags. The repository index snapshots are prefixed with a timestamp, and ending in <code>repository.yaml</code>. For example <code> 20211027153653-repository.yaml</code> + +</div> + <h2 id="create-a-repository">Create a repository</h2> <p>After issuing a <code>luet build</code>, the built packages are present in the output build directory. The <code>create-repo</code> step is needed to generate a portable tree, which is read by the clients, and a <code>repository.yaml</code> which contains the repository metadata.</p> <p>Note that the output of <code>create-repo</code> is <em>additive</em> so it integrates with the current build content. The repository is composed by the packages generated by the <code>build</code> command (or <code>pack</code>) and the <code>create-repo</code> generated metadata.</p> @@ -218,7 +248,20 @@ foo-bar-0.1-builder.image.tar foo-bar-0.1.image.tar foo-bar-0.1.metadata.yaml <h4 id="docker"><code>docker</code></h4> <p>When specifying the <code>docker</code> repository type, <code>luet</code> will generate final images from the build results and upload them to the docker reference specified with <code>--output</code>. The images contains the artifact output from the build result, and they are tagged accordingly to their package name. A single image reference needs to be passed, all the packages will be pushed in a single image but with different tags.</p> <p>The login to the container registry is not handled, the daemon needs to have already proper permissions to push the image to the destination.</p> -<h2 id="notes">Notes</h2> +<h2 id="repositories-snapshots">Repositories snapshots</h2> +<p>Luet automatically will create repository index snapshots. This allows clients to point to specific references of repositories besides the latest package set published.</p> +<p><code>luet create-repo</code> optionally takes a <code>--snapshot-id</code> argument to define the snapshot name, otherwise it defaults to the unix date timestamp.</p> +<p>Combined with <code>--push-images</code> with a container repository type, it automatically tags and pushes snapshots images too.</p> +<h3 id="consuming-repository-snapshots">Consuming repository snapshots</h3> +<p>A client can define a repository, with an optional <code>reference</code> keyword:</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;...&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">description</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;...&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">type</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;docker&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">priority</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">3</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">reference</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">20220204175357</span>-<span style="color:#000">repository.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">urls</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> +</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#4e9a06">&#34;...&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> +</span></code></pre></div><h2 id="notes">Notes</h2> <ul> <li>The tree of definition being used to build the repository, and the package directories must <strong>not</strong> be symlinks.</li> <li>To build a repository is not required to hold the packages artifacts, only the respective <code>metadata.yaml</code> file is required.</li> diff --git a/docs/concepts/overview/repositories/index.html b/docs/concepts/overview/repositories/index.html index 6aa01c7c..ff729575 100644 --- a/docs/concepts/overview/repositories/index.html +++ b/docs/concepts/overview/repositories/index.html @@ -27,13 +27,13 @@ - + - - + + @@ -168,7 +168,7 @@ if (!doNotTrack) { aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="/offline-search-index.7193789b7a973423f5f62b60d4a0340b.json" + data-offline-search-index-json-src="/offline-search-index.2d5033d97ec0001a71adb66bf2d6599d.json" data-offline-search-base-href="/" data-offline-search-max-results="10" > @@ -264,6 +264,7 @@ if (!doNotTrack) {
@@ -326,6 +332,36 @@ if (!doNotTrack) {

After a set of packages has been built, a repository must be created in order to make them accessible by Luet clients. A Repository can be served either local files or via http(s) (at the moment of writing). Luet, by default, supports multiple-repositories with priorities.

+

Repository fields

+
name: "..."
+description: "..."
+type: "docker"
+cached: true
+enabled: true
+arch: "amd64"
+priority: 3
+urls:
+  - "..."
+

Repositories have the following fields, notably:

+ + + + +

Create a repository

After issuing a luet build, the built packages are present in the output build directory. The create-repo step is needed to generate a portable tree, which is read by the clients, and a repository.yaml which contains the repository metadata.

Note that the output of create-repo is additive so it integrates with the current build content. The repository is composed by the packages generated by the build command (or pack) and the create-repo generated metadata.

@@ -387,7 +423,20 @@ foo-bar-0.1-builder.image.tar foo-bar-0.1.image.tar foo-bar-0.1.metadata.yaml

docker

When specifying the docker repository type, luet will generate final images from the build results and upload them to the docker reference specified with --output. The images contains the artifact output from the build result, and they are tagged accordingly to their package name. A single image reference needs to be passed, all the packages will be pushed in a single image but with different tags.

The login to the container registry is not handled, the daemon needs to have already proper permissions to push the image to the destination.

-

Notes

+

Repositories snapshots

+

Luet automatically will create repository index snapshots. This allows clients to point to specific references of repositories besides the latest package set published.

+

luet create-repo optionally takes a --snapshot-id argument to define the snapshot name, otherwise it defaults to the unix date timestamp.

+

Combined with --push-images with a container repository type, it automatically tags and pushes snapshots images too.

+

Consuming repository snapshots

+

A client can define a repository, with an optional reference keyword:

+
name: "..."
+description: "..."
+type: "docker"
+priority: 3
+reference: 20220204175357-repository.yaml
+urls:
+  - "..."
+

Notes