TimescaleDB: 4. GitHub Actions

Ši dokumentacija yra GitHub Actions ir GitLab CI vadovo dalis. Visą vadovą rasite čia: Paleiskite tikrą TimescaleDB paslaugą iš savo GitHub Actions arba GitLab CI pipeline, vykdykite testus ir automatiškai viską uždarykite.

Sveiki atvykę į Stackhero dokumentaciją!

Stackhero siūlo paruoštą naudoti TimescaleDB cloud sprendimą, kuris leidžia pradėti darbą per kelias minutes. Štai ko galite tikėtis:

  • Visi geriausi įskiepiai įtraukti, tokie kaip PostGIS, PgVector ir kiti.
  • Patogus priėjimas prie PgAdmin žiniatinklio sąsajos lengvam duomenų bazės valdymui.
  • Paprasti, vieno paspaudimo atnaujinimai, kad jūsų diegimas visada būtų naujausias.
  • Patikimas veikimas ir stipri saugumo apsauga jūsų privačioje, dedikuotoje infrastruktūroje.

Jei norite sutaupyti laiko ir supaprastinti savo darbo eigą, Stackhero TimescaleDB cloud hosting sukurtas tam, kad jūsų patirtis būtų kuo sklandesnė. Galite išbandyti vos per 5 minutes!

Norėdami pradėti, išsaugokite žemiau pateiktą turinį kaip .github/workflows/ci.yml. Nuo šiol kiekvienas push ir pull request vykdys testus prieš tikrą TimescaleDB instanciją.

name: CI su TimescaleDB

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    env:
      STACKHERO_TOKEN: ${{ secrets.STACKHERO_TOKEN }}
      STACK_NAME: ci-timescaledb-${{ github.run_id }}-${{ github.run_attempt }}
      INSTANCE: "10G"   # Pakeiskite jei reikia (žr. 3 žingsnį)
      REGION: europe
    steps:
      - uses: actions/checkout@v4

      - name: Įdiegti Stackhero CLI ir klientą
        run: |
          curl -fsSL https://www.stackhero.io/install.sh | sh
          apt-get update && apt-get install -y --no-install-recommends jq curl postgresql-client

      - name: Sukurti TimescaleDB paslaugą
        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="timescaledb" \
            --instance="$INSTANCE" \
            --region="$REGION")
          echo "SERVICE_ID=$SERVICE_ID" >> "$GITHUB_ENV"
          stackhero service-wait-for --service="$SERVICE_ID"

      - name: Vykdyti testus prieš TimescaleDB
        run: |
          set -euo pipefail
          config=$(stackhero service-configuration-get --service="$SERVICE_ID" --format=json)
          host=$(echo "$config" | jq -r '.configuration.domain')
password=$(echo "$config" | jq -r '.configuration.password')
          # 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 pasiekiamas iš CI."
          # Čia galite paleisti savo testų rinkinį naudodami aukščiau gautus prisijungimo duomenis ...

      - name: Išvalymas (visada, net jei įvyksta klaida)
        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

Teardown žingsnis naudoja if: always(), todėl jis bus vykdomas visada, užtikrinant, kad jūsų TimescaleDB instancija bus ištrinta ir jums nebus skaičiuojami mokesčiai už nenaudojamus resursus.