Meilisearch: 2. The lifecycle script

This documentation is part of the GitHub Actions & GitLab CI guide. You can view the complete guide here: Launch a real Meilisearch service from your GitHub Actions or GitLab CI pipeline, run your tests against it, and automatically tear it down.

Welcome to the Stackhero documentation!

If you are looking for a fast, typo-tolerant search engine that is easy to deploy, Stackhero's Meilisearch cloud service lets you get started in just a few minutes. Here’s what you get:

  • Custom domain support with integrated HTTPS for secure access.
  • Simple, one-click updates. No manual intervention required.
  • Consistent performance and strong isolation thanks to your own private, dedicated infrastructure.

You can launch your Meilisearch cloud hosting on Stackhero in just 5 minutes. The setup is designed to save you time and make your deployment straightforward.

Here is a complete example script that manages the entire service lifecycle. It shows how simple the setup is, with just a few commands. You can copy the ready-to-use YAML for your platform from the sections below.

#!/bin/bash
set -euo pipefail

# STACKHERO_TOKEN is supplied by the CI secret, the CLI picks it up automatically.

stackName="ci-meilisearch-$$"          # Unique stack name for each run
serviceStore="meilisearch"             # The Meilisearch service store
instance="10G"        # Change this as needed (see step 3)
region="europe"                         # Region name (see stackhero regions-list)

# 1. Install the CLI on the runner
curl -fsSL https://www.stackhero.io/install.sh | sh

# 2. Install the client required for smoke testing (jq + curl are the baseline)
apt-get update && apt-get install -y --no-install-recommends jq curl

# 3. Create a dedicated stack for this run
stackId=$(stackhero --format=script stack-create --name="$stackName")
echo "Stack created: $stackId"

# 4. Add Meilisearch and capture its service id
serviceId=$(stackhero --format=script service-add \
  --stack="$stackId" \
  --service-store="$serviceStore" \
  --instance="$instance" \
  --region="$region")
echo "Service added: $serviceId"

# 5. Wait until the service is running (this may take a couple of minutes)
stackhero service-wait-for --service="$serviceId"

# 6. Read the configuration (contains the generated credentials)
config=$(stackhero service-configuration-get --service="$serviceId" --format=json)

# 7. Extract the credentials you need
host=$(echo "$config" | jq -r '.configuration.domain')

# 8. Smoke test: Call the Meilisearch health endpoint.
curl -fsS "https://$host/health" | grep -q '"status":"available"'

echo "✅ Meilisearch is reachable from CI."

The teardown step, which deletes the service, waits for its removal, and then deletes the stack, is detailed in the platform-specific sections below. This approach ensures cleanup always happens, even if a smoke test fails.

A stack can only be deleted once it is empty. Always delete the service first and wait for its removal, then delete the stack. The service-wait-for command ensures the service is either running or deleted before proceeding, making it the right tool for deletion waits as well.