Scenario: $scenario (Added: $num_added, Modified: $num_modified, Removed: $num_removed)
\n" >> $output_file
- echo -e "\n\n" >> $output_file
-
- # Add summary counts
- echo -e "\n**Summary:**" >> $output_file
- echo -e "\n- **Added:** $num_added" >> $output_file
- echo -e "\n- **Modified:** $num_modified" >> $output_file
- echo -e "\n- **Removed:** $num_removed" >> $output_file
-
- # Add details for added files
- echo -e "\n### Added Files" >> $output_file
- if [[ "$num_added" -gt 0 ]]; then
- echo "$added_files" | jq -c '.[]' | while read -r obj; do
- filename=$(echo "$obj" | jq -r '.filename')
- content=$(echo "$obj" | jq -r '.content')
- echo -e "\n$filename
" >> $output_file
- echo -e "\n\`\`\`yaml\n$content\n\`\`\`\n " >> $output_file
- done
- else
- echo -e "\n_No added files_\n" >> $output_file
- fi
-
- # Add details for modified files
- echo -e "\n### Modified Files" >> $output_file
- if [[ "$num_modified" -gt 0 ]]; then
- echo "$modified_files" | jq -c '.[]' | while read -r obj; do
- filename=$(echo "$obj" | jq -r '.filename')
- diff=$(echo "$obj" | jq -r '.diff')
- echo -e "\n$filename
" >> $output_file
- echo -e "\n\`\`\`diff\n$diff\n\`\`\`\n " >> $output_file
- done
- else
- echo -e "\n_No modified files_\n" >> $output_file
- fi
-
- # Add details for removed files
- echo -e "\n### Removed Files" >> $output_file
- if [[ "$num_removed" -gt 0 ]]; then
- echo "$removed_files" | jq -c '.[]' | while read -r obj; do
- filename=$(echo "$obj" | jq -r '.filename')
- content=$(echo "$obj" | jq -r '.content')
- echo -e "\n$filename
" >> $output_file
- echo -e "\n\`\`\`yaml\n$content\n\`\`\`\n " >> $output_file
- done
- else
- echo -e "\n_No removed files_\n" >> $output_file
- fi
-
- # close
and
- echo -e "\n\n
\n " >> $output_file
- done
-
- - name: Post diff as PR comment
- uses: marocchino/sticky-pull-request-comment@v2
- with:
- hide_and_recreate: true
- hide_classify: "OUTDATED"
- path: ${{ github.workspace }}/output/diff_summary.md
\ No newline at end of file
diff --git a/.github/workflows/helm-release.yaml b/.github/workflows/helm-release.yaml
index c303939fdf39c..1a22318fcf752 100644
--- a/.github/workflows/helm-release.yaml
+++ b/.github/workflows/helm-release.yaml
@@ -11,7 +11,7 @@ on:
jobs:
call-update-helm-repo:
- uses: grafana/helm-charts/.github/workflows/update-helm-repo.yaml@main
+ uses: grafana/helm-charts/.github/workflows/update-helm-repo.yaml@70dbbb722dee3f2ee126e12684cc0e92a20972ed
with:
charts_dir: production/helm
cr_configfile: production/helm/cr.yaml
diff --git a/.github/workflows/helm-tagged-release-pr.yaml b/.github/workflows/helm-tagged-release-pr.yaml
index fb6ed43154977..d237cb6af61bd 100644
--- a/.github/workflows/helm-tagged-release-pr.yaml
+++ b/.github/workflows/helm-tagged-release-pr.yaml
@@ -33,7 +33,7 @@ jobs:
bash .github/workflows/scripts/helm-tagged-release.sh ${RELEASE_VERSION}
- name: Create Pull Request
- uses: peter-evans/create-pull-request@v5
+ uses: peter-evans/create-pull-request@v7
with:
token: ${{ steps.get_github_app_token.outputs.token }}
title: "chore: release loki helm chart ${{ steps.update.outputs.new_chart_version }}"
diff --git a/.github/workflows/helm-weekly-release-pr.yaml b/.github/workflows/helm-weekly-release-pr.yaml
index 45f7d6e0288d5..f863baf749993 100644
--- a/.github/workflows/helm-weekly-release-pr.yaml
+++ b/.github/workflows/helm-weekly-release-pr.yaml
@@ -41,7 +41,7 @@ jobs:
bash .github/workflows/scripts/helm-weekly-release.sh -k
- name: Create Pull Request
- uses: peter-evans/create-pull-request@v5
+ uses: peter-evans/create-pull-request@v7
with:
token: ${{ steps.get_github_app_token.outputs.token }}
title: "chore: release loki helm chart ${{ steps.update-k.outputs.new_chart_version }}"
@@ -57,7 +57,7 @@ jobs:
bash .github/workflows/scripts/helm-weekly-release.sh
- name: Create Pull Request
- uses: peter-evans/create-pull-request@v5
+ uses: peter-evans/create-pull-request@v7
with:
token: ${{ steps.get_github_app_token.outputs.token }}
title: "chore: release loki helm chart ${{ steps.update.outputs.new_chart_version }}"
diff --git a/.github/workflows/images.yml b/.github/workflows/images.yml
index 40801f19317d3..c0a0c3e8f16f8 100644
--- a/.github/workflows/images.yml
+++ b/.github/workflows/images.yml
@@ -2,20 +2,27 @@
"check":
"uses": "grafana/loki-release/.github/workflows/check.yml@main"
"with":
- "build_image": "grafana/loki-build-image:0.34.1"
+ "build_image": "grafana/loki-build-image:0.34.5"
"golang_ci_lint_version": "v1.60.3"
"release_lib_ref": "main"
"skip_validation": false
"use_github_app_token": true
- "fluent-bit":
+ "loki-canary-boringcrypto-image":
"env":
"BUILD_TIMEOUT": 60
+ "GO_VERSION": "1.23.6"
"IMAGE_PREFIX": "grafana"
"RELEASE_LIB_REF": "main"
"RELEASE_REPO": "grafana/loki"
"needs":
- "check"
- "runs-on": "ubuntu-latest"
+ "outputs":
+ "image_digest_linux_amd64": "${{ steps.digest.outputs.digest_linux_amd64 }}"
+ "image_digest_linux_arm": "${{ steps.digest.outputs.digest_linux_arm }}"
+ "image_digest_linux_arm64": "${{ steps.digest.outputs.digest_linux_arm64 }}"
+ "image_name": "${{ steps.weekly-version.outputs.image_name }}"
+ "image_tag": "${{ steps.weekly-version.outputs.image_version }}"
+ "runs-on": "${{ matrix.runs_on }}"
"steps":
- "name": "pull release library code"
"uses": "actions/checkout@v4"
@@ -32,82 +39,98 @@
"uses": "actions/setup-node@v4"
"with":
"node-version": 20
- - "name": "Set up QEMU"
- "uses": "docker/setup-qemu-action@v3"
- - "name": "set up docker buildx"
+ - "name": "Set up Docker buildx"
"uses": "docker/setup-buildx-action@v3"
- - "name": "Login to DockerHub (from vault)"
+ - "name": "Login to DockerHub (from Vault)"
"uses": "grafana/shared-workflows/actions/dockerhub-login@main"
- "id": "weekly-version"
"name": "Get weekly version"
"run": |
- echo "version=$(./tools/image-tag)" >> $GITHUB_OUTPUT
+ version=$(./tools/image-tag)
+ echo "image_version=$version" >> $GITHUB_OUTPUT
+ echo "image_name=${{ env.IMAGE_PREFIX }}/loki-canary-boringcrypto" >> $GITHUB_OUTPUT
+ echo "image_full_name=${{ env.IMAGE_PREFIX }}/loki-canary-boringcrypto:$version" >> $GITHUB_OUTPUT
+ "working-directory": "release"
+ - "id": "platform"
+ "name": "Parse image platform"
+ "run": |
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ echo "platform=${platform}" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
"working-directory": "release"
- - "name": "Build and push"
+ - "id": "build-push"
+ "name": "Build and push"
"timeout-minutes": "${{ fromJSON(env.BUILD_TIMEOUT) }}"
"uses": "docker/build-push-action@v6"
"with":
- "build-args": "IMAGE_TAG=${{ steps.weekly-version.outputs.version }}"
+ "build-args": |
+ IMAGE_TAG=${{ steps.weekly-version.outputs.image_version }}
+ GO_VERSION=${{ env.GO_VERSION }}
"context": "release"
- "file": "release/clients/cmd/fluent-bit/Dockerfile"
- "platforms": "linux/amd64"
- "push": true
- "tags": "${{ env.IMAGE_PREFIX }}/fluent-bit-plugin-loki:${{ steps.weekly-version.outputs.version }}"
- "fluentd":
+ "file": "release/cmd/loki-canary-boringcrypto/Dockerfile"
+ "outputs": "push-by-digest=true,type=image,name=${{ steps.weekly-version.outputs.image_name }},push=true"
+ "platforms": "${{ matrix.arch }}"
+ "provenance": true
+ "tags": "${{ steps.weekly-version.outputs.image_name }}"
+ - "id": "digest"
+ "name": "Process image digest"
+ "run": |
+ arch=$(echo ${{ matrix.arch }} | tr "/" "_")
+ echo "digest_$arch=${{ steps.build-push.outputs.digest }}" >> $GITHUB_OUTPUT
+ "working-directory": "release"
+ "strategy":
+ "fail-fast": true
+ "matrix":
+ "include":
+ - "arch": "linux/amd64"
+ "runs_on":
+ - "github-hosted-ubuntu-x64-small"
+ - "arch": "linux/arm64"
+ "runs_on":
+ - "github-hosted-ubuntu-arm64-small"
+ - "arch": "linux/arm"
+ "runs_on":
+ - "github-hosted-ubuntu-arm64-small"
+ "loki-canary-boringcrypto-manifest":
"env":
"BUILD_TIMEOUT": 60
- "IMAGE_PREFIX": "grafana"
- "RELEASE_LIB_REF": "main"
- "RELEASE_REPO": "grafana/loki"
"needs":
- - "check"
+ - "loki-canary-boringcrypto-image"
"runs-on": "ubuntu-latest"
"steps":
- - "name": "pull release library code"
- "uses": "actions/checkout@v4"
- "with":
- "path": "lib"
- "ref": "${{ env.RELEASE_LIB_REF }}"
- "repository": "grafana/loki-release"
- - "name": "pull code to release"
- "uses": "actions/checkout@v4"
- "with":
- "path": "release"
- "repository": "${{ env.RELEASE_REPO }}"
- - "name": "setup node"
- "uses": "actions/setup-node@v4"
- "with":
- "node-version": 20
- - "name": "Set up QEMU"
- "uses": "docker/setup-qemu-action@v3"
- - "name": "set up docker buildx"
+ - "name": "Set up Docker buildx"
"uses": "docker/setup-buildx-action@v3"
- - "name": "Login to DockerHub (from vault)"
+ - "name": "Login to DockerHub (from Vault)"
"uses": "grafana/shared-workflows/actions/dockerhub-login@main"
- - "id": "weekly-version"
- "name": "Get weekly version"
+ - "name": "Publish multi-arch manifest"
"run": |
- echo "version=$(./tools/image-tag)" >> $GITHUB_OUTPUT
- "working-directory": "release"
- - "name": "Build and push"
- "timeout-minutes": "${{ fromJSON(env.BUILD_TIMEOUT) }}"
- "uses": "docker/build-push-action@v6"
- "with":
- "build-args": "IMAGE_TAG=${{ steps.weekly-version.outputs.version }}"
- "context": "release"
- "file": "release/clients/cmd/fluentd/Dockerfile"
- "platforms": "linux/amd64"
- "push": true
- "tags": "${{ env.IMAGE_PREFIX }}/fluent-plugin-loki:${{ steps.weekly-version.outputs.version }}"
- "logcli":
+ # Unfortunately there is no better way atm than having a separate named output for each digest
+ echo 'linux/arm64 ${{ needs.loki-canary-boringcrypto-image.outputs.image_digest_linux_amd64 }}'
+ echo 'linux/amd64 ${{ needs.loki-canary-boringcrypto-image.outputs.image_digest_linux_arm64 }}'
+ echo 'linux/arm ${{ needs.loki-canary-boringcrypto-image.outputs.image_digest_linux_arm }}'
+ IMAGE=${{ needs.loki-canary-boringcrypto-image.outputs.image_name }}:${{ needs.loki-canary-boringcrypto-image.outputs.image_tag }}
+ echo "Create multi-arch manifest for $IMAGE"
+ docker buildx imagetools create -t $IMAGE \
+ ${{ needs.loki-canary-boringcrypto-image.outputs.image_name }}@${{ needs.loki-canary-boringcrypto-image.outputs.image_digest_linux_amd64 }} \
+ ${{ needs.loki-canary-boringcrypto-image.outputs.image_name }}@${{ needs.loki-canary-boringcrypto-image.outputs.image_digest_linux_arm64 }} \
+ ${{ needs.loki-canary-boringcrypto-image.outputs.image_name }}@${{ needs.loki-canary-boringcrypto-image.outputs.image_digest_linux_arm }}
+ docker buildx imagetools inspect $IMAGE
+ "loki-canary-image":
"env":
"BUILD_TIMEOUT": 60
+ "GO_VERSION": "1.23.6"
"IMAGE_PREFIX": "grafana"
"RELEASE_LIB_REF": "main"
"RELEASE_REPO": "grafana/loki"
"needs":
- "check"
- "runs-on": "ubuntu-latest"
+ "outputs":
+ "image_digest_linux_amd64": "${{ steps.digest.outputs.digest_linux_amd64 }}"
+ "image_digest_linux_arm": "${{ steps.digest.outputs.digest_linux_arm }}"
+ "image_digest_linux_arm64": "${{ steps.digest.outputs.digest_linux_arm64 }}"
+ "image_name": "${{ steps.weekly-version.outputs.image_name }}"
+ "image_tag": "${{ steps.weekly-version.outputs.image_version }}"
+ "runs-on": "${{ matrix.runs_on }}"
"steps":
- "name": "pull release library code"
"uses": "actions/checkout@v4"
@@ -124,82 +147,98 @@
"uses": "actions/setup-node@v4"
"with":
"node-version": 20
- - "name": "Set up QEMU"
- "uses": "docker/setup-qemu-action@v3"
- - "name": "set up docker buildx"
+ - "name": "Set up Docker buildx"
"uses": "docker/setup-buildx-action@v3"
- - "name": "Login to DockerHub (from vault)"
+ - "name": "Login to DockerHub (from Vault)"
"uses": "grafana/shared-workflows/actions/dockerhub-login@main"
- "id": "weekly-version"
"name": "Get weekly version"
"run": |
- echo "version=$(./tools/image-tag)" >> $GITHUB_OUTPUT
+ version=$(./tools/image-tag)
+ echo "image_version=$version" >> $GITHUB_OUTPUT
+ echo "image_name=${{ env.IMAGE_PREFIX }}/loki-canary" >> $GITHUB_OUTPUT
+ echo "image_full_name=${{ env.IMAGE_PREFIX }}/loki-canary:$version" >> $GITHUB_OUTPUT
+ "working-directory": "release"
+ - "id": "platform"
+ "name": "Parse image platform"
+ "run": |
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ echo "platform=${platform}" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
"working-directory": "release"
- - "name": "Build and push"
+ - "id": "build-push"
+ "name": "Build and push"
"timeout-minutes": "${{ fromJSON(env.BUILD_TIMEOUT) }}"
"uses": "docker/build-push-action@v6"
"with":
- "build-args": "IMAGE_TAG=${{ steps.weekly-version.outputs.version }}"
+ "build-args": |
+ IMAGE_TAG=${{ steps.weekly-version.outputs.image_version }}
+ GO_VERSION=${{ env.GO_VERSION }}
"context": "release"
- "file": "release/cmd/logcli/Dockerfile"
- "platforms": "linux/amd64,linux/arm64,linux/arm"
- "push": true
- "tags": "${{ env.IMAGE_PREFIX }}/logcli:${{ steps.weekly-version.outputs.version }}"
- "logstash":
+ "file": "release/cmd/loki-canary/Dockerfile"
+ "outputs": "push-by-digest=true,type=image,name=${{ steps.weekly-version.outputs.image_name }},push=true"
+ "platforms": "${{ matrix.arch }}"
+ "provenance": true
+ "tags": "${{ steps.weekly-version.outputs.image_name }}"
+ - "id": "digest"
+ "name": "Process image digest"
+ "run": |
+ arch=$(echo ${{ matrix.arch }} | tr "/" "_")
+ echo "digest_$arch=${{ steps.build-push.outputs.digest }}" >> $GITHUB_OUTPUT
+ "working-directory": "release"
+ "strategy":
+ "fail-fast": true
+ "matrix":
+ "include":
+ - "arch": "linux/amd64"
+ "runs_on":
+ - "github-hosted-ubuntu-x64-small"
+ - "arch": "linux/arm64"
+ "runs_on":
+ - "github-hosted-ubuntu-arm64-small"
+ - "arch": "linux/arm"
+ "runs_on":
+ - "github-hosted-ubuntu-arm64-small"
+ "loki-canary-manifest":
"env":
"BUILD_TIMEOUT": 60
- "IMAGE_PREFIX": "grafana"
- "RELEASE_LIB_REF": "main"
- "RELEASE_REPO": "grafana/loki"
"needs":
- - "check"
+ - "loki-canary-image"
"runs-on": "ubuntu-latest"
"steps":
- - "name": "pull release library code"
- "uses": "actions/checkout@v4"
- "with":
- "path": "lib"
- "ref": "${{ env.RELEASE_LIB_REF }}"
- "repository": "grafana/loki-release"
- - "name": "pull code to release"
- "uses": "actions/checkout@v4"
- "with":
- "path": "release"
- "repository": "${{ env.RELEASE_REPO }}"
- - "name": "setup node"
- "uses": "actions/setup-node@v4"
- "with":
- "node-version": 20
- - "name": "Set up QEMU"
- "uses": "docker/setup-qemu-action@v3"
- - "name": "set up docker buildx"
+ - "name": "Set up Docker buildx"
"uses": "docker/setup-buildx-action@v3"
- - "name": "Login to DockerHub (from vault)"
+ - "name": "Login to DockerHub (from Vault)"
"uses": "grafana/shared-workflows/actions/dockerhub-login@main"
- - "id": "weekly-version"
- "name": "Get weekly version"
+ - "name": "Publish multi-arch manifest"
"run": |
- echo "version=$(./tools/image-tag)" >> $GITHUB_OUTPUT
- "working-directory": "release"
- - "name": "Build and push"
- "timeout-minutes": "${{ fromJSON(env.BUILD_TIMEOUT) }}"
- "uses": "docker/build-push-action@v6"
- "with":
- "build-args": "IMAGE_TAG=${{ steps.weekly-version.outputs.version }}"
- "context": "release"
- "file": "release/clients/cmd/logstash/Dockerfile"
- "platforms": "linux/amd64"
- "push": true
- "tags": "${{ env.IMAGE_PREFIX }}/logstash-output-loki:${{ steps.weekly-version.outputs.version }}"
- "loki":
+ # Unfortunately there is no better way atm than having a separate named output for each digest
+ echo 'linux/arm64 ${{ needs.loki-canary-image.outputs.image_digest_linux_amd64 }}'
+ echo 'linux/amd64 ${{ needs.loki-canary-image.outputs.image_digest_linux_arm64 }}'
+ echo 'linux/arm ${{ needs.loki-canary-image.outputs.image_digest_linux_arm }}'
+ IMAGE=${{ needs.loki-canary-image.outputs.image_name }}:${{ needs.loki-canary-image.outputs.image_tag }}
+ echo "Create multi-arch manifest for $IMAGE"
+ docker buildx imagetools create -t $IMAGE \
+ ${{ needs.loki-canary-image.outputs.image_name }}@${{ needs.loki-canary-image.outputs.image_digest_linux_amd64 }} \
+ ${{ needs.loki-canary-image.outputs.image_name }}@${{ needs.loki-canary-image.outputs.image_digest_linux_arm64 }} \
+ ${{ needs.loki-canary-image.outputs.image_name }}@${{ needs.loki-canary-image.outputs.image_digest_linux_arm }}
+ docker buildx imagetools inspect $IMAGE
+ "loki-image":
"env":
"BUILD_TIMEOUT": 60
+ "GO_VERSION": "1.23.6"
"IMAGE_PREFIX": "grafana"
"RELEASE_LIB_REF": "main"
"RELEASE_REPO": "grafana/loki"
"needs":
- "check"
- "runs-on": "ubuntu-latest"
+ "outputs":
+ "image_digest_linux_amd64": "${{ steps.digest.outputs.digest_linux_amd64 }}"
+ "image_digest_linux_arm": "${{ steps.digest.outputs.digest_linux_arm }}"
+ "image_digest_linux_arm64": "${{ steps.digest.outputs.digest_linux_arm64 }}"
+ "image_name": "${{ steps.weekly-version.outputs.image_name }}"
+ "image_tag": "${{ steps.weekly-version.outputs.image_version }}"
+ "runs-on": "${{ matrix.runs_on }}"
"steps":
- "name": "pull release library code"
"uses": "actions/checkout@v4"
@@ -216,128 +255,98 @@
"uses": "actions/setup-node@v4"
"with":
"node-version": 20
- - "name": "Set up QEMU"
- "uses": "docker/setup-qemu-action@v3"
- - "name": "set up docker buildx"
+ - "name": "Set up Docker buildx"
"uses": "docker/setup-buildx-action@v3"
- - "name": "Login to DockerHub (from vault)"
+ - "name": "Login to DockerHub (from Vault)"
"uses": "grafana/shared-workflows/actions/dockerhub-login@main"
- "id": "weekly-version"
"name": "Get weekly version"
"run": |
- echo "version=$(./tools/image-tag)" >> $GITHUB_OUTPUT
+ version=$(./tools/image-tag)
+ echo "image_version=$version" >> $GITHUB_OUTPUT
+ echo "image_name=${{ env.IMAGE_PREFIX }}/loki" >> $GITHUB_OUTPUT
+ echo "image_full_name=${{ env.IMAGE_PREFIX }}/loki:$version" >> $GITHUB_OUTPUT
"working-directory": "release"
- - "name": "Build and push"
+ - "id": "platform"
+ "name": "Parse image platform"
+ "run": |
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ echo "platform=${platform}" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ "working-directory": "release"
+ - "id": "build-push"
+ "name": "Build and push"
"timeout-minutes": "${{ fromJSON(env.BUILD_TIMEOUT) }}"
"uses": "docker/build-push-action@v6"
"with":
- "build-args": "IMAGE_TAG=${{ steps.weekly-version.outputs.version }}"
+ "build-args": |
+ IMAGE_TAG=${{ steps.weekly-version.outputs.image_version }}
+ GO_VERSION=${{ env.GO_VERSION }}
"context": "release"
"file": "release/cmd/loki/Dockerfile"
- "platforms": "linux/amd64,linux/arm64,linux/arm"
- "push": true
- "tags": "${{ env.IMAGE_PREFIX }}/loki:${{ steps.weekly-version.outputs.version }}"
- "loki-canary":
- "env":
- "BUILD_TIMEOUT": 60
- "IMAGE_PREFIX": "grafana"
- "RELEASE_LIB_REF": "main"
- "RELEASE_REPO": "grafana/loki"
- "needs":
- - "check"
- "runs-on": "ubuntu-latest"
- "steps":
- - "name": "pull release library code"
- "uses": "actions/checkout@v4"
- "with":
- "path": "lib"
- "ref": "${{ env.RELEASE_LIB_REF }}"
- "repository": "grafana/loki-release"
- - "name": "pull code to release"
- "uses": "actions/checkout@v4"
- "with":
- "path": "release"
- "repository": "${{ env.RELEASE_REPO }}"
- - "name": "setup node"
- "uses": "actions/setup-node@v4"
- "with":
- "node-version": 20
- - "name": "Set up QEMU"
- "uses": "docker/setup-qemu-action@v3"
- - "name": "set up docker buildx"
- "uses": "docker/setup-buildx-action@v3"
- - "name": "Login to DockerHub (from vault)"
- "uses": "grafana/shared-workflows/actions/dockerhub-login@main"
- - "id": "weekly-version"
- "name": "Get weekly version"
+ "outputs": "push-by-digest=true,type=image,name=${{ steps.weekly-version.outputs.image_name }},push=true"
+ "platforms": "${{ matrix.arch }}"
+ "provenance": true
+ "tags": "${{ steps.weekly-version.outputs.image_name }}"
+ - "id": "digest"
+ "name": "Process image digest"
"run": |
- echo "version=$(./tools/image-tag)" >> $GITHUB_OUTPUT
+ arch=$(echo ${{ matrix.arch }} | tr "/" "_")
+ echo "digest_$arch=${{ steps.build-push.outputs.digest }}" >> $GITHUB_OUTPUT
"working-directory": "release"
- - "name": "Build and push"
- "timeout-minutes": "${{ fromJSON(env.BUILD_TIMEOUT) }}"
- "uses": "docker/build-push-action@v6"
- "with":
- "build-args": "IMAGE_TAG=${{ steps.weekly-version.outputs.version }}"
- "context": "release"
- "file": "release/cmd/loki-canary/Dockerfile"
- "platforms": "linux/amd64,linux/arm64,linux/arm"
- "push": true
- "tags": "${{ env.IMAGE_PREFIX }}/loki-canary:${{ steps.weekly-version.outputs.version }}"
- "loki-canary-boringcrypto":
+ "strategy":
+ "fail-fast": true
+ "matrix":
+ "include":
+ - "arch": "linux/amd64"
+ "runs_on":
+ - "github-hosted-ubuntu-x64-small"
+ - "arch": "linux/arm64"
+ "runs_on":
+ - "github-hosted-ubuntu-arm64-small"
+ - "arch": "linux/arm"
+ "runs_on":
+ - "github-hosted-ubuntu-arm64-small"
+ "loki-manifest":
"env":
"BUILD_TIMEOUT": 60
- "IMAGE_PREFIX": "grafana"
- "RELEASE_LIB_REF": "main"
- "RELEASE_REPO": "grafana/loki"
"needs":
- - "check"
+ - "loki-image"
"runs-on": "ubuntu-latest"
"steps":
- - "name": "pull release library code"
- "uses": "actions/checkout@v4"
- "with":
- "path": "lib"
- "ref": "${{ env.RELEASE_LIB_REF }}"
- "repository": "grafana/loki-release"
- - "name": "pull code to release"
- "uses": "actions/checkout@v4"
- "with":
- "path": "release"
- "repository": "${{ env.RELEASE_REPO }}"
- - "name": "setup node"
- "uses": "actions/setup-node@v4"
- "with":
- "node-version": 20
- - "name": "Set up QEMU"
- "uses": "docker/setup-qemu-action@v3"
- - "name": "set up docker buildx"
+ - "name": "Set up Docker buildx"
"uses": "docker/setup-buildx-action@v3"
- - "name": "Login to DockerHub (from vault)"
+ - "name": "Login to DockerHub (from Vault)"
"uses": "grafana/shared-workflows/actions/dockerhub-login@main"
- - "id": "weekly-version"
- "name": "Get weekly version"
+ - "name": "Publish multi-arch manifest"
"run": |
- echo "version=$(./tools/image-tag)" >> $GITHUB_OUTPUT
- "working-directory": "release"
- - "name": "Build and push"
- "timeout-minutes": "${{ fromJSON(env.BUILD_TIMEOUT) }}"
- "uses": "docker/build-push-action@v6"
- "with":
- "build-args": "IMAGE_TAG=${{ steps.weekly-version.outputs.version }}"
- "context": "release"
- "file": "release/cmd/loki-canary-boringcrypto/Dockerfile"
- "platforms": "linux/amd64,linux/arm64,linux/arm"
- "push": true
- "tags": "${{ env.IMAGE_PREFIX }}/loki-canary-boringcrypto:${{ steps.weekly-version.outputs.version }}"
- "promtail":
+ # Unfortunately there is no better way atm than having a separate named output for each digest
+ echo 'linux/arm64 ${{ needs.loki-image.outputs.image_digest_linux_amd64 }}'
+ echo 'linux/amd64 ${{ needs.loki-image.outputs.image_digest_linux_arm64 }}'
+ echo 'linux/arm ${{ needs.loki-image.outputs.image_digest_linux_arm }}'
+ IMAGE=${{ needs.loki-image.outputs.image_name }}:${{ needs.loki-image.outputs.image_tag }}
+ echo "Create multi-arch manifest for $IMAGE"
+ docker buildx imagetools create -t $IMAGE \
+ ${{ needs.loki-image.outputs.image_name }}@${{ needs.loki-image.outputs.image_digest_linux_amd64 }} \
+ ${{ needs.loki-image.outputs.image_name }}@${{ needs.loki-image.outputs.image_digest_linux_arm64 }} \
+ ${{ needs.loki-image.outputs.image_name }}@${{ needs.loki-image.outputs.image_digest_linux_arm }}
+ docker buildx imagetools inspect $IMAGE
+ "promtail-image":
"env":
"BUILD_TIMEOUT": 60
+ "GO_VERSION": "1.23.6"
"IMAGE_PREFIX": "grafana"
"RELEASE_LIB_REF": "main"
"RELEASE_REPO": "grafana/loki"
"needs":
- "check"
- "runs-on": "ubuntu-latest"
+ "outputs":
+ "image_digest_linux_amd64": "${{ steps.digest.outputs.digest_linux_amd64 }}"
+ "image_digest_linux_arm": "${{ steps.digest.outputs.digest_linux_arm }}"
+ "image_digest_linux_arm64": "${{ steps.digest.outputs.digest_linux_arm64 }}"
+ "image_name": "${{ steps.weekly-version.outputs.image_name }}"
+ "image_tag": "${{ steps.weekly-version.outputs.image_version }}"
+ "runs-on": "${{ matrix.runs_on }}"
"steps":
- "name": "pull release library code"
"uses": "actions/checkout@v4"
@@ -354,79 +363,89 @@
"uses": "actions/setup-node@v4"
"with":
"node-version": 20
- - "name": "Set up QEMU"
- "uses": "docker/setup-qemu-action@v3"
- - "name": "set up docker buildx"
+ - "name": "Set up Docker buildx"
"uses": "docker/setup-buildx-action@v3"
- - "name": "Login to DockerHub (from vault)"
+ - "name": "Login to DockerHub (from Vault)"
"uses": "grafana/shared-workflows/actions/dockerhub-login@main"
- "id": "weekly-version"
"name": "Get weekly version"
"run": |
- echo "version=$(./tools/image-tag)" >> $GITHUB_OUTPUT
+ version=$(./tools/image-tag)
+ echo "image_version=$version" >> $GITHUB_OUTPUT
+ echo "image_name=${{ env.IMAGE_PREFIX }}/promtail" >> $GITHUB_OUTPUT
+ echo "image_full_name=${{ env.IMAGE_PREFIX }}/promtail:$version" >> $GITHUB_OUTPUT
+ "working-directory": "release"
+ - "id": "platform"
+ "name": "Parse image platform"
+ "run": |
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ echo "platform=${platform}" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
"working-directory": "release"
- - "name": "Build and push"
+ - "id": "build-push"
+ "name": "Build and push"
"timeout-minutes": "${{ fromJSON(env.BUILD_TIMEOUT) }}"
"uses": "docker/build-push-action@v6"
"with":
- "build-args": "IMAGE_TAG=${{ steps.weekly-version.outputs.version }}"
+ "build-args": |
+ IMAGE_TAG=${{ steps.weekly-version.outputs.image_version }}
+ GO_VERSION=${{ env.GO_VERSION }}
"context": "release"
"file": "release/clients/cmd/promtail/Dockerfile"
- "platforms": "linux/amd64,linux/arm64,linux/arm"
- "push": true
- "tags": "${{ env.IMAGE_PREFIX }}/promtail:${{ steps.weekly-version.outputs.version }}"
- "querytee":
+ "outputs": "push-by-digest=true,type=image,name=${{ steps.weekly-version.outputs.image_name }},push=true"
+ "platforms": "${{ matrix.arch }}"
+ "provenance": true
+ "tags": "${{ steps.weekly-version.outputs.image_name }}"
+ - "id": "digest"
+ "name": "Process image digest"
+ "run": |
+ arch=$(echo ${{ matrix.arch }} | tr "/" "_")
+ echo "digest_$arch=${{ steps.build-push.outputs.digest }}" >> $GITHUB_OUTPUT
+ "working-directory": "release"
+ "strategy":
+ "fail-fast": true
+ "matrix":
+ "include":
+ - "arch": "linux/amd64"
+ "runs_on":
+ - "github-hosted-ubuntu-x64-small"
+ - "arch": "linux/arm64"
+ "runs_on":
+ - "github-hosted-ubuntu-arm64-small"
+ - "arch": "linux/arm"
+ "runs_on":
+ - "github-hosted-ubuntu-arm64-small"
+ "promtail-manifest":
"env":
"BUILD_TIMEOUT": 60
- "IMAGE_PREFIX": "grafana"
- "RELEASE_LIB_REF": "main"
- "RELEASE_REPO": "grafana/loki"
"needs":
- - "check"
+ - "promtail-image"
"runs-on": "ubuntu-latest"
"steps":
- - "name": "pull release library code"
- "uses": "actions/checkout@v4"
- "with":
- "path": "lib"
- "ref": "${{ env.RELEASE_LIB_REF }}"
- "repository": "grafana/loki-release"
- - "name": "pull code to release"
- "uses": "actions/checkout@v4"
- "with":
- "path": "release"
- "repository": "${{ env.RELEASE_REPO }}"
- - "name": "setup node"
- "uses": "actions/setup-node@v4"
- "with":
- "node-version": 20
- - "name": "Set up QEMU"
- "uses": "docker/setup-qemu-action@v3"
- - "name": "set up docker buildx"
+ - "name": "Set up Docker buildx"
"uses": "docker/setup-buildx-action@v3"
- - "name": "Login to DockerHub (from vault)"
+ - "name": "Login to DockerHub (from Vault)"
"uses": "grafana/shared-workflows/actions/dockerhub-login@main"
- - "id": "weekly-version"
- "name": "Get weekly version"
+ - "name": "Publish multi-arch manifest"
"run": |
- echo "version=$(./tools/image-tag)" >> $GITHUB_OUTPUT
- "working-directory": "release"
- - "name": "Build and push"
- "timeout-minutes": "${{ fromJSON(env.BUILD_TIMEOUT) }}"
- "uses": "docker/build-push-action@v6"
- "with":
- "build-args": "IMAGE_TAG=${{ steps.weekly-version.outputs.version }}"
- "context": "release"
- "file": "release/cmd/querytee/Dockerfile"
- "platforms": "linux/amd64"
- "push": true
- "tags": "${{ env.IMAGE_PREFIX }}/loki-query-tee:${{ steps.weekly-version.outputs.version }}"
-"name": "publish images"
+ # Unfortunately there is no better way atm than having a separate named output for each digest
+ echo 'linux/arm64 ${{ needs.promtail-image.outputs.image_digest_linux_amd64 }}'
+ echo 'linux/amd64 ${{ needs.promtail-image.outputs.image_digest_linux_arm64 }}'
+ echo 'linux/arm ${{ needs.promtail-image.outputs.image_digest_linux_arm }}'
+ IMAGE=${{ needs.promtail-image.outputs.image_name }}:${{ needs.promtail-image.outputs.image_tag }}
+ echo "Create multi-arch manifest for $IMAGE"
+ docker buildx imagetools create -t $IMAGE \
+ ${{ needs.promtail-image.outputs.image_name }}@${{ needs.promtail-image.outputs.image_digest_linux_amd64 }} \
+ ${{ needs.promtail-image.outputs.image_name }}@${{ needs.promtail-image.outputs.image_digest_linux_arm64 }} \
+ ${{ needs.promtail-image.outputs.image_name }}@${{ needs.promtail-image.outputs.image_digest_linux_arm }}
+ docker buildx imagetools inspect $IMAGE
+"name": "Publish images"
"on":
"push":
"branches":
- "k[0-9]+*"
- "main"
+ "workflow_dispatch": {}
"permissions":
"contents": "write"
"id-token": "write"
diff --git a/.github/workflows/minor-release-pr.yml b/.github/workflows/minor-release-pr.yml
index 807e52afab253..7a15d1367f51b 100644
--- a/.github/workflows/minor-release-pr.yml
+++ b/.github/workflows/minor-release-pr.yml
@@ -16,7 +16,7 @@ jobs:
check:
uses: "grafana/loki-release/.github/workflows/check.yml@main"
with:
- build_image: "grafana/loki-build-image:0.34.1"
+ build_image: "grafana/loki-build-image:0.34.5"
golang_ci_lint_version: "v1.60.3"
release_lib_ref: "main"
skip_validation: false
@@ -31,6 +31,7 @@ jobs:
- "loki"
- "loki-canary"
- "loki-canary-boringcrypto"
+ - "loki-docker-driver"
- "promtail"
- "querytee"
runs-on: "ubuntu-latest"
@@ -143,7 +144,7 @@ jobs:
--env SKIP_ARM \
--volume .:/src/loki \
--workdir /src/loki \
- --entrypoint /bin/sh "grafana/loki-build-image:0.34.1"
+ --entrypoint /bin/sh "grafana/loki-build-image:0.34.5"
git config --global --add safe.directory /src/loki
echo "${NFPM_SIGNING_KEY}" > $NFPM_SIGNING_KEY_FILE
make dist packages
@@ -159,7 +160,7 @@ jobs:
fluent-bit:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -180,18 +181,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -204,10 +203,10 @@ jobs:
context: "release"
file: "release/clients/cmd/fluent-bit/Dockerfile"
outputs: "type=docker,dest=release/images/fluent-bit-plugin-loki-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/fluent-bit-plugin-loki:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -216,12 +215,14 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
fluentd:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -242,18 +243,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -266,10 +265,10 @@ jobs:
context: "release"
file: "release/clients/cmd/fluentd/Dockerfile"
outputs: "type=docker,dest=release/images/fluent-plugin-loki-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/fluent-plugin-loki:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -278,12 +277,14 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
logcli:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -304,18 +305,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -328,10 +327,10 @@ jobs:
context: "release"
file: "release/cmd/logcli/Dockerfile"
outputs: "type=docker,dest=release/images/logcli-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/logcli:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -340,14 +339,20 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
- - "linux/arm64"
- - "linux/arm"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ - arch: "linux/arm"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
logstash:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -368,18 +373,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -392,10 +395,10 @@ jobs:
context: "release"
file: "release/clients/cmd/logstash/Dockerfile"
outputs: "type=docker,dest=release/images/logstash-output-loki-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/logstash-output-loki:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -404,12 +407,14 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
loki:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -430,18 +435,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -454,10 +457,10 @@ jobs:
context: "release"
file: "release/cmd/loki/Dockerfile"
outputs: "type=docker,dest=release/images/loki-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/loki:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -466,14 +469,20 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
- - "linux/arm64"
- - "linux/arm"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ - arch: "linux/arm"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
loki-canary:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -494,18 +503,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -518,10 +525,10 @@ jobs:
context: "release"
file: "release/cmd/loki-canary/Dockerfile"
outputs: "type=docker,dest=release/images/loki-canary-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/loki-canary:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -530,14 +537,20 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
- - "linux/arm64"
- - "linux/arm"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ - arch: "linux/arm"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
loki-canary-boringcrypto:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -558,18 +571,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -582,10 +593,10 @@ jobs:
context: "release"
file: "release/cmd/loki-canary-boringcrypto/Dockerfile"
outputs: "type=docker,dest=release/images/loki-canary-boringcrypto-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/loki-canary-boringcrypto:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -594,14 +605,20 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
- - "linux/arm64"
- - "linux/arm"
- promtail:
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ - arch: "linux/arm"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ loki-docker-driver:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -630,10 +647,89 @@ jobs:
name: "parse image platform"
run: |
mkdir -p images
+ mkdir -p plugins
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ if [[ "${platform}" == "linux/arm64" ]]; then
+ echo "plugin_arch=-arm64" >> $GITHUB_OUTPUT
+ else
+ echo "plugin_arch=" >> $GITHUB_OUTPUT
+ fi
+ working-directory: "release"
+ - if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
+ name: "Build and export"
+ timeout-minutes: "${{ fromJSON(env.BUILD_TIMEOUT) }}"
+ uses: "docker/build-push-action@v6"
+ with:
+ build-args: |
+ IMAGE_TAG=${{ needs.version.outputs.version }}
+ GOARCH=${{ steps.platform.outputs.platform_short }}
+ BUILD_IMAGE=grafana/loki-build-image:0.34.5
+ context: "release"
+ file: "release/clients/cmd/docker-driver/Dockerfile"
+ outputs: "type=local,dest=release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}"
+ platforms: "${{ matrix.arch }}"
+ push: false
+ tags: "${{ env.IMAGE_PREFIX }}/loki-docker-driver:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
+ - if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
+ name: "compress rootfs"
+ run: |
+ tar -cf release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar \
+ -C release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }} \
+ .
+ - if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
+ name: "upload artifacts"
+ uses: "google-github-actions/upload-cloud-storage@v2"
+ with:
+ destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/plugins"
+ path: "release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
+ process_gcloudignore: false
+ strategy:
+ fail-fast: true
+ matrix:
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ promtail:
+ needs:
+ - "version"
+ runs-on: "${{ matrix.runs_on }}"
+ steps:
+ - name: "pull release library code"
+ uses: "actions/checkout@v4"
+ with:
+ path: "lib"
+ ref: "${{ env.RELEASE_LIB_REF }}"
+ repository: "grafana/loki-release"
+ - name: "pull code to release"
+ uses: "actions/checkout@v4"
+ with:
+ path: "release"
+ repository: "${{ env.RELEASE_REPO }}"
+ - name: "setup node"
+ uses: "actions/setup-node@v4"
+ with:
+ node-version: 20
+ - name: "auth gcs"
+ uses: "google-github-actions/auth@v2"
+ with:
+ credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
+ - name: "Set up Docker buildx"
+ uses: "docker/setup-buildx-action@v3"
+ - id: "platform"
+ name: "Parse image platform"
+ run: |
+ mkdir -p images
+
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ echo "platform=${platform}" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -646,10 +742,10 @@ jobs:
context: "release"
file: "release/clients/cmd/promtail/Dockerfile"
outputs: "type=docker,dest=release/images/promtail-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/promtail:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -658,14 +754,20 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
- - "linux/arm64"
- - "linux/arm"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ - arch: "linux/arm"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
querytee:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -686,18 +788,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -710,10 +810,10 @@ jobs:
context: "release"
file: "release/cmd/querytee/Dockerfile"
outputs: "type=docker,dest=release/images/loki-query-tee-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/loki-query-tee:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -722,8 +822,10 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
version:
needs:
- "check"
diff --git a/.github/workflows/nix-ci.yaml b/.github/workflows/nix-ci.yaml
index ba08c719ee3dc..6402996ba1672 100644
--- a/.github/workflows/nix-ci.yaml
+++ b/.github/workflows/nix-ci.yaml
@@ -1,11 +1,16 @@
---
name: "Lint And Build Nix Flake"
on:
+ push:
+ branches:
+ - main
pull_request:
paths:
- "flake.nix"
+ - "flake.lock"
- "go.mod"
- "nix/**"
+ - .github/workflows/nix-ci.yaml
jobs:
lint:
runs-on: ubuntu-latest
@@ -22,7 +27,16 @@ jobs:
- uses: cachix/install-nix-action@v30
with:
nix_path: nixpkgs=channel:nixos-unstable
+ - uses: dorny/paths-filter@v3
+ id: nix-changes
+ with:
+ filters: |
+ nix:
+ - 'nix/**'
+ - 'flake.nix'
+ - 'flake.lock'
- run: nix run --print-build-logs .#test
+ if: steps.nix-changes.outputs.nix == 'true'
packages:
runs-on: ubuntu-latest
steps:
diff --git a/.github/workflows/operator-bundle.yaml b/.github/workflows/operator-bundle.yaml
index 39630e45b8f8d..e99fc0865612f 100644
--- a/.github/workflows/operator-bundle.yaml
+++ b/.github/workflows/operator-bundle.yaml
@@ -19,7 +19,7 @@ jobs:
go: ['1.22']
steps:
- name: Set up Go 1.x
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
id: go
diff --git a/.github/workflows/operator-images.yaml b/.github/workflows/operator-images.yaml
index 768b6acf00104..a2c58a448d9a7 100644
--- a/.github/workflows/operator-images.yaml
+++ b/.github/workflows/operator-images.yaml
@@ -48,7 +48,7 @@ jobs:
echo "IMAGE_TAGS=$IMAGE_TAGS" >> $GITHUB_OUTPUT
- name: Build and publish image on quay.io
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@v6
with:
context: ./operator
push: true
@@ -86,7 +86,7 @@ jobs:
echo "IMAGE_TAGS=$IMAGE_TAGS" >> $GITHUB_OUTPUT
- name: Build and publish image on quay.io
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@v6
with:
context: ./operator/bundle/openshift
file: ./operator/bundle/openshift/bundle.Dockerfile
@@ -125,7 +125,7 @@ jobs:
echo "IMAGE_TAGS=$IMAGE_TAGS" >> $GITHUB_OUTPUT
- name: Build and publish image on quay.io
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@v6
with:
context: ./operator
file: ./operator/calculator.Dockerfile
diff --git a/.github/workflows/operator-publish-operator-hub.yml b/.github/workflows/operator-publish-operator-hub.yml
index dd4d4c199af3e..6ba25fecda068 100644
--- a/.github/workflows/operator-publish-operator-hub.yml
+++ b/.github/workflows/operator-publish-operator-hub.yml
@@ -10,6 +10,9 @@ jobs:
with:
org: redhat-openshift-ecosystem
repo: community-operators-prod
+ secrets:
+ APP_ID: ${{ secrets.APP_ID }}
+ APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
operator-hub-community-release:
if: startsWith(github.event.release.tag_name, 'operator/')
@@ -17,3 +20,6 @@ jobs:
with:
org: k8s-operatorhub
repo: community-operators
+ secrets:
+ APP_ID: ${{ secrets.APP_ID }}
+ APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
diff --git a/.github/workflows/operator-release-please.yml b/.github/workflows/operator-release-please.yml
index 266dfd26e3083..0f410857bc58a 100644
--- a/.github/workflows/operator-release-please.yml
+++ b/.github/workflows/operator-release-please.yml
@@ -10,6 +10,8 @@ on:
permissions:
contents: write
pull-requests: write
+ # Necessary for grafana/shared-workflows/actions/dockerhub-login@main
+ id-token: write
jobs:
releasePlease:
@@ -17,6 +19,9 @@ jobs:
outputs:
release_created: ${{ steps.release.outputs.operator--release_created }}
release_name: ${{ steps.release.outputs.operator--tag_name }}
+ release_major: ${{ steps.release.outputs.operator--major }}
+ release_minor: ${{ steps.release.outputs.operator--minor }}
+ release_patch: ${{ steps.release.outputs.operator--patch }}
steps:
- id: "get_github_app_token"
name: Get GitHub App Token
@@ -53,4 +58,27 @@ jobs:
GH_TOKEN: ${{ steps.get_github_app_token.outputs.token }}
working-directory: "release"
run: |
- gh release edit "${{ needs.releasePlease.outputs.release_name }}" --draft=false --latest=false
\ No newline at end of file
+ gh release edit "${{ needs.releasePlease.outputs.release_name }}" --draft=false --latest=false
+ publishImages:
+ env:
+ BUILD_TIMEOUT: 60
+ IMAGE_PREFIX: "grafana"
+ needs:
+ - "publishRelease"
+ runs-on: ubuntu-latest
+ steps:
+ - name: "Set up QEMU"
+ uses: "docker/setup-qemu-action@v3"
+ - name: "Set up docker buildx"
+ uses: "docker/setup-buildx-action@v3"
+ - name: "Login to DockerHub (from vault)"
+ uses: "grafana/shared-workflows/actions/dockerhub-login@main"
+ - name: "Build and push"
+ timeout-minutes: "${{ env.BUILD_TIMEOUT }}"
+ uses: "docker/build-push-action@v6"
+ with:
+ context: "operator"
+ file: "Dockerfile"
+ platforms: "linux/amd64,linux/arm64,linux/arm"
+ push: true
+ tags: "${{ env.IMAGE_PREFIX }}/loki-operator:${{ steps.releasePlease.outputs.release_major }}.${{ steps.releasePlease.outputs.release_minor }}.${{ steps.releasePlease.outputs.release_patch }}"
diff --git a/.github/workflows/operator-reusable-hub-release.yml b/.github/workflows/operator-reusable-hub-release.yml
index ecf2794134172..1f64d65ed6b80 100644
--- a/.github/workflows/operator-reusable-hub-release.yml
+++ b/.github/workflows/operator-reusable-hub-release.yml
@@ -9,6 +9,13 @@ on:
repo:
type: string
required: true
+ secrets:
+ APP_ID:
+ type: string
+ required: true
+ APP_PRIVATE_KEY:
+ type: string
+ required: true
jobs:
create-operator-pull-request:
diff --git a/.github/workflows/operator-scorecard.yaml b/.github/workflows/operator-scorecard.yaml
index 1a067a0ea1408..4fd8fe5852d39 100644
--- a/.github/workflows/operator-scorecard.yaml
+++ b/.github/workflows/operator-scorecard.yaml
@@ -19,7 +19,7 @@ jobs:
go: ['1.22']
steps:
- name: Set up Go 1.x
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
id: go
diff --git a/.github/workflows/operator.yaml b/.github/workflows/operator.yaml
index 639746aeb5ac6..38b3b61196de3 100644
--- a/.github/workflows/operator.yaml
+++ b/.github/workflows/operator.yaml
@@ -21,7 +21,7 @@ jobs:
- name: Install make
run: sudo apt-get install make
- name: Set up Go 1.x
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
id: go
@@ -43,13 +43,13 @@ jobs:
- name: Install make
run: sudo apt-get install make
- name: Set up Go 1.x
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
id: go
- uses: actions/checkout@v4
- name: Lint
- uses: golangci/golangci-lint-action@v3
+ uses: golangci/golangci-lint-action@v6
with:
version: v1.61.0
args: --timeout=5m
@@ -69,7 +69,7 @@ jobs:
- name: Install make
run: sudo apt-get install make
- name: Set up Go 1.x
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
id: go
@@ -90,7 +90,7 @@ jobs:
- name: Install make
run: sudo apt-get install make
- name: Set up Go 1.x
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
id: go
@@ -111,7 +111,7 @@ jobs:
- name: Install make
run: sudo apt-get install make
- name: Set up Go 1.x
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
id: go
diff --git a/.github/workflows/patch-release-pr.yml b/.github/workflows/patch-release-pr.yml
index 840f1d1d3f49e..a3026c86cc3b0 100644
--- a/.github/workflows/patch-release-pr.yml
+++ b/.github/workflows/patch-release-pr.yml
@@ -16,7 +16,7 @@ jobs:
check:
uses: "grafana/loki-release/.github/workflows/check.yml@main"
with:
- build_image: "grafana/loki-build-image:0.34.1"
+ build_image: "grafana/loki-build-image:0.34.5"
golang_ci_lint_version: "v1.60.3"
release_lib_ref: "main"
skip_validation: false
@@ -31,6 +31,7 @@ jobs:
- "loki"
- "loki-canary"
- "loki-canary-boringcrypto"
+ - "loki-docker-driver"
- "promtail"
- "querytee"
runs-on: "ubuntu-latest"
@@ -143,7 +144,7 @@ jobs:
--env SKIP_ARM \
--volume .:/src/loki \
--workdir /src/loki \
- --entrypoint /bin/sh "grafana/loki-build-image:0.34.1"
+ --entrypoint /bin/sh "grafana/loki-build-image:0.34.5"
git config --global --add safe.directory /src/loki
echo "${NFPM_SIGNING_KEY}" > $NFPM_SIGNING_KEY_FILE
make dist packages
@@ -159,7 +160,7 @@ jobs:
fluent-bit:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -180,18 +181,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -204,10 +203,10 @@ jobs:
context: "release"
file: "release/clients/cmd/fluent-bit/Dockerfile"
outputs: "type=docker,dest=release/images/fluent-bit-plugin-loki-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/fluent-bit-plugin-loki:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -216,12 +215,14 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
fluentd:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -242,18 +243,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -266,10 +265,10 @@ jobs:
context: "release"
file: "release/clients/cmd/fluentd/Dockerfile"
outputs: "type=docker,dest=release/images/fluent-plugin-loki-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/fluent-plugin-loki:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -278,12 +277,14 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
logcli:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -304,18 +305,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -328,10 +327,10 @@ jobs:
context: "release"
file: "release/cmd/logcli/Dockerfile"
outputs: "type=docker,dest=release/images/logcli-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/logcli:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -340,14 +339,20 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
- - "linux/arm64"
- - "linux/arm"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ - arch: "linux/arm"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
logstash:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -368,18 +373,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -392,10 +395,10 @@ jobs:
context: "release"
file: "release/clients/cmd/logstash/Dockerfile"
outputs: "type=docker,dest=release/images/logstash-output-loki-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/logstash-output-loki:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -404,12 +407,14 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
loki:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -430,18 +435,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -454,10 +457,10 @@ jobs:
context: "release"
file: "release/cmd/loki/Dockerfile"
outputs: "type=docker,dest=release/images/loki-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/loki:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -466,14 +469,20 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
- - "linux/arm64"
- - "linux/arm"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ - arch: "linux/arm"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
loki-canary:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -494,18 +503,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -518,10 +525,10 @@ jobs:
context: "release"
file: "release/cmd/loki-canary/Dockerfile"
outputs: "type=docker,dest=release/images/loki-canary-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/loki-canary:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -530,14 +537,20 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
- - "linux/arm64"
- - "linux/arm"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ - arch: "linux/arm"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
loki-canary-boringcrypto:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -558,18 +571,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -582,10 +593,10 @@ jobs:
context: "release"
file: "release/cmd/loki-canary-boringcrypto/Dockerfile"
outputs: "type=docker,dest=release/images/loki-canary-boringcrypto-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/loki-canary-boringcrypto:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -594,14 +605,20 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
- - "linux/arm64"
- - "linux/arm"
- promtail:
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ - arch: "linux/arm"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ loki-docker-driver:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -630,10 +647,89 @@ jobs:
name: "parse image platform"
run: |
mkdir -p images
+ mkdir -p plugins
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ if [[ "${platform}" == "linux/arm64" ]]; then
+ echo "plugin_arch=-arm64" >> $GITHUB_OUTPUT
+ else
+ echo "plugin_arch=" >> $GITHUB_OUTPUT
+ fi
+ working-directory: "release"
+ - if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
+ name: "Build and export"
+ timeout-minutes: "${{ fromJSON(env.BUILD_TIMEOUT) }}"
+ uses: "docker/build-push-action@v6"
+ with:
+ build-args: |
+ IMAGE_TAG=${{ needs.version.outputs.version }}
+ GOARCH=${{ steps.platform.outputs.platform_short }}
+ BUILD_IMAGE=grafana/loki-build-image:0.34.5
+ context: "release"
+ file: "release/clients/cmd/docker-driver/Dockerfile"
+ outputs: "type=local,dest=release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}"
+ platforms: "${{ matrix.arch }}"
+ push: false
+ tags: "${{ env.IMAGE_PREFIX }}/loki-docker-driver:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
+ - if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
+ name: "compress rootfs"
+ run: |
+ tar -cf release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar \
+ -C release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }} \
+ .
+ - if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
+ name: "upload artifacts"
+ uses: "google-github-actions/upload-cloud-storage@v2"
+ with:
+ destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/plugins"
+ path: "release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
+ process_gcloudignore: false
+ strategy:
+ fail-fast: true
+ matrix:
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ promtail:
+ needs:
+ - "version"
+ runs-on: "${{ matrix.runs_on }}"
+ steps:
+ - name: "pull release library code"
+ uses: "actions/checkout@v4"
+ with:
+ path: "lib"
+ ref: "${{ env.RELEASE_LIB_REF }}"
+ repository: "grafana/loki-release"
+ - name: "pull code to release"
+ uses: "actions/checkout@v4"
+ with:
+ path: "release"
+ repository: "${{ env.RELEASE_REPO }}"
+ - name: "setup node"
+ uses: "actions/setup-node@v4"
+ with:
+ node-version: 20
+ - name: "auth gcs"
+ uses: "google-github-actions/auth@v2"
+ with:
+ credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
+ - name: "Set up Docker buildx"
+ uses: "docker/setup-buildx-action@v3"
+ - id: "platform"
+ name: "Parse image platform"
+ run: |
+ mkdir -p images
+
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ echo "platform=${platform}" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -646,10 +742,10 @@ jobs:
context: "release"
file: "release/clients/cmd/promtail/Dockerfile"
outputs: "type=docker,dest=release/images/promtail-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/promtail:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -658,14 +754,20 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
- - "linux/arm64"
- - "linux/arm"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
+ - arch: "linux/arm64"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
+ - arch: "linux/arm"
+ runs_on:
+ - "github-hosted-ubuntu-arm64-small"
querytee:
needs:
- "version"
- runs-on: "ubuntu-latest"
+ runs-on: "${{ matrix.runs_on }}"
steps:
- name: "pull release library code"
uses: "actions/checkout@v4"
@@ -686,18 +788,16 @@ jobs:
uses: "google-github-actions/auth@v2"
with:
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
- - name: "Set up QEMU"
- uses: "docker/setup-qemu-action@v3"
- - name: "set up docker buildx"
+ - name: "Set up Docker buildx"
uses: "docker/setup-buildx-action@v3"
- id: "platform"
- name: "parse image platform"
+ name: "Parse image platform"
run: |
mkdir -p images
- platform="$(echo "${{ matrix.platform}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
+ platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")"
echo "platform=${platform}" >> $GITHUB_OUTPUT
- echo "platform_short=$(echo ${{ matrix.platform }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
+ echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT
working-directory: "release"
- env:
IMAGE_TAG: "${{ needs.version.outputs.version }}"
@@ -710,10 +810,10 @@ jobs:
context: "release"
file: "release/cmd/querytee/Dockerfile"
outputs: "type=docker,dest=release/images/loki-query-tee-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar"
- platforms: "${{ matrix.platform }}"
+ platforms: "${{ matrix.arch }}"
tags: "${{ env.IMAGE_PREFIX }}/loki-query-tee:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}"
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}"
- name: "upload artifacts"
+ name: "Upload artifacts"
uses: "google-github-actions/upload-cloud-storage@v2"
with:
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images"
@@ -722,8 +822,10 @@ jobs:
strategy:
fail-fast: true
matrix:
- platform:
- - "linux/amd64"
+ include:
+ - arch: "linux/amd64"
+ runs_on:
+ - "github-hosted-ubuntu-x64-small"
version:
needs:
- "check"
diff --git a/.github/workflows/promtail-windows-test.yml b/.github/workflows/promtail-windows-test.yml
index 90ccf72ad1bed..0aa131d769abb 100644
--- a/.github/workflows/promtail-windows-test.yml
+++ b/.github/workflows/promtail-windows-test.yml
@@ -14,7 +14,7 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Setup Go ${{ matrix.go-version }}
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
# You can test your matrix by printing the current Go version
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 1628a0b57dfb5..67eefdbe76009 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -110,6 +110,49 @@ jobs:
parent: false
path: "release/dist"
process_gcloudignore: false
+ publishDockerPlugins:
+ needs:
+ - "createRelease"
+ runs-on: "ubuntu-latest"
+ steps:
+ - name: "pull release library code"
+ uses: "actions/checkout@v4"
+ with:
+ path: "lib"
+ ref: "${{ env.RELEASE_LIB_REF }}"
+ repository: "grafana/loki-release"
+ - name: "pull code to release"
+ uses: "actions/checkout@v4"
+ with:
+ path: "release"
+ repository: "${{ env.RELEASE_REPO }}"
+ - name: "auth gcs"
+ uses: "google-github-actions/auth@v2"
+ with:
+ credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}"
+ - name: "Set up Cloud SDK"
+ uses: "google-github-actions/setup-gcloud@v2"
+ with:
+ version: ">= 452.0.0"
+ - name: "Set up QEMU"
+ uses: "docker/setup-qemu-action@v3"
+ - name: "set up docker buildx"
+ uses: "docker/setup-buildx-action@v3"
+ - name: "Login to DockerHub (from vault)"
+ uses: "grafana/shared-workflows/actions/dockerhub-login@main"
+ - name: "download and prepare plugins"
+ run: |
+ echo "downloading images to $(pwd)/plugins"
+ gsutil cp -r gs://${BUILD_ARTIFACTS_BUCKET}/${{ needs.createRelease.outputs.sha }}/plugins .
+ mkdir -p "release/clients/cmd/docker-driver"
+ - name: "publish docker driver"
+ uses: "./lib/actions/push-images"
+ with:
+ buildDir: "release/clients/cmd/docker-driver"
+ imageDir: "plugins"
+ imagePrefix: "${{ env.IMAGE_PREFIX }}"
+ isLatest: "${{ needs.createRelease.outputs.isLatest }}"
+ isPlugin: true
publishImages:
needs:
- "createRelease"
@@ -144,10 +187,12 @@ jobs:
with:
imageDir: "images"
imagePrefix: "${{ env.IMAGE_PREFIX }}"
+ isLatest: "${{ needs.createRelease.outputs.isLatest }}"
publishRelease:
needs:
- "createRelease"
- "publishImages"
+ - "publishDockerPlugins"
runs-on: "ubuntu-latest"
steps:
- name: "pull code to release"
diff --git a/.github/workflows/scripts/helm-weekly-release.sh b/.github/workflows/scripts/helm-weekly-release.sh
index 6b3d6043b604d..44d0455bbbc05 100755
--- a/.github/workflows/scripts/helm-weekly-release.sh
+++ b/.github/workflows/scripts/helm-weekly-release.sh
@@ -88,7 +88,11 @@ validate_version_update "${new_chart_version}" "${current_chart_version}" "${lat
if ${k_release}; then
update_yaml_node "${values_file}" .loki.image.tag "${latest_loki_tag}"
+ update_yaml_node "${values_file}" .lokiCanary.image.tag "${latest_loki_tag}"
+
update_yaml_node "${values_file}" .enterprise.image.tag "${latest_gel_tag}"
+ update_yaml_node "${values_file}" .enterprise.provisioner.image.tag "${latest_gel_tag}"
+
update_yaml_node "${chart_file}" .appVersion "$(extract_k_version "${latest_loki_tag}")"
fi
diff --git a/.github/workflows/syft-sbom-ci.yml b/.github/workflows/syft-sbom-ci.yml
index 1c1686b515e4b..c35e7da475fd4 100644
--- a/.github/workflows/syft-sbom-ci.yml
+++ b/.github/workflows/syft-sbom-ci.yml
@@ -14,7 +14,7 @@ jobs:
uses: actions/checkout@v4
- name: Anchore SBOM Action
- uses: anchore/sbom-action@v0.17.6
+ uses: anchore/sbom-action@v0.18.0
with:
artifact-name: ${{ github.event.repository.name }}-spdx.json
diff --git a/.gitignore b/.gitignore
index dfb63bf94da69..47a961cca44be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,6 +28,7 @@ cmd/querytee/querytee
dlv
rootfs/
dist
+!pkg/dataobj/explorer/dist
*coverage.txt
*test_results.txt
.DS_Store
@@ -35,6 +36,12 @@ dist
.idea
pkg/loki/wal
tools/lambda-promtail/main
+tools/dev/kafka/data/
+pkg/dataobj/explorer/ui/node_modules/*
+pkg/dataobj/explorer/ui/.vite/*
+
+# Submodule added by `act` CLI
+_shared-workflows-dockerhub-login
# Workspaces
*.work
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 96501106b6f6e..3c5971ad53a16 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,4 +1,4 @@
{
- ".": "3.1.1",
- "operator": "0.6.2"
+ ".": "3.3.0",
+ "operator": "0.7.1"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9b4503d14a7e1..8046a5abfd699 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,483 @@
# Changelog
-## Unreleased
+## [3.3.0](https://github.com/grafana/loki/compare/v3.2.1...v3.3.0) (2024-11-19)
+
+### ⚠ BREAKING CHANGES
+
+* **blooms:** Introduce a new block schema (V3) ([#14038](https://github.com/grafana/loki/issues/14038))
+* **blooms:** Index structured metadata into blooms ([#14061](https://github.com/grafana/loki/issues/14061))
+* **operator:** Migrate project layout to kubebuilder go/v4 ([#14447](https://github.com/grafana/loki/issues/14447))
+* **operator:** Rename loki api go module ([#14568](https://github.com/grafana/loki/issues/14568))
+* **operator:** Provide default OTLP attribute configuration ([#14410](https://github.com/grafana/loki/issues/14410))
+
+### Features
+
+* ability to log stream selectors before service name detection ([#14154](https://github.com/grafana/loki/issues/14154)) ([d7ff426](https://github.com/grafana/loki/commit/d7ff42664681794b9ef5026ac3758cdd9569ac1a))
+* add app_name as a service label ([#13660](https://github.com/grafana/loki/issues/13660)) ([f2a16f4](https://github.com/grafana/loki/commit/f2a16f43b27503ba9ee76bac2b44d825ce030e0f))
+* add backoff mechanism to the retention process ([#14182](https://github.com/grafana/loki/issues/14182)) ([3136880](https://github.com/grafana/loki/commit/31368806a9c5e0ff6c43045e008861f26ed61af3))
+* add functions to common.libsonnet for warpstream ([#14123](https://github.com/grafana/loki/issues/14123)) ([2bde071](https://github.com/grafana/loki/commit/2bde071872fd08c138e03535b520ff7ae32dd336))
+* add gauge loki_ingest_storage_reader_phase ([#14679](https://github.com/grafana/loki/issues/14679)) ([f5b0fb6](https://github.com/grafana/loki/commit/f5b0fb6b998dc0a49cd36c0968862340c7e517bf))
+* add gauge to track the partition_id ([#14713](https://github.com/grafana/loki/issues/14713)) ([a142b3d](https://github.com/grafana/loki/commit/a142b3d540a79a94f6ed1283cfb0ac8aed49e600))
+* add missing cluster label to mixins ([#12870](https://github.com/grafana/loki/issues/12870)) ([547ca70](https://github.com/grafana/loki/commit/547ca708b9b56e2761bd19ebfcfc9f8571d9af2a))
+* add query user and query source to "executing query" log lines ([#14320](https://github.com/grafana/loki/issues/14320)) ([4d69929](https://github.com/grafana/loki/commit/4d6992982d99a542f1e99af18b691830b71469e0))
+* add retries for s3 ObjectExists calls ([#14062](https://github.com/grafana/loki/issues/14062)) ([73cbbb0](https://github.com/grafana/loki/commit/73cbbb0f2257b9eb5a3bf5d2cf1f4d4d2490d47d))
+* add structured metadata to the promtail push API ([#14153](https://github.com/grafana/loki/issues/14153)) ([66cffcb](https://github.com/grafana/loki/commit/66cffcb427bda28af6fbcfcf85a34771db3787bc))
+* Add support for partition ingester in dashboards ([#14498](https://github.com/grafana/loki/issues/14498)) ([70deebf](https://github.com/grafana/loki/commit/70deebf26e88c6f2b10c78b3b8ce785c8a16e03b))
+* Allows to configure client_max_body_size ([#12924](https://github.com/grafana/loki/issues/12924)) ([809a024](https://github.com/grafana/loki/commit/809a024581c1f600744b9db0b2b2142234317082))
+* Apply patterns line length limit to json message key ([#14296](https://github.com/grafana/loki/issues/14296)) ([41fafd8](https://github.com/grafana/loki/commit/41fafd87933224d5d43592e91e339322fc90a466))
+* **blooms:** Add bloom planner and bloom builder to `backend` target ([#13997](https://github.com/grafana/loki/issues/13997)) ([bf60455](https://github.com/grafana/loki/commit/bf60455c8e52b87774df9ca90232b4c72d72e46b))
+* **blooms:** disk-backed queue for the bloom-planner (backport k227) ([#14927](https://github.com/grafana/loki/issues/14927)) ([1f6828b](https://github.com/grafana/loki/commit/1f6828b25c5c5d6ad5eda3be60a435db8ca55fc3))
+* **blooms:** Index structured metadata into blooms ([#14061](https://github.com/grafana/loki/issues/14061)) ([a2fbaa8](https://github.com/grafana/loki/commit/a2fbaa8e09b6eebff2f7c20746e84f1365bd7433))
+* **blooms:** Only write key and key=value to blooms ([#14686](https://github.com/grafana/loki/issues/14686)) ([3af0004](https://github.com/grafana/loki/commit/3af0004cb4d4dafbcbe099e4409edf6e6ff056a5))
+* Configurable list of json fields to mine patterns ([#14528](https://github.com/grafana/loki/issues/14528)) ([7050897](https://github.com/grafana/loki/commit/70508975fd40d3e4dbb518d3f8c7bf96e37307b6))
+* detected field values ([#14350](https://github.com/grafana/loki/issues/14350)) ([7983f94](https://github.com/grafana/loki/commit/7983f94b15b422b94517641bd9cec5c9da6903e1))
+* **distributors:** Use a pool of worker to push to ingesters. ([#14245](https://github.com/grafana/loki/issues/14245)) ([f80d68a](https://github.com/grafana/loki/commit/f80d68a1edbd85a605be882eb0104b169343cf00))
+* Do not add empty blooms to offsets ([#14577](https://github.com/grafana/loki/issues/14577)) ([51c42e8](https://github.com/grafana/loki/commit/51c42e864563f2fa9ffc160cb13f6d6126ea5c6d))
+* Extract task computing into a strategy interface ([#13690](https://github.com/grafana/loki/issues/13690)) ([ab5e6ea](https://github.com/grafana/loki/commit/ab5e6eaaeea24f93f434dcece6ff5d9dc83e6d32))
+* **fluentd-plugin-datadog-loki:** support custom http headers ([#14299](https://github.com/grafana/loki/issues/14299)) ([e59035e](https://github.com/grafana/loki/commit/e59035e17315f453d4b2e2334330bc062d40f0fd))
+* **helm:** :sparkles: add additional service annotations for components in distributed mode ([#14131](https://github.com/grafana/loki/issues/14131)) ([5978f13](https://github.com/grafana/loki/commit/5978f1344c84525e6b8bda45869b867b7e878956))
+* **helm:** add configurable extraEnvFrom to admin-api and enterprisegw ([#14533](https://github.com/grafana/loki/issues/14533)) ([5d78a3a](https://github.com/grafana/loki/commit/5d78a3a3fd1f630d6b012a9240fa081e63bcb7ef))
+* **helm:** Add kubeVersionOverride for Helm chart ([#14434](https://github.com/grafana/loki/issues/14434)) ([0935d77](https://github.com/grafana/loki/commit/0935d77df08e6ad40a9f498f53e94e335b020ded))
+* **helm:** Add persistence option to memcached on Helm chart ([#13619](https://github.com/grafana/loki/issues/13619)) ([ef1df0e](https://github.com/grafana/loki/commit/ef1df0e66fc8e2fe9327a66aea31279ca5c7307a))
+* **helm:** add tolerations to pattern-ingester statefulset ([#13605](https://github.com/grafana/loki/issues/13605)) ([09530c0](https://github.com/grafana/loki/commit/09530c0f4a1503713a76c68153b4da5287f9b79f))
+* **helm:** Allow setting node attributes to `tokengen` and `provisioner` ([#14311](https://github.com/grafana/loki/issues/14311)) ([c708ae6](https://github.com/grafana/loki/commit/c708ae691ca2d9a26b1c2a4591ed32dbfdd94619))
+* **helm:** Replace bloom compactor with bloom planner and builder ([#14003](https://github.com/grafana/loki/issues/14003)) ([08e61ca](https://github.com/grafana/loki/commit/08e61ca4db086b573ef636a156bfc624132515be))
+* **helm:** update chart with loki version 3.2.0 ([#14281](https://github.com/grafana/loki/issues/14281)) ([11b92ee](https://github.com/grafana/loki/commit/11b92eeb95612a2bb002ea22f048c55ae20557a2))
+* **Helm:** Update Loki Helm chart for restricted environments ([#14440](https://github.com/grafana/loki/issues/14440)) ([adc7538](https://github.com/grafana/loki/commit/adc75389a39e3aaad69303b82b0d68ec3d94485c))
+* implement IsRetryableErr for S3ObjectClient ([#14174](https://github.com/grafana/loki/issues/14174)) ([fc90a63](https://github.com/grafana/loki/commit/fc90a63636c689993bd9b568f9c54198bfb1f3ae))
+* Implement owned streams calculation using Partition Ring ([#14282](https://github.com/grafana/loki/issues/14282)) ([3c36ba9](https://github.com/grafana/loki/commit/3c36ba949d65e803cc6702b8664f87aca07ed052))
+* Implement WAL segment ingestion via Kafka with partition ring ([#14043](https://github.com/grafana/loki/issues/14043)) ([d178f4c](https://github.com/grafana/loki/commit/d178f4c7e2eadbd17ac82f8305782533c7308ba2))
+* Improve pattern ingester tracing ([#14707](https://github.com/grafana/loki/issues/14707)) ([80aec25](https://github.com/grafana/loki/commit/80aec2548203957dbb834ba69e6d734d9054416d))
+* **ingester:** implement partition shuffle sharding for ingester ([#14304](https://github.com/grafana/loki/issues/14304)) ([1a4436c](https://github.com/grafana/loki/commit/1a4436c41721e3e6aca82c26abaec8fe6f775d9f))
+* Introduce new `ObjectExistsWithSize` API to ([#14268](https://github.com/grafana/loki/issues/14268)) ([ac422b3](https://github.com/grafana/loki/commit/ac422b3bc3e822b4525401496a8b73e91d566128))
+* Introduce shardable probabilistic topk for instant queries. (backport k227) ([#14765](https://github.com/grafana/loki/issues/14765)) ([02eb024](https://github.com/grafana/loki/commit/02eb02458e99d4dcb2f734f6a8e83bbd76a8ea4f))
+* **jsonnet:** Allow to name prefix zoned ingesters ([#14260](https://github.com/grafana/loki/issues/14260)) ([fac3177](https://github.com/grafana/loki/commit/fac3177814b8d2914eb3af618d571104eba18934))
+* **kafka:** Add Ingestion from Kafka in Ingesters ([#14192](https://github.com/grafana/loki/issues/14192)) ([b6e9945](https://github.com/grafana/loki/commit/b6e9945f83991a01395df537a8e014585a57913b))
+* **kafka:** Add support for SASL auth to Kafka ([#14487](https://github.com/grafana/loki/issues/14487)) ([e2a209c](https://github.com/grafana/loki/commit/e2a209c076c9c9fd53732a0a7804acba3bff378e))
+* **kafka:** Enable querier to optionally query partition ingesters ([#14418](https://github.com/grafana/loki/issues/14418)) ([633bb5e](https://github.com/grafana/loki/commit/633bb5eb7e0717c3e1eafaab32f0ba2dacb4f5cd))
+* **kafka:** enqueue commit offset only once per batch process ([#14278](https://github.com/grafana/loki/issues/14278)) ([beca6f3](https://github.com/grafana/loki/commit/beca6f33662e8a43ea59943a4327a1c328960058))
+* **kafka:** Implement limiter using partition ring for Kafka ([#14359](https://github.com/grafana/loki/issues/14359)) ([5cbb239](https://github.com/grafana/loki/commit/5cbb23994beb3494e238fccecbb3f7c5ed5c1d0b))
+* **kafka:** Remove rate limits for kafka ingestion ([#14460](https://github.com/grafana/loki/issues/14460)) ([83a8893](https://github.com/grafana/loki/commit/83a8893a3fbad3a87d7aea3a61e7dae2f6a34168))
+* **kafka:** Replay kafka from last commit before allowing ingesters to become ready ([#14330](https://github.com/grafana/loki/issues/14330)) ([39b57ec](https://github.com/grafana/loki/commit/39b57ec4eac3cbdc718aacae32ab8ff4e989709b))
+* **kafka:** Start ingester flush loop before trying to catch up from Kafka ([#14505](https://github.com/grafana/loki/issues/14505)) ([524ed81](https://github.com/grafana/loki/commit/524ed81395a0b2c6be86fc0fcd013393e555fd62))
+* **logcli:** add gzip compression option ([#14598](https://github.com/grafana/loki/issues/14598)) ([4d3f9f5](https://github.com/grafana/loki/commit/4d3f9f5a7b483b563348c322958486825d314526))
+* **loki:** include structured_metadata size while asserting rate limit ([#14571](https://github.com/grafana/loki/issues/14571)) ([a962edb](https://github.com/grafana/loki/commit/a962edba332f4fdfee29cf11e70019b1b498c258))
+* **max-allowed-line-length:** add config to set `max-allowed-line-length` in pattern ingester ([#14070](https://github.com/grafana/loki/issues/14070)) ([0780456](https://github.com/grafana/loki/commit/0780456662b67edde69004cf4ee3873c23d5094b))
+* mixin / add loki compaction not successfull alert ([#14239](https://github.com/grafana/loki/issues/14239)) ([da04f50](https://github.com/grafana/loki/commit/da04f5007edd85f35d1af5ba8c2c5a4eb96d2149))
+* mixin, allow overriding of some labels by parameterizing mixin recording/alert rules ([#11495](https://github.com/grafana/loki/issues/11495)) ([f1425b6](https://github.com/grafana/loki/commit/f1425b6c24e9d90c99477f67289c3aa34f69573d))
+* mixins / allow bloom dashboards disabling ([#14177](https://github.com/grafana/loki/issues/14177)) ([ce2e6d5](https://github.com/grafana/loki/commit/ce2e6d520b48fe9c5c7593ae2400a6983905782e))
+* **mixins:** Allow hiding useless rows in loki-operational ([#13646](https://github.com/grafana/loki/issues/13646)) ([3aa4f22](https://github.com/grafana/loki/commit/3aa4f2227e4178f05e6b13cffc044989c7839372))
+* **mixins:** merge resources dashboards for ssd into one ([#13471](https://github.com/grafana/loki/issues/13471)) ([45b8719](https://github.com/grafana/loki/commit/45b8719aa768db35d4e7559fd87e22056248b912))
+* move detected field logic to query frontend ([#14212](https://github.com/grafana/loki/issues/14212)) ([36ace66](https://github.com/grafana/loki/commit/36ace66b73e9f9ad2a2d367fbc20803c0d9779c2))
+* move metric aggregation to a per-tenant config ([#14709](https://github.com/grafana/loki/issues/14709)) ([c1fde26](https://github.com/grafana/loki/commit/c1fde26730b4fc54e4bbc724d1b29f653541f720))
+* New bloom planning using chunk size TSDB stats ([#14547](https://github.com/grafana/loki/issues/14547)) ([673ede1](https://github.com/grafana/loki/commit/673ede16a5f675684f9e6a53903335af5075a507))
+* **operator:** Add support for Loki OTLP limits config ([#13446](https://github.com/grafana/loki/issues/13446)) ([d02f435](https://github.com/grafana/loki/commit/d02f435d3bf121b19e15de4f139c95a6d010b25c))
+* **operator:** Declare feature FIPS support for OpenShift only ([#14308](https://github.com/grafana/loki/issues/14308)) ([720c303](https://github.com/grafana/loki/commit/720c3037923c174e71a02d99d4bee6271428fbdb))
+* **operator:** introduce 1x.pico size ([#14407](https://github.com/grafana/loki/issues/14407)) ([57de81d](https://github.com/grafana/loki/commit/57de81d8c27e221832790443cebaf141353c3e3f))
+* **operator:** Provide default OTLP attribute configuration ([#14410](https://github.com/grafana/loki/issues/14410)) ([1b52387](https://github.com/grafana/loki/commit/1b5238721994c00764b6a7e7d63269c5b56d2480))
+* **operator:** Update Loki operand to v3.1.1 ([#14042](https://github.com/grafana/loki/issues/14042)) ([7ae1588](https://github.com/grafana/loki/commit/7ae1588200396b73a16fadd2610670a5ce5fd747))
+* **operator:** Update Loki operand to v3.2.1 ([#14526](https://github.com/grafana/loki/issues/14526)) ([5e970e5](https://github.com/grafana/loki/commit/5e970e50b166e73f5563e21c23db3ea99b24642e))
+* **operator:** User-guide for OTLP configuration ([#14620](https://github.com/grafana/loki/issues/14620)) ([27b4071](https://github.com/grafana/loki/commit/27b40713540bd60918780cdd4cb645e6761427cb))
+* Optionally require writes to kafka on Push requests ([#14186](https://github.com/grafana/loki/issues/14186)) ([7c78232](https://github.com/grafana/loki/commit/7c78232ad312d58ae00101a11e9d7c67f53f1361))
+* revert "feat: add functions to common.libsonnet for warpstream" ([#14129](https://github.com/grafana/loki/issues/14129)) ([18c27f9](https://github.com/grafana/loki/commit/18c27f9d4ec0c5fbd439972f9abb8bca0bdd6f9e))
+* **ruler:** enables ruler store that uses clients from thanos-io/objstore pkg ([#11713](https://github.com/grafana/loki/issues/11713)) ([8bca2e7](https://github.com/grafana/loki/commit/8bca2e76089e0b9894b7a4c18a950f4baaa5a412))
+* **storage:** AWS backend using thanos.io/objstore ([#11221](https://github.com/grafana/loki/issues/11221)) ([b872246](https://github.com/grafana/loki/commit/b87224647dc88901c61cb4bd571dfda9405a7826))
+* **storage:** Azure backend using thanos.io/objstore ([#11315](https://github.com/grafana/loki/issues/11315)) ([5824e3d](https://github.com/grafana/loki/commit/5824e3d35cd1273ccd1a63d7381098617a7697dd))
+* **storage:** GCS backend using thanos.io/objstore ([#11132](https://github.com/grafana/loki/issues/11132)) ([c059ace](https://github.com/grafana/loki/commit/c059ace53edba79864a567035b120db80addf23c))
+* support ruler sidecar in singleBinary mode ([#13572](https://github.com/grafana/loki/issues/13572)) ([684baf7](https://github.com/grafana/loki/commit/684baf7dbacef4b85a08db8de9934458745124d8))
+* track discarded data by usageTracker ([#14081](https://github.com/grafana/loki/issues/14081)) ([c65721e](https://github.com/grafana/loki/commit/c65721e7ade0ef89fd282d9f764fb2d05f6b9c42))
+
+### Bug Fixes
+
+* **`detected_fields`:** return parsed labels when parsers are passed ([#14047](https://github.com/grafana/loki/issues/14047)) ([aa1ac99](https://github.com/grafana/loki/commit/aa1ac99f4d369c87fd0db4fcf853ebce534e3500))
+* Add additional validation for timeout while retrieving headers ([#14217](https://github.com/grafana/loki/issues/14217)) ([8322e51](https://github.com/grafana/loki/commit/8322e518e68de286b2bc58cf15ea9fe947eeec86))
+* Add s3 principal to iam policy attached to sqs in lambda-promtail terraform code ([#14619](https://github.com/grafana/loki/issues/14619)) ([db0889e](https://github.com/grafana/loki/commit/db0889e2748b69a5c60d044dfab44bc652f1464d))
+* Add tenant limits as dependency to pattern ingester ([#14665](https://github.com/grafana/loki/issues/14665)) ([31eea90](https://github.com/grafana/loki/commit/31eea9042ada6650227eb281a36410ab521817a8))
+* **aggregated-metrics:** correctly create logfmt string ([#14124](https://github.com/grafana/loki/issues/14124)) ([63e84b4](https://github.com/grafana/loki/commit/63e84b476a9a7b97a121847659172fadbb8a1eee))
+* allow any level for aggregated metrics ([#14255](https://github.com/grafana/loki/issues/14255)) ([c001a1d](https://github.com/grafana/loki/commit/c001a1d93af5438fef521460dcba650b44629a93))
+* allow rename of structuremetadata labels ([#13955](https://github.com/grafana/loki/issues/13955)) ([2d4792a](https://github.com/grafana/loki/commit/2d4792a54fb52caa5cd904a17349b04410fae4c0))
+* always write detected_level when enabled, even if unknown ([#14464](https://github.com/grafana/loki/issues/14464)) ([41c6b6c](https://github.com/grafana/loki/commit/41c6b6c2c2f5f56ca76cf75ed05689564b9e9dcd))
+* **blooms:** Check length of tasks before accessing first element in slice ([#14634](https://github.com/grafana/loki/issues/14634)) ([601f549](https://github.com/grafana/loki/commit/601f549656efa5ac769a685169d5bc84eff15a35))
+* **blooms:** Copy chunks from ForSeries (backport k227) ([#14864](https://github.com/grafana/loki/issues/14864)) ([d10f79c](https://github.com/grafana/loki/commit/d10f79c700c100d7333e682287aabbaa3c029768))
+* **blooms:** Do not restart builders when planner disconnects (backport k227) ([#14922](https://github.com/grafana/loki/issues/14922)) ([213e8ee](https://github.com/grafana/loki/commit/213e8eeba6e7fb138069e2858d62f1e3c4556a0e))
+* **blooms:** Exclude label filters where label name is part of the series labels. ([#14661](https://github.com/grafana/loki/issues/14661)) ([d1668f6](https://github.com/grafana/loki/commit/d1668f6a110f7119ebb1cc0e582be369b2af95b8))
+* **blooms:** Fix panic in initialisation of the bloom planner and builder ([#14110](https://github.com/grafana/loki/issues/14110)) ([8307c42](https://github.com/grafana/loki/commit/8307c42c541e769c9d0133df3856af049a815b73))
+* **blooms:** Fix strategy logger and add task test (backport k227) ([#14921](https://github.com/grafana/loki/issues/14921)) ([dc36a1e](https://github.com/grafana/loki/commit/dc36a1e1288a03b68d269ba261f41ac7c2942962))
+* **blooms:** Fix tenants slice on loadTenantTables (backport k227) ([#14901](https://github.com/grafana/loki/issues/14901)) ([540dd5a](https://github.com/grafana/loki/commit/540dd5a5ccb53bc2ee4236871632c7e1daa7f7e5))
+* **blooms:** Skip multi-tenant TSDBs during bloom planning (backport k227) ([#14888](https://github.com/grafana/loki/issues/14888)) ([631cff3](https://github.com/grafana/loki/commit/631cff345cdab110202d757572fbbf8088c0be87))
+* **build:** Use Debian Bullseye base image for build image ([#14368](https://github.com/grafana/loki/issues/14368)) ([3beb8ff](https://github.com/grafana/loki/commit/3beb8ff9cfe7f765b5d5db87892981a223d72f50))
+* **canary:** Reconnect immediately upon tail max duration ([#14287](https://github.com/grafana/loki/issues/14287)) ([9267ee3](https://github.com/grafana/loki/commit/9267ee3561ccbb90589600d7b045f7e05b1b2ee0))
+* **ci:** fixed `Publish Rendered Helm Chart Diff` workflow ([#14365](https://github.com/grafana/loki/issues/14365)) ([6de6420](https://github.com/grafana/loki/commit/6de64209547ec970cb27564be87fe2085307e183))
+* **ci:** updated helm diff rendering workflow ([#14424](https://github.com/grafana/loki/issues/14424)) ([916e511](https://github.com/grafana/loki/commit/916e5115d9099e82834f0d8e123273c75c9cddec))
+* **config:** Copy Alibaba and IBM object storage configuration from common ([#14297](https://github.com/grafana/loki/issues/14297)) ([59ff1ec](https://github.com/grafana/loki/commit/59ff1ece1dacc461d03f71e41c0728396727eee6))
+* **config:** migrate renovate config ([#14646](https://github.com/grafana/loki/issues/14646)) ([a67d8ef](https://github.com/grafana/loki/commit/a67d8ef219aab80071e8256a6cbb18a47c7078e6))
+* correct _extracted logic in detected fields ([#14064](https://github.com/grafana/loki/issues/14064)) ([1b3ba53](https://github.com/grafana/loki/commit/1b3ba530b8fab9aac999387a135a76a62de3e000))
+* correct OTLP documentation typo ([#14602](https://github.com/grafana/loki/issues/14602)) ([063c590](https://github.com/grafana/loki/commit/063c590faa4aa30540572c5d6fdc1da8a6a25ee4))
+* **deps:** update aws-sdk-go-v2 monorepo ([#13986](https://github.com/grafana/loki/issues/13986)) ([6f49123](https://github.com/grafana/loki/commit/6f491233cae226d54d190521d2b935249d88ad05))
+* **deps:** update aws-sdk-go-v2 monorepo ([#14742](https://github.com/grafana/loki/issues/14742)) ([53a1ab7](https://github.com/grafana/loki/commit/53a1ab76257d900b80334d68439d7ff4bfcfd39b))
+* **deps:** update github.com/grafana/dskit digest to 687ec48 ([#14395](https://github.com/grafana/loki/issues/14395)) ([c2f38e1](https://github.com/grafana/loki/commit/c2f38e18c6b8dd134b8f3da164afc9c8625f2f2b))
+* **deps:** update github.com/grafana/dskit digest to 7c41a40 ([#14277](https://github.com/grafana/loki/issues/14277)) ([f39cdbd](https://github.com/grafana/loki/commit/f39cdbd541d85a961db655e70da713be04d9a294))
+* **deps:** update github.com/grafana/dskit digest to 931a021 ([#14032](https://github.com/grafana/loki/issues/14032)) ([7c18642](https://github.com/grafana/loki/commit/7c186425210f892d34a2ccf8ad23b475af8bf9b9))
+* **deps:** update github.com/grafana/dskit digest to b69ac1b ([#14355](https://github.com/grafana/loki/issues/14355)) ([9d7a6ea](https://github.com/grafana/loki/commit/9d7a6ea68053b576553e426d339961d50ee07080))
+* **deps:** update github.com/grafana/dskit digest to f52de24 ([#14319](https://github.com/grafana/loki/issues/14319)) ([a4f3edf](https://github.com/grafana/loki/commit/a4f3edfb52ad4a44a17aaeb753a780b08d6b552c))
+* **deps:** update github.com/twmb/franz-go/pkg/kfake digest to cea7aa5 ([#14590](https://github.com/grafana/loki/issues/14590)) ([688c42a](https://github.com/grafana/loki/commit/688c42a971589be96921ce362c7fc6792368c3da))
+* **deps:** update k8s.io/utils digest to 702e33f ([#14033](https://github.com/grafana/loki/issues/14033)) ([b7eecc7](https://github.com/grafana/loki/commit/b7eecc7a693e96f4d0fe0dcd7583ecdc4dd7283f))
+* **deps:** update module cloud.google.com/go/bigtable to v1.33.0 ([#14580](https://github.com/grafana/loki/issues/14580)) ([a0920ed](https://github.com/grafana/loki/commit/a0920ed9929080926f0f439182cb2428e938c208))
+* **deps:** update module cloud.google.com/go/pubsub to v1.45.0 ([#14361](https://github.com/grafana/loki/issues/14361)) ([4351238](https://github.com/grafana/loki/commit/4351238305a680852b6b29a7cdaef69e46042ee4))
+* **deps:** update module cloud.google.com/go/pubsub to v1.45.1 ([#14650](https://github.com/grafana/loki/issues/14650)) ([f173708](https://github.com/grafana/loki/commit/f17370867b70f65528d98fbfe751d079b5909be0))
+* **deps:** update module cloud.google.com/go/storage to v1.46.0 ([#14744](https://github.com/grafana/loki/issues/14744)) ([8e45116](https://github.com/grafana/loki/commit/8e451165add426e480b2e691c7c69252d98a2d22))
+* **deps:** update module github.com/alicebob/miniredis/v2 to v2.33.0 ([#14721](https://github.com/grafana/loki/issues/14721)) ([7bfda25](https://github.com/grafana/loki/commit/7bfda259721c2b3858066ab71d9df09ad35895a6))
+* **deps:** update module github.com/aws/aws-sdk-go to v1.55.5 ([#14715](https://github.com/grafana/loki/issues/14715)) ([03f0f5a](https://github.com/grafana/loki/commit/03f0f5ab1691550eea59431c9c580530c13bf259))
+* **deps:** update module github.com/axiomhq/hyperloglog to v0.2.0 ([#14722](https://github.com/grafana/loki/issues/14722)) ([0167b22](https://github.com/grafana/loki/commit/0167b22ac6d4886a1c3157437a3c5b19e327723a))
+* **deps:** update module github.com/baidubce/bce-sdk-go to v0.9.189 ([#14044](https://github.com/grafana/loki/issues/14044)) ([7fb34b4](https://github.com/grafana/loki/commit/7fb34b4884269e7dad7cfa27969f470d9466279d))
+* **deps:** update module github.com/baidubce/bce-sdk-go to v0.9.192 ([#14337](https://github.com/grafana/loki/issues/14337)) ([6f7cae2](https://github.com/grafana/loki/commit/6f7cae2a7aae471c8161bd1e596a31fa89c48ae1))
+* **deps:** update module github.com/baidubce/bce-sdk-go to v0.9.196 ([#14651](https://github.com/grafana/loki/issues/14651)) ([478085a](https://github.com/grafana/loki/commit/478085ae02a0df3b2455211326519dd4aef26499))
+* **deps:** update module github.com/baidubce/bce-sdk-go to v0.9.197 ([#14682](https://github.com/grafana/loki/issues/14682)) ([b898294](https://github.com/grafana/loki/commit/b89829421ee3a4589efe34a4b1332fe659c9d8e7))
+* **deps:** update module github.com/coder/quartz to v0.1.2 ([#14652](https://github.com/grafana/loki/issues/14652)) ([7459e07](https://github.com/grafana/loki/commit/7459e07adb6aac48b305d50582eac915ea26528e))
+* **deps:** update module github.com/felixge/fgprof to v0.9.5 ([#14338](https://github.com/grafana/loki/issues/14338)) ([a2ad3aa](https://github.com/grafana/loki/commit/a2ad3aa66940faae4fef7f92aab5a383f576190e))
+* **deps:** update module github.com/fsouza/fake-gcs-server to v1.50.2 ([#14313](https://github.com/grafana/loki/issues/14313)) ([275c97c](https://github.com/grafana/loki/commit/275c97cec7f70e68c56192c565d53a6c2a18ff78))
+* **deps:** update module github.com/hashicorp/raft to v1.7.1 ([#14005](https://github.com/grafana/loki/issues/14005)) ([e9cec1d](https://github.com/grafana/loki/commit/e9cec1d159b02977b6104e0006902e0d6b805527))
+* **deps:** update module github.com/ibm/go-sdk-core/v5 to v5.17.5 ([#14045](https://github.com/grafana/loki/issues/14045)) ([677d217](https://github.com/grafana/loki/commit/677d217533b7d2338e25a8b9b9e8a78045489e7c))
+* **deps:** update module github.com/ibm/go-sdk-core/v5 to v5.18.1 ([#14716](https://github.com/grafana/loki/issues/14716)) ([8395acd](https://github.com/grafana/loki/commit/8395acd0cbd3db9c6f330bd94a22b194fad35a93))
+* **deps:** update module github.com/ibm/ibm-cos-sdk-go to v1.11.1 ([#14342](https://github.com/grafana/loki/issues/14342)) ([aa82a7c](https://github.com/grafana/loki/commit/aa82a7c804edd6df99d3fddc581d02c3b7fa6774))
+* **deps:** update module github.com/klauspost/compress to v1.17.10 ([#14352](https://github.com/grafana/loki/issues/14352)) ([e23c5ed](https://github.com/grafana/loki/commit/e23c5ed9fa97010ef4c985afea25af3922ca215b))
+* **deps:** update module github.com/minio/minio-go/v7 to v7.0.76 ([#14006](https://github.com/grafana/loki/issues/14006)) ([51f9376](https://github.com/grafana/loki/commit/51f937684795982f0d234ab251017ce2c86c9e20))
+* **deps:** update module github.com/minio/minio-go/v7 to v7.0.77 ([#14353](https://github.com/grafana/loki/issues/14353)) ([d0e3ef7](https://github.com/grafana/loki/commit/d0e3ef709a222821fd764f6af72308c302faefb3))
+* **deps:** update module github.com/minio/minio-go/v7 to v7.0.80 ([#14654](https://github.com/grafana/loki/issues/14654)) ([eec2513](https://github.com/grafana/loki/commit/eec25130468eb648c4667361cae7630449af7ef5))
+* **deps:** update module github.com/ncw/swift/v2 to v2.0.3 ([#14356](https://github.com/grafana/loki/issues/14356)) ([c843288](https://github.com/grafana/loki/commit/c8432887d3d4459ad4bc40deba3a3a3726a2f5eb))
+* **deps:** update module github.com/prometheus/client_golang to v1.20.5 ([#14655](https://github.com/grafana/loki/issues/14655)) ([e12f843](https://github.com/grafana/loki/commit/e12f8436b4080db54c6d31c6af38416c6fdd7eb4))
+* **deps:** update module github.com/schollz/progressbar/v3 to v3.17.0 ([#14720](https://github.com/grafana/loki/issues/14720)) ([4419d0f](https://github.com/grafana/loki/commit/4419d0f33e9f4f6f9305d89dd6f2ca47e3a18d8c))
+* **deps:** update module github.com/shirou/gopsutil/v4 to v4.24.10 ([#14719](https://github.com/grafana/loki/issues/14719)) ([3280376](https://github.com/grafana/loki/commit/32803762781c53ec3fe1bdb64841eb24aeed48f5))
+* **deps:** update module github.com/shirou/gopsutil/v4 to v4.24.9 ([#14357](https://github.com/grafana/loki/issues/14357)) ([c8e6a9d](https://github.com/grafana/loki/commit/c8e6a9d38f36ccf1f32e634765bb2363628f3710))
+* **deps:** update module github.com/shopify/sarama to v1.43.3 ([#14059](https://github.com/grafana/loki/issues/14059)) ([1cf4813](https://github.com/grafana/loki/commit/1cf48131d42db7302d6bcf980c355b018fcedb06))
+* **deps:** update module github.com/spf13/afero to v1.11.0 ([#14060](https://github.com/grafana/loki/issues/14060)) ([bbbd82b](https://github.com/grafana/loki/commit/bbbd82bc73322d662ba81efeda3884efcdc09708))
+* **deps:** update module go.etcd.io/bbolt to v1.3.11 ([#14358](https://github.com/grafana/loki/issues/14358)) ([b7bccfc](https://github.com/grafana/loki/commit/b7bccfcec3275b1d6d76c7450415ac8744e4d7b0))
+* **deps:** update module golang.org/x/net to v0.29.0 ([#14341](https://github.com/grafana/loki/issues/14341)) ([1b6b9da](https://github.com/grafana/loki/commit/1b6b9da4e126738037e24d09309b62eac7d54a10))
+* **detected_fields:** always return empty array as `null` ([#14112](https://github.com/grafana/loki/issues/14112)) ([93009d4](https://github.com/grafana/loki/commit/93009d4e8ce520a3925bf5c0baff940db6c9caba))
+* **distributor:** validate partition ring is kafka is enabled ([#14303](https://github.com/grafana/loki/issues/14303)) ([8438d41](https://github.com/grafana/loki/commit/8438d415931f0a3763d551eb36c3d9f476f70713))
+* do not retain span logger created with index set initialized at query time ([#14027](https://github.com/grafana/loki/issues/14027)) ([4e41744](https://github.com/grafana/loki/commit/4e4174400fba410b9f32e0e43c1d866d283a9e62))
+* downgrade grpc to fix regression ([#14065](https://github.com/grafana/loki/issues/14065)) ([8c38d46](https://github.com/grafana/loki/commit/8c38d462f5a057497ab222d463223400f2e7b4ab))
+* enable service detection for otlp endoint ([#14036](https://github.com/grafana/loki/issues/14036)) ([4f962ef](https://github.com/grafana/loki/commit/4f962ef7af250fc347dbed15583787d0238f6e9f))
+* Expand matching for additional variations ([#14221](https://github.com/grafana/loki/issues/14221)) ([71d7291](https://github.com/grafana/loki/commit/71d7291c9c00c3887d9a509991eb4d3e15ae8699))
+* fix bug in query result marshaling for invalid utf8 characters ([#14585](https://github.com/grafana/loki/issues/14585)) ([f411a07](https://github.com/grafana/loki/commit/f411a0795af67630a0a70a88ce64fa071de50a56))
+* **helm:** add missing `loki.storage.azure.chunkDelimiter` parameter to Helm chart ([#14011](https://github.com/grafana/loki/issues/14011)) ([08c70cc](https://github.com/grafana/loki/commit/08c70cca2e7b3a7444b0ec9822a6d5fd58ae70d5))
+* **helm:** Check for `rbac.namespaced` condition before creating roles ([#14201](https://github.com/grafana/loki/issues/14201)) ([3f47f09](https://github.com/grafana/loki/commit/3f47f09a6956719480677f6af02f58394d7f26bb))
+* **helm:** Fix persistence configuration for Memcached ([#14049](https://github.com/grafana/loki/issues/14049)) ([ee6e1cf](https://github.com/grafana/loki/commit/ee6e1cf78864ad3ed915056f695e1f556cc4a22e))
+* **helm:** Fix wrong port name referenced for ingress NetworkPolicy ([#12907](https://github.com/grafana/loki/issues/12907)) ([963a25b](https://github.com/grafana/loki/commit/963a25bf417bbd4171c4d9a2b501330fd663410f))
+* **helm:** Various fixes and enhancements for bloom components ([#14128](https://github.com/grafana/loki/issues/14128)) ([dc0cbd4](https://github.com/grafana/loki/commit/dc0cbd42dcb8e53152573f0baf03ad93aa0d3cd8))
+* Improve docs for min and max table offsets (backport k227) ([#14929](https://github.com/grafana/loki/issues/14929)) ([3161fdc](https://github.com/grafana/loki/commit/3161fdcc6dc1e80a86933a59e6af102c10336c39))
+* **kafka:** Fixes partition selection in distributors ([#14242](https://github.com/grafana/loki/issues/14242)) ([3f47233](https://github.com/grafana/loki/commit/3f472330790204e4d09b7a4e087be3ff0dc04eff))
+* **kafka:** Fixes writer initialization for arm32 ([#14115](https://github.com/grafana/loki/issues/14115)) ([4da035b](https://github.com/grafana/loki/commit/4da035b6b78f8bb3b9af28a82865ab543dd8e230))
+* **kafka:** Set namespace for Loki kafka metrics ([#14426](https://github.com/grafana/loki/issues/14426)) ([8aa8a2b](https://github.com/grafana/loki/commit/8aa8a2bb0e766da4d64313d17337fa54ab84f8a4))
+* **label_format:** renamed label should use ParsedLabel category ([#14515](https://github.com/grafana/loki/issues/14515)) ([82fb2f0](https://github.com/grafana/loki/commit/82fb2f0ae2403686b55fdb2fd5be248f706eddab))
+* level detection for warning level ([#14444](https://github.com/grafana/loki/issues/14444)) ([242a852](https://github.com/grafana/loki/commit/242a852d7d471351ea294fc09e2b5dc62eec0d03))
+* lint errors ([#14574](https://github.com/grafana/loki/issues/14574)) ([99ef900](https://github.com/grafana/loki/commit/99ef9009e5e2e74f76c865fbb3feaf1559f4b47c))
+* **log-to-span:** timestamp.Time should be called with milliseconds ([#14196](https://github.com/grafana/loki/issues/14196)) ([f8d9143](https://github.com/grafana/loki/commit/f8d9143eead92d8727053e065c2d3403f689e4b5))
+* logcli: Check for errors before checking for `exists` when fetching data (backport k227) ([#14906](https://github.com/grafana/loki/issues/14906)) ([31b2a63](https://github.com/grafana/loki/commit/31b2a63ee23098fbd0151ef93020bd1cac093afe))
+* **logcli:** create new tail response for every line ([#14525](https://github.com/grafana/loki/issues/14525)) ([bcfd0d1](https://github.com/grafana/loki/commit/bcfd0d1ad1c72c6c3861c8263989f2ce683eee08))
+* **logql:** Fix panic in json parsing when using empty array index ([#14393](https://github.com/grafana/loki/issues/14393)) ([833bf0d](https://github.com/grafana/loki/commit/833bf0def6a07e2f58996f54b4b983858750e3e3))
+* **logql:** updated JSONExpressionParser not to unescape extracted values if it is JSON object. ([#14499](https://github.com/grafana/loki/issues/14499)) ([08b1a90](https://github.com/grafana/loki/commit/08b1a9080b03bc041471f1ef72c4e3d7c6aea4f4))
+* missing dep PartitionRing for Ingester ([#14292](https://github.com/grafana/loki/issues/14292)) ([6354ded](https://github.com/grafana/loki/commit/6354deda90a9430856447e27123b3a33fd1b77a0))
+* **mixin:** Remove pod label from disk usage aggregation ([#14180](https://github.com/grafana/loki/issues/14180)) ([5d45c96](https://github.com/grafana/loki/commit/5d45c96ce12f7f16c21e61db1a78e94a09c16007))
+* mixins / loki-resources-overview panel layout ([#14178](https://github.com/grafana/loki/issues/14178)) ([8f54ec6](https://github.com/grafana/loki/commit/8f54ec65881bcad90078464d663af9110ef72603))
+* **mixins:** add backend path section in loki-operational for single scalable deployment ([#13023](https://github.com/grafana/loki/issues/13023)) ([16881ab](https://github.com/grafana/loki/commit/16881ab0d3b9e9e6bfc37f22ff69f5f1019a0df1))
+* **mixins:** disk space utilization panels with latest KSM versions ([#13486](https://github.com/grafana/loki/issues/13486)) ([0ea7431](https://github.com/grafana/loki/commit/0ea7431139ae0a18ef4e90bed836a7a6b92ab890))
+* **mixins:** retention dashboards fix metric name ([#14617](https://github.com/grafana/loki/issues/14617)) ([c762b9b](https://github.com/grafana/loki/commit/c762b9b5d3877e7cbfc41d8ab9a1a4287ebe97b2))
+* More correctly report starting phase during kafka-reader startup ([#14632](https://github.com/grafana/loki/issues/14632)) ([ea798e0](https://github.com/grafana/loki/commit/ea798e0f2a3364b4a76f153faf324b4a9ababc4d))
+* move partition_id into label to make PromQL easier ([#14714](https://github.com/grafana/loki/issues/14714)) ([e6cf423](https://github.com/grafana/loki/commit/e6cf42396f7554e46b6c331dd1938922806bcfc5))
+* nix build, downgrade toolchain to go1.23.1 ([#14442](https://github.com/grafana/loki/issues/14442)) ([26dfd62](https://github.com/grafana/loki/commit/26dfd628f0effe2367420f591da36727ebe78806))
+* **operator:** add 1x.pico OpenShift UI dropdown menu ([#14660](https://github.com/grafana/loki/issues/14660)) ([4687f37](https://github.com/grafana/loki/commit/4687f377db0a7ae07ffdea354582c882c10b72c4))
+* **operator:** Add missing groupBy label for all rules on OpenShift ([#14279](https://github.com/grafana/loki/issues/14279)) ([ce7b2e8](https://github.com/grafana/loki/commit/ce7b2e89d9470e4e6a61a94f2b51ff8b938b5a5e))
+* **operator:** correctly ignore again BlotDB dashboards ([#14587](https://github.com/grafana/loki/issues/14587)) ([4879d10](https://github.com/grafana/loki/commit/4879d106bbeea29e331ddb7c9a49274600190032))
+* **operator:** Disable automatic discovery of service name ([#14506](https://github.com/grafana/loki/issues/14506)) ([3834c74](https://github.com/grafana/loki/commit/3834c74966b307411732cd3cbaf66305008b10eb))
+* **operator:** Disable log level discovery for OpenShift tenancy modes ([#14613](https://github.com/grafana/loki/issues/14613)) ([5034d34](https://github.com/grafana/loki/commit/5034d34ad23451954ea2459c341456da8d93d020))
+* **operator:** Fix building the size-calculator image ([#14573](https://github.com/grafana/loki/issues/14573)) ([a79b8fe](https://github.com/grafana/loki/commit/a79b8fe7802964cbb96bde75a7502a8b1e8a23ab))
+* **operator:** Fix make build target for size-calculator ([#14551](https://github.com/grafana/loki/issues/14551)) ([e727187](https://github.com/grafana/loki/commit/e727187ec3be2f10c80e984d00c40dad0308b036))
+* **operator:** Move OTLP attribute for statefulset name to stream labels ([#14630](https://github.com/grafana/loki/issues/14630)) ([5df3594](https://github.com/grafana/loki/commit/5df3594f791d77031c53d7b0f5b01191de8a23f2))
+* **operator:** Use empty initiliazed pod status map when no pods ([#14314](https://github.com/grafana/loki/issues/14314)) ([6f533ed](https://github.com/grafana/loki/commit/6f533ed4386ee2db61680a9021934bfe9a9ba749))
+* **pattern:** Fixes latency metric namespace for tee to pattern ([#14241](https://github.com/grafana/loki/issues/14241)) ([ae955ed](https://github.com/grafana/loki/commit/ae955ed30d841675dbb9e30327b84728050e724a))
+* promtail config unmarshalling ([#14408](https://github.com/grafana/loki/issues/14408)) ([a05431f](https://github.com/grafana/loki/commit/a05431f879a8c29fac6356b6c46be62133c3e93c))
+* promtail parser for azureeventhubs message without time field ([#14218](https://github.com/grafana/loki/issues/14218)) ([2e62abb](https://github.com/grafana/loki/commit/2e62abbf47c47041027baf240722b3d76e7bd9a3))
+* **promtail:** validate scrape_config job name, do not allow duplicate job names ([#13719](https://github.com/grafana/loki/issues/13719)) ([f2d3499](https://github.com/grafana/loki/commit/f2d349924c2aa0453e49fc607603a189108666ec))
+* Propagate query stats from quantile & topk queries ([#13831](https://github.com/grafana/loki/issues/13831)) ([78b275b](https://github.com/grafana/loki/commit/78b275bf1092d834065315207666d6fd1c505f06))
+* remove usage of unsafe string in label adapter unmarshal ([#14216](https://github.com/grafana/loki/issues/14216)) ([758364c](https://github.com/grafana/loki/commit/758364c7775fba22a84498089a476c21f737d32f))
+* Rename mispelled filename ([#14237](https://github.com/grafana/loki/issues/14237)) ([cf1d4a3](https://github.com/grafana/loki/commit/cf1d4a31af5c376e82756eaaab267369f862265d))
+* report correct status code for metric and log queries in metrics.go ([#12102](https://github.com/grafana/loki/issues/12102)) ([900751c](https://github.com/grafana/loki/commit/900751c3bb008c50441c47eef3927a27201b1a11))
+* Report PSRL error message correctly ([#14187](https://github.com/grafana/loki/issues/14187)) ([a475153](https://github.com/grafana/loki/commit/a47515300a5cfac667eca1ca8e8d1a71e590b7d2))
+* Revert "fix(deps): update module github.com/shirou/gopsutil/v4 to v4.24.9 ([#14357](https://github.com/grafana/loki/issues/14357))" ([#14437](https://github.com/grafana/loki/issues/14437)) ([d53955b](https://github.com/grafana/loki/commit/d53955bbff5abae63a166099cef1f26b450a31f1))
+* **s3:** disable client retries when congestion control is enabled ([#14588](https://github.com/grafana/loki/issues/14588)) ([cff9f43](https://github.com/grafana/loki/commit/cff9f43dd6fb5e90c875c14c138ea39b58202dff))
+* **sharding:** apply offset to both `from` and `through` in shard request ([#14256](https://github.com/grafana/loki/issues/14256)) ([17c472d](https://github.com/grafana/loki/commit/17c472d9abea6b1cae21de5fe2af8b365bdaf137))
+* skipping label if it contains special symbol ([#14068](https://github.com/grafana/loki/issues/14068)) ([55e374e](https://github.com/grafana/loki/commit/55e374e85e7275da8f40d1149defd88f31856f25))
+* **storage/chunk/client/aws:** have GetObject check for canceled context ([#14420](https://github.com/grafana/loki/issues/14420)) ([5f325aa](https://github.com/grafana/loki/commit/5f325aac56e41848979e9e33a4a443e31ea525d0))
+* Transform `ObjectExistsWithSize` into `GetAttributes` ([#14329](https://github.com/grafana/loki/issues/14329)) ([2f56f50](https://github.com/grafana/loki/commit/2f56f50cc6591ca482358933c719d005446d0c01))
+* Update AWS storage timeout error for Go 1.23 behavior ([#14226](https://github.com/grafana/loki/issues/14226)) ([a4642b5](https://github.com/grafana/loki/commit/a4642b55e9b374ccd974b662e7b17a2389c3dcbd))
+* Update renovate ignore for operator API with new module path ([#14581](https://github.com/grafana/loki/issues/14581)) ([c9b2907](https://github.com/grafana/loki/commit/c9b2907f3c97cf0a14837c0b27cad7a06d84f447))
+* Wait for OwnedStreams service in Ingester startup ([#14208](https://github.com/grafana/loki/issues/14208)) ([a4aee4f](https://github.com/grafana/loki/commit/a4aee4f4ff494b525f68c9c6c1ae3417a8e61ebe))
+
+### Performance Improvements
+
+* **blooms:** Remove compression of `.tar` archived bloom blocks ([#14159](https://github.com/grafana/loki/issues/14159)) ([cdf084f](https://github.com/grafana/loki/commit/cdf084fdaeaf632e7c078022c6ad4322bfef2989))
+* **logql:** Micro-optimizations for IP filter ([#14072](https://github.com/grafana/loki/issues/14072)) ([c5083c7](https://github.com/grafana/loki/commit/c5083c7f1ff2f86c74b96c9a87cead78ee6fb3cd))
+
+### Miscellaneous Chores
+
+* **blooms:** Introduce a new block schema (V3) ([#14038](https://github.com/grafana/loki/issues/14038)) ([5395daf](https://github.com/grafana/loki/commit/5395daf898c2d0bbc4756ab6260c54feda960911))
+
+### Code Refactoring
+
+* **operator:** Migrate project layout to kubebuilder go/v4 ([#14447](https://github.com/grafana/loki/issues/14447)) ([dbb3b6e](https://github.com/grafana/loki/commit/dbb3b6edc96f3545a946319c0324518800d286cf))
+* **operator:** Rename loki api go module ([#14568](https://github.com/grafana/loki/issues/14568)) ([976d8ab](https://github.com/grafana/loki/commit/976d8ab81c1a79f35d7cec96f6a9c35a9947fa48))
+
+
+
+## [3.2.1](https://github.com/grafana/loki/compare/v3.2.0...v3.2.1) (2024-10-17)
+
+
+### Bug Fixes
+
+* **config:** Copy Alibaba and IBM object storage configuration from common ([#14315](https://github.com/grafana/loki/issues/14315)) ([32a9bc0](https://github.com/grafana/loki/commit/32a9bc0ca852bdc692c2ccebbae448856e191953))
+* **logql:** updated JSONExpressionParser not to unescape extracted values if it is JSON object. (backport release-3.2.x) ([#14502](https://github.com/grafana/loki/issues/14502)) ([e9bbaf3](https://github.com/grafana/loki/commit/e9bbaf3f20ec8f303e977b8e6752152b11cd75b9))
+* Revert build image to Debian Bullseye to fix libc version issue in Promtail ([#14386](https://github.com/grafana/loki/issues/14386)) ([1e913df](https://github.com/grafana/loki/commit/1e913dfc36e0c0aba726c850fd2af975b2a2bbdc))
+* **storage/chunk/client/aws:** have GetObject check for canceled context (backport release-3.2.x) ([#14422](https://github.com/grafana/loki/issues/14422)) ([1b7dd95](https://github.com/grafana/loki/commit/1b7dd95a6c041577c9710c53ae7ad3c93bad771e))
+
+## [3.1.2](https://github.com/grafana/loki/compare/v3.1.1...v3.1.2) (2024-10-17)
+
+
+### Bug Fixes
+
+* **config:** Copy Alibaba and IBM object storage configuration from common ([#14316](https://github.com/grafana/loki/issues/14316)) ([7184d45](https://github.com/grafana/loki/commit/7184d45d8e080874feea8bfd223dedf5f20d3836))
+* **logql:** updated JSONExpressionParser not to unescape extracted values if it is JSON object. (backport release-3.1.x) ([#14503](https://github.com/grafana/loki/issues/14503)) ([759f9c8](https://github.com/grafana/loki/commit/759f9c8525227bb1272771a40429d12e015874d9))
+* **loki/production/docker-compose:** upgrade loki and grafana production image tags to 3.1.1 ([#14025](https://github.com/grafana/loki/issues/14025)) ([36fe29e](https://github.com/grafana/loki/commit/36fe29eb334d8300265ca437c0acb423a01c5041))
+* Revert build image to Debian Bullseye to fix libc version issue in Promtail ([#14387](https://github.com/grafana/loki/issues/14387)) ([05b6a65](https://github.com/grafana/loki/commit/05b6a65f8bf00b880f17465553b1adaf0cf56d60))
+* **storage/chunk/client/aws:** have GetObject check for canceled context (backport release-3.1.x) ([#14421](https://github.com/grafana/loki/issues/14421)) ([f3d69ff](https://github.com/grafana/loki/commit/f3d69ffa960c91c0239436a32bb0aa578c0f022a))
+
+## [3.2.0](https://github.com/grafana/loki/compare/v3.1.1...v3.2.0) (2024-09-18)
+
+
+### ⚠ BREAKING CHANGES
+
+* **api:** Fail log queries when executed on instant query endpoint ([#13421](https://github.com/grafana/loki/issues/13421))
+* **jsonnet:** convert read statefulset into deployment for loki-simple-scalable ([#13977](https://github.com/grafana/loki/issues/13977))
+* **blooms:** Remove bloom compactor component ([#13969](https://github.com/grafana/loki/issues/13969))
+
+### Features
+
+* ability to ignore cache for volume queries ([#13945](https://github.com/grafana/loki/issues/13945)) ([b1dc076](https://github.com/grafana/loki/commit/b1dc0763d675a99884a2fdac36c3c3f45f8353b7))
+* add _extracted suffix to detected fields conflicts ([#13993](https://github.com/grafana/loki/issues/13993)) ([ab1caea](https://github.com/grafana/loki/commit/ab1caea12325b5db777101347acf4f277312adf6))
+* Add baseline rf1 querier implementation ([#13639](https://github.com/grafana/loki/issues/13639)) ([3a99b69](https://github.com/grafana/loki/commit/3a99b69ae519674c6e3da15ef28cb3ed9c6a2d63))
+* Add CLI to inspect RF=1 WAL segments ([#13552](https://github.com/grafana/loki/issues/13552)) ([150e653](https://github.com/grafana/loki/commit/150e6539d175c232063aaa37c687c60d4809a08a))
+* Add initial support for a kafka-based ingest path ([#13992](https://github.com/grafana/loki/issues/13992)) ([33c26f4](https://github.com/grafana/loki/commit/33c26f4dd1aaebadd54e7eb50765a33bd7c3ad2f))
+* add loki_ingester_rf1_segment_age_seconds metric ([#13653](https://github.com/grafana/loki/issues/13653)) ([2dfc13b](https://github.com/grafana/loki/commit/2dfc13bb73c73c6c8cfb57c23ce832f902d8a43e))
+* Add metrics for Ingester RF-1 ([#13510](https://github.com/grafana/loki/issues/13510)) ([d4179aa](https://github.com/grafana/loki/commit/d4179aa04fdeaf0bbf538c2b202291a3d0247a27))
+* Add metrics to WAL Manager ([#13490](https://github.com/grafana/loki/issues/13490)) ([bfe97d7](https://github.com/grafana/loki/commit/bfe97d724f34277baa4cd9f9b25764e718997c46))
+* Add settings for cpu/mutex/block profiling options ([#13278](https://github.com/grafana/loki/issues/13278)) ([f06eabb](https://github.com/grafana/loki/commit/f06eabbf0e2c3db3ec899c224d6c947c5edd7d6a))
+* add structured metadata to the promtail push API ([#14153](https://github.com/grafana/loki/issues/14153)) ([#14155](https://github.com/grafana/loki/issues/14155)) ([c118fc6](https://github.com/grafana/loki/commit/c118fc66b61adc49b85c38b2ab2fc40f24c0a737))
+* Added getting started video for ingesting Otel logs ([#13226](https://github.com/grafana/loki/issues/13226)) ([5e560f9](https://github.com/grafana/loki/commit/5e560f93ecfa399e85878e30998042646ee4e603))
+* aggregate byte and count metrics ([#13731](https://github.com/grafana/loki/issues/13731)) ([913e9f9](https://github.com/grafana/loki/commit/913e9f93477b5b811fbcf44d0e750f600c9ded69))
+* **api:** Fail log queries when executed on instant query endpoint ([#13421](https://github.com/grafana/loki/issues/13421)) ([ce71f1c](https://github.com/grafana/loki/commit/ce71f1cf954625cac2af7c2d0c335248b01185a3))
+* **blooms:** Add series & chunks per block metrics ([#13721](https://github.com/grafana/loki/issues/13721)) ([55c6499](https://github.com/grafana/loki/commit/55c64991db60309840aa0b41ecf9a3451dc5900d))
+* Bootstrap metastore for wal segments ([#13550](https://github.com/grafana/loki/issues/13550)) ([0b47498](https://github.com/grafana/loki/commit/0b474981dc5d073eaa7110710b5f1a1418e5235d))
+* Calculate the age of a WAL segment ([#13637](https://github.com/grafana/loki/issues/13637)) ([4abb5a4](https://github.com/grafana/loki/commit/4abb5a404cea4ec13f14c10dea4ce91b9e3cd9af))
+* **chunks-inspect:** support structured metadata ([#11506](https://github.com/grafana/loki/issues/11506)) ([1834065](https://github.com/grafana/loki/commit/183406570411a5ad5ceaf32bf07451b8fce608c1))
+* collect and serve pre-aggregated bytes and counts ([#13020](https://github.com/grafana/loki/issues/13020)) ([467eb1b](https://github.com/grafana/loki/commit/467eb1bb1b08fa69e3d5e40a1e0143f65230ad2b))
+* Collect duplicate log line metrics ([#13084](https://github.com/grafana/loki/issues/13084)) ([40ee766](https://github.com/grafana/loki/commit/40ee7667244f2e094b5a7199705b4f3dacb7ffaf))
+* convert WalSegmentWriter to io.ReadSeeker ([#13340](https://github.com/grafana/loki/issues/13340)) ([19c0509](https://github.com/grafana/loki/commit/19c050926e75e6dcac6d228b838836367414a5f8))
+* **detected-labels:** remove cardinality filter ([#13652](https://github.com/grafana/loki/issues/13652)) ([4f534d7](https://github.com/grafana/loki/commit/4f534d7317fa0557251f16b76ebf790f079cf98e))
+* downsample aggregated metrics ([#13449](https://github.com/grafana/loki/issues/13449)) ([2c053ee](https://github.com/grafana/loki/commit/2c053ee00cb5a86ab3a97da8f31d0564b40761d0))
+* Drain uses different tokenizer based on log format ([#13384](https://github.com/grafana/loki/issues/13384)) ([bc01e6f](https://github.com/grafana/loki/commit/bc01e6fd64cb0de3df776e246024f7ec7251bdfa))
+* exclude and from creating new tokens in patterns ([#13395](https://github.com/grafana/loki/issues/13395)) ([8c8454b](https://github.com/grafana/loki/commit/8c8454b9db35901896113d3e19eb3862359aeba8))
+* exclude in pattern tokens ([#13397](https://github.com/grafana/loki/issues/13397)) ([e612dd3](https://github.com/grafana/loki/commit/e612dd3dfe546ae6c26d7045e811d2ae48221d3d))
+* **exporter:** include boolean values in limit exporter ([#13466](https://github.com/grafana/loki/issues/13466)) ([4220737](https://github.com/grafana/loki/commit/4220737a52da7ab6c9346b12d5a5d7bedbcd641d))
+* flush not owned streams ([#13254](https://github.com/grafana/loki/issues/13254)) ([2ca1ac6](https://github.com/grafana/loki/commit/2ca1ac66a3bcebe9b2eb139c6aecc6820c840df9))
+* **helm:** Make gateway container port configurable. ([#13294](https://github.com/grafana/loki/issues/13294)) ([05176e4](https://github.com/grafana/loki/commit/05176e445b90597379c268e799b0fb86b8629b9e))
+* **helm:** Support alibabacloud oss in helm chart ([#13441](https://github.com/grafana/loki/issues/13441)) ([3ebab6f](https://github.com/grafana/loki/commit/3ebab6f3931841f62ac59e6b09afef98db656c71))
+* Ignore empty streams in distributor if all entries fail validation ([#13674](https://github.com/grafana/loki/issues/13674)) ([6c4b062](https://github.com/grafana/loki/commit/6c4b0622aa3de44cccb76fe16bb6583bf91cf15c))
+* Implement GetObjectRange for all storage providers ([#13650](https://github.com/grafana/loki/issues/13650)) ([d9c441e](https://github.com/grafana/loki/commit/d9c441efcc159e91a4251c9aca8f8914633c8505))
+* improve Owned Streams feature observability ([#13232](https://github.com/grafana/loki/issues/13232)) ([ce86459](https://github.com/grafana/loki/commit/ce8645900e76db962af36794c70d1e3662009ded))
+* improve placeholder replacement of byte sizes ([#13508](https://github.com/grafana/loki/issues/13508)) ([ac284ca](https://github.com/grafana/loki/commit/ac284ca00ed065907341ee2a7adf329c8e485a7a))
+* Ingester RF-1 ([#13365](https://github.com/grafana/loki/issues/13365)) ([7f35179](https://github.com/grafana/loki/commit/7f35179cd3fd3627057d916b7f00c92cee400339))
+* Ingester Stream Limit Improvements ([#13532](https://github.com/grafana/loki/issues/13532)) ([ec34aaa](https://github.com/grafana/loki/commit/ec34aaa1ff2e616ef223631657b63f7dffedd3cc))
+* **ingester:** Smooth out chunk flush operations ([#9994](https://github.com/grafana/loki/issues/9994)) ([82fbb2f](https://github.com/grafana/loki/commit/82fbb2fd9624eaa9584b2311189d1e4768fdc081))
+* instrument failed chunk encoding/decoding ([#13684](https://github.com/grafana/loki/issues/13684)) ([5a87ccb](https://github.com/grafana/loki/commit/5a87ccb648ee3bf48a3704643ae9923d64651aed))
+* Instrument metastore GRPC calls ([#13598](https://github.com/grafana/loki/issues/13598)) ([04613b4](https://github.com/grafana/loki/commit/04613b492fd8494084393e448f86f9b18e32c17e))
+* Instrument rf1 write path with tracing ([#13599](https://github.com/grafana/loki/issues/13599)) ([ce88286](https://github.com/grafana/loki/commit/ce882861476dd070ca588932c0aba64a689cb0b3))
+* Introduce a new Object Storage WAL format. ([#13253](https://github.com/grafana/loki/issues/13253)) ([1d6f8d5](https://github.com/grafana/loki/commit/1d6f8d51fcfd1c806159e17bce978ea39ee5936c))
+* Introduce wal segment read path. ([#13695](https://github.com/grafana/loki/issues/13695)) ([917053a](https://github.com/grafana/loki/commit/917053a73058ebff5cec72d760ba16f2acc8a56c))
+* lambda-promtail; ensure messages to Kinesis are usable by refactoring parsing of KinesisEvent to match parsing of CWEvents + code cleanup ([#13098](https://github.com/grafana/loki/issues/13098)) ([dbfb19b](https://github.com/grafana/loki/commit/dbfb19be49fb3bc1f2f62613f50370028cbf5552))
+* **lambda-promtail:** Adding S3 log parser support for AWS GuardDuty ([#13148](https://github.com/grafana/loki/issues/13148)) ([2d92fff](https://github.com/grafana/loki/commit/2d92fff2aa4dbda5f9f8c18ea19347e1236257af))
+* **lambda-promtail:** build lambda with zip file ([#13787](https://github.com/grafana/loki/issues/13787)) ([9bf08f7](https://github.com/grafana/loki/commit/9bf08f7cc055db1997c439ef8edb11247c4e1d67))
+* Limit to block ingestion until configured date ([#13958](https://github.com/grafana/loki/issues/13958)) ([b5ac6a0](https://github.com/grafana/loki/commit/b5ac6a0258be51a6d6c3a7743e498dc40014b64b))
+* **loki:** add ability to disable AWS S3 dualstack endpoints usage ([#13785](https://github.com/grafana/loki/issues/13785)) ([bb257f5](https://github.com/grafana/loki/commit/bb257f54b33ecb04cbe1786c4efac779d8d28d8c))
+* **loki:** Do not enforce max-query-bytes-read and max-querier-bytes-read in limited tripperware ([#13406](https://github.com/grafana/loki/issues/13406)) ([47f6ea5](https://github.com/grafana/loki/commit/47f6ea53fc4816b259bce4ce4efddee377422d3c))
+* **operator:** Add alert for discarded samples ([#13512](https://github.com/grafana/loki/issues/13512)) ([5f2a02f](https://github.com/grafana/loki/commit/5f2a02f14222dab891b7851e8f48052d6c9b594a))
+* **operator:** Add support for the volume API ([#13369](https://github.com/grafana/loki/issues/13369)) ([d451e23](https://github.com/grafana/loki/commit/d451e23225047a11b4d5d82900cec4a46d6e7b39))
+* **operator:** Enable leader-election ([#13760](https://github.com/grafana/loki/issues/13760)) ([1ba4bff](https://github.com/grafana/loki/commit/1ba4bff005930b173391df35248e6f58e076fa74))
+* **operator:** Update Loki operand to v3.1.0 ([#13422](https://github.com/grafana/loki/issues/13422)) ([cf5f52d](https://github.com/grafana/loki/commit/cf5f52dca0db93847218cdd2c3f4860d983381ae))
+* Pattern ingesters add a limiter for high eviction rate ([#13464](https://github.com/grafana/loki/issues/13464)) ([e08b4a7](https://github.com/grafana/loki/commit/e08b4a7f883a50452c0828a133e6f9f5e68eff4d))
+* Remove flush loop and queue from Ingester RF-1 ([#13538](https://github.com/grafana/loki/issues/13538)) ([8ca03a2](https://github.com/grafana/loki/commit/8ca03a2a3d73e5250ee26ac3c9218e254550560d))
+* remove mutexes from wal.SegmentWriter ([#13641](https://github.com/grafana/loki/issues/13641)) ([7ed63ea](https://github.com/grafana/loki/commit/7ed63ea7f493dab6c81200ddb7a0e6f26dc41bec))
+* RF1 improves replication stategy to support 1 replica ([#13469](https://github.com/grafana/loki/issues/13469)) ([790135b](https://github.com/grafana/loki/commit/790135bd7d06a8cc5a9d4fc759d06bc1e7a2cad7))
+* **rf1:** Add query path for the metastore ([#13636](https://github.com/grafana/loki/issues/13636)) ([8cb19a2](https://github.com/grafana/loki/commit/8cb19a2e3c92b60560ce48f48c46a512dfdc7963))
+* **rf1:** Store index ref in metastore ([#13613](https://github.com/grafana/loki/issues/13613)) ([5f5fd4e](https://github.com/grafana/loki/commit/5f5fd4e4ab22a43a0c290cf9a9c2bf2e229f6e18))
+* **structured-metadata-api:** add structured metadata to `/detected_fields` API ([#13604](https://github.com/grafana/loki/issues/13604)) ([ce02cc2](https://github.com/grafana/loki/commit/ce02cc254abc641dc40831b28c81199526581085))
+* Track when builders are doing work with a gauge ([#13570](https://github.com/grafana/loki/issues/13570)) ([0029d46](https://github.com/grafana/loki/commit/0029d46c233e173dce1d45124ab2de67443a686a))
+* Update doc-validator version ([#13558](https://github.com/grafana/loki/issues/13558)) ([a88a0d3](https://github.com/grafana/loki/commit/a88a0d3f6ceaba0082c557ab773b7fd45537ac64))
+* upgrade prometheus ([#13671](https://github.com/grafana/loki/issues/13671)) ([b88583d](https://github.com/grafana/loki/commit/b88583da7d3cc840d4b66698de042773422e334d))
+* Use prefixed WAL storage path in Object Storage ([#13377](https://github.com/grafana/loki/issues/13377)) ([973aa2d](https://github.com/grafana/loki/commit/973aa2d7babfafd247ab91e493445488804ab94f))
+* Use WAL Manager ([#13491](https://github.com/grafana/loki/issues/13491)) ([8f1d12f](https://github.com/grafana/loki/commit/8f1d12f656924eaf9bd887037c006728b22375cf))
+* WAL Manager ([#13428](https://github.com/grafana/loki/issues/13428)) ([15c8b45](https://github.com/grafana/loki/commit/15c8b45d26f7dcb3181e1b5ff00796ca0bad720a))
+* WAL Manager configuration options ([#13531](https://github.com/grafana/loki/issues/13531)) ([c4405fe](https://github.com/grafana/loki/commit/c4405fe1c417f31af535fcee3d669ed5271d76a7))
+* **wal:** Add sizing information to writer and reader. ([#13267](https://github.com/grafana/loki/issues/13267)) ([41fbacd](https://github.com/grafana/loki/commit/41fbacdce74e9d6cb8451e353da3e560cb642b9b))
+* **wal:** Benchmark and improve WAL writes using Reset. ([#13272](https://github.com/grafana/loki/issues/13272)) ([debb5f2](https://github.com/grafana/loki/commit/debb5f202e278708bf43a795125e151d818892b2))
+
### Bug Fixes
-* **promtail:** fix parser for azureeventhubs message without time field ([#14218](https://github.com/grafana/loki/pull/14218))
+* add a retry middleware to all the stats handlers ([#13584](https://github.com/grafana/loki/issues/13584)) ([7232795](https://github.com/grafana/loki/commit/7232795e1f5fb1868c83111f5aab72ca0f3d9891))
+* add logging to empty bloom ([#13502](https://github.com/grafana/loki/issues/13502)) ([c263a68](https://github.com/grafana/loki/commit/c263a681f8e19417ea3056a3e2cae7d3015d081a))
+* add missing flush op timeout ([#13679](https://github.com/grafana/loki/issues/13679)) ([62c5c5c](https://github.com/grafana/loki/commit/62c5c5c64182736f65ec9c903e0789986b264425))
+* Adjust tailer loop criteria so it is actually re-tested ([#13906](https://github.com/grafana/loki/issues/13906)) ([dabbfd8](https://github.com/grafana/loki/commit/dabbfd81ef5c4f02a255b404ab25edd1eec126cf))
+* ast left cycular reference result in oom ([#13501](https://github.com/grafana/loki/issues/13501)) ([6dd6b65](https://github.com/grafana/loki/commit/6dd6b65139b3b8d4254f114e99ab8fb3eaa2ae09))
+* **blooms:** Cleanup temp blockdir in bloom compactor ([#13622](https://github.com/grafana/loki/issues/13622)) ([64215e1](https://github.com/grafana/loki/commit/64215e18495b12e6d5565eba6fe54bc381ac7189))
+* **blooms:** Delete outdated metas during planning ([#13363](https://github.com/grafana/loki/issues/13363)) ([11e1976](https://github.com/grafana/loki/commit/11e19763d0ee4e1b1130ab0326ed0f4f605bca8d))
+* **blooms:** ensure tokenizer cache is reset between series ([#13370](https://github.com/grafana/loki/issues/13370)) ([04bc3a4](https://github.com/grafana/loki/commit/04bc3a423c8ea9e7c945b15dffb83d674bab3a68))
+* **blooms:** Fix eviction of multiple blockcache items ([#13573](https://github.com/grafana/loki/issues/13573)) ([c9950e3](https://github.com/grafana/loki/commit/c9950e394d2bca8bd290f60672a3bc904cd72d7b))
+* **blooms:** Fix panic in bloom gateway ([#13303](https://github.com/grafana/loki/issues/13303)) ([66f97b2](https://github.com/grafana/loki/commit/66f97b2aec3cbe0d60acd5e13a9fda9000b03bae))
+* **blooms:** ignores bloom filtering errors in bounded shard query planning ([#13285](https://github.com/grafana/loki/issues/13285)) ([ede6941](https://github.com/grafana/loki/commit/ede6941c6ff0f40d836b288e167a26c34c2a9437))
+* **blooms:** Improve error wrap to make ignoreNotFound work when fetching blocks ([#13656](https://github.com/grafana/loki/issues/13656)) ([bd20171](https://github.com/grafana/loki/commit/bd20171975e913e429048a0a30328811fc4c8a87))
+* **blooms:** improves mempool metrics ([#13283](https://github.com/grafana/loki/issues/13283)) ([d36e1d5](https://github.com/grafana/loki/commit/d36e1d580af0a64ce0fcb8de57724d27e399c0dd))
+* **blooms:** Minor fixes and improvements for testing in dev ([#13341](https://github.com/grafana/loki/issues/13341)) ([d0f56ee](https://github.com/grafana/loki/commit/d0f56eeb0a585c37e4a9c62b7a200f4d8360bf4d))
+* **blooms:** Remove backoff from notify planner ([#13506](https://github.com/grafana/loki/issues/13506)) ([e506995](https://github.com/grafana/loki/commit/e506995e595bb5c465941f3f1227311b2ea1c8c5))
+* **blooms:** Remove unused arg ([#13343](https://github.com/grafana/loki/issues/13343)) ([fcb9b28](https://github.com/grafana/loki/commit/fcb9b283ba0cf927646d332a68c049718ec1d236))
+* **blooms:** Ship chunkrefs in task payload ([#13677](https://github.com/grafana/loki/issues/13677)) ([450bbce](https://github.com/grafana/loki/commit/450bbce938fd548715104f6a1a4dde76e2e7ff34))
+* **blooms:** skip empty blooms on reads ([#13500](https://github.com/grafana/loki/issues/13500)) ([bfa6955](https://github.com/grafana/loki/commit/bfa69556afda160051cab677ce278aba5ab48448))
+* **blooms:** Suppress error from resolving server addresses for blocks ([#13385](https://github.com/grafana/loki/issues/13385)) ([3ac2317](https://github.com/grafana/loki/commit/3ac231728e6bc9d3166684bcb697c78b4fb56fae))
+* **blooms:** Use correct key to populate blockscache at startup ([#13624](https://github.com/grafana/loki/issues/13624)) ([2624a4b](https://github.com/grafana/loki/commit/2624a4bdd43badcd1159b83e26c1b0ff14479ac0))
+* **break:** helm: Fix how we set imagePullSecrets for enterprise-gateway and admin-api. ([#13761](https://github.com/grafana/loki/issues/13761)) ([3be5a45](https://github.com/grafana/loki/commit/3be5a4576fd0f0dca321e017a637f7a3159c00e5))
+* **ci:** add cleanup step into job `dist` ([#13801](https://github.com/grafana/loki/issues/13801)) ([217f928](https://github.com/grafana/loki/commit/217f928f52b3d3fad414a01502c37d143cabf567))
+* **ci:** fixed release-please manifest ([#13810](https://github.com/grafana/loki/issues/13810)) ([f253db5](https://github.com/grafana/loki/commit/f253db5598156a4461fd1f5ede14443c937e2ac8))
+* **cloud-mixin:** Attribute OTLP route correctly to write path ([#13943](https://github.com/grafana/loki/issues/13943)) ([b91b782](https://github.com/grafana/loki/commit/b91b7829075f9df565d468d9e72191e9f4c5e94e))
+* Dedup pattern tokens on output ([#13534](https://github.com/grafana/loki/issues/13534)) ([e23598d](https://github.com/grafana/loki/commit/e23598d710a231213a40f5bfb7d99fe2ee409ba2))
+* **deps:** update github.com/axiomhq/hyperloglog digest to af9851f ([#13806](https://github.com/grafana/loki/issues/13806)) ([67295e0](https://github.com/grafana/loki/commit/67295e0a16677feabb83284e058926b016993128))
+* **deps:** update github.com/c2h5oh/datasize digest to aa82cc1 ([#13807](https://github.com/grafana/loki/issues/13807)) ([a93f38c](https://github.com/grafana/loki/commit/a93f38cb055c9a3f22cf07d0bd5888a0596ec5d6))
+* **deps:** update github.com/docker/go-plugins-helpers digest to 45e2431 ([#13808](https://github.com/grafana/loki/issues/13808)) ([e5a3994](https://github.com/grafana/loki/commit/e5a3994fba37247cf2b81405eb4b19b29af89959))
+* **deps:** update github.com/grafana/jsonparser digest to ea80629 ([#13814](https://github.com/grafana/loki/issues/13814)) ([d5718eb](https://github.com/grafana/loki/commit/d5718eb111f8f0fbbc43294eb8b72877b250d433))
+* **deps:** update module github.com/aliyun/aliyun-oss-go-sdk to v2.2.10+incompatible ([#13861](https://github.com/grafana/loki/issues/13861)) ([6f79194](https://github.com/grafana/loki/commit/6f791941ee5a188a658313c12f549d40f8802528))
+* **deps:** update module github.com/azure/go-autorest/autorest/adal to v0.9.24 ([#13862](https://github.com/grafana/loki/issues/13862)) ([8041bd2](https://github.com/grafana/loki/commit/8041bd29b90a79066f7c6393fef1db5ba29440b0))
+* **deps:** update module github.com/azure/go-autorest/autorest/azure/auth to v0.5.13 ([#13863](https://github.com/grafana/loki/issues/13863)) ([71c4421](https://github.com/grafana/loki/commit/71c4421e09f30ebd8a1826c976436d3ca3ad603d))
+* **deps:** update module github.com/baidubce/bce-sdk-go to v0.9.186 ([#13864](https://github.com/grafana/loki/issues/13864)) ([3c0e3e2](https://github.com/grafana/loki/commit/3c0e3e2c13591e3af44ce4826245043c81bb66c3))
+* **deps:** update module github.com/baidubce/bce-sdk-go to v0.9.187 ([#13933](https://github.com/grafana/loki/issues/13933)) ([56af84d](https://github.com/grafana/loki/commit/56af84d3a638dbe30f1cacffd7d090118720d787))
+* **deps:** update module github.com/baidubce/bce-sdk-go to v0.9.188 ([#14000](https://github.com/grafana/loki/issues/14000)) ([79039a2](https://github.com/grafana/loki/commit/79039a24a244b06b43018095e29c9ed65b0e1067))
+* **deps:** update module github.com/cespare/xxhash/v2 to v2.3.0 (main) ([#13615](https://github.com/grafana/loki/issues/13615)) ([cfc7b34](https://github.com/grafana/loki/commit/cfc7b34b9eb94960bd960b7a8a4442a2a1a9ecaf))
+* **deps:** update module github.com/datadog/sketches-go to v1.4.6 ([#13865](https://github.com/grafana/loki/issues/13865)) ([1f3c467](https://github.com/grafana/loki/commit/1f3c467b412dabf7f330dc71befcdf50596ba517))
+* **deps:** update module github.com/docker/docker to v25.0.5+incompatible [security] (main) ([#12279](https://github.com/grafana/loki/issues/12279)) ([960c034](https://github.com/grafana/loki/commit/960c03438477435b606cf4dfbb7af43a5b52068d))
+* **deps:** update module github.com/docker/docker to v27.1.1+incompatible [security] (main) ([#13762](https://github.com/grafana/loki/issues/13762)) ([f8bf3bb](https://github.com/grafana/loki/commit/f8bf3bb3786ccf5c3784e5b75e9d030251dcc8fb))
+* **deps:** update module github.com/docker/docker to v27.1.2+incompatible ([#13872](https://github.com/grafana/loki/issues/13872)) ([8ab4c20](https://github.com/grafana/loki/commit/8ab4c2057256511b5bc25c5f9c9ff870b5b71cb5))
+* **deps:** update module github.com/efficientgo/core to v1.0.0-rc.3 ([#14001](https://github.com/grafana/loki/issues/14001)) ([90f7e5f](https://github.com/grafana/loki/commit/90f7e5fa67dcf7b05c8aae54bacdf96f98c27faf))
+* **deps:** update module github.com/felixge/fgprof to v0.9.4 ([#13870](https://github.com/grafana/loki/issues/13870)) ([c68848f](https://github.com/grafana/loki/commit/c68848f8056aca3ebb358dd1fc8adf6e07611e9c))
+* **deps:** update module github.com/fsouza/fake-gcs-server to v1.47.7 ([#13935](https://github.com/grafana/loki/issues/13935)) ([d43b2de](https://github.com/grafana/loki/commit/d43b2de1b4e0d0a999569900f69755cfe6b17c21))
+* **deps:** update module github.com/gogo/googleapis to v1.4.1 ([#13871](https://github.com/grafana/loki/issues/13871)) ([6da7eb5](https://github.com/grafana/loki/commit/6da7eb577cac62208801374af71c90d4a06df097))
+* **deps:** update module github.com/gorilla/mux to v1.8.1 (main) ([#13618](https://github.com/grafana/loki/issues/13618)) ([19b288e](https://github.com/grafana/loki/commit/19b288eee4ad9c25fa58de56c3be02393e63a20e))
+* **deps:** update module github.com/gorilla/websocket to v1.5.3 ([#13873](https://github.com/grafana/loki/issues/13873)) ([1eb8342](https://github.com/grafana/loki/commit/1eb8342d41a9fdb6c5fcd3e6e5a8c6b98bde4e43))
+* **deps:** update module github.com/hashicorp/consul/api to v1.29.4 ([#14002](https://github.com/grafana/loki/issues/14002)) ([e11b244](https://github.com/grafana/loki/commit/e11b244a8bcbc69d6829d31fb164dc43d505068e))
+* **deps:** update module github.com/ibm/go-sdk-core/v5 to v5.17.4 ([#13892](https://github.com/grafana/loki/issues/13892)) ([b6991f2](https://github.com/grafana/loki/commit/b6991f29d232267c1fa0ed8dff55da72240c23f6))
+* **deps:** update module github.com/ibm/ibm-cos-sdk-go to v1.11.0 ([#13893](https://github.com/grafana/loki/issues/13893)) ([9b7e7e9](https://github.com/grafana/loki/commit/9b7e7e97a41d2ce0abe62b0d920538e9974cef69))
+* **deps:** update module github.com/klauspost/pgzip to v1.2.6 ([#13874](https://github.com/grafana/loki/issues/13874)) ([fdea7a1](https://github.com/grafana/loki/commit/fdea7a1763618812284a44d6c247c4215d317950))
+* **deps:** update module github.com/mattn/go-ieproxy to v0.0.12 ([#13876](https://github.com/grafana/loki/issues/13876)) ([775bf8e](https://github.com/grafana/loki/commit/775bf8ebe7893a5b0807984a1c791f211820eed2))
+* **deps:** update module github.com/ncw/swift to v2 ([#13951](https://github.com/grafana/loki/issues/13951)) ([246a1df](https://github.com/grafana/loki/commit/246a1dfbe24a00b75b03257cb7e75be6cc96a3a8))
+* **deps:** update module github.com/oschwald/geoip2-golang to v1.11.0 ([#13934](https://github.com/grafana/loki/issues/13934)) ([3bebba5](https://github.com/grafana/loki/commit/3bebba59b5a81da77c6b0d6c499f92f9ce320d46))
+* **deps:** update module github.com/schollz/progressbar/v3 to v3.14.6 ([#13884](https://github.com/grafana/loki/issues/13884)) ([fb9cae4](https://github.com/grafana/loki/commit/fb9cae4aaa6a12a375fa6199bfcd562833385737))
+* **deps:** update module github.com/tonistiigi/fifo to v1 ([#13952](https://github.com/grafana/loki/issues/13952)) ([96b5c79](https://github.com/grafana/loki/commit/96b5c79e7770f706bdc1d07e306bf225706273a3))
+* **deps:** update module github.com/workiva/go-datastructures to v1.1.5 ([#13885](https://github.com/grafana/loki/issues/13885)) ([d817aee](https://github.com/grafana/loki/commit/d817aeeab374f414b08598a8784ea708000856d2))
+* **deps:** update module golang.org/x/text to v0.17.0 (main) ([#13794](https://github.com/grafana/loki/issues/13794)) ([df61482](https://github.com/grafana/loki/commit/df61482207eb8f44f43d9c2ef4f450fc0c9a00ee))
+* **deps:** update module golang.org/x/time to v0.6.0 ([#13910](https://github.com/grafana/loki/issues/13910)) ([dff00bd](https://github.com/grafana/loki/commit/dff00bd8f26e85ce04edc16a9f43cb32d3691add))
+* detected fields incorrect type bug ([#13515](https://github.com/grafana/loki/issues/13515)) ([f6a94d3](https://github.com/grafana/loki/commit/f6a94d303444dbf22cf1198f549c9cde070f1bdc))
+* **detected labels:** response when store label values are empty ([#13970](https://github.com/grafana/loki/issues/13970)) ([6f99af6](https://github.com/grafana/loki/commit/6f99af62227f98c7d9de8a5cf480ae792ce6220a))
+* **detected_labels:** Add matchers to get labels from store" ([#14012](https://github.com/grafana/loki/issues/14012)) ([25234e8](https://github.com/grafana/loki/commit/25234e83483cb8a974d40b7c80b3d4dd62d6d880))
+* do not retain span logger created with index set initialized at query time ([#14027](https://github.com/grafana/loki/issues/14027)) ([bd25ac2](https://github.com/grafana/loki/commit/bd25ac2503b00812d959c2aaf092bd2618f16a5a))
+* fix a bug where AppendRequest with no entries triggers flush ([#13672](https://github.com/grafana/loki/issues/13672)) ([8a3ae22](https://github.com/grafana/loki/commit/8a3ae223ba160584d61bd5cb39b546a3c28f46b5))
+* Fix HPA ingester typo ([#13158](https://github.com/grafana/loki/issues/13158)) ([4ca9785](https://github.com/grafana/loki/commit/4ca97858d9dc33db7abbe20ca01c6735cb9ce34e))
+* Fix log line for fingerprint not found ([#13555](https://github.com/grafana/loki/issues/13555)) ([aeb23bb](https://github.com/grafana/loki/commit/aeb23bb7fc3d33327060828ddf97cb7da7b3c8f8))
+* Fix panic in BloomStore initialisation ([#13457](https://github.com/grafana/loki/issues/13457)) ([5f4b8fc](https://github.com/grafana/loki/commit/5f4b8fc9e44ac386ef5bfc64dd5f8f47b72f8ef9))
+* Fix panic in ingester.go ([#13557](https://github.com/grafana/loki/issues/13557)) ([dbff69a](https://github.com/grafana/loki/commit/dbff69a2e92f3ce34f7d58a7418cd0456d644be3))
+* fix retry code to handle grpc status codes. updated newer stats retries to be wrapped with spans ([#13592](https://github.com/grafana/loki/issues/13592)) ([d3e1edb](https://github.com/grafana/loki/commit/d3e1edbf1102b2f0f4116c3bb1773000d0368dde))
+* fixed typo in ruler URL ([#13692](https://github.com/grafana/loki/issues/13692)) ([1476498](https://github.com/grafana/loki/commit/14764989a2c6f01803f0313d8151f7aa20affd4a))
+* Fixes pattern pruning stability ([#13429](https://github.com/grafana/loki/issues/13429)) ([7c86e65](https://github.com/grafana/loki/commit/7c86e651ac71b31bf85e46303931291eafcc0027))
+* Fixes span name of serializeRounTripper ([#13541](https://github.com/grafana/loki/issues/13541)) ([4451d56](https://github.com/grafana/loki/commit/4451d56d6b9a9d2eb54ed75d3d2c8fe0db6908eb))
+* flaky test blockPlansForGaps ([#13743](https://github.com/grafana/loki/issues/13743)) ([37e33d4](https://github.com/grafana/loki/commit/37e33d41b4583626a0384e4eb4c4570d3ef11882))
+* **gateway client:** Fix nil pointer dereference panic when using ruler in ring mode ([#13436](https://github.com/grafana/loki/issues/13436)) ([304db10](https://github.com/grafana/loki/commit/304db100b382f0c1d1d9999dfe8ca77d1ac901c9))
+* Handle block offset exceeding chunk length in memchunk.go ([#13661](https://github.com/grafana/loki/issues/13661)) ([d42476a](https://github.com/grafana/loki/commit/d42476aa58fca07b17ee39d388639807624f884a))
+* Handle EOF when reading from some obj stores ([#13868](https://github.com/grafana/loki/issues/13868)) ([98a15e2](https://github.com/grafana/loki/commit/98a15e2303e6be2bb29b024b95e6a1941b19acf2))
+* **helm:** fix extraObjects ([#13107](https://github.com/grafana/loki/issues/13107)) ([b7fcf2b](https://github.com/grafana/loki/commit/b7fcf2bb7ea35206c0015545c93582991f64f581))
+* **helm:** fix imagePullSecrets for statefulset-results-cache ([#13051](https://github.com/grafana/loki/issues/13051)) ([8434b2f](https://github.com/grafana/loki/commit/8434b2f6e8e124225aafe6e55ca9c1b6ff6a2c5b))
+* **helm:** fixed memcached and provisioner templates ([#13788](https://github.com/grafana/loki/issues/13788)) ([1bf9791](https://github.com/grafana/loki/commit/1bf97912de83200d02689511f48658ce7d9543cf))
+* **helm:** removed helm test ([#13651](https://github.com/grafana/loki/issues/13651)) ([ef03476](https://github.com/grafana/loki/commit/ef03476f3dac159e5f58490351223fcdb9ac3469))
+* **helm:** Update yaml file `./production/helm/loki/Chart.yaml` (+1 other) ([#13392](https://github.com/grafana/loki/issues/13392)) ([b5b861c](https://github.com/grafana/loki/commit/b5b861c348bc768254fd083fb40d2820cf347be6))
+* **helm:** Update yaml file `./production/helm/loki/values.yaml` (+1 other) ([#13426](https://github.com/grafana/loki/issues/13426)) ([fc3904e](https://github.com/grafana/loki/commit/fc3904ee69d0824dc681ca5a4280f7aa2ec5563b))
+* Improve execution speed for queries with label filters ([#13922](https://github.com/grafana/loki/issues/13922)) ([40f4f14](https://github.com/grafana/loki/commit/40f4f1479170a90b39c005292e11a3ec4db4bc34))
+* Include whitespaces in extracted tokens ([#13738](https://github.com/grafana/loki/issues/13738)) ([7683a79](https://github.com/grafana/loki/commit/7683a791912ba128ce8af88b294ae3722330dfa2))
+* incorrect pod matcher for compactor in mixin when using ssd mode ([#12846](https://github.com/grafana/loki/issues/12846)) ([515e13c](https://github.com/grafana/loki/commit/515e13cc6c92b08968bc87e220b8bca64683fd05))
+* Init internal server log along with loki's server instance ([#13221](https://github.com/grafana/loki/issues/13221)) ([66b8c9b](https://github.com/grafana/loki/commit/66b8c9b7738acd0e0616b88d35cf3ddc0df83e7e))
+* Keep blocks referenced by newer metas ([#13614](https://github.com/grafana/loki/issues/13614)) ([784e7d5](https://github.com/grafana/loki/commit/784e7d562fedec7134c8ed4e2cee8ccb7049e271))
+* Lint issues after merge to main ([#13326](https://github.com/grafana/loki/issues/13326)) ([7e19cc7](https://github.com/grafana/loki/commit/7e19cc7dca8480932b39c87c7c2e296f99318c95))
+* **log results cache:** include pipeline wrapper disabled in cache key ([#13328](https://github.com/grafana/loki/issues/13328)) ([221491c](https://github.com/grafana/loki/commit/221491c123adb6cedfabace6fc2cd03a32124655))
+* **loki-mixin:** Fix latency panel for Index Gateway ([#13629](https://github.com/grafana/loki/issues/13629)) ([f586c00](https://github.com/grafana/loki/commit/f586c00a9fcfa8bb84781698e141dff928b86c92))
+* **mixin:** various latency panels in operational dashboard should have ms unit type instead of seconds ([#13260](https://github.com/grafana/loki/issues/13260)) ([f5a9905](https://github.com/grafana/loki/commit/f5a99058036f60f5ae0c190c48cbcf5ce22ea96d))
+* **operator:** Allow structured metadata only if V13 schema provided ([#13463](https://github.com/grafana/loki/issues/13463)) ([3ac130b](https://github.com/grafana/loki/commit/3ac130b8a152169766cb173718f2312aeb4f694e))
+* **operator:** Don't overwrite annotations for LokiStack ingress resources ([#13708](https://github.com/grafana/loki/issues/13708)) ([f523530](https://github.com/grafana/loki/commit/f52353060dd936cff587ff2060c8616941695ece))
+* **operator:** Remove duplicate conditions from status ([#13497](https://github.com/grafana/loki/issues/13497)) ([527510d](https://github.com/grafana/loki/commit/527510d1a84a981250047dbabba8d492177b8452))
+* **operator:** Set object storage for delete requests when using retention ([#13562](https://github.com/grafana/loki/issues/13562)) ([46de4c1](https://github.com/grafana/loki/commit/46de4c1bc839ef682798bec5003123f7d5f4404b))
+* **operator:** Skip updating annotations for serviceaccounts ([#13450](https://github.com/grafana/loki/issues/13450)) ([1b9b111](https://github.com/grafana/loki/commit/1b9b11116b48fb37b7015d27104668412fc04937))
+* **operator:** Support v3.1.0 in OpenShift dashboards ([#13430](https://github.com/grafana/loki/issues/13430)) ([8279d59](https://github.com/grafana/loki/commit/8279d59f145df9c9132aeff9e3d46c738650027c))
+* **operator:** Watch for CredentialsRequests on CCOAuthEnv only ([#13299](https://github.com/grafana/loki/issues/13299)) ([7fc926e](https://github.com/grafana/loki/commit/7fc926e36ea8fca7bd8e9955c8994574535dbbae))
+* panic when parsing and extracting JSON key values ([#13790](https://github.com/grafana/loki/issues/13790)) ([5ef83a7](https://github.com/grafana/loki/commit/5ef83a741ba515f68343e9dc345fcb8afe921bfd))
+* Propagate headers/warnings/stats from quantile downstreams ([#13881](https://github.com/grafana/loki/issues/13881)) ([a0c7598](https://github.com/grafana/loki/commit/a0c75987a24d0adc520c60dd5d85df4c34009548))
+* Properly reset wal segment writer ([#13468](https://github.com/grafana/loki/issues/13468)) ([6ea83b4](https://github.com/grafana/loki/commit/6ea83b45b5e9f8e1d0f9d7e5574bb5b520ddfefd))
+* protect ruler remote-write overrides map with a mutex when creating new appenders ([#13676](https://github.com/grafana/loki/issues/13676)) ([e9a9c60](https://github.com/grafana/loki/commit/e9a9c60c22e78b52c0c046d379b4b2b986d91dca))
+* querier address in SingleBinary mode ([#13297](https://github.com/grafana/loki/issues/13297)) ([29f1ea9](https://github.com/grafana/loki/commit/29f1ea91ecd935a6becae2bd425224a913285071))
+* **query engine:** Include lines with ts equal to end timestamp of the query range when executing range aggregations ([#13448](https://github.com/grafana/loki/issues/13448)) ([e0ca67d](https://github.com/grafana/loki/commit/e0ca67dd4563e41c57b2f1409ef235b76b2a1a6e))
+* Read "404" as object not exist ([#13901](https://github.com/grafana/loki/issues/13901)) ([3c9c647](https://github.com/grafana/loki/commit/3c9c6479226818229802b97e08d6c9e13e3798a5))
+* Read full buffer from storage when fetching a range ([#13948](https://github.com/grafana/loki/issues/13948)) ([115fef4](https://github.com/grafana/loki/commit/115fef49f9e023aa79c909e3cdef15b29db00907))
+* record datasample queries are limited query type ([#13930](https://github.com/grafana/loki/issues/13930)) ([ae938d0](https://github.com/grafana/loki/commit/ae938d06d941a386aa839b6717445c2295ce2efa))
+* Redo ingester profile tagging ([#13239](https://github.com/grafana/loki/issues/13239)) ([32097c8](https://github.com/grafana/loki/commit/32097c84627f5190cfcf6c1f247c9d0531d92865))
+* remove limit middleware for `detected_labels` ([#13643](https://github.com/grafana/loki/issues/13643)) ([2642718](https://github.com/grafana/loki/commit/2642718d50569931b71cfc0c9288318ab775ca41))
+* Remove query size limit for detected fields ([#13423](https://github.com/grafana/loki/issues/13423)) ([1fa5127](https://github.com/grafana/loki/commit/1fa51277978ead6569e31e908dec7f140dadb90f))
+* remove retries on the stats handlers because they already retry ([#13608](https://github.com/grafana/loki/issues/13608)) ([1008315](https://github.com/grafana/loki/commit/10083159a7e54df4e41efe2fc2e04e267fee1147))
+* remove tenant label tagging from profiles to reduce cardinality ([#13270](https://github.com/grafana/loki/issues/13270)) ([f897758](https://github.com/grafana/loki/commit/f8977587476169197d6da4d7055b97b189808344))
+* remove trailing backtick in verify-config for Loki 3.0 ([#13640](https://github.com/grafana/loki/issues/13640)) ([498f29a](https://github.com/grafana/loki/commit/498f29a66b2dbfeff85454f22d0596d20066a635))
+* Retain original values in logfmt pattern tokenizer ([#13535](https://github.com/grafana/loki/issues/13535)) ([5fa9c4b](https://github.com/grafana/loki/commit/5fa9c4bd56ec996fa2cf018b4b74b992fedca26a))
+* **retry:** fix retries when using protobuf encoding ([#13316](https://github.com/grafana/loki/issues/13316)) ([a457c5d](https://github.com/grafana/loki/commit/a457c5d171d5ffa0a7060c98a8bc48abd735911a))
+* Return empty vector instead of nil for empty evaluator. ([#13485](https://github.com/grafana/loki/issues/13485)) ([08615bf](https://github.com/grafana/loki/commit/08615bf7519b31e825903577427f7407194baf74))
+* sanatize structured metadata at query time ([#13983](https://github.com/grafana/loki/issues/13983)) ([3bf7fa9](https://github.com/grafana/loki/commit/3bf7fa9f159a7c76b1bcdd640c765b333766f748))
+* separates directory creation from permission checks ([#13248](https://github.com/grafana/loki/issues/13248)) ([1086783](https://github.com/grafana/loki/commit/1086783a1d8886f0e6888289975e771e18d800e6))
+* **sharding:** use without() grouping when merging `avg_over_time` shard results ([#12176](https://github.com/grafana/loki/issues/12176)) ([eb8a363](https://github.com/grafana/loki/commit/eb8a36306674c497d8b0150b482f275e2c00f6c9))
+* special case the return values from a sharded first/last_over_time query ([#13578](https://github.com/grafana/loki/issues/13578)) ([29a37d5](https://github.com/grafana/loki/commit/29a37d5dcdab33d62615a79aefe97ea2a80dea03))
+* split the error and agg metric cases for clarity ([#13913](https://github.com/grafana/loki/issues/13913)) ([d2474fa](https://github.com/grafana/loki/commit/d2474fa9892cf15f15ff798dd6cfc0dc736844e6))
+* stream ownership check ([#13314](https://github.com/grafana/loki/issues/13314)) ([5ae5b31](https://github.com/grafana/loki/commit/5ae5b31b1f9ffcac9193cfd4ba47a64d911966db))
+* support multi-zone ingesters when converting global to local limits for streams in limiter.go ([#13321](https://github.com/grafana/loki/issues/13321)) ([e28c15f](https://github.com/grafana/loki/commit/e28c15f56c2aab62eecbaa382055eac99fc3a581))
+* try reading chunks which have incorrect offset for blocks ([#13720](https://github.com/grafana/loki/issues/13720)) ([7e224d5](https://github.com/grafana/loki/commit/7e224d53de8a5c43448ffd341f0d9c48abb335ef))
+* update fixed limit once streams ownership re-checked ([#13231](https://github.com/grafana/loki/issues/13231)) ([7ac19f0](https://github.com/grafana/loki/commit/7ac19f00b4f5186b0c38a8dad23cf61e14d071de))
+* Update Loki v3 Helm statefulset-ingester.yaml template ([#13118](https://github.com/grafana/loki/issues/13118)) ([5b4e576](https://github.com/grafana/loki/commit/5b4e57602f7b7e5f4d73204ad682826d1041f8a8))
+* Use elements match in gapsBetweenTSDBsAndMetas test ([#13722](https://github.com/grafana/loki/issues/13722)) ([4cbe2a6](https://github.com/grafana/loki/commit/4cbe2a6a85c3095f66610cffd32cb3d3bdd43b3f))
+
+
+### Performance Improvements
+
+* Avoid looking up unnecessary TSDB symbols during Volume API ([#13960](https://github.com/grafana/loki/issues/13960)) ([7c1a849](https://github.com/grafana/loki/commit/7c1a8493b3837396d085547a42d8260271f1d68a))
+* **blooms:** always return bloom pages to allocator ([#13288](https://github.com/grafana/loki/issues/13288)) ([0cb3ff1](https://github.com/grafana/loki/commit/0cb3ff18307eecb5986a284256fc662ecdef1692))
+* **blooms:** Avoid tiny string allocations for insert cache ([#13487](https://github.com/grafana/loki/issues/13487)) ([652ad24](https://github.com/grafana/loki/commit/652ad2455c58d35f5f0b3a7f64f787f666345cce))
+* **blooms:** mempool no longer zeroes out buffers unnecessarily ([#13282](https://github.com/grafana/loki/issues/13282)) ([eb1cd4c](https://github.com/grafana/loki/commit/eb1cd4c8555a42cc12c02124ee39a3be0120587b))
+* Gather aggregate per-line and per-tenant metrics for Drain patterns ([#13368](https://github.com/grafana/loki/issues/13368)) ([bf1d6e3](https://github.com/grafana/loki/commit/bf1d6e36f7f0758a3a5a9844291d3a52265d6dbb))
+* Limit tokens per pattern to 128 ([#13376](https://github.com/grafana/loki/issues/13376)) ([a1efafd](https://github.com/grafana/loki/commit/a1efafdad22f18c960f6a3bc273072f24f988121))
+* **mempool:** Replace `sync.Mutex` with `sync.Once` ([#13293](https://github.com/grafana/loki/issues/13293)) ([61a9854](https://github.com/grafana/loki/commit/61a9854eb189e5d2c91528ced10ecf39071df680))
+* Prune unused pattern branches ([#13329](https://github.com/grafana/loki/issues/13329)) ([5ef18cf](https://github.com/grafana/loki/commit/5ef18cff9296d56cab4dd99227c40de726b08ea6))
+* Re-introduce fixed size memory pool for bloom querier ([#13172](https://github.com/grafana/loki/issues/13172)) ([4117b6c](https://github.com/grafana/loki/commit/4117b6ca981b2852a15b102be2394bffce37b3e2))
+
+
+### Miscellaneous Chores
+
+* **blooms:** Remove bloom compactor component ([#13969](https://github.com/grafana/loki/issues/13969)) ([b75eacc](https://github.com/grafana/loki/commit/b75eacc288c52737e41ba9932c06409c643e2e5c))
+* **jsonnet:** convert read statefulset into deployment for loki-simple-scalable ([#13977](https://github.com/grafana/loki/issues/13977)) ([1535183](https://github.com/grafana/loki/commit/1535183453737933c249e8376775ef273da52698))
## [3.1.1](https://github.com/grafana/loki/compare/v3.1.0...v3.1.1) (2024-08-08)
diff --git a/CODEOWNERS b/CODEOWNERS
index a118c5a40c0b1..1d122e1f580c5 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -12,5 +12,9 @@
# The observability logs team is listed as co-codeowner for grammar file. This is to receive notifications about updates, so these can be implemented in https://github.com/grafana/lezer-logql
/pkg/logql/syntax/expr.y @grafana/observability-logs @grafana/loki-team
+# Nix
+/nix/ @trevorwhitney
+flake.nix @trevorwhitney
+
# No owners - allows sub-maintainers to merge changes.
CHANGELOG.md
diff --git a/Makefile b/Makefile
index c5afc7b669d64..979ef5b0bc1ae 100644
--- a/Makefile
+++ b/Makefile
@@ -1,16 +1,111 @@
-# Adapted from https://www.thapaliya.com/en/writings/well-documented-makefiles/
-.PHONY: help
-help: ## Display this help and any documented user-facing targets. Other undocumented targets may be present in the Makefile.
-help:
- @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make