Skip to content

Commit 3c386cc

Browse files
ci: fix logql analyzer (backport release-3.2.x) [manual backport] (#14518)
1 parent e9bbaf3 commit 3c386cc

File tree

3 files changed

+283
-0
lines changed

3 files changed

+283
-0
lines changed

.github/workflows/logql-analyzer.yml

+114
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
name: LogQL Analyzer
2+
3+
on:
4+
workflow_dispatch:
5+
release:
6+
types:
7+
- released
8+
9+
permissions:
10+
contents: read
11+
id-token: write
12+
13+
jobs:
14+
analyze:
15+
runs-on: ubuntu-latest
16+
17+
env:
18+
BUILD_TIMEOUT: 60
19+
IMAGE_PREFIX: "grafana"
20+
RELEASE_VERSION: "${{ github.event.release.tag_name || 'test' }}"
21+
steps:
22+
- uses: actions/checkout@v4
23+
with:
24+
fetch-tags: true
25+
path: loki
26+
27+
- name: prepare
28+
id: prepare
29+
env:
30+
MAJOR_MINOR_VERSION_REGEXP: '([0-9]+\\.[0-9]+)'
31+
RELEASE_TAG_REGEXP: '^([0-9]+\\.[0-9]+\\.[0-9]+)$'
32+
working-directory: loki
33+
run: |
34+
echo "$(./tools/image-tag)" > .tag
35+
if [[ "$RELEASE_VERSION" == "test" ]]; then
36+
echo "RELEASE_VERSION is not set, using image tag"
37+
RELEASE_VERSION="$(cat .tag)"
38+
fi
39+
echo "RELEASE_VERSION: $RELEASE_VERSION"
40+
41+
# if the tag matches the pattern `D.D.D` then RELEASE_NAME="D-D-x", otherwise RELEASE_NAME="next"
42+
RELEASE_NAME=$([[ $RELEASE_VERSION =~ $RELEASE_TAG_REGEXP ]] && echo $RELEASE_TAG | grep -oE $MAJOR_MINOR_VERSION_REGEXP | sed "s/\\./-/g" | sed "s/$/-x/" || echo "next")
43+
echo "RELEASE_NAME: $RELEASE_NAME"
44+
45+
echo "release_version=${RELEASE_VERSION}" >> "$GITHUB_OUTPUT"
46+
echo "release_name=${RELEASE_NAME}" >> "$GITHUB_OUTPUT"
47+
48+
- id: "get-github-app-token"
49+
name: "get github app token"
50+
uses: "actions/create-github-app-token@v1"
51+
with:
52+
app-id: "${{ secrets.APP_ID }}"
53+
owner: "${{ github.repository_owner }}"
54+
private-key: "${{ secrets.APP_PRIVATE_KEY }}"
55+
56+
- name: "Set up QEMU"
57+
uses: "docker/setup-qemu-action@v3"
58+
- name: "set up docker buildx"
59+
uses: "docker/setup-buildx-action@v3"
60+
- name: "Login to DockerHub (from vault)"
61+
uses: "grafana/shared-workflows/actions/dockerhub-login@main"
62+
63+
- name: "Build and push"
64+
timeout-minutes: "${{ fromJSON(env.BUILD_TIMEOUT) }}"
65+
uses: "docker/build-push-action@v6"
66+
with:
67+
build-args: "IMAGE_TAG=${{ steps.prepare.outputs.release_version }}"
68+
context: loki
69+
file: "loki/cmd/logql-analyzer/Dockerfile"
70+
platforms: "linux/amd64"
71+
push: true
72+
tags: "grafana/logql-analyzer:${{ steps.prepare.outputs.release_version }}"
73+
74+
- name: Log in to Google Artifact Registry
75+
uses: grafana/shared-workflows/actions/login-to-gar@main
76+
with:
77+
registry: "us-docker.pkg.dev"
78+
environment: "prod"
79+
80+
- name: Update to latest image
81+
env:
82+
GITHUB_TOKEN: ${{ steps.get-github-app-token.outputs.token }}
83+
RELEASE_NAME: ${{ steps.prepare.outputs.release_name }}
84+
RELEASE_VERSION: ${{ steps.prepare.outputs.release_version }}
85+
run: |
86+
set -e -o pipefail
87+
88+
cat << EOF > config.json
89+
{
90+
"repo_name": "deployment_tools",
91+
"destination_branch": "master",
92+
"git_author_email": "119986603+updater-for-ci[bot]@users.noreply.github.com",
93+
"git_author_name": "version_bumper[bot]",
94+
"git_committer_email": "119986603+updater-for-ci[bot]@users.noreply.github.com",
95+
"git_committer_name": "version_bumper[bot]",
96+
"pull_request_branch_prefix": "logql-analyzer/updater",
97+
"pull_request_enabled": true,
98+
"pull_request_existing_strategy": "replace",
99+
"pull_request_title_prefix": "[logql-analyzer updater] ",
100+
"pull_request_message": "Add logql-analyzer version to ${RELEASE_VERSION} to supported versions",
101+
"update_jsonnet_attribute_configs": [
102+
{
103+
"file_path": "ksonnet/environments/logql-analyzer/supported-versions.libsonnet",
104+
"jsonnet_key": "${RELEASE_NAME}",
105+
"jsonnet_value": "grafana/logql-analyzer:${RELEASE_VERSION}-amd64",
106+
"upsert": true
107+
}
108+
]
109+
}
110+
EOF
111+
112+
docker run --rm \
113+
-e GITHUB_TOKEN="$GITHUB_TOKEN" \
114+
-e CONFIG_JSON="$(cat config.json)" us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/updater |& tee updater-output.log
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#!/usr/bin/env bash
2+
# SPDX-License-Identifier: AGPL-3.0-only
3+
4+
set -exo pipefail
5+
6+
script_dir=$(cd "$(dirname "$0")" && pwd)
7+
# shellcheck disable=SC2250,SC1091
8+
source "${script_dir}/common.sh"
9+
10+
calculate_next_chart_version() {
11+
local current_chart_version=$1
12+
13+
local current_chart_semver
14+
current_chart_semver="$(echo "${current_chart_version}" | grep -P -o '^(\d+.){2}\d+')"
15+
local new_chart_semver="${current_chart_semver}"
16+
new_chart_semver=$(increment_semver "${current_chart_semver}" 1)
17+
new_chart_semver=$(set_semver_patch_to_zero "${new_chart_semver}")
18+
echo "${new_chart_semver}"
19+
}
20+
21+
validate_version_update() {
22+
local new_chart_version=$1
23+
local current_chart_version=$2
24+
local latest_loki_tag=$3
25+
26+
if [[ "${new_chart_version}" == "${current_chart_version}" ]]; then
27+
echo "New chart version (${new_chart_version}) is the same as current version (${current_chart_version}); not submitting PR"
28+
exit 1
29+
fi
30+
}
31+
32+
latest_loki_tag=$(sed -E "s/v(.*)/\1/g" <<<"$1")
33+
34+
values_file=production/helm/loki/values.yaml
35+
chart_file=production/helm/loki/Chart.yaml
36+
37+
current_chart_version=$(get_yaml_node "${chart_file}" .version)
38+
new_chart_version=$(calculate_next_chart_version "${current_chart_version}")
39+
40+
validate_version_update "${new_chart_version}" "${current_chart_version}" "${latest_loki_tag}"
41+
42+
update_yaml_node "${values_file}" .loki.image.tag "${latest_loki_tag}"
43+
44+
update_yaml_node "${values_file}" .enterprise.image.tag "${latest_loki_tag}"
45+
update_yaml_node "${chart_file}" .appVersion "${latest_loki_tag}"
46+
update_yaml_node "${chart_file}" .version "${new_chart_version}"
47+
48+
sed --in-place \
49+
--regexp-extended \
50+
"s/(.*\<AUTOMATED_UPDATES_LOCATOR\>.*)/\1\n\n## ${new_chart_version}\n\n- \[CHANGE\] Changed version of Grafana Loki to ${latest_loki_tag}/g" production/helm/loki/CHANGELOG.md
51+
52+
make TTY='' helm-docs
53+
54+
# shellcheck disable=SC2154,SC2250
55+
echo "new_chart_version=${new_chart_version}" >> "$GITHUB_OUTPUT"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/usr/bin/env bash
2+
# SPDX-License-Identifier: AGPL-3.0-only
3+
4+
set -exo pipefail
5+
6+
script_dir=$(cd "$(dirname "$0")" && pwd)
7+
# shellcheck disable=SC2250,SC1091
8+
source "${script_dir}/common.sh"
9+
10+
# Uses docker hub image tags to figure out what is the latest image tag
11+
find_latest_image_tag() {
12+
local docker_hub_repo=$1
13+
local regExp="^(k|weekly-k)\d+-[a-z0-9]+"
14+
local crane_results
15+
crane_results="$(crane ls "${docker_hub_repo}" | grep -P "${regExp}" | sed -E "s/([weekly-]*k[[:digit:]]*)-([^-]*).*/\1-\2/g" | sort -Vur)"
16+
set +o pipefail
17+
echo "${crane_results}" | head -1
18+
set -o pipefail
19+
}
20+
21+
# takes k197-abcdef and returns r197, k197-abcdef-arm64 and returns k197, weekly-k197-abcdef and returns k197
22+
extract_k_version() {
23+
sed -E "s/[weekly-]*(k[[:digit:]]*).*/\1/g" <<<"$1"
24+
}
25+
26+
calculate_next_chart_version() {
27+
local current_chart_version=$1
28+
local latest_image_tag=$2
29+
local k_release=$3
30+
31+
local current_chart_semver
32+
current_chart_semver=$(echo "${current_chart_version}" | grep -P -o '^(\d+.){2}\d+')
33+
local new_chart_weekly
34+
new_chart_weekly=$(extract_k_version "${latest_image_tag}" | grep -P -o '\d+')
35+
local new_chart_semver="${current_chart_semver}"
36+
if [[ "${current_chart_version}" != *weekly* ]]; then
37+
# If previous version was not a weekly, then it was a stable release.
38+
# _This_ weekly release should have a semver that's one above the stable release.
39+
new_chart_semver=$(increment_semver "${current_chart_semver}" 1)
40+
# Also reset the patch release number to 0.
41+
new_chart_semver=$(set_semver_patch_to_zero "${new_chart_semver}")
42+
fi
43+
44+
if ${k_release}; then
45+
echo "${new_chart_semver}-weekly.${new_chart_weekly}"
46+
else
47+
echo "${new_chart_semver}"
48+
fi
49+
}
50+
51+
validate_version_update() {
52+
local new_chart_version=$1
53+
local current_chart_version=$2
54+
local latest_gel_tag=$3
55+
local latest_loki_tag=$4
56+
57+
if [[ "${new_chart_version}" == "${current_chart_version}" ]]; then
58+
echo "New chart version (${new_chart_version}) is the same as current version (${current_chart_version}); not submitting weekly PR"
59+
exit 1
60+
fi
61+
62+
local gel_weekly_version
63+
gel_weekly_version=$(extract_k_version "${latest_gel_tag}")
64+
local loki_weekly_version
65+
loki_weekly_version=$(extract_k_version "${latest_loki_tag}")
66+
echo "Comparing GEL weekly version (${gel_weekly_version}) with Loki weekly version (${loki_weekly_version})"
67+
if [[ "${gel_weekly_version}" != "${loki_weekly_version}" ]]; then
68+
echo "GEL weekly version (${gel_weekly_version}) does not match Loki weekly version (${loki_weekly_version}); not submitting PR"
69+
exit 1
70+
fi
71+
}
72+
73+
k_release=false
74+
if [[ "$1" == "-k" ]]; then
75+
k_release=true
76+
shift
77+
fi
78+
79+
values_file=production/helm/loki/values.yaml
80+
chart_file=production/helm/loki/Chart.yaml
81+
82+
latest_loki_tag=$(find_latest_image_tag grafana/loki)
83+
latest_gel_tag=$(find_latest_image_tag grafana/enterprise-logs)
84+
current_chart_version=$(get_yaml_node "${chart_file}" .version)
85+
new_chart_version=$(calculate_next_chart_version "${current_chart_version}" "${latest_loki_tag}" "${k_release}")
86+
87+
validate_version_update "${new_chart_version}" "${current_chart_version}" "${latest_gel_tag}" "${latest_loki_tag}"
88+
89+
if ${k_release}; then
90+
update_yaml_node "${values_file}" .loki.image.tag "${latest_loki_tag}"
91+
update_yaml_node "${values_file}" .enterprise.image.tag "${latest_gel_tag}"
92+
update_yaml_node "${chart_file}" .appVersion "$(extract_k_version "${latest_loki_tag}")"
93+
fi
94+
95+
update_yaml_node "${chart_file}" .version "${new_chart_version}"
96+
97+
if ${k_release}; then
98+
sed --in-place \
99+
--regexp-extended \
100+
"s/(.*\<AUTOMATED_UPDATES_LOCATOR\>.*)/\1\n\n## ${new_chart_version}\n\n- \[CHANGE\] Changed version of Grafana Loki to ${latest_loki_tag}\n- \[CHANGE\] Changed version of Grafana Enterprise Logs to ${latest_gel_tag}/g" production/helm/loki/CHANGELOG.md
101+
else
102+
sed --in-place \
103+
--regexp-extended \
104+
"s/(.*\<AUTOMATED_UPDATES_LOCATOR\>.*)/\1\n\n## ${new_chart_version}/g" production/helm/loki/CHANGELOG.md
105+
fi
106+
107+
make TTY='' helm-docs
108+
109+
# shellcheck disable=SC2154,SC2250
110+
echo "new_chart_version=${new_chart_version}" >> "$GITHUB_OUTPUT"
111+
if ${k_release}; then
112+
# shellcheck disable=SC2154,SC2250
113+
echo "weekly=$(extract_k_version "${latest_loki_tag}")" >> "$GITHUB_OUTPUT"
114+
fi

0 commit comments

Comments
 (0)