From 96bd30f8611834c3f35ef18750951d7445e9b135 Mon Sep 17 00:00:00 2001 From: Killian Delarue Date: Thu, 3 Apr 2025 14:34:17 +0200 Subject: [PATCH 1/3] Grafazos, CI: [grafazos_release_tag] depends on [build_grafazos] --- .gitlab/ci/pipelines/grafazos_release_tag_test.yml | 5 ++++- grafazos/ci/release.ml | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitlab/ci/pipelines/grafazos_release_tag_test.yml b/.gitlab/ci/pipelines/grafazos_release_tag_test.yml index 0995895cc26c..6e352d3dca93 100644 --- a/.gitlab/ci/pipelines/grafazos_release_tag_test.yml +++ b/.gitlab/ci/pipelines/grafazos_release_tag_test.yml @@ -51,7 +51,10 @@ gitlab:release: stage: publish_release_gitlab tags: - gcp - dependencies: [] + needs: + - build_grafazos_dashboards + dependencies: + - build_grafazos_dashboards timeout: 60 minutes interruptible: false script: diff --git a/grafazos/ci/release.ml b/grafazos/ci/release.ml index d093b5e77cae..d3caf93033d9 100644 --- a/grafazos/ci/release.ml +++ b/grafazos/ci/release.ml @@ -27,6 +27,7 @@ let job_gitlab_release = ~image:Images.ci_release ~stage:Stages.publish_release_gitlab ~interruptible:false + ~dependencies:(Dependent [Artifacts (Common.job_build_grafazos ())]) ~name:"gitlab:release" ["./grafazos/scripts/releases/create_gitlab_release.sh"] -- GitLab From 98c6f0cf8cd2674d3643ed9ca2c0f329de4721cf Mon Sep 17 00:00:00 2001 From: Killian Delarue Date: Fri, 4 Apr 2025 10:06:52 +0200 Subject: [PATCH 2/3] Grafazos, Releases: Upload dashboards in gitlab package registry --- .../scripts/releases/create_gitlab_release.sh | 50 +++++++++++++++++++ grafazos/scripts/releases/release.sh | 2 + 2 files changed, 52 insertions(+) diff --git a/grafazos/scripts/releases/create_gitlab_release.sh b/grafazos/scripts/releases/create_gitlab_release.sh index 2ad1468e5277..efcd0cf88c4f 100755 --- a/grafazos/scripts/releases/create_gitlab_release.sh +++ b/grafazos/scripts/releases/create_gitlab_release.sh @@ -12,6 +12,56 @@ fi set -eu +# https://docs.gitlab.com/ee/user/packages/generic_packages/index.html#download-package-file +# :gitlab_api_url/projects/:id/packages/generic/:package_name/:package_version/:file_name +url="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${gitlab_package_name}/${release_no_v}" + +# Copied from `scripts/ci/create_gitlab_package.sh`. +gitlab_upload() { + local_path="${1}" + remote_file="${2}" + + # Upload only if not running in dry-run + if [ -z "${dry_run:-}" ]; then + + echo "Upload to ${url}/${remote_file}" + + i=0 + max_attempts=10 + + # Retry because gitlab.com is flaky sometimes, curl upload fails with http status code 524 (timeout) + while [ "${i}" != "${max_attempts}" ]; do + i=$((i + 1)) + http_code=$(curl -fsSL -o /dev/null -w "%{http_code}" \ + -H "JOB-TOKEN: ${CI_JOB_TOKEN}" \ + -T "${local_path}" \ + "${url}/${remote_file}") + + # Success + [ "${http_code}" = '201' ] && return + # Failure + echo "Error: HTTP response code ${http_code}, expected 201" + # Do not backoff after last attempt + [ "${i}" = "${max_attempts}" ] && break + # Backoff + echo "Retry (${i}) in one minute..." + sleep 60s + done + + echo "Error: maximum attempts exhausted (${max_attempts})" + exit 1 + else + echo "The following file would be uploaded if not running in dry-run mode: ${url}/${remote_file}" + fi +} + +dashboards="$(find grafazos/output/ -type f -name "*.json")" + +echo "Upload Grafazos Dashboards" +for dashboard in ${dashboards}; do + gitlab_upload "${dashboard}" "$(basename "${dashboard}")" +done + # GitLab Release command-line tool # https://gitlab.com/gitlab-org/release-cli diff --git a/grafazos/scripts/releases/release.sh b/grafazos/scripts/releases/release.sh index 7baa3d015f9c..70884a1059ba 100755 --- a/grafazos/scripts/releases/release.sh +++ b/grafazos/scripts/releases/release.sh @@ -12,3 +12,5 @@ release=$(echo "${CI_COMMIT_TAG}" | grep -oE '^grafazos-v([0-9]+)\.([0-9]+))?$' release_no_v=$(echo "${release}" | sed -e 's/^grafazos-v//g') release_name="Grafazos version ${release_no_v}" + +gitlab_package_name="grafazos-${release_no_v}" -- GitLab From b3c9ec26231c7b8835a4d47b10336c23acfd8ce7 Mon Sep 17 00:00:00 2001 From: Killian Delarue Date: Fri, 4 Apr 2025 10:18:50 +0200 Subject: [PATCH 3/3] Grafazos, Releases: Link dashboards in gitlab release --- .../scripts/releases/create_gitlab_release.sh | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/grafazos/scripts/releases/create_gitlab_release.sh b/grafazos/scripts/releases/create_gitlab_release.sh index efcd0cf88c4f..0ea49ef293da 100755 --- a/grafazos/scripts/releases/create_gitlab_release.sh +++ b/grafazos/scripts/releases/create_gitlab_release.sh @@ -62,6 +62,18 @@ for dashboard in ${dashboards}; do gitlab_upload "${dashboard}" "$(basename "${dashboard}")" done +ret=$(curl -fsSL -X GET \ + -H "JOB-TOKEN: ${CI_JOB_TOKEN}" \ + "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages?sort=desc&package_name=${gitlab_package_name}" | + jq -r ".[] | select(.version==\"${release_no_v}\") | ._links.web_path") + +if [ -z "${ret}" ]; then + echo "Error: ${gitlab_package_name} could not find package matching version ${release_no_v}" + exit 1 +else + dashboards_url="https://${CI_SERVER_HOST}${ret}" +fi + # GitLab Release command-line tool # https://gitlab.com/gitlab-org/release-cli @@ -70,4 +82,5 @@ export DEBUG='true' release-cli create \ --name="${release_name}" \ - --tag-name="${CI_COMMIT_TAG}" + --tag-name="${CI_COMMIT_TAG}" \ + --assets-link="{\"name\":\"Dashboards\",\"url\":\"${dashboards_url}\",\"link_type\":\"package\"}" -- GitLab