Skip to content

tests

tests #1340

Workflow file for this run

name: 'tests'
permissions: {}
on:
workflow_dispatch:
push:
branches:
- main
paths-ignore:
- '**/*.md'
- 'LICENSE'
- 'benchmarks/**'
- 'examples/**'
pull_request:
paths-ignore:
- '**/*.md'
- 'LICENSE'
- 'benchmarks/**'
- 'examples/**'
schedule:
- cron: '0 9 * * *'
jobs:
node-unit-tests:
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
node: [18, 20, 22]
steps:
- uses: actions/checkout@main
- name: Setup NodeJS ${{ matrix.node }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- name: Install dependencies
run: |
npm install
- name: Install dependencies (examples)
working-directory: examples
run: |
npm install
- name: Run linting
run: |
npm run lint
- name: Typecheck
run: |
npm run typecheck
- name: Run unit tests
run: |
npm run test:node:unit
web-all-tests-local-single-node:
runs-on: ubuntu-latest
needs: node-unit-tests
strategy:
fail-fast: true
matrix:
clickhouse: [head, latest]
steps:
- uses: actions/checkout@main
- name: Start ClickHouse (version - ${{ matrix.clickhouse }}) in Docker
uses: isbang/[email protected]
env:
CLICKHOUSE_VERSION: ${{ matrix.clickhouse }}
with:
compose-file: 'docker-compose.yml'
down-flags: '--volumes'
- name: Setup NodeJS
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: |
npm install
- name: Run all web tests
run: |
npm run test:web
node-integration-tests-local-single-node:
needs: node-unit-tests
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
node: [18, 20, 22]
clickhouse: [head, latest]
steps:
- uses: actions/checkout@main
- name: Start ClickHouse (version - ${{ matrix.clickhouse }}) in Docker
uses: isbang/[email protected]
env:
CLICKHOUSE_VERSION: ${{ matrix.clickhouse }}
with:
compose-file: 'docker-compose.yml'
down-flags: '--volumes'
- name: Setup NodeJS ${{ matrix.node }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- name: Install dependencies
run: |
npm install
- name: Add ClickHouse TLS instance to /etc/hosts
run: |
sudo echo "127.0.0.1 server.clickhouseconnect.test" | sudo tee -a /etc/hosts
- name: Run integration tests
run: |
npm run test:node:integration
- name: Run TLS tests
run: |
npm run test:node:tls
node-integration-tests-local-cluster:
needs: node-unit-tests
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
node: [18, 20, 22]
clickhouse: [head, latest]
steps:
- uses: actions/checkout@main
- name: Start ClickHouse cluster (version - ${{ matrix.clickhouse }}) in Docker
uses: isbang/[email protected]
env:
CLICKHOUSE_VERSION: ${{ matrix.clickhouse }}
with:
compose-file: 'docker-compose.cluster.yml'
down-flags: '--volumes'
- name: Setup NodeJS ${{ matrix.node }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- name: Install dependencies
run: |
npm install
- name: Run integration tests
run: |
npm run test:node:integration:local_cluster
web-integration-tests-local-cluster:
runs-on: ubuntu-latest
needs: node-unit-tests
strategy:
fail-fast: true
matrix:
clickhouse: [head, latest]
steps:
- uses: actions/checkout@main
- name: Start ClickHouse cluster (version - ${{ matrix.clickhouse }}) in Docker
uses: isbang/[email protected]
env:
CLICKHOUSE_VERSION: ${{ matrix.clickhouse }}
with:
compose-file: 'docker-compose.cluster.yml'
down-flags: '--volumes'
- name: Setup NodeJS
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: |
npm install
- name: Run all web tests
run: |
npm run test:web:integration:local_cluster
node-integration-tests-cloud-smt:
needs: node-unit-tests
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
node: [18, 20, 22]
steps:
- uses: actions/checkout@main
- name: Setup NodeJS ${{ matrix.node }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- name: Install dependencies
run: |
npm install
- name: Run integration tests
env:
CLICKHOUSE_CLOUD_HOST: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_HOST_SMT }}
CLICKHOUSE_CLOUD_PASSWORD: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_PASSWORD_SMT }}
CLICKHOUSE_CLOUD_JWT_SECRET: ${{ secrets.CI_JWT_SIGNING_PRIVATE_KEY }}
run: |
npm run test:node:integration:cloud_smt
web-integration-tests-cloud-smt:
needs: node-unit-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Setup NodeJS
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: |
npm install
- name: Run integration tests
env:
CLICKHOUSE_CLOUD_HOST: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_HOST_SMT }}
CLICKHOUSE_CLOUD_PASSWORD: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_PASSWORD_SMT }}
run: |
npm run test:web:integration:cloud_smt
- name: Run JWT auth integration tests
env:
CLICKHOUSE_CLOUD_HOST: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_HOST_SMT }}
CLICKHOUSE_CLOUD_PASSWORD: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_PASSWORD_SMT }}
CLICKHOUSE_CLOUD_JWT_SECRET: ${{ secrets.CI_JWT_SIGNING_PRIVATE_KEY }}
run: |
npm run test:web:integration:cloud_smt:jwt
# With unit + integration + TLS tests + coverage + SonarCloud report, after the rest of the tests.
# Needs all integration tests on all environments to pass.
# Should use only the current LTS version of Node.js.
node-all-tests-with-coverage-and-sonar:
needs:
[
'node-integration-tests-local-single-node',
'node-integration-tests-local-cluster',
'node-integration-tests-cloud-smt',
'web-all-tests-local-single-node',
'web-integration-tests-local-cluster',
'web-integration-tests-cloud-smt',
]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
with:
fetch-depth: 0
- name: Start ClickHouse (version - ${{ matrix.clickhouse }}) in Docker
uses: isbang/[email protected]
with:
compose-file: 'docker-compose.yml'
down-flags: '--volumes'
- name: Setup NodeJS 20
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: |
npm install
- name: Add ClickHouse TLS instance to /etc/hosts
run: |
sudo echo "127.0.0.1 server.clickhouseconnect.test" | sudo tee -a /etc/hosts
- name: Run unit + integration + TLS tests with coverage
run: |
npm run test:node:coverage
- name: SonarCloud Scan
uses: SonarSource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}