Skip to content

Commit 67e1213

Browse files
committed
Add workflow
1 parent 15555b0 commit 67e1213

2 files changed

Lines changed: 164 additions & 0 deletions

File tree

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
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}"
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: Bump Meilisearch version
2+
3+
on:
4+
schedule:
5+
- cron: "0 9 * * *"
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: write
10+
pull-requests: write
11+
12+
concurrency:
13+
group: meilisearch-version-bot
14+
15+
jobs:
16+
bump-meilisearch:
17+
runs-on: ubuntu-latest
18+
env:
19+
GH_TOKEN: ${{ secrets.MEILI_BOT_GH_PAT }}
20+
MEILISEARCH_REPO: meilisearch/meilisearch
21+
MEILISEARCH_DOCKER_IMAGE: getmeili/meilisearch-enterprise
22+
BASE_BRANCH: main
23+
BRANCH_PREFIX: bump-meilisearch-v
24+
SHOULD_UPDATE: "false"
25+
steps:
26+
- uses: actions/checkout@v6
27+
with:
28+
ref: ${{ env.BASE_BRANCH }}
29+
fetch-depth: 0
30+
31+
- name: Detect and prepare Meilisearch version bump
32+
id: bump
33+
run: bash .github/scripts/bump-meilisearch-version.sh
34+
35+
- name: Commit and push changes
36+
if: steps.bump.outputs.should_update == 'true'
37+
uses: EndBug/add-and-commit@v9
38+
with:
39+
message: "Bump Meilisearch to ${{ steps.bump.outputs.target_tag }}"
40+
new_branch: ${{ steps.bump.outputs.new_branch }}
41+
add: |
42+
docker-compose.yml
43+
.github/workflows/tests.yml
44+
45+
- name: Create PR
46+
if: steps.bump.outputs.should_update == 'true'
47+
env:
48+
TARGET_TAG: ${{ steps.bump.outputs.target_tag }}
49+
NEW_BRANCH: ${{ steps.bump.outputs.new_branch }}
50+
LATEST_TAG: ${{ steps.bump.outputs.latest_tag }}
51+
run: |
52+
OPEN_COUNT=$(gh pr list --state open --head "$NEW_BRANCH" --base "$BASE_BRANCH" --json number --jq 'length')
53+
if [ "$OPEN_COUNT" -gt 0 ]; then
54+
echo "PR already exists for branch $NEW_BRANCH"
55+
exit 0
56+
fi
57+
58+
gh pr create \
59+
--title "Bump Meilisearch to $TARGET_TAG" \
60+
--body "$(cat <<EOF
61+
_This PR is auto-generated._
62+
63+
Tracks \`$MEILISEARCH_REPO\` stable releases and updates pinned image tags to floating minor \`$TARGET_TAG\`.
64+
Patch releases are intentionally not PR'd; Docker resolves to the latest patch for this minor.
65+
66+
- Upstream latest stable tag detected: \`$LATEST_TAG\`
67+
- Updated files:
68+
- \`.github/workflows/tests.yml\`
69+
- \`docker-compose.yml\`
70+
71+
[Release notes](https://github.com/meilisearch/meilisearch/releases/tag/$LATEST_TAG)
72+
EOF
73+
)" \
74+
--base "$BASE_BRANCH" \
75+
--head "$NEW_BRANCH"

0 commit comments

Comments
 (0)