TimescaleDB: 2. The lifecycle script
This documentation is part of the GitHub Actions & GitLab CI guide. View the full guide here: Spin up a real TimescaleDB service from your GitHub Actions or GitLab CI pipeline, run your tests against it, and tear it down automatically.
Welcome to the Stackhero documentation!
Stackhero provides a ready-to-use TimescaleDB cloud solution designed to help you get up and running in minutes. Here is what you can look forward to:
- All the best plugins included, such as
PostGIS,PgVector, and more.- Convenient access to the PgAdmin web UI for easy database management.
- Simple, one-click updates to keep your deployment current.
- Reliable performance and strong security on your own private, dedicated infrastructure.
If you are looking to save time and streamline your workflow, Stackhero's TimescaleDB cloud hosting is designed to make your experience as smooth as possible. You can try it out in as little as 5 minutes!
Here is a complete example script that manages the full service lifecycle. It demonstrates how little setup is required, just a few commands. You can copy the ready-made 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-timescaledb-$$" # Unique stack name for each run
serviceStore="timescaledb" # The TimescaleDB 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 postgresql-client
# 3. Create a dedicated stack for this run
stackId=$(stackhero --format=script stack-create --name="$stackName")
echo "Stack created: $stackId"
# 4. Add TimescaleDB 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')
password=$(echo "$config" | jq -r '.configuration.password')
# 8. Smoke test: Run a trivial query against the database.
PGPASSWORD="$password" psql "host=$host port=5432 user=admin dbname=admin sslmode=require" -c "SELECT 1;"
echo "✅ TimescaleDB is reachable from CI."
The teardown step, which deletes the service, waits for its removal, and then deletes the stack, is handled in the platform-specific sections below. This approach makes sure 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-forcommand ensures the service is either running or deleted before proceeding, making it the right tool for deletion waits too.