Meilisearch: 4. GitHub Actions

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 enables you to get started within minutes. Here is what you benefit from:

  • 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 simplify your deployment.

To get started, save the following as .github/workflows/ci.yml. From now on, every push and pull request will run tests against a real Meilisearch instance.

name: CI with Meilisearch

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    env:
      STACKHERO_TOKEN: ${{ secrets.STACKHERO_TOKEN }}
      STACK_NAME: ci-meilisearch-${{ github.run_id }}-${{ github.run_attempt }}
      INSTANCE: "10G"   # Change this as needed (see step 3)
      REGION: europe
    steps:
      - uses: actions/checkout@v4

      - name: Install the Stackhero CLI and the client
        run: |
          curl -fsSL https://www.stackhero.io/install.sh | sh
          apt-get update && apt-get install -y --no-install-recommends jq curl

      - name: Create the Meilisearch service
        run: |
          set -euo pipefail
          STACK_ID=$(stackhero --format=script stack-create --name="$STACK_NAME")
          echo "STACK_ID=$STACK_ID" >> "$GITHUB_ENV"
          SERVICE_ID=$(stackhero --format=script service-add \
            --stack="$STACK_ID" \
            --service-store="meilisearch" \
            --instance="$INSTANCE" \
            --region="$REGION")
          echo "SERVICE_ID=$SERVICE_ID" >> "$GITHUB_ENV"
          stackhero service-wait-for --service="$SERVICE_ID"

      - name: Run tests against Meilisearch
        run: |
          set -euo pipefail
          config=$(stackhero service-configuration-get --service="$SERVICE_ID" --format=json)
          host=$(echo "$config" | jq -r '.configuration.domain')
          # Call the Meilisearch health endpoint.
          curl -fsS "https://$host/health" | grep -q '"status":"available"'
          echo "✅ Meilisearch is reachable from CI."
          # You can run your own test suite here using the credentials above ...

      - name: Tear down (always, even on failure)
        if: always()
        run: |
          if [ -n "${SERVICE_ID:-}" ]; then
            stackhero service-delete --service="$SERVICE_ID" --confirm
            stackhero service-wait-for --service="$SERVICE_ID"
          fi
          if [ -n "${STACK_ID:-}" ]; then
            stackhero stack-delete --stack="$STACK_ID" --confirm
          fi

The teardown step uses if: always() to ensure it runs in all cases, guaranteeing your Meilisearch instance is deleted and you are not billed for unused resources.