Skip to content

Getting Started

Account Setup

GitHub

To contribute, you must be a member of our Data Team. Your ability to approve and merge pull requests depends on your subgroup:

Google Workspace

To access our BigQuery project and its datasets, you must be a member of the TEAMster Analysts KTAF Google security group.

dbt Cloud

Development dataset

dbt Cloud creates a personal development dataset in BigQuery for each user, named using your username as a prefix. Please prefix yours with an underscore (_) — BigQuery hides datasets starting with _ from the left nav, keeping the project list readable.

Set this in Account settings → Credentials → Development credentials.

sqlfmt

We use sqlfmt for SQL formatting. To enable it in dbt Cloud:

  1. Open a .sql file on a development branch.
  2. Click the Code Quality tab in the console, then </> Config.
  3. Select the sqlfmt radio button.
  4. Click Format to auto-format the file.

GitHub Codespaces

The devcontainer is pre-configured for GitHub Codespaces — no local setup required.

Creating a Codespace

  1. On the repository page, click Code → Codespaces → Create codespace on main (or your branch).
  2. Select the 4-core / 16 GB machine type.
  3. Wait for the container to finish building. postCreate.sh runs automatically: installs dependencies, bootstraps all dbt projects (dbt deps + dbt parse in parallel), and injects secrets from 1Password. First creation takes a few minutes.

After the Codespace opens

Dismiss extension prompts — all required extensions are already configured in devcontainer.json; dismiss any install prompts VS Code shows.

Authenticate to Google — credentials are not persisted across sessions:

bash .devcontainer/scripts/gcloud-auth-application-default-login.sh

Authenticate Claude Code — pre-installed; log in once per session:

claude auth login

Wait for dbt Power User to finish parsing — the extension parses all projects in the background, which pegs CPU and makes the extension unresponsive until complete. Use htop to monitor; wait for CPU to settle before using the extension. This is also the most common cause of "extension not responding" errors.

Reload the window once background processes finish (Ctrl+Shift+PDeveloper: Reload Window) for a clean editor state.

Subsequent sessions

postStart.sh runs automatically on resume (updates uv, syncs dependencies). Re-run the Google and Claude Code auth steps above — credentials are not persisted.

Local Development

Prerequisites

Install uv for Python package management.

Setup

# Install dependencies
uv sync --frozen

# Run Dagster webserver locally
uv run dagster dev

# Validate definitions for a code location
uv run dagster definitions validate -m teamster.code_locations.kipptaf.definitions

dbt

Before running dbt assets locally, prepare and package the dbt project:

uv run dagster-dbt project prepare-and-package \
  --file src/teamster/code_locations/kipptaf/__init__.py

Linting and formatting

Trunk runs all linters:

trunk check   # lint
trunk fmt     # format
Language Linter(s)
SQL SQLFluff, sqlfmt
Python Ruff, Pyright

Testing

# Run all tests
uv run pytest

# Run a single test file
uv run pytest tests/test_dagster_definitions.py

# Run asset-specific tests (require env vars / external connections)
uv run pytest tests/assets/test_assets_dbt.py