# Docker Image<no value>
// <!-- Required for asciidoctor -->
:toc:
// Set toclevels to be at least your hugo [markup.tableOfContents.endLevel] config key
:toclevels: 4


[cols="1^,1^,1^",options=header]
|===
| source | condition | target
| &#10004; | &#10004; | &#10007;
|===

== Description

**source**

The Docker Image "source" retrieves a docker image tag from a Docker Registry

**condition**

The Docker Image "condition" tests if a docker image tag exist on a Docker Registry

== Parameters

{{< resourceparameters "sources" "dockerimage" >}}

**Remark**:

It's considered a very bad practice to store credentials in an unencrypted file.
Consider using an environment variable to store the token.

== Architectures

When the parameter `architecture` or `architectures` the registry will be checked to see if they are present.

Remarks:

* The default operating system is `linux`.
* When query variant `v7` for `arm` the operating system must also be defined.
* Checking architectures is not supported for v1 registries

Here are some examples:

* `amd64` - will check for `linux/amd64`
* `linux/amd64`
* `windows/amd64`
* `linux/arm/v7`

== Authentication

Depending on the Docker Registry, authentication may be required. The way to retrieve the token depends on the registry.

=== GHCR

Github uses personal access token. How to retrieve one, is explained https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token[here]

=== DockerHub

To retrieve the token, it's easier to run `docker login` and then retrieve the token stored in '~/.docker/config.json'

.~/.docker/config.json
```
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "token"
                }
        },
```

== Example

Please note that in this example we are using a go template `updatecli.tpl` with values from `values.yaml`
The main motivation is to use {{ requiredEnv ENV_VARIABLE }} to read the github token from a environment variable.

[source,yaml]
----
# updatecli.yaml
{{<include "assets/code_example/docs/plugins/resources/docker/image/updatecli.d/default.yaml">}}
----

[source,yaml]
----
# values.yaml
{{<include "assets/code_example/docs/plugins/resources/docker/image/values.yaml">}}
----

What it says:

**Source**
Retrieve the latest version from the Github release of the project jenkis-infra/plugins-site-api
=> v1.11.1

**Condition**
Test that the tag `v1.11.1` exist for the image `jenkinsciinfra/plugin-site-api` on DockerHub and architecture `linux/amd64` is present
=> No, then abort

**target**
If the condition was passing then it would have update the key `backend.image.tag` in the yaml file `charts/plugin-site/values.yaml` located on the Github repository `olblak/charts` on the branch `master` using the Github Pull request workflow
