A continuous integration tool for Looker and LookML validation
Project description
Looker Validator Implementation Guide
This guide walks you through setting up the Looker Validator tool for your CI/CD process.
Step 1: Set Up a Dedicated Looker User
First, create a dedicated Looker user and API key with the appropriate permissions:
-
Create a permission set:
- Go to Admin > Roles
- Create a new permission set named "Validator User"
- Include these permissions:
access_datasee_lookml_dashboardssee_lookssee_user_dashboardsdevelopsee_lookmlsee_sql
-
Create a role:
- Go to Admin > Roles
- Create a new role named "Validator User"
- Add the "Validator User" permission set
- Select the model set(s) you want to validate
-
Create the user:
- Go to Admin > Users
- Create a new user (e.g., "validator@yourcompany.com")
- Assign the "Validator User" role
-
Generate API credentials:
- Edit the user
- Go to API3 Keys
- Click "New API Key"
- Save the client ID and client secret
Step 2: Install Looker Validator
You can install the validator in your local environment or in your CI system:
pip install looker-validator
Step 3: Configure the Validator
Create a configuration file looker_validator_config.yaml:
# Looker API credentials
base_url: https://your-looker-instance.cloud.looker.com
client_id: YOUR_CLIENT_ID
client_secret: YOUR_CLIENT_SECRET
project: your_looker_project_name
# Optional global settings
log_dir: logs
# SQL validator settings
concurrency: 10
incremental: true
# Content validator settings
exclude_personal: true
incremental: true
# LookML validator settings
severity: warning
Step 4: Test the Connection
Verify that you can connect to your Looker instance:
looker-validator connect --config-file looker_validator_config.yaml
You should see a success message with your Looker version.
Step 5: Set Up GitHub Action
-
Add secrets to your GitHub repository:
- Go to your repository settings
- Click on Secrets > Actions
- Add the following secrets:
LOOKER_BASE_URL: Your Looker instance URLLOOKER_CLIENT_ID: The API client IDLOOKER_CLIENT_SECRET: The API client secret
-
Create workflow file:
Create a file at
.github/workflows/looker-validation.yml:name: Looker Validation on: pull_request: branches: [ main, master, dev ] paths: - '**.view.lkml' - '**.model.lkml' - '**.explore.lkml' - '**.dashboard.lookml' - '**manifest.lkml' jobs: validate: name: Validate Looker Project runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.9' - name: Install looker-validator run: | python -m pip install --upgrade pip pip install looker-validator - name: Test connection run: | looker-validator connect \ --base-url ${{ secrets.LOOKER_BASE_URL }} \ --client-id ${{ secrets.LOOKER_CLIENT_ID }} \ --client-secret ${{ secrets.LOOKER_CLIENT_SECRET }} \ --project ${{ github.event.repository.name }} - name: Run LookML validation run: | looker-validator lookml \ --base-url ${{ secrets.LOOKER_BASE_URL }} \ --client-id ${{ secrets.LOOKER_CLIENT_ID }} \ --client-secret ${{ secrets.LOOKER_CLIENT_SECRET }} \ --project ${{ github.event.repository.name }} \ --branch ${{ github.head_ref }} - name: Run SQL validation run: | looker-validator sql \ --base-url ${{ secrets.LOOKER_BASE_URL }} \ --client-id ${{ secrets.LOOKER_CLIENT_ID }} \ --client-secret ${{ secrets.LOOKER_CLIENT_SECRET }} \ --project ${{ github.event.repository.name }} \ --branch ${{ github.head_ref }} \ --incremental - name: Run Content validation run: | looker-validator content \ --base-url ${{ secrets.LOOKER_BASE_URL }} \ --client-id ${{ secrets.LOOKER_CLIENT_ID }} \ --client-secret ${{ secrets.LOOKER_CLIENT_SECRET }} \ --project ${{ github.event.repository.name }} \ --branch ${{ github.head_ref }} \ --incremental \ --exclude-personal - name: Run Assert validation run: | looker-validator assert \ --base-url ${{ secrets.LOOKER_BASE_URL }} \ --client-id ${{ secrets.LOOKER_CLIENT_ID }} \ --client-secret ${{ secrets.LOOKER_CLIENT_SECRET }} \ --project ${{ github.event.repository.name }} \ --branch ${{ github.head_ref }} - name: Upload logs if: always() uses: actions/upload-artifact@v3 with: name: validation-logs path: logs/
Step 6: Customize Your Validation Process
Depending on your needs, you may want to customize your validation:
For Large Projects
If you have a large Looker project, consider:
-
Selecting specific models/explores:
looker-validator sql --explores model_a/* model_b/explore_c
-
Increasing concurrency:
looker-validator sql --concurrency 20
-
Running validators in sequence to avoid branch conflicts
For Faster Validations
To speed up validation:
-
Use incremental mode:
looker-validator sql --incremental
-
Use fail-fast for SQL validation:
looker-validator sql --fail-fast
-
Exclude specific explores/folders:
looker-validator content --explores -model_a/explore_b --folders -33
Step 7: Handling Errors
When validation fails, the GitHub Action will fail with a non-zero exit code. The logs will contain detailed information about the failures.
You can view the logs in two ways:
-
GitHub Actions logs: View the output directly in the GitHub Actions interface
-
Downloaded artifacts: Download the logs artifact for detailed error information
Best Practices
-
Ignore dimensions that validly fail:
dimension: complex_calculation { sql: ${TABLE}.value ;; tags: ["spectacles: ignore"] } -
Use incremental validation to only show new errors
-
Run all validators for comprehensive testing
-
Consider test concurrency in CI environments
-
Set up branch protection rules to prevent merging PRs with validation failures
Troubleshooting
Common Issues
-
Authentication Failures:
- Verify API credentials
- Check API user permissions
-
Branch Conflicts:
- Use separate API users for concurrent validations
- Add concurrency limits to your GitHub workflow
-
SQL Errors:
- Check the SQL logs for specific error details
- Ignore dimensions that validly fail
-
Content Errors:
- Use
--exclude-personalto focus on shared content - Check for missing fields referenced by dashboards
- Use
Getting Help
If you encounter issues:
- Run validators with
--verbosefor detailed logs - Check log files in the
logsdirectory - Review the GitHub Action output
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file looker_validator-0.5.2.tar.gz.
File metadata
- Download URL: looker_validator-0.5.2.tar.gz
- Upload date:
- Size: 61.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37ca50c334cf7d8c666d579b00d6edc544e3e141f2f8de81ee4d679254ad8baa
|
|
| MD5 |
a11addfd3eca24b1dfe7b0d5676f6ea5
|
|
| BLAKE2b-256 |
c821c56cd884b5ebefd8ea59af26210b8480a17f17d308d11e56092e485158ab
|
File details
Details for the file looker_validator-0.5.2-py3-none-any.whl.
File metadata
- Download URL: looker_validator-0.5.2-py3-none-any.whl
- Upload date:
- Size: 64.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1466fd50d9d2c0834a30561ec30aae0d706afbd2d698f39dc4a999d4e70fcea4
|
|
| MD5 |
402508e116a24663a8c87a0efa1e23b9
|
|
| BLAKE2b-256 |
b29818a052f89a5fca48cf7a7e185408df0a7978f8d7ef48083c1cb925e1c2e2
|