Internal automation

Run LocalCloud in team CI

The Public Preview License permits ongoing internal CI for individuals and organizations, including for-profit companies. Keep the job isolated, pin the image, and validate against real Google Cloud separately.

Evidence-bounded

Select only operations supported by the current compatibility contract.

Fail-closed readiness

Do not run tests unless the health gate succeeds; retain logs when startup fails.

Runner-qualified

Treat these as templates until exercised with a pinned image on the selected CI runner.

Technical examples for internal automation

Use these templates only within the governing Public Preview License. Exercise networking, health, image identity, and cleanup on the exact runner.

GitHub Actions
name: GCP Integration Tests
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      localcloud:
        image: jaysen2apache/localcloud:latest
        ports:
          - 24080:24080
          - 24082:24082
          - 24087:24087
        options: --memory 4g

    steps:
      - uses: actions/checkout@v4

      - name: Wait for LocalCloud
        run: |
          for i in $(seq 1 30); do
            if curl -fsS http://localhost:24080/health; then exit 0; fi
            sleep 2
          done
          docker logs localcloud
          exit 1

      - name: Run integration tests
        env:
          BIGQUERY_EMULATOR_HOST: http://localhost:24087
          PUBSUB_EMULATOR_HOST: localhost:24082
        run: pytest tests/integration/
GitLab CI
integration-tests:
  image: python:3.12
  services:
    - name: jaysen2apache/localcloud:latest
      alias: localcloud
  variables:
    BIGQUERY_EMULATOR_HOST: http://localcloud:24087
    PUBSUB_EMULATOR_HOST: localcloud:24082
  before_script:
    - pip install -r requirements.txt
    - |
      for i in $(seq 1 30); do
        if curl -fsS http://localcloud:24080/health; then exit 0; fi
        sleep 2
      done
      exit 1
  script:
    - pytest tests/integration/
Jenkins (Docker Pipeline)
pipeline {
  agent { docker { image 'python:3.12' } }
  stages {
    stage('Integration Tests') {
      steps {
        docker.image('jaysen2apache/localcloud:latest')
          .withRun('--memory 4g -p 24087:24087 -p 24082:24082') { c ->
            docker.image('appropriate/curl')
              .inside("--link ${c.id}:localcloud") {
                sh """
                  for i in $(seq 1 30); do
                    if curl -fsS http://localcloud:24080/health; then exit 0; fi
                    sleep 2
                  done
                  exit 1
                """
              }
            withEnv([
              'BIGQUERY_EMULATOR_HOST=http://localcloud:24087',
              'PUBSUB_EMULATOR_HOST=localcloud:24082'
            ]) {
              sh 'pytest tests/integration/'
            }
          }
      }
    }
  }
}

What bounded local emulation can add

Local isolation

Exercise documented operations without routing the local test step to a real Google Cloud project. This is a technical boundary, not a quantified cost claim.

Controlled state

Use one data volume, project, and fixture namespace per job. Explicitly reset or seed state and do not assume emulator concurrency or isolation matches Google Cloud.

Earlier feedback

Catch endpoint, request-shape, and fixture errors before the guarded real-Google-Cloud release step. No cross-runner latency or duration benchmark is claimed.

Credential boundary

The bounded local job should not need production GCP credentials. Stop if an SDK tries to reach Google Cloud; keep release credentials in a separate guarded job.

Frequently asked questions

How much do GCP-integrated CI/CD pipelines cost?

Cost depends on your Google Cloud usage, pricing, regions, and billing agreements. This site has no maintained dataset supporting a typical per-run or monthly savings figure. Use authorized billing data for estimates.

Does LocalCloud support GitHub Actions, GitLab CI, and Jenkins?

Yes. The Public Preview License permits non-production internal CI for individuals and organizations, including for-profit companies. Exact runner networking and service-container behavior must still be tested.

Will my tests behave differently in CI vs local development?

They can differ because of image identity, runner resources, networking, ports, concurrency, and retained state. Pin a qualified image digest, isolate state, and validate production behavior separately.

How fast does LocalCloud start in CI?

No maintained cross-runner startup benchmark is available. Poll http://localhost:24080/health with a job timeout and inspect logs on failure.

Can I run parallel test suites against the same LocalCloud runtime?

Use one isolated data volume and project per job. Parallel clients can still contend for service state, resources, and ports; namespace fixtures and verify concurrency behavior rather than assuming isolation guarantees.

Review the license before automating LocalCloud

The Public Preview License permits organization and team CI for non-production development and testing. Keep LocalCloud isolated and validate production behavior separately.