Lightweight CLI for Recce Cloud operations
Project description
Recce Cloud CLI
Lightweight command-line tool for uploading dbt artifacts to Recce Cloud in CI/CD environments.
Overview
The Recce Cloud CLI (recce-cloud) is a standalone tool designed for CI/CD pipelines that need to upload dbt artifacts (manifest.json and catalog.json) to Recce Cloud without the full recce package dependencies.
Key Features:
- 🚀 Lightweight - minimal dependencies for fast CI/CD execution
- 🤖 Auto-detection - automatically detects CI platform, repository, and PR/MR context
- 🔄 Dual workflows - supports both auto-session creation and existing session uploads
- 🔐 Flexible authentication - works with CI tokens or explicit API tokens
- ✅ Platform-specific - optimized for GitHub Actions and GitLab CI
Installation
pip install recce-cloud
Or in your CI/CD workflow:
# GitHub Actions
- name: Install recce-cloud
run: pip install recce-cloud
# GitLab CI
install:
script:
- pip install recce-cloud
Quick Start
GitHub Actions
- name: Upload to Recce Cloud
run: recce-cloud upload
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RECCE_API_TOKEN: ${{ secrets.RECCE_API_TOKEN }}
GitLab CI
recce-upload:
script:
- recce-cloud upload
variables:
RECCE_API_TOKEN: $RECCE_API_TOKEN
Upload Workflows
The recce-cloud upload command supports two workflows:
1. Platform-Specific Workflow (Recommended)
For GitHub Actions and GitLab CI
Automatically creates Recce Cloud sessions using platform-specific APIs. No session ID required.
Features:
- ✅ Auto-creates session with
touch-recce-sessionAPI - ✅ Auto-detects PR/MR context and links session
- ✅ Notifies upload completion
- ✅ Works with CI-provided tokens (GITHUB_TOKEN, CI_JOB_TOKEN)
Usage:
# GitHub Actions
recce-cloud upload
# GitLab CI
recce-cloud upload
# With custom target path
recce-cloud upload --target-path custom-target
# With manual overrides
recce-cloud upload --cr 123 --type cr
Requirements:
- Running in GitHub Actions or GitLab CI environment
- RECCE_API_TOKEN or CI-provided token (GITHUB_TOKEN/CI_JOB_TOKEN)
- dbt artifacts in target directory
2. Generic Workflow
For other CI platforms or existing sessions
Uploads to a pre-existing Recce Cloud session using session ID.
Usage:
# With session ID parameter
recce-cloud upload --session-id abc123
# With environment variable
export RECCE_SESSION_ID=abc123
recce-cloud upload
# With custom target path
recce-cloud upload --session-id abc123 --target-path my-target
Requirements:
- Pre-created session ID (from Recce Cloud web app or API)
- RECCE_API_TOKEN
- dbt artifacts in target directory
Command Reference
recce-cloud upload
Upload dbt artifacts to Recce Cloud session.
Options:
| Option | Type | Default | Description |
|---|---|---|---|
--target-path |
path | target |
Path to dbt target directory |
--session-id |
string | - | Session ID for generic workflow (optional) |
--cr |
integer | - | Override PR/MR number |
--type |
choice | - | Override session type: cr, prod, dev |
--dry-run |
flag | false | Show what would be uploaded without uploading |
Environment Variables:
| Variable | Required | Description |
|---|---|---|
RECCE_API_TOKEN |
Recommended | Recce Cloud API token |
RECCE_SESSION_ID |
Optional | Session ID for generic workflow |
GITHUB_TOKEN |
Auto-detected | GitHub authentication (Actions) |
CI_JOB_TOKEN |
Auto-detected | GitLab authentication (CI) |
Exit Codes:
| Code | Description |
|---|---|
| 0 | Success |
| 1 | Platform not supported (platform-specific workflow) |
| 2 | Authentication error |
| 3 | File validation error |
| 4 | Upload error |
recce-cloud version
Display the version of recce-cloud.
recce-cloud version
Authentication
The CLI supports multiple authentication methods with the following priority:
- RECCE_API_TOKEN (explicit token) - Recommended for production
- CI-provided tokens - GITHUB_TOKEN (Actions) or CI_JOB_TOKEN (GitLab CI)
- Error if no token available
Getting API Tokens
Recce Cloud API Token:
- Log in to Recce Cloud
- Go to Settings → API Tokens
- Create a new token
- Add to CI/CD secrets as
RECCE_API_TOKEN
GitHub Token:
- Automatically available as
${{ secrets.GITHUB_TOKEN }}in Actions - No additional configuration needed
GitLab Token:
- Automatically available as
$CI_JOB_TOKENin GitLab CI - No additional configuration needed
Auto-Detection
The CLI automatically detects your CI environment:
Detected Information
| Information | GitHub Actions | GitLab CI |
|---|---|---|
| Platform | ✅ github-actions |
✅ gitlab-ci |
| Repository | ✅ owner/repo |
✅ group/project |
| PR/MR Number | ✅ From event payload | ✅ From CI_MERGE_REQUEST_IID |
| PR/MR URL | ✅ Constructed | ✅ Constructed (self-hosted support) |
| Commit SHA | ✅ GITHUB_SHA |
✅ CI_COMMIT_SHA |
| Source Branch | ✅ GITHUB_HEAD_REF |
✅ CI_MERGE_REQUEST_SOURCE_BRANCH_NAME |
| Base Branch | ✅ GITHUB_BASE_REF |
✅ CI_MERGE_REQUEST_TARGET_BRANCH_NAME |
| Session Type | ✅ Auto-determined | ✅ Auto-determined |
| Access Token | ✅ GITHUB_TOKEN |
✅ CI_JOB_TOKEN |
Manual Overrides
You can override auto-detected values:
# Override PR/MR number
recce-cloud upload --cr 456
# Override session type
recce-cloud upload --type prod
# Multiple overrides
recce-cloud upload --cr 789 --type cr
# Dry run - preview what would be uploaded
recce-cloud upload --dry-run
CI/CD Integration Examples
GitHub Actions - Complete Workflow
name: Recce CI
on:
pull_request:
branches: [main]
jobs:
recce:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install dependencies
run: |
pip install dbt-core dbt-postgres recce-cloud
- name: Build dbt project
run: |
dbt deps
dbt build
dbt docs generate
- name: Upload to Recce Cloud
run: recce-cloud upload
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RECCE_API_TOKEN: ${{ secrets.RECCE_API_TOKEN }}
GitLab CI - Complete Workflow
stages:
- build
- upload
dbt-build:
stage: build
image: python:3.11-slim
script:
- pip install dbt-core dbt-postgres
- dbt deps
- dbt build
- dbt docs generate
artifacts:
paths:
- target/
recce-upload:
stage: upload
image: python:3.11-slim
script:
- pip install recce-cloud
- recce-cloud upload
variables:
RECCE_API_TOKEN: $RECCE_API_TOKEN
dependencies:
- dbt-build
only:
- merge_requests
- main
Generic CI Platform
For other CI platforms, use the generic workflow with session ID:
- name: Upload to Recce Cloud
script:
- pip install recce-cloud
- recce-cloud upload --session-id ${SESSION_ID}
environment:
RECCE_API_TOKEN: ${RECCE_API_TOKEN}
SESSION_ID: ${SESSION_ID}
Troubleshooting
Common Issues
1. Missing dbt artifacts
Error: Invalid target path: target
Please provide a valid target path containing manifest.json and catalog.json.
Solution: Ensure dbt docs generate has been run successfully before upload.
dbt build
dbt docs generate # Required!
recce-cloud upload
2. Authentication failed
Error: No authentication token provided
Set RECCE_API_TOKEN environment variable or ensure CI token is available
Solution: Set RECCE_API_TOKEN in your CI/CD secrets or ensure CI token permissions.
# GitHub Actions
env:
RECCE_API_TOKEN: ${{ secrets.RECCE_API_TOKEN }}
# GitLab CI
variables:
RECCE_API_TOKEN: $RECCE_API_TOKEN
3. Platform not supported
Error: Platform-specific upload requires GitHub Actions or GitLab CI environment
Detected platform: unknown
Solution: Use generic workflow with session ID, or run in supported CI platform.
recce-cloud upload --session-id abc123
4. Session not found
Error: Session ID abc123 does not belong to any organization.
Solution: Verify session ID is correct and accessible with your API token.
5. GitLab self-hosted instance
The CLI automatically detects self-hosted GitLab instances using CI_SERVER_URL.
# No additional configuration needed
recce-upload:
script:
- recce-cloud upload
variables:
RECCE_API_TOKEN: $RECCE_API_TOKEN
Debug Mode
Enable verbose logging for troubleshooting:
# Set log level to DEBUG
export RECCE_LOG_LEVEL=DEBUG
recce-cloud upload
Architecture
Platform-Specific APIs
The CLI uses platform-specific API endpoints for auto-session creation:
GitHub Actions:
POST /api/v2/github/{repository}/touch-recce-sessionPOST /api/v2/github/{repository}/upload-completed
GitLab CI:
POST /api/v2/gitlab/{project_path}/touch-recce-sessionPOST /api/v2/gitlab/{project_path}/upload-completed
Upload Process
Platform-Specific Workflow:
- Detect CI platform and extract context
- Validate dbt artifacts
- Extract adapter type from manifest
- Authenticate with Recce Cloud API
- Call
touch-recce-session(creates or updates session) - Upload manifest.json to presigned S3 URL
- Upload catalog.json to presigned S3 URL
- Call
upload-completed(notifies Recce Cloud)
Generic Workflow:
- Detect CI platform (optional)
- Validate dbt artifacts
- Extract adapter type from manifest
- Authenticate with Recce Cloud API
- Get session info (org_id, project_id)
- Get presigned upload URLs
- Upload manifest.json to S3
- Upload catalog.json to S3
- Update session metadata
Development
Running Tests
# Install development dependencies
pip install -e .[dev]
# Run tests
pytest tests/recce_cloud/
# Run with coverage
pytest --cov=recce_cloud --cov-report=html tests/recce_cloud/
# Run specific test file
pytest tests/recce_cloud/test_platform_clients.py
Code Quality
# Format code
make format
# Run quality checks
make check
# Run all checks and tests
make test
Support
- Documentation: docs.reccehq.com
- Issues: GitHub Issues
- Community: Recce Slack
- Email: support@reccehq.com
License
Apache License 2.0 - See LICENSE file for details.
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 recce_cloud_nightly-1.29.0.20251214.tar.gz.
File metadata
- Download URL: recce_cloud_nightly-1.29.0.20251214.tar.gz
- Upload date:
- Size: 19.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7072c7f07446b9a5a22b1fa719da105198e5b23eb73b18faa62bd3231692d1a5
|
|
| MD5 |
523616576a63b823c85b657c1d612d4d
|
|
| BLAKE2b-256 |
09ddc3731fb8ee21ac11cda0dc72c38f490986fd767996370271f9b1533191e6
|
File details
Details for the file recce_cloud_nightly-1.29.0.20251214-py3-none-any.whl.
File metadata
- Download URL: recce_cloud_nightly-1.29.0.20251214-py3-none-any.whl
- Upload date:
- Size: 34.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
384ad1b5cb5bc397f90586d9f37f693071ce4c13d20b37497d5c5a0b84f019a9
|
|
| MD5 |
c6a31b1862e0a09035de7104e4e1f2c8
|
|
| BLAKE2b-256 |
3e636066bab8fa8ff0f428a89f6416b8c9f3432fe53a4c20b6492d1b481a0a1f
|