|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +set -euo pipefail |
| 4 | + |
| 5 | +MEILISEARCH_REPO="${MEILISEARCH_REPO:-meilisearch/meilisearch}" |
| 6 | +MEILISEARCH_DOCKER_IMAGE="${MEILISEARCH_DOCKER_IMAGE:-getmeili/meilisearch-enterprise}" |
| 7 | +BASE_BRANCH="${BASE_BRANCH:-main}" |
| 8 | +BRANCH_PREFIX="${BRANCH_PREFIX:-bump-meilisearch-v}" |
| 9 | + |
| 10 | +DOCKER_COMPOSE_FILE="docker-compose.yml" |
| 11 | +TESTS_WORKFLOW_FILE=".github/workflows/tests.yml" |
| 12 | + |
| 13 | +write_result() { |
| 14 | + local should_update="$1" |
| 15 | + |
| 16 | + if [[ -n "${GITHUB_ENV:-}" ]]; then |
| 17 | + { |
| 18 | + echo "SHOULD_UPDATE=${should_update}" |
| 19 | + echo "LATEST_TAG=${LATEST_TAG}" |
| 20 | + echo "TARGET_TAG=${TARGET_TAG}" |
| 21 | + echo "NEW_BRANCH=${NEW_BRANCH}" |
| 22 | + } >> "${GITHUB_ENV}" |
| 23 | + fi |
| 24 | + |
| 25 | + if [[ -n "${GITHUB_OUTPUT:-}" ]]; then |
| 26 | + { |
| 27 | + echo "should_update=${should_update}" |
| 28 | + echo "latest_tag=${LATEST_TAG}" |
| 29 | + echo "target_tag=${TARGET_TAG}" |
| 30 | + echo "new_branch=${NEW_BRANCH}" |
| 31 | + } >> "${GITHUB_OUTPUT}" |
| 32 | + fi |
| 33 | +} |
| 34 | + |
| 35 | +echo "Checking latest stable release from ${MEILISEARCH_REPO}" |
| 36 | +LATEST_TAG="$(gh api "repos/${MEILISEARCH_REPO}/releases/latest" --jq '.tag_name')" |
| 37 | +if ! [[ "${LATEST_TAG}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then |
| 38 | + echo "Unexpected latest tag format: ${LATEST_TAG}" >&2 |
| 39 | + exit 1 |
| 40 | +fi |
| 41 | + |
| 42 | +LATEST_VERSION="${LATEST_TAG#v}" |
| 43 | +LATEST_MM="$(echo "${LATEST_VERSION}" | awk -F. '{print $1"."$2}')" |
| 44 | +TARGET_TAG="v${LATEST_MM}" |
| 45 | +NEW_BRANCH="${BRANCH_PREFIX}${LATEST_MM}" |
| 46 | + |
| 47 | +CURRENT_TAG="$(sed -nE "s|.*${MEILISEARCH_DOCKER_IMAGE}:(v[0-9]+\.[0-9]+(\.[0-9]+)?)|\1|p" "${DOCKER_COMPOSE_FILE}" | head -n 1 || true)" |
| 48 | +CURRENT_MM="" |
| 49 | +if [[ -n "${CURRENT_TAG}" ]]; then |
| 50 | + CURRENT_VERSION="${CURRENT_TAG#v}" |
| 51 | + CURRENT_MM="$(echo "${CURRENT_VERSION}" | awk -F. '{print $1"."$2}')" |
| 52 | +fi |
| 53 | + |
| 54 | +NEED_UPDATE=0 |
| 55 | +if [[ -z "${CURRENT_MM}" || "${CURRENT_MM}" != "${LATEST_MM}" ]]; then |
| 56 | + NEED_UPDATE=1 |
| 57 | +fi |
| 58 | + |
| 59 | +# Normalize to patchless minor tag in both files. |
| 60 | +if ! grep -q "${MEILISEARCH_DOCKER_IMAGE}:${TARGET_TAG}" "${DOCKER_COMPOSE_FILE}" \ |
| 61 | + || ! grep -q "${MEILISEARCH_DOCKER_IMAGE}:${TARGET_TAG}" "${TESTS_WORKFLOW_FILE}"; then |
| 62 | + NEED_UPDATE=1 |
| 63 | +fi |
| 64 | + |
| 65 | +if [[ "${NEED_UPDATE}" -eq 0 ]]; then |
| 66 | + echo "No update needed. Already on latest minor (${LATEST_MM}.x) with patchless tags." |
| 67 | + write_result "false" |
| 68 | + exit 0 |
| 69 | +fi |
| 70 | + |
| 71 | +OPEN_COUNT="$(gh pr list --state open --head "${NEW_BRANCH}" --base "${BASE_BRANCH}" --json number --jq 'length')" |
| 72 | +if [[ "${OPEN_COUNT}" -gt 0 ]]; then |
| 73 | + echo "Open PR already exists for ${NEW_BRANCH}, skipping." |
| 74 | + write_result "false" |
| 75 | + exit 0 |
| 76 | +fi |
| 77 | + |
| 78 | +sed -i.bak -E "s|(${MEILISEARCH_DOCKER_IMAGE}:)(latest|v[0-9]+\.[0-9]+(\.[0-9]+)?)|\1${TARGET_TAG}|g" "${DOCKER_COMPOSE_FILE}" |
| 79 | +rm "${DOCKER_COMPOSE_FILE}.bak" |
| 80 | + |
| 81 | +sed -i.bak -E "s|(${MEILISEARCH_DOCKER_IMAGE}:)(latest|v[0-9]+\.[0-9]+(\.[0-9]+)?)|\1${TARGET_TAG}|g" "${TESTS_WORKFLOW_FILE}" |
| 82 | +rm "${TESTS_WORKFLOW_FILE}.bak" |
| 83 | + |
| 84 | +grep "${MEILISEARCH_DOCKER_IMAGE}:${TARGET_TAG}" "${DOCKER_COMPOSE_FILE}" >/dev/null |
| 85 | +grep "${MEILISEARCH_DOCKER_IMAGE}:${TARGET_TAG}" "${TESTS_WORKFLOW_FILE}" >/dev/null |
| 86 | + |
| 87 | +write_result "true" |
| 88 | + |
| 89 | +echo "Prepared Meilisearch bump to ${TARGET_TAG} (${LATEST_TAG}) on branch ${NEW_BRANCH}" |
0 commit comments