Skip to content

CI

CI #59

Workflow file for this run

#############################
## GitHub Actions CI Tests ##
#############################
#
# This can be kicked off manually in the Actions tab of GitHub
# It will also run nightly at 2pm
# It will run on any pull request, except non-code changes
# (images, markdown files, )
#
name: CI
on:
workflow_dispatch:
schedule:
# 2am each night
- cron: '00 2 * * *'
pull_request:
push:
branches:
- main
merge_group:
# Merge Queue checks requested. This feature is still in beta
# from Github and so may need updating later.
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#merge_group
types: [checks_requested]
jobs:
linting:
runs-on: ubuntu-latest
strategy:
matrix:
jobs: [ 'linting', 'doclinting', 'docbuild', 'yamllint' ]
name: ${{ matrix.jobs }} tests
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: pip install tox
- name: Run the tests
run: tox -e ${{ matrix.jobs }}
# Test with coverage tracking on most recent python (py11).
python-version-tests-cov:
name: Python 3.11 Tests
permissions:
contents: read
pull-requests: write
uses: ./.github/workflows/ci-test-python.yml
with:
python-version: "3.11"
coverage: true
secrets:
gh_token: ${{ secrets.github_token }}
# Test without coverage tracking on older python versions.
# This saves time, as testing without coverage tracking is faster.
python-version-tests-nocov:
name: Python ${{ matrix.python-version }} Tests
strategy:
matrix:
python-version: [ '3.7', '3.8', '3.9', '3.10' ]
permissions:
contents: read
pull-requests: write
uses: ./.github/workflows/ci-test-python.yml
with:
python-version: ${{ matrix.python-version }}
secrets:
gh_token: ${{ secrets.github_token }}
dbt-tests-cov:
name: dbt ${{ matrix.dbt-version }} Plugin Tests
strategy:
matrix:
dbt-version: [ "dbt110", "dbt130", "dbt140", "dbt150", "dbt160" ]
permissions:
contents: read
pull-requests: write
uses: ./.github/workflows/ci-test-dbt.yml
with:
python-version: "3.10"
dbt-version: "${{ matrix.dbt-version }}"
coverage: true
secrets:
gh_token: ${{ secrets.github_token }}
dbt-tests-nocov:
name: dbt ${{ matrix.dbt-version }} Plugin Tests
strategy:
matrix:
dbt-version: [ "dbt120" ]
permissions:
contents: read
pull-requests: write
uses: ./.github/workflows/ci-test-dbt.yml
with:
python-version: "3.9"
dbt-version: "${{ matrix.dbt-version }}"
secrets:
gh_token: ${{ secrets.github_token }}
# This runs the bulk of the dialect _parsing_ tests.
#
# It's run as a separate job as takes longer than the CI jobs and allows
# them to be rerun separately if GitHub Actions or Coverage is experiencing
# issues.
dialects_parse:
name: Dialect parsing
strategy:
matrix:
python-version: [ '3.11' ]
permissions:
contents: read
pull-requests: write
uses: ./.github/workflows/ci-test-python.yml
with:
python-version: "3.11"
marks: "parse_suite"
# We test coverage here for some parsing routines.
coverage: true
secrets:
gh_token: ${{ secrets.github_token }}
# This lints all our dialect fixtures to check rules can handle a variety
# of SQL and don't error out badly.
#
# It's run as a separate job as takes longer than the CI jobs and allows
# them to be rerun separately if GitHub Actions or Coverage is experiencing
# issues.
dialects_fix:
name: Dialect fixing
strategy:
matrix:
python-version: [ '3.11' ]
permissions:
contents: read
pull-requests: write
uses: ./.github/workflows/ci-test-python.yml
with:
python-version: "3.11"
marks: "fix_suite"
secrets:
gh_token: ${{ secrets.github_token }}
# This lints all our rules fixtures to check rules.
#
# It's run as a separate job as takes longer than the CI jobs and allows
# them to be rerun separately if GitHub Actions or Coverage is experiencing
# issues.
rules:
name: Rule yaml test cases
strategy:
matrix:
python-version: [ '3.11' ]
permissions:
contents: read
pull-requests: write
uses: ./.github/workflows/ci-test-python.yml
with:
python-version: "3.11"
marks: "rules_suite"
coverage: true
secrets:
gh_token: ${{ secrets.github_token }}
other-tests:
runs-on: ubuntu-latest
strategy:
matrix:
jobs: [ 'bench', 'mypy', 'doctests' ]
name: ${{ matrix.jobs }} tests
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: pip install tox
- name: Run the tests
env:
SQLFLUFF_BENCHMARK_API_KEY: ${{ secrets.SQLFLUFF_BENCHMARK_API_KEY }}
run: |
tox -e ${{ matrix.jobs }}
ymlchecks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements.txt -r requirements_dev.txt
python setup.py develop
- name: Generate the YAML files
run: |
python test/generate_parse_fixture_yml.py
- name: Test the generated YAML files
run: |
if [ -n "$(git status --porcelain)" ]; then
git diff
echo "Generated YAML files do not match branch."
echo "Please run the following command to generate these:"
echo " python test/generate_parse_fixture_yml.py"
exit 1
fi
examples:
runs-on: ubuntu-latest
name: example tests
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -e .
pip install tqdm
- name: Test the example files
run: |
for file in examples/*
do
echo "Running $file"
python "$file"
done
python-windows-tests:
runs-on: windows-latest
name: Python 3.10 Windows tests
steps:
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: List Env
shell: bash
run: |
env | sort
- name: Install dependencies
shell: bash
run: pip install tox
- name: Run the tests
shell: bash
# Set python temp dir in working dir as on GitHub Actions Windows
# machine often has system temp dir (which tox uses) on C drive and
# working dir on D drive which causes problems.
run: |
mkdir temp_pytest
python -m tox -e winpy -- --cov=sqlfluff -n 2 test -m "not integration"
- name: Upload coverage data (github)
uses: actions/upload-artifact@v3
with:
name: coverage-data
path: ".coverage.*"
if-no-files-found: ignore
python-windows-dbt-tests:
runs-on: windows-latest
name: DBT Plugin Python 3.10 Windows tests
steps:
- name: Start PostgreSQL on Windows
run: |
$pgService = Get-Service -Name postgresql*
Set-Service -InputObject $pgService -Status running -StartupType automatic
Start-Process -FilePath "$env:PGBIN\pg_isready" -Wait -PassThru
- name: Set postgres user password
run: |
& $env:PGBIN\psql --command="ALTER USER postgres PASSWORD 'password';" --command="\du"
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
shell: bash
run: pip install tox
- name: Run the tests
shell: bash
# Do not set explicitly temp dir for dbt as causes problems
# None of these test need temp dir set
run: |
python -m tox -e dbt150-winpy -- plugins/sqlfluff-templater-dbt
pip-test-pull-request:
# Test that using pip install works as we've missed
# some dependencies in the past - see #1842
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
name: pip install tests
steps:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- uses: actions/checkout@v3
- name: Install dependencies
run: |
pip install .
- name: Run the version test
run: |
sqlfluff --version
- name: Run a simple select parse test via stdin
run: |
echo "select 1" | sqlfluff parse --dialect=ansi -
- name: Run a simple select lint test via stdin
run: |
echo "select 1" | sqlfluff lint --dialect=ansi -
- name: Run a simple select parse test via file
run: |
sqlfluff parse --dialect=ansi <(echo "select 1")
- name: Run a simple select lint test via file
run: |
sqlfluff lint --dialect=ansi <(echo "select 1")
coveralls_finish:
name: Finalise coveralls.
needs: [python-version-tests-cov, dbt-tests-cov, python-windows-tests, dialects_parse, rules]
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.github_token }}
parallel-finished: true
coverage_check:
name: Combine & check 100% coverage.
runs-on: ubuntu-latest
needs: [python-version-tests-cov, dbt-tests-cov, python-windows-tests, dialects_parse, rules]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- run: python -m pip install --upgrade coverage[toml]
- name: Download coverage data.
uses: actions/download-artifact@v3
with:
name: coverage-data
- name: Combine coverage & fail if it's <100%.
run: |
python -m coverage combine
python -m coverage html --skip-covered --skip-empty
python -m coverage report --fail-under=100
- name: Upload HTML report if check failed.
uses: actions/upload-artifact@v3
with:
name: html-report
path: htmlcov
if: ${{ failure() }}