### Description

This is my configuration:
```yaml
images:
  airflow:
    repository: <REPO>
    tag: <TAG>
```

I'd like to be able to do the following:
```yaml
images:
  airflow:
    repository: <REPO>
    digest: <SHA_DIGEST>
```

Additionally, I've tried supplying only the repository, or placing the digest as the tag, but both don't work because of [this](https://github.com/apache/airflow/blob/c44c7e1b481b7c1a0d475265835a23b0f507506c/chart/templates/_helpers.yaml#L252). The formatting is done by `repo:tag` while I need `repo@digest`.


### Use case/motivation

I'm using Terraform to deploy Airflow.
I'm using the data source of [`aws_ecr_image`](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ecr_image) in order to pick the `latest` image.
I want to supply to the [`helm_release`](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) of Airflow the image's digest rather than `latest` as according to the docs, it's bad practice.


### Related issues

_No response_

### Are you willing to submit a PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

"templates/dag-processor/dag-processor-deployment.yaml",
                "templates/webserver/webserver-deployment.yaml",
                "templates/workers/worker-deployment.yaml",
            ],
        )
        assert 12 == len(k8s_objects)
        for k8s_object in k8s_objects:
            if k8s_object["kind"] == "CronJob":
                podSpec = jmespath.search("spec.jobTemplate.spec.template.spec", k8s_object)
            else:
                podSpec = jmespath.search("spec.template.spec", k8s_object)
            assert "foo" == jmespath.search(
                "affinity.nodeAffinity."
                "requiredDuringSchedulingIgnoredDuringExecution."
                "nodeSelectorTerms[0]."
                "matchExpressions[0]."
                "key",
                podSpec,
            )
            assert "user-node" == jmespath.search("nodeSelector.type", podSpec)
            assert "static-pods" == jmespath.search("tolerations[0].key", podSpec)
            assert "foo" == jmespath.search("topologySpreadConstraints[0].topologyKey", podSpec)
    @pytest.mark.parametrize(
        "use_default_image,expected_image",
        [
            (True, "apache/airflow:2.1.0"),
            (False, "apache/airflow:user-image"),
        ],
    )
    def test_should_use_correct_image(self, use_default_image, expected_image):