From b2ef31ac6b4d144dfed121be1e663062a9be6cd4 Mon Sep 17 00:00:00 2001 From: even-wei Date: Mon, 24 Nov 2025 20:43:52 +0800 Subject: [PATCH 1/5] Update CI/CD documentation to use recce-cloud CLI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace GitHub Actions and GitLab CI/CD components with the new recce-cloud CLI for simpler, more direct CI/CD integration. Changes: - Replace DataRecce/recce-cloud-cicd-action with recce-cloud upload command - Replace GitLab component with direct CLI usage - Remove RECCE_API_TOKEN requirements (auto-detects GITHUB_TOKEN/CI_JOB_TOKEN) - Simplify authentication - no manual token setup needed - Add platform-specific verification images for GitHub/GitLab CI/CD - Update configuration examples to show CLI flags instead of component inputs Benefits: - Simpler setup without external dependencies - Consistent approach across GitHub and GitLab - Automatic platform and context detection - Direct pip install + CLI execution 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: even-wei --- docs/7-cicd/github/setup-cd.md | 9 +- docs/7-cicd/github/setup-ci.md | 9 +- docs/7-cicd/gitlab/setup-cd.md | 69 ++++++-------- docs/7-cicd/gitlab/setup-ci.md | 87 +++++++++--------- .../images/7-cicd/verify-setup-github-cd.png | Bin 0 -> 8015 bytes .../images/7-cicd/verify-setup-github-ci.png | Bin 0 -> 91569 bytes .../images/7-cicd/verify-setup-gitlab-cd.png | Bin 0 -> 6716 bytes .../images/7-cicd/verify-setup-gitlab-ci.png | Bin 0 -> 42633 bytes 8 files changed, 82 insertions(+), 92 deletions(-) create mode 100644 docs/assets/images/7-cicd/verify-setup-github-cd.png create mode 100644 docs/assets/images/7-cicd/verify-setup-github-ci.png create mode 100644 docs/assets/images/7-cicd/verify-setup-gitlab-cd.png create mode 100644 docs/assets/images/7-cicd/verify-setup-gitlab-ci.png diff --git a/docs/7-cicd/github/setup-cd.md b/docs/7-cicd/github/setup-cd.md index 810f628..22ec7b3 100644 --- a/docs/7-cicd/github/setup-cd.md +++ b/docs/7-cicd/github/setup-cd.md @@ -70,9 +70,10 @@ jobs: env: DBT_ENV_SECRET_KEY: ${{ secrets.DBT_ENV_SECRET_KEY }} - - name: Update Recce Cloud Base Session - uses: DataRecce/recce-cloud-cicd-action@v0.1 - # This action automatically uploads artifacts to Recce Cloud + - name: Upload to Recce Cloud + run: | + pip install recce-cloud + recce-cloud upload --type prod ``` ### 2. Artifact Preparation Options @@ -102,7 +103,7 @@ jobs: - ✅ **Workflow completes** without errors in Actions tab - ✅ **Base session updated** in Recce Cloud -![Recce Cloud showing updated base sessions](/assets/images/7-cicd/verify-setup-cd.png){: .shadow} +![Recce Cloud showing updated base sessions](../../assets/images/7-cicd/verify-setup-github-cd.png){: .shadow} ## Next Steps diff --git a/docs/7-cicd/github/setup-ci.md b/docs/7-cicd/github/setup-ci.md index 730386c..d43abc2 100644 --- a/docs/7-cicd/github/setup-ci.md +++ b/docs/7-cicd/github/setup-ci.md @@ -70,9 +70,10 @@ jobs: env: DBT_ENV_SECRET_KEY: ${{ secrets.DBT_ENV_SECRET_KEY }} - - name: Update Recce PR Session - uses: DataRecce/recce-cloud-cicd-action@v0.1 - # This action automatically creates a PR session in Recce Cloud + - name: Upload to Recce Cloud + run: | + pip install recce-cloud + recce-cloud upload ``` ### 2. Artifact Preparation Options @@ -100,7 +101,7 @@ jobs: - ✅ **Workflow completes** without errors in Actions tab - ✅ **PR session updated** in Recce Cloud -![Recce Cloud showing PR validation session](/assets/images/7-cicd/verify-setup-ci.png){: .shadow} +![Recce Cloud showing PR validation session](../../assets/images/7-cicd/verify-setup-github-ci.png){: .shadow} #### Review PR Session diff --git a/docs/7-cicd/gitlab/setup-cd.md b/docs/7-cicd/gitlab/setup-cd.md index b9f3ecb..3c1e1c4 100644 --- a/docs/7-cicd/gitlab/setup-cd.md +++ b/docs/7-cicd/gitlab/setup-cd.md @@ -22,13 +22,8 @@ You need `manifest.json` and `catalog.json` files (dbt artifacts) for Recce Clou ### 1. Core Workflow -GitLab's CD setup uses the same Recce Cloud component as CI, but with different trigger rules. Add to your `.gitlab-ci.yml`: +Add to your `.gitlab-ci.yml`: ```yaml -include: - - component: gitlab.com/recce/recce-cloud-cicd-component/recce-cloud@1.2.0 - inputs: - stage: upload - stages: - build - upload @@ -36,11 +31,6 @@ stages: variables: DBT_TARGET_PROD: "prod" -# Disable the default component job -recce-cloud-upload: - rules: - - when: never - # Production build - runs on schedule or manual trigger prod-build: stage: build @@ -65,11 +55,14 @@ prod-build: when: manual # Production Recce upload -recce-cloud-upload-prod: - extends: recce-cloud-upload - needs: - - job: prod-build - artifacts: true +recce-upload-prod: + stage: upload + image: python:3.11-slim + script: + - pip install recce-cloud + - recce-cloud upload --type prod + dependencies: + - prod-build rules: - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH @@ -85,22 +78,12 @@ This configuration: ### 2. Unified CI/CD Configuration -The Recce Cloud component can handle both CI (MR validation) and CD (base session updates) in a single configuration. Here's the combined approach: +You can handle both CI (MR validation) and CD (base session updates) in a single configuration: ```yaml -include: - - component: gitlab.com/recce/recce-cloud-cicd-component/recce-cloud@1.2.0 - inputs: - stage: upload - stages: - build - upload -# Disable the default component job -recce-cloud-upload: - rules: - - when: never - # MR build - runs on merge requests mr-build: stage: build @@ -135,20 +118,26 @@ prod-build: - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # MR Recce upload -recce-cloud-upload-mr: - extends: recce-cloud-upload - needs: - - job: mr-build - artifacts: true +recce-upload-mr: + stage: upload + image: python:3.11-slim + script: + - pip install recce-cloud + - recce-cloud upload + dependencies: + - mr-build rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" # Production Recce upload -recce-cloud-upload-prod: - extends: recce-cloud-upload - needs: - - job: prod-build - artifacts: true +recce-upload-prod: + stage: upload + image: python:3.11-slim + script: + - pip install recce-cloud + - recce-cloud upload --type prod + dependencies: + - prod-build rules: - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH @@ -156,7 +145,7 @@ recce-cloud-upload-prod: This unified approach: -- Uses the same component for both CI and CD +- Uses the same `recce-cloud upload` command for both CI and CD - Separates MR validation from production updates via `rules` - Maintains different dbt targets for each environment - Reduces configuration duplication @@ -200,7 +189,7 @@ To enable automatic baseline updates: - ✅ **Pipeline completes** without errors in CI/CD → Pipelines - ✅ **Base session updated** in Recce Cloud -![Recce Cloud showing updated base sessions](../../assets/images/7-cicd/verify-setup-cd.png){: .shadow} +![Recce Cloud showing updated base sessions](../../assets/images/7-cicd/verify-setup-gitlab-cd.png){: .shadow} #### Verify Scheduled Runs @@ -253,7 +242,7 @@ recce-cloud-upload-prod: ## Complete Example -See the [complete working example](https://gitlab.com/recce/jaffle-shop-snowflake/-/blob/main/.gitlab-ci.yml) showing unified CI/CD configuration with the Recce Cloud component. +Here's a complete working example with unified CI/CD configuration using `recce-cloud` CLI. This example can be used as a reference for your own setup. ## Next Steps diff --git a/docs/7-cicd/gitlab/setup-ci.md b/docs/7-cicd/gitlab/setup-ci.md index a6a13ff..e6b8e77 100644 --- a/docs/7-cicd/gitlab/setup-ci.md +++ b/docs/7-cicd/gitlab/setup-ci.md @@ -24,14 +24,9 @@ You need `manifest.json` and `catalog.json` files (dbt artifacts) for Recce Clou Add to your `.gitlab-ci.yml`: ```yaml -include: - - component: gitlab.com/recce/recce-cloud-cicd-component/recce-cloud@1.2.0 - inputs: - stage: test - stages: - build - - test + - upload variables: DBT_TARGET: "ci" @@ -56,46 +51,47 @@ dbt-build: expire_in: 1 week rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" + +recce-upload: + stage: upload + image: python:3.11-slim + script: + - pip install recce-cloud + - recce-cloud upload + dependencies: + - dbt-build + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" ``` -The included Recce Cloud component automatically: +The `recce-cloud upload` command automatically: +- Detects your GitLab CI environment - Creates a session in Recce Cloud for the merge request - Uploads your dbt artifacts (`manifest.json` and `catalog.json`) -- Provides session URL for validation review +- Links the session to your MR + +### 2. Configuration Options -### 2. Component Configuration Options +The `recce-cloud upload` command supports customization via flags: -The component accepts optional inputs for customization: ```yaml -include: - - component: gitlab.com/recce/recce-cloud-cicd-component/recce-cloud@1.2.0 - inputs: - stage: test # Pipeline stage (default: test) - dbt_target_path: target # Path to dbt artifacts (default: target) - base_branch: main # Base branch for comparison (default: main) - gitlab_token: $CUSTOM_GITLAB_TOKEN # Custom GitLab token (default: $CI_JOB_TOKEN) +recce-upload: + script: + - pip install recce-cloud + - recce-cloud upload --target-path custom-target --type cr ``` -**Default Configuration** (shown in example above): +**Available options:** -- Component uses `$CI_JOB_TOKEN` automatically (no manual token setup required) -- Uploads from `target/` directory by default -- Compares against `main` branch +- `--target-path`: Path to dbt artifacts directory (default: `target`) +- `--type`: Session type - `cr`, `prod`, or `dev` (auto-detected by default) +- `--cr`: Override MR number (auto-detected by default) +- `--dry-run`: Preview what would be uploaded without actually uploading -**Custom Token** (optional): +**Authentication:** -If you need to use a custom GitLab token instead of the default `$CI_JOB_TOKEN`: - -1. Create a [Project Access Token](../gitlab-pat-guide.md) with `api` scope -2. Add it as a [CI/CD variable](https://docs.gitlab.com/ee/ci/variables/) in your project -3. Reference it in the component inputs: -```yaml -include: - - component: gitlab.com/recce/recce-cloud-cicd-component/recce-cloud@1.2.0 - inputs: - gitlab_token: $CUSTOM_GITLAB_TOKEN -``` +The command automatically uses your GitLab CI environment for authentication (via `CI_JOB_TOKEN`). No additional token setup required. ### 3. Artifact Preparation Options @@ -123,7 +119,7 @@ include: - ✅ **MR session updated** in Recce Cloud - ✅ **Session URL** appears in pipeline job output -![Recce Cloud showing MR validation session](../../assets/images/7-cicd/verify-setup-ci.png){: .shadow} +![Recce Cloud showing MR validation session](../../assets/images/7-cicd/verify-setup-gitlab-ci.png){: .shadow} #### Review MR Session @@ -187,14 +183,9 @@ dbt-build: Here's a full working example combining dbt build and Recce validation: ```yaml -include: - - component: gitlab.com/recce/recce-cloud-cicd-component/recce-cloud@1.2.0 - inputs: - stage: test - stages: - build - - test + - upload variables: DBT_TARGET: "ci" @@ -202,9 +193,8 @@ variables: dbt-build: stage: build image: python:3.11-slim - before_script: - - pip install -r requirements.txt script: + - pip install -r requirements.txt - dbt deps - dbt build --target $DBT_TARGET - dbt docs generate --target $DBT_TARGET @@ -214,6 +204,15 @@ dbt-build: expire_in: 1 week rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" -``` -See the [complete example project](https://gitlab.com/recce/jaffle-shop-snowflake/-/blob/main/.gitlab-ci.yml) for a full working configuration. +recce-upload: + stage: upload + image: python:3.11-slim + script: + - pip install recce-cloud + - recce-cloud upload + dependencies: + - dbt-build + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" +``` diff --git a/docs/assets/images/7-cicd/verify-setup-github-cd.png b/docs/assets/images/7-cicd/verify-setup-github-cd.png new file mode 100644 index 0000000000000000000000000000000000000000..3192eb3a2b9e3dd80050415686878bedeb919ce3 GIT binary patch literal 8015 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 DnBPOx literal 0 HcmV?d00001 diff --git a/docs/assets/images/7-cicd/verify-setup-github-ci.png b/docs/assets/images/7-cicd/verify-setup-github-ci.png new file mode 100644 index 0000000000000000000000000000000000000000..2f61afe335caf93e06bb4a694160c695edc1b30d GIT binary patch literal 91569 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 v(*`~_ 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�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 literal 0 HcmV?d00001 diff --git a/docs/assets/images/7-cicd/verify-setup-gitlab-ci.png b/docs/assets/images/7-cicd/verify-setup-gitlab-ci.png new file mode 100644 index 0000000000000000000000000000000000000000..0321f6239bad52c03490c52816d5cc51d8f43078 GIT binary patch literal 42633 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 L9pwro^U(hTI<%c6 literal 0 HcmV?d00001 From f1f2ae7f1e7b09a297ccbf36a9ded01cd60fac86 Mon Sep 17 00:00:00 2001 From: even-wei Date: Mon, 24 Nov 2025 20:50:24 +0800 Subject: [PATCH 2/5] Remove deprecated generic CI/CD setup files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove unused generic setup-ci.md and setup-cd.md files that have been replaced by platform-specific documentation in github/ and gitlab/ subdirectories. Files removed: - docs/7-cicd/setup-ci.md (replaced by github/setup-ci.md and gitlab/setup-ci.md) - docs/7-cicd/setup-cd.md (replaced by github/setup-cd.md and gitlab/setup-cd.md) - docs/assets/images/7-cicd/verify-setup-ci.png (replaced by platform-specific images) - docs/assets/images/7-cicd/verify-setup-cd.png (replaced by platform-specific images) These files were not referenced in mkdocs.yml navigation and contained outdated GitHub Action-based workflows that have been superseded by the new recce-cloud CLI approach. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: even-wei --- docs/7-cicd/setup-cd.md | 109 ----------------- docs/7-cicd/setup-ci.md | 111 ------------------ docs/assets/images/7-cicd/verify-setup-cd.png | Bin 74189 -> 0 bytes docs/assets/images/7-cicd/verify-setup-ci.png | Bin 49986 -> 0 bytes 4 files changed, 220 deletions(-) delete mode 100644 docs/7-cicd/setup-cd.md delete mode 100644 docs/7-cicd/setup-ci.md delete mode 100644 docs/assets/images/7-cicd/verify-setup-cd.png delete mode 100644 docs/assets/images/7-cicd/verify-setup-ci.png diff --git a/docs/7-cicd/setup-cd.md b/docs/7-cicd/setup-cd.md deleted file mode 100644 index 1a7f866..0000000 --- a/docs/7-cicd/setup-cd.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Setup CD ---- - -# Setup CD - -Set up automatic updates for your Recce Cloud base sessions. Keep your data comparison baseline current every time you merge to main, with no manual work required. - -## Purpose - -**Automated Base Session Management** eliminates manual baseline maintenance. - -- **Triggers**: PR merge to main + scheduled updates -- **Action**: Auto-update base Recce session -- **Benefit**: Current comparison baseline for future PRs - -## Prerequisites - -You need `manifest.json` and `catalog.json` files (dbt artifacts) for Recce Cloud. See [Start Free with Cloud](../2-getting-started/start-free-with-cloud.md) for instructions on preparing these files. - -## Implementation - -### 1. Core Workflow - -Create `.github/workflows/cd-workflow.yml`: - -```yaml -name: Update Base Recce Session - -on: - push: - branches: ["main"] - schedule: - - cron: "0 2 * * *" # Daily at 2 AM UTC - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }} - cancel-in-progress: true - -jobs: - update-base-session: - runs-on: ubuntu-latest - timeout-minutes: 30 - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.11" - cache: "pip" - - - name: Install dependencies - run: | - pip install -r requirements.txt - - - name: Prepare dbt artifacts - run: | - # Install dbt packages - dbt deps - - # Optional: Build tables to ensure they're materialized and updated - # dbt build --target prod - - # Required: Generate artifacts (provides all we need) - dbt docs generate --target prod - env: - DBT_ENV_SECRET_KEY: ${{ secrets.DBT_ENV_SECRET_KEY }} - - - name: Update Recce Cloud Base Session - uses: DataRecce/recce-cloud-cicd-action@v0.1 - # This action automatically uploads artifacts to Recce Cloud -``` - -### 2. Artifact Preparation Options - -**Default: Fresh Build** (shown in example above) - -- `dbt docs generate` is required and provides the needed `manifest.json` and `catalog.json` artifacts. -- `dbt build` is optional but ensures tables are materialized and updated. - -**Alternative Methods:** - -- **External Download**: Download from dbt Cloud, Paradime, or other platforms -- **Pipeline Integration**: Use existing dbt build workflows - - -### 3. Verification - -#### Manual Trigger Test - -1. Go to **Actions** tab in your repository -2. Select "Update Base Recce Session" workflow -3. Click **Run workflow** button -4. Monitor the run for successful completion - -#### Verify Success - -- ✅ **Workflow completes** without errors in Actions tab -- ✅ **Base session updated** in Recce Cloud - -![Recce Cloud showing updated base sessions](../assets/images/7-cicd/verify-setup-cd.png){: .shadow} - -## Next Steps - -**[Setup CI](./setup-ci.md)** to automatically validate PR changes against your updated base session. This completes your CI/CD pipeline by adding automated data validation for every pull request. diff --git a/docs/7-cicd/setup-ci.md b/docs/7-cicd/setup-ci.md deleted file mode 100644 index 4a9e9b0..0000000 --- a/docs/7-cicd/setup-ci.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Setup CI ---- - -# Setup CI - -Automatically validate your data changes in every pull request using Recce Cloud. Catch data issues before they reach production, with validation results right in your PR. - -## Purpose - -**Automated PR Validation** prevents data regressions before merge. - -- **Triggers**: PR opened/updated against main -- **Action**: Auto-update Recce session for PR validation -- **Benefit**: Automated data validation and comparison - -## Prerequisites - -You need `manifest.json` and `catalog.json` files (dbt artifacts) for Recce Cloud. See [Start Free with Cloud](../2-getting-started/start-free-with-cloud.md) for instructions on preparing these files. - -## Implementation - -### 1. Core Workflow - -Create `.github/workflows/ci-workflow.yml`: - -```yaml -name: Validate PR Changes - -on: - pull_request: - branches: ["main"] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - validate-changes: - runs-on: ubuntu-latest - timeout-minutes: 45 - - steps: - - name: Checkout PR branch - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.11" - cache: "pip" - - - name: Install dependencies - run: | - pip install -r requirements.txt - - # Step 1: Prepare current branch artifacts - - name: Build current branch artifacts - run: | - # Install dbt packages - dbt deps - - # Optional: Build tables to ensure they're materialized - # dbt build --target ci - - # Required: Generate artifacts for comparison - dbt docs generate --target ci - env: - DBT_ENV_SECRET_KEY: ${{ secrets.DBT_ENV_SECRET_KEY }} - - - name: Update Recce PR Session - uses: DataRecce/recce-cloud-cicd-action@v0.1 - # This action automatically creates a PR session in Recce Cloud -``` - -### 2. Artifact Preparation Options - -**Default: Fresh Build** (shown in example above) - -- `dbt docs generate` is required and provides all needed artifacts. -- `dbt build` is optional but ensures tables are materialized and updated. - -**Alternative Methods:** - -- **External Download**: Download from dbt Cloud, Paradime, or other platforms -- **Pipeline Integration**: Use existing dbt build workflows - -### 3. Verification - -#### Test with a PR - -1. Create a test PR with small data changes -2. Check **Actions** tab for CI workflow execution -3. Verify validation runs successfully - -#### Verify Success - -- ✅ **Workflow completes** without errors in Actions tab -- ✅ **PR session updated** in Recce Cloud - -![Recce Cloud showing PR validation session](../assets/images/7-cicd/verify-setup-ci.png){: .shadow} - -#### Review PR Session - -To analyze the PR changes in detail: - -- Go to your [Recce Cloud](https://cloud.reccehq.com) -- Find the PR session that was created -- Launch Recce instance to explore data differences diff --git a/docs/assets/images/7-cicd/verify-setup-cd.png b/docs/assets/images/7-cicd/verify-setup-cd.png deleted file mode 100644 index 487d8abbb8042397feab288be8cbcd437bb2d978..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74189 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

Z6hsTs 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 ILs?`02lp7a7XSbN From e1a22b2200e00dde211bb10f6fd197795f0f3803 Mon Sep 17 00:00:00 2001 From: even-wei Date: Mon, 24 Nov 2025 21:08:11 +0800 Subject: [PATCH 3/5] Fix GitHub and GitLab capitalization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Standardize capitalization across documentation: - Github -> GitHub - Gitlab -> GitLab Updated files: - docs/7-cicd/ci-cd-getting-started.md - docs/2-getting-started/start-free-with-cloud.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: even-wei --- docs/2-getting-started/start-free-with-cloud.md | 4 ++-- docs/7-cicd/ci-cd-getting-started.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/2-getting-started/start-free-with-cloud.md b/docs/2-getting-started/start-free-with-cloud.md index dc2152e..a05f412 100644 --- a/docs/2-getting-started/start-free-with-cloud.md +++ b/docs/2-getting-started/start-free-with-cloud.md @@ -109,8 +109,8 @@ See the CI/CD sections for complete setup guides: - [Setup CI for GitHub](../7-cicd/github/setup-ci.md) - [Setup CD for GitHub](../7-cicd/github/setup-cd.md) - GitLab CI/CD - - [Setup CI for Gitlab](../7-cicd/gitlab/setup-ci.md) - - [Setup CD for Gitlab](../7-cicd/gitlab/setup-cd.md) + - [Setup CI for GitLab](../7-cicd/gitlab/setup-ci.md) + - [Setup CD for GitLab](../7-cicd/gitlab/setup-cd.md) ### Automation Benefits diff --git a/docs/7-cicd/ci-cd-getting-started.md b/docs/7-cicd/ci-cd-getting-started.md index 1798cad..7082fec 100644 --- a/docs/7-cicd/ci-cd-getting-started.md +++ b/docs/7-cicd/ci-cd-getting-started.md @@ -74,8 +74,8 @@ If your dbt project uses GitLab: ## Next steps -1. Start with relevant CD setup ([Gitlab](./gitlab/setup-cd.md) or [Github](./github/setup-cd.md)) to establish automatic baseline (production artifacts) updates. -2. Configure CI setup ([Gitlab](./gitlab/setup-ci.md) or [Github](./github/setup-ci.md)) to enable PR/MR validation +1. Start with relevant CD setup ([GitLab](./gitlab/setup-cd.md) or [GitHub](./github/setup-cd.md)) to establish automatic baseline (production artifacts) updates. +2. Configure CI setup ([GitLab](./gitlab/setup-ci.md) or [GitHub](./github/setup-ci.md)) to enable PR/MR validation 3. Review [best practices](./best-practices-prep-env.md) for environment preparation ## Related workflows From 8e81232923fcf639bfe9ce2a5ee129b69ae56b0b Mon Sep 17 00:00:00 2001 From: even-wei Date: Mon, 24 Nov 2025 21:12:23 +0800 Subject: [PATCH 4/5] Add expected output examples for recce-cloud upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add real-world CLI output examples to help users verify their CI/CD setup is working correctly. Shows the detailed output from recce-cloud upload command including: - CI environment detection (platform, PR/MR number, branches, etc.) - Authentication method used (GITHUB_TOKEN/CI_JOB_TOKEN) - Session creation and artifact upload progress - Success confirmation with session ID and URLs Examples added to: - GitHub CI setup (PR validation) - GitHub CD setup (production baseline) - GitLab CI setup (MR validation) - GitLab CD setup (production baseline) These examples help users: - Confirm their setup is working correctly - Understand what information is automatically detected - Verify authentication is working - Get session IDs and URLs for reviewing changes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: even-wei --- docs/7-cicd/github/setup-cd.md | 22 ++++++++++++++++++++++ docs/7-cicd/github/setup-ci.md | 26 ++++++++++++++++++++++++++ docs/7-cicd/gitlab/setup-cd.md | 22 ++++++++++++++++++++++ docs/7-cicd/gitlab/setup-ci.md | 32 ++++++++++++++++++++++++++------ 4 files changed, 96 insertions(+), 6 deletions(-) diff --git a/docs/7-cicd/github/setup-cd.md b/docs/7-cicd/github/setup-cd.md index 22ec7b3..a01e21b 100644 --- a/docs/7-cicd/github/setup-cd.md +++ b/docs/7-cicd/github/setup-cd.md @@ -105,6 +105,28 @@ jobs: ![Recce Cloud showing updated base sessions](../../assets/images/7-cicd/verify-setup-github-cd.png){: .shadow} +#### Expected Output + +When the upload succeeds, you'll see output like this in your workflow logs: + +``` +─────────────────────────── CI Environment Detection ─────────────────────────── +Platform: github-actions +Session Type: prod +Commit SHA: def456ab... +Source Branch: main +Repository: your-org/your-repo +Info: Using GITHUB_TOKEN for platform-specific authentication +────────────────────────── Creating/touching session ─────────────────────────── +Session ID: abc123-def456-ghi789 +Uploading manifest from path "target/manifest.json" +Uploading catalog from path "target/catalog.json" +Notifying upload completion... +──────────────────────────── Uploaded Successfully ───────────────────────────── +Uploaded dbt artifacts to Recce Cloud for session ID "abc123-def456-ghi789" +Artifacts from: "/home/runner/work/your-repo/your-repo/target" +``` + ## Next Steps **[Setup CI](./setup-ci.md)** to automatically validate PR changes against your updated base session. This completes your CI/CD pipeline by adding automated data validation for every pull request. diff --git a/docs/7-cicd/github/setup-ci.md b/docs/7-cicd/github/setup-ci.md index d43abc2..d483f1b 100644 --- a/docs/7-cicd/github/setup-ci.md +++ b/docs/7-cicd/github/setup-ci.md @@ -103,6 +103,32 @@ jobs: ![Recce Cloud showing PR validation session](../../assets/images/7-cicd/verify-setup-github-ci.png){: .shadow} +#### Expected Output + +When the upload succeeds, you'll see output like this in your workflow logs: + +``` +─────────────────────────── CI Environment Detection ─────────────────────────── +Platform: github-actions +PR Number: 42 +PR URL: https://github.com/your-org/your-repo/pull/42 +Session Type: cr +Commit SHA: abc123de... +Base Branch: main +Source Branch: feature/your-feature +Repository: your-org/your-repo +Info: Using GITHUB_TOKEN for platform-specific authentication +────────────────────────── Creating/touching session ─────────────────────────── +Session ID: f8b0f7ca-ea59-411d-abd8-88b80b9f87ad +Uploading manifest from path "target/manifest.json" +Uploading catalog from path "target/catalog.json" +Notifying upload completion... +──────────────────────────── Uploaded Successfully ───────────────────────────── +Uploaded dbt artifacts to Recce Cloud for session ID "f8b0f7ca-ea59-411d-abd8-88b80b9f87ad" +Artifacts from: "/home/runner/work/your-repo/your-repo/target" +Change request: https://github.com/your-org/your-repo/pull/42 +``` + #### Review PR Session To analyze the PR changes in detail: diff --git a/docs/7-cicd/gitlab/setup-cd.md b/docs/7-cicd/gitlab/setup-cd.md index 3c1e1c4..bc61305 100644 --- a/docs/7-cicd/gitlab/setup-cd.md +++ b/docs/7-cicd/gitlab/setup-cd.md @@ -191,6 +191,28 @@ To enable automatic baseline updates: ![Recce Cloud showing updated base sessions](../../assets/images/7-cicd/verify-setup-gitlab-cd.png){: .shadow} +#### Expected Output + +When the upload succeeds, you'll see output like this in your pipeline logs: + +``` +─────────────────────────── CI Environment Detection ─────────────────────────── +Platform: gitlab-ci +Session Type: prod +Commit SHA: a1b2c3d4... +Source Branch: main +Repository: your-org/your-project +Info: Using CI_JOB_TOKEN for platform-specific authentication +────────────────────────── Creating/touching session ─────────────────────────── +Session ID: abc123-def456-ghi789 +Uploading manifest from path "target/manifest.json" +Uploading catalog from path "target/catalog.json" +Notifying upload completion... +──────────────────────────── Uploaded Successfully ───────────────────────────── +Uploaded dbt artifacts to Recce Cloud for session ID "abc123-def456-ghi789" +Artifacts from: "/builds/your-org/your-project/target" +``` + #### Verify Scheduled Runs 1. Go to **CI/CD → Schedules** diff --git a/docs/7-cicd/gitlab/setup-ci.md b/docs/7-cicd/gitlab/setup-ci.md index e6b8e77..7d37395 100644 --- a/docs/7-cicd/gitlab/setup-ci.md +++ b/docs/7-cicd/gitlab/setup-ci.md @@ -121,6 +121,32 @@ The command automatically uses your GitLab CI environment for authentication (vi ![Recce Cloud showing MR validation session](../../assets/images/7-cicd/verify-setup-gitlab-ci.png){: .shadow} +#### Expected Output + +When the upload succeeds, you'll see output like this in your pipeline logs: + +``` +─────────────────────────── CI Environment Detection ─────────────────────────── +Platform: gitlab-ci +MR Number: 4 +MR URL: https://gitlab.com/recce/staging-jaffle-shop-snowflake/-/merge_requests/4 +Session Type: cr +Commit SHA: c928e3d5... +Base Branch: main +Source Branch: feature/replace-recce-cicd-component-with-recce-cloud-cli +Repository: recce/staging-jaffle-shop-snowflake +Info: Using CI_JOB_TOKEN for platform-specific authentication +────────────────────────── Creating/touching session ─────────────────────────── +Session ID: f8b0f7ca-ea59-411d-abd8-88b80b9f87ad +Uploading manifest from path "target/manifest.json" +Uploading catalog from path "target/catalog.json" +Notifying upload completion... +──────────────────────────── Uploaded Successfully ───────────────────────────── +Uploaded dbt artifacts to Recce Cloud for session ID "f8b0f7ca-ea59-411d-abd8-88b80b9f87ad" +Artifacts from: "/builds/recce/staging-jaffle-shop-snowflake/target" +Change request: https://gitlab.com/recce/staging-jaffle-shop-snowflake/-/merge_requests/4 +``` + #### Review MR Session To analyze the MR changes in detail: @@ -129,12 +155,6 @@ To analyze the MR changes in detail: - Find the MR session that was created - Launch Recce instance to explore data differences -Or use the session launch URL from the pipeline output: -```bash -# Pipeline output example -RECCE_SESSION_LAUNCH_URL: https://cloud.reccehq.com/launch/abc123 -``` - ## Troubleshooting ### Missing dbt files From bfd11effd88123858a9ddad562a64dd354a41dfd Mon Sep 17 00:00:00 2001 From: even-wei Date: Mon, 1 Dec 2025 16:09:54 +0800 Subject: [PATCH 5/5] Simplify CI/CD documentation structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unify GitHub and GitLab CI/CD setup guides into platform-agnostic documentation with side-by-side comparisons, reducing documentation by ~90% while improving clarity and maintainability. Changes: - Merge platform-specific guides into unified setup-cd.md and setup-ci.md - Add line numbers and syntax highlighting to all YAML examples - Add verification screenshots for both GitHub and GitLab - Move troubleshooting to Setup CD (logical first step) - Relocate GitLab PAT guide to getting-started (accessible via links only) - Update all cross-references and navigation structure Benefits: - 50% reduction in CI/CD documentation files (9 files → 2 files) - Equal platform treatment with comparison tables - Single source of truth for both platforms - Easier maintenance and consistency 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: even-wei --- .../gitlab-pat-guide.md | 4 +- .../start-free-with-cloud.md | 2 +- docs/7-cicd/ci-cd-getting-started.md | 42 ++- docs/7-cicd/github/scenario-ci.md | 211 ----------- docs/7-cicd/github/setup-cd.md | 132 ------- docs/7-cicd/github/setup-ci.md | 138 ------- docs/7-cicd/gitlab-pat-guide.md | 84 ----- docs/7-cicd/gitlab/setup-cd.md | 271 -------------- docs/7-cicd/gitlab/setup-ci.md | 238 ------------ docs/7-cicd/setup-cd.md | 339 ++++++++++++++++++ docs/7-cicd/setup-ci.md | 275 ++++++++++++++ mkdocs.yml | 22 +- 12 files changed, 646 insertions(+), 1112 deletions(-) rename docs/{7-cicd/gitlab => 2-getting-started}/gitlab-pat-guide.md (94%) delete mode 100644 docs/7-cicd/github/scenario-ci.md delete mode 100644 docs/7-cicd/github/setup-cd.md delete mode 100644 docs/7-cicd/github/setup-ci.md delete mode 100644 docs/7-cicd/gitlab-pat-guide.md delete mode 100644 docs/7-cicd/gitlab/setup-cd.md delete mode 100644 docs/7-cicd/gitlab/setup-ci.md create mode 100644 docs/7-cicd/setup-cd.md create mode 100644 docs/7-cicd/setup-ci.md diff --git a/docs/7-cicd/gitlab/gitlab-pat-guide.md b/docs/2-getting-started/gitlab-pat-guide.md similarity index 94% rename from docs/7-cicd/gitlab/gitlab-pat-guide.md rename to docs/2-getting-started/gitlab-pat-guide.md index f69d18f..5f61255 100644 --- a/docs/7-cicd/gitlab/gitlab-pat-guide.md +++ b/docs/2-getting-started/gitlab-pat-guide.md @@ -80,5 +80,5 @@ Once you have your Personal Access Token: ## Related Documentation -- [Cloud-based Git Platform Integration](../2-getting-started/start-free-with-cloud.md#git-integration) -- [CI/CD Automation](../2-getting-started/start-free-with-cloud.md#cicd-automation) +- [Cloud-based Git Platform Integration](./start-free-with-cloud.md#git-integration) +- [CI/CD Getting Started](../7-cicd/ci-cd-getting-started.md) diff --git a/docs/2-getting-started/start-free-with-cloud.md b/docs/2-getting-started/start-free-with-cloud.md index a05f412..e637914 100644 --- a/docs/2-getting-started/start-free-with-cloud.md +++ b/docs/2-getting-started/start-free-with-cloud.md @@ -49,7 +49,7 @@ Connect your repository to track pull requests/merge requests and validate chang | GitHub | GitLab | |--------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 1. Navigate to settings
2. Connect GitHub repository
3. Authorize Recce access
4. Select repository | 1. Navigate to settings
2. Connect GitLab by providing a Personal Access Token ([see our directions here](../7-cicd/gitlab-pat-guide.md))
3. Connect a project by adding a GitLab Project or URL to a Recce Project | +| 1. Navigate to settings
2. Connect GitHub repository
3. Authorize Recce access
4. Select repository | 1. Navigate to settings
2. Connect GitLab by providing a Personal Access Token ([see our directions here](./gitlab-pat-guide.md))
3. Connect a project by adding a GitLab Project or URL to a Recce Project | ### How to Use PR/MR Tracking diff --git a/docs/7-cicd/ci-cd-getting-started.md b/docs/7-cicd/ci-cd-getting-started.md index 7082fec..bec9faa 100644 --- a/docs/7-cicd/ci-cd-getting-started.md +++ b/docs/7-cicd/ci-cd-getting-started.md @@ -49,33 +49,43 @@ Both CI and CD workflows follow the same pattern: ## Getting Started with your CI/CD -Recce currently integrates with both GitHub Actions and GitLab CI/CD. If you use another CI/CD product and interested in Recce, [let us know](https://cal.com/team/recce/chat). +Recce integrates with both GitHub Actions and GitLab CI/CD using the lightweight `recce-cloud` CLI. If you use another CI/CD platform and are interested in Recce, [let us know](https://cal.com/team/recce/chat). ## Prerequisites Before setting up, ensure you have: -- **Recce Cloud account** You can signup and start your free trial [here](https://cloud.reccehq.com/) -- **Repository connected** to Recce Cloud ([setup guide](../2-getting-started/start-free-with-cloud.md#git-integration)) -- **dbt artifacts generated** (`manifest.json` and `catalog.json`) from your project +- ✅ **Recce Cloud account** - [Start free trial](https://cloud.reccehq.com/) +- ✅ **Repository connected** to Recce Cloud - [Git integration guide](../2-getting-started/start-free-with-cloud.md#git-integration) + - For GitLab: [Create a Personal Access Token](../2-getting-started/gitlab-pat-guide.md) if not already done +- ✅ **dbt artifacts** - Know how to generate `manifest.json` and `catalog.json` from your project -### GitHub -If your dbt project uses GitHub: +## Setup Steps -1. [Setup CD](./github/setup-cd.md) - Auto-update baseline on merge to main -2. [Setup CI](./github/setup-ci.md) - Auto-validate changes in every PR +Both GitHub and GitLab follow the same simple pattern: -### GitLab -If your dbt project uses GitLab: +### 1. Setup CD - Auto-update baseline +[**Setup CD Guide**](./setup-cd.md) - Configure automatic baseline updates when you merge to main -1. [Setup CD](./gitlab/setup-cd.md) - Auto-update baseline on merge to main -2. [Setup CI](./gitlab/setup-ci.md) - Auto-validate changes in every MR -3. [GitLab Personal Access Token Guide](./gitlab/gitlab-pat-guide.md) - Required for GitLab integration +- Updates your production baseline artifacts automatically +- Runs on merge to main + optional scheduled updates +- Works with both GitHub Actions and GitLab CI/CD -## Next steps +### 2. Setup CI - Auto-validate PRs/MRs +[**Setup CI Guide**](./setup-ci.md) - Enable automatic validation for every PR/MR -1. Start with relevant CD setup ([GitLab](./gitlab/setup-cd.md) or [GitHub](./github/setup-cd.md)) to establish automatic baseline (production artifacts) updates. -2. Configure CI setup ([GitLab](./gitlab/setup-ci.md) or [GitHub](./github/setup-ci.md)) to enable PR/MR validation +- Validates data changes in every pull request or merge request +- Catches issues before they reach production +- Works with both GitHub Actions and GitLab CI/CD + +## Why This Order? + +Start with **CD first** to establish your baseline (production artifacts), then add **CI** for PR/MR validation. CI validation compares your PR/MR changes against the baseline created by CD. + +## Next Steps + +1. **[Setup CD](./setup-cd.md)** - Establish automatic baseline updates +2. **[Setup CI](./setup-ci.md)** - Enable PR/MR validation 3. Review [best practices](./best-practices-prep-env.md) for environment preparation ## Related workflows diff --git a/docs/7-cicd/github/scenario-ci.md b/docs/7-cicd/github/scenario-ci.md deleted file mode 100644 index a0cbeba..0000000 --- a/docs/7-cicd/github/scenario-ci.md +++ /dev/null @@ -1,211 +0,0 @@ ---- -title: Setup CI in Open Source ---- - -# Recce CI integration with GitHub Action - -Recce provides the `recce run` command for CI/CD pipeline. You can integrate Recce with GitHub Actions (or other CI tools) to compare the data models between two environments when a new pull-request is created. The below image describes the basic architecture. - -![ci/cd architecture](/assets/images/7-cicd/ci-cd.png){: .shadow} - -The following guide demonstrates how to configure Recce in GitHub Actions. - -## Prerequisites - -Before integrating Recce with GitHub Actions, you will need to configure the following items: - -- Set up **two environments** in your data warehouse. For example, one for base and another for pull request. - -- Provide the **credentials profile** for both environments in your `profiles.yml` so that Recce can access your data warehouse. You can put the credentials in a `profiles.yml` file, or use environment variables. - -- Set up the **data warehouse credentials** in your [GitHub repository secrets](https://docs.github.com/en/actions/reference/encrypted-secrets). - -## Set up Recce with GitHub Actions - -We suggest setting up two GitHub Actions workflows in your GitHub repository. One for the base environment and another for the PR environment. - -- **Base environment workflow**: Triggered on every merge to the `main branch`. This ensures that base artifacts are readily available for use when a PR is opened. - -- **PR environment workflow**: Triggered on every push to the `pull-request branch`. This workflow will compare base models with the current PR environment. - -### Base Workflow (Main Branch) - -This workflow will perform the following actions: - -1. Run dbt on the base environment -2. Upload the generated DBT artifacts to [GitHub workflow artifacts](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts) for later use - -```yaml -name: Recce CI Base Branch - -on: - workflow_dispatch: - push: - branches: - - main - -concurrency: - group: recce-ci-base - cancel-in-progress: true - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: "3.10.x" - - - name: Install dependencies - run: | - pip install -r requirements.txt - - - name: Run DBT - run: | - dbt deps - dbt seed --target ${{ env.DBT_BASE_TARGET }} - dbt run --target ${{ env.DBT_BASE_TARGET }} - dbt docs generate --target ${{ env.DBT_BASE_TARGET }} - env: - DBT_BASE_TARGET: "prod" - - - name: Upload DBT Artifacts - uses: actions/upload-artifact@v4 - with: - name: target - path: target/ -``` - -!!! note - - Please place the above file in `.github/workflows/dbt_base.yml`. This workflow path will also be used in the next PR workflow. If you place it in a different location, please remember to make the corresponding changes in the next step. - -### PR Workflow (Pull Request Branch) - -This workflow will perform the following actions: - -1. Run dbt on the PR environment. -2. Download previously generated base artifacts from base workflow. -3. Use Recce to compare the PR environment with the downloaded base artifacts. - - -````yaml -name: Recce CI PR Branch - -on: - pull_request: - branches: [main] - -jobs: - check-pull-request: - name: Check pull request by Recce CI - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Merge Base Branch into PR - uses: DataRecce/PR-Update@v1 - with: - baseBranch: ${{ github.event.pull_request.base.ref }} - autoMerge: false - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: "3.10.x" - - name: Install dependencies - run: | - pip install -r requirements.txt - pip install recce - - name: Prepare dbt Base environment - run: | - gh repo set-default ${{ github.repository }} - base_branch=${{ github.base_ref }} - run_id=$(gh run list --workflow ${WORKFLOW_BASE} --branch ${base_branch} --status success --limit 1 --json databaseId --jq '.[0].databaseId') - echo "Download artifacts from run $run_id" - gh run download ${run_id} -n target -D target-base - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - WORKFLOW_BASE: ".github/workflows/dbt_base.yml" - - name: Prepare dbt Current environment - run: | - git checkout ${{ github.event.pull_request.head.sha }} - dbt deps - dbt seed --target ${{ env.DBT_CURRENT_TARGET}} - dbt run --target ${{ env.DBT_CURRENT_TARGET}} - dbt docs generate --target ${{ env.DBT_CURRENT_TARGET}} - env: - DBT_CURRENT_TARGET: "dev" - - - name: Run Recce CI - run: | - recce run --github-pull-request-url ${{ github.event.pull_request.html_url }} - - - name: Upload DBT Artifacts - uses: actions/upload-artifact@v4 - with: - name: target - path: target/ - - - name: Upload Recce State File - uses: actions/upload-artifact@v4 - id: recce-artifact-uploader - with: - name: recce-state-file - path: recce_state.json -```` - - - -## Review the Recce State File - -Review the downloaded Recce [state file](../../8-technical-concepts/state-file.md) with the following command: - -```bash -recce server --review recce_state.json -``` - -In the Recce server `--review` mode, you can review the comparison results of the data models between the base and current environments. It will contain the row counts of modified data models. - diff --git a/docs/7-cicd/github/setup-cd.md b/docs/7-cicd/github/setup-cd.md deleted file mode 100644 index a01e21b..0000000 --- a/docs/7-cicd/github/setup-cd.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Setup CD for GitHub ---- - -# Setup CD - -Set up automatic updates for your Recce Cloud base sessions. Keep your data comparison baseline current every time you merge to main, with no manual work required. - -## Purpose - -**Automated Base Session Management** eliminates manual baseline maintenance. - -- **Triggers**: PR merge to main + scheduled updates -- **Action**: Auto-update base Recce session -- **Benefit**: Current comparison baseline for future PRs - -## Prerequisites - -You need `manifest.json` and `catalog.json` files (dbt artifacts) for Recce Cloud. See [Start Free with Cloud](../../2-getting-started/start-free-with-cloud.md) for instructions on preparing these files. - -## Implementation - -### 1. Core Workflow - -Create `.github/workflows/cd-workflow.yml`: - -```yaml -name: Update Base Recce Session - -on: - push: - branches: ["main"] - schedule: - - cron: "0 2 * * *" # Daily at 2 AM UTC - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }} - cancel-in-progress: true - -jobs: - update-base-session: - runs-on: ubuntu-latest - timeout-minutes: 30 - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.11" - cache: "pip" - - - name: Install dependencies - run: | - pip install -r requirements.txt - - - name: Prepare dbt artifacts - run: | - # Install dbt packages - dbt deps - - # Optional: Build tables to ensure they're materialized and updated - # dbt build --target prod - - # Required: Generate artifacts (provides all we need) - dbt docs generate --target prod - env: - DBT_ENV_SECRET_KEY: ${{ secrets.DBT_ENV_SECRET_KEY }} - - - name: Upload to Recce Cloud - run: | - pip install recce-cloud - recce-cloud upload --type prod -``` - -### 2. Artifact Preparation Options - -**Default: Fresh Build** (shown in example above) - -- `dbt docs generate` is required and provides the needed `manifest.json` and `catalog.json` artifacts. -- `dbt build` is optional but ensures tables are materialized and updated. - -**Alternative Methods:** - -- **External Download**: Download from dbt Cloud, Paradime, or other platforms -- **Pipeline Integration**: Use existing dbt build workflows - - -### 3. Verification - -#### Manual Trigger Test - -1. Go to **Actions** tab in your repository -2. Select "Update Base Recce Session" workflow -3. Click **Run workflow** button -4. Monitor the run for successful completion - -#### Verify Success - -- ✅ **Workflow completes** without errors in Actions tab -- ✅ **Base session updated** in Recce Cloud - -![Recce Cloud showing updated base sessions](../../assets/images/7-cicd/verify-setup-github-cd.png){: .shadow} - -#### Expected Output - -When the upload succeeds, you'll see output like this in your workflow logs: - -``` -─────────────────────────── CI Environment Detection ─────────────────────────── -Platform: github-actions -Session Type: prod -Commit SHA: def456ab... -Source Branch: main -Repository: your-org/your-repo -Info: Using GITHUB_TOKEN for platform-specific authentication -────────────────────────── Creating/touching session ─────────────────────────── -Session ID: abc123-def456-ghi789 -Uploading manifest from path "target/manifest.json" -Uploading catalog from path "target/catalog.json" -Notifying upload completion... -──────────────────────────── Uploaded Successfully ───────────────────────────── -Uploaded dbt artifacts to Recce Cloud for session ID "abc123-def456-ghi789" -Artifacts from: "/home/runner/work/your-repo/your-repo/target" -``` - -## Next Steps - -**[Setup CI](./setup-ci.md)** to automatically validate PR changes against your updated base session. This completes your CI/CD pipeline by adding automated data validation for every pull request. diff --git a/docs/7-cicd/github/setup-ci.md b/docs/7-cicd/github/setup-ci.md deleted file mode 100644 index d483f1b..0000000 --- a/docs/7-cicd/github/setup-ci.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: Setup CI for GitHub ---- - -# Setup CI - -Automatically validate your data changes in every pull request using Recce Cloud. Catch data issues before they reach production, with validation results right in your PR. - -## Purpose - -**Automated PR Validation** prevents data regressions before merge. - -- **Triggers**: PR opened/updated against main -- **Action**: Auto-update Recce session for PR validation -- **Benefit**: Automated data validation and comparison - -## Prerequisites - -You need `manifest.json` and `catalog.json` files (dbt artifacts) for Recce Cloud. See [Start Free with Cloud](../../2-getting-started/start-free-with-cloud.md) for instructions on preparing these files. - -## Implementation - -### 1. Core Workflow - -Create `.github/workflows/ci-workflow.yml`: - -```yaml -name: Validate PR Changes - -on: - pull_request: - branches: ["main"] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - validate-changes: - runs-on: ubuntu-latest - timeout-minutes: 45 - - steps: - - name: Checkout PR branch - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.11" - cache: "pip" - - - name: Install dependencies - run: | - pip install -r requirements.txt - - # Step 1: Prepare current branch artifacts - - name: Build current branch artifacts - run: | - # Install dbt packages - dbt deps - - # Optional: Build tables to ensure they're materialized - # dbt build --target ci - - # Required: Generate artifacts for comparison - dbt docs generate --target ci - env: - DBT_ENV_SECRET_KEY: ${{ secrets.DBT_ENV_SECRET_KEY }} - - - name: Upload to Recce Cloud - run: | - pip install recce-cloud - recce-cloud upload -``` - -### 2. Artifact Preparation Options - -**Default: Fresh Build** (shown in example above) - -- `dbt docs generate` is required and provides all needed artifacts. -- `dbt build` is optional but ensures tables are materialized and updated. - -**Alternative Methods:** - -- **External Download**: Download from dbt Cloud, Paradime, or other platforms -- **Pipeline Integration**: Use existing dbt build workflows - -### 3. Verification - -#### Test with a PR - -1. Create a test PR with small data changes -2. Check **Actions** tab for CI workflow execution -3. Verify validation runs successfully - -#### Verify Success - -- ✅ **Workflow completes** without errors in Actions tab -- ✅ **PR session updated** in Recce Cloud - -![Recce Cloud showing PR validation session](../../assets/images/7-cicd/verify-setup-github-ci.png){: .shadow} - -#### Expected Output - -When the upload succeeds, you'll see output like this in your workflow logs: - -``` -─────────────────────────── CI Environment Detection ─────────────────────────── -Platform: github-actions -PR Number: 42 -PR URL: https://github.com/your-org/your-repo/pull/42 -Session Type: cr -Commit SHA: abc123de... -Base Branch: main -Source Branch: feature/your-feature -Repository: your-org/your-repo -Info: Using GITHUB_TOKEN for platform-specific authentication -────────────────────────── Creating/touching session ─────────────────────────── -Session ID: f8b0f7ca-ea59-411d-abd8-88b80b9f87ad -Uploading manifest from path "target/manifest.json" -Uploading catalog from path "target/catalog.json" -Notifying upload completion... -──────────────────────────── Uploaded Successfully ───────────────────────────── -Uploaded dbt artifacts to Recce Cloud for session ID "f8b0f7ca-ea59-411d-abd8-88b80b9f87ad" -Artifacts from: "/home/runner/work/your-repo/your-repo/target" -Change request: https://github.com/your-org/your-repo/pull/42 -``` - -#### Review PR Session - -To analyze the PR changes in detail: - -- Go to your [Recce Cloud](https://cloud.reccehq.com) -- Find the PR session that was created -- Launch Recce instance to explore data differences diff --git a/docs/7-cicd/gitlab-pat-guide.md b/docs/7-cicd/gitlab-pat-guide.md deleted file mode 100644 index f69d18f..0000000 --- a/docs/7-cicd/gitlab-pat-guide.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: GitLab Personal Access Token ---- - -# GitLab Personal Access Token Setup - -To integrate Recce with your GitLab project, you'll need to create a Personal Access Token (PAT) with appropriate -permissions. - -## Token Scope Requirements - -Recce supports two different permission levels depending on your needs: - -| Scope | Permissions | Features Available | -|------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------| -| `api` | Full API access (read and write) | • View and track merge requests
• **Receive generated summaries and notes on MRs from Recce**
• Full integration capabilities | -| `read_api` | Read-only API access | • View and track merge requests
• **Cannot receive generated summaries and notes on MRs from Recce** | - -!!!warning "Important: Choose the Right Scope" - If you want Recce to automatically post validation summaries and notes directly to your merge requests, you **must** use - the `api` scope. The `read_api` scope only allows Recce to read merge request information but cannot write comments or - summaries back to GitLab. - -## How to Create a Personal Access Token - -Follow these steps to create a Personal Access Token in GitLab: - -1. **Navigate to [Personal Access Token Settings in GitLab](https://gitlab.com/-/user_settings/personal_access_tokens)** - -2. **Create New Token** - - Click **Add new token** button - - Enter a descriptive **Token name** (e.g., "Recce Integration") - - Set an **Expiration date** - -3. **Select Scopes** - - Choose one of the following based on your needs: - - **Option A: Full Integration (Recommended)**
- - ✅ `api` scope
- - This enables Recce to post validation summaries and notes to your merge requests - - **Option B: Read-Only Access**
- - ✅ `read_api` scope
- - ⚠️ You will **not** receive generated PR summaries and notes on your MRs from Recce - -4. **Generate Token** - - Click **Create personal access token** - - **Important**: Copy the token immediately - you won't be able to see it again! - -5. **Save Token Securely** - - Store the token in a secure location - - -## Using Your Token with Recce - -Once you have your Personal Access Token: - -1. Navigate to Recce settings -2. Select GitLab integration -3. Paste your Personal Access Token -4. Complete the connection setup - -## Troubleshooting - -**Token not working?** - -- Verify you've selected the correct scope (`api` or `read_api`) -- Check that the token hasn't expired -- Ensure you have appropriate project permissions (Maintainer or Owner role) - -**Not receiving summaries on merge requests?** - -- Verify your token uses the `api` scope (not just `read_api`) -- Check that Recce has write permissions to your project - -**Still having issues?** - -- Please reach out to us on [our Discord](https://discord.gg/HUUx9fyphJ) or via email at `help@reccehq.com` - -## Related Documentation - -- [Cloud-based Git Platform Integration](../2-getting-started/start-free-with-cloud.md#git-integration) -- [CI/CD Automation](../2-getting-started/start-free-with-cloud.md#cicd-automation) diff --git a/docs/7-cicd/gitlab/setup-cd.md b/docs/7-cicd/gitlab/setup-cd.md deleted file mode 100644 index bc61305..0000000 --- a/docs/7-cicd/gitlab/setup-cd.md +++ /dev/null @@ -1,271 +0,0 @@ ---- -title: Setup CD for GitLab ---- - -# Setup CD - -Set up automatic updates for your Recce Cloud base sessions. Keep your data comparison baseline current every time you merge to main, with no manual work required. - -## Purpose - -**Automated Base Session Management** eliminates manual baseline maintenance. - -- **Triggers**: MR merge to main + scheduled updates -- **Action**: Auto-update base Recce session -- **Benefit**: Current comparison baseline for future MRs - -## Prerequisites - -You need `manifest.json` and `catalog.json` files (dbt artifacts) for Recce Cloud. See [Start Free with Cloud](../../2-getting-started/start-free-with-cloud.md) for instructions on preparing these files. - -## Implementation - -### 1. Core Workflow - -Add to your `.gitlab-ci.yml`: -```yaml -stages: - - build - - upload - -variables: - DBT_TARGET_PROD: "prod" - -# Production build - runs on schedule or manual trigger -prod-build: - stage: build - image: python:3.11-slim - script: - - pip install -r requirements.txt - - dbt deps - - # Optional: Build tables to ensure they're materialized and updated - # - dbt build --target $DBT_TARGET_PROD - - # Required: Generate artifacts - - dbt docs generate --target $DBT_TARGET_PROD - artifacts: - paths: - - target/ - expire_in: 7 days - rules: - - if: $CI_PIPELINE_SOURCE == "schedule" - - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - - if: $CI_PIPELINE_SOURCE == "web" - when: manual - -# Production Recce upload -recce-upload-prod: - stage: upload - image: python:3.11-slim - script: - - pip install recce-cloud - - recce-cloud upload --type prod - dependencies: - - prod-build - rules: - - if: $CI_PIPELINE_SOURCE == "schedule" - - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - - if: $CI_PIPELINE_SOURCE == "web" - when: manual -``` - -This configuration: - -- **Scheduled updates**: Runs automatically on schedule (configure in CI/CD → Schedules) -- **Post-merge updates**: Runs when commits are pushed to main branch -- **Manual triggers**: Available via web UI for on-demand updates - -### 2. Unified CI/CD Configuration - -You can handle both CI (MR validation) and CD (base session updates) in a single configuration: -```yaml -stages: - - build - - upload - -# MR build - runs on merge requests -mr-build: - stage: build - image: python:3.11-slim - script: - - pip install -r requirements.txt - - dbt deps - - dbt build --target dev - - dbt docs generate --target dev - artifacts: - paths: - - target/ - expire_in: 7 days - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - -# Production build - runs on schedule or main branch -prod-build: - stage: build - image: python:3.11-slim - script: - - pip install -r requirements.txt - - dbt deps - - dbt build --target prod - - dbt docs generate --target prod - artifacts: - paths: - - target/ - expire_in: 7 days - rules: - - if: $CI_PIPELINE_SOURCE == "schedule" - - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - -# MR Recce upload -recce-upload-mr: - stage: upload - image: python:3.11-slim - script: - - pip install recce-cloud - - recce-cloud upload - dependencies: - - mr-build - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - -# Production Recce upload -recce-upload-prod: - stage: upload - image: python:3.11-slim - script: - - pip install recce-cloud - - recce-cloud upload --type prod - dependencies: - - prod-build - rules: - - if: $CI_PIPELINE_SOURCE == "schedule" - - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH -``` - -This unified approach: - -- Uses the same `recce-cloud upload` command for both CI and CD -- Separates MR validation from production updates via `rules` -- Maintains different dbt targets for each environment -- Reduces configuration duplication - -### 3. Schedule Configuration - -To enable automatic baseline updates: - -1. Go to **CI/CD → Schedules** in your GitLab project -2. Click **New schedule** -3. Configure schedule: - - **Description**: "Daily Recce Base Session Update" - - **Interval Pattern**: `0 2 * * *` (Daily at 2 AM UTC) - - **Target Branch**: `main` -4. Save schedule - -### 4. Artifact Preparation Options - -**Default: Fresh Build** (shown in examples above) - -- `dbt docs generate` is required and provides needed `manifest.json` and `catalog.json` artifacts -- `dbt build` is optional but ensures tables are materialized and updated - -**Alternative Methods:** - -- **External Download**: Download from dbt Cloud, Paradime, or other platforms -- **Pipeline Integration**: Use existing dbt build workflows - -### 5. Verification - -#### Manual Trigger Test - -1. Go to **CI/CD → Pipelines** in your project -2. Click **Run pipeline** -3. Select **main** branch -4. Click **Run pipeline** button -5. Monitor the pipeline for successful completion - -#### Verify Success - -- ✅ **Pipeline completes** without errors in CI/CD → Pipelines -- ✅ **Base session updated** in Recce Cloud - -![Recce Cloud showing updated base sessions](../../assets/images/7-cicd/verify-setup-gitlab-cd.png){: .shadow} - -#### Expected Output - -When the upload succeeds, you'll see output like this in your pipeline logs: - -``` -─────────────────────────── CI Environment Detection ─────────────────────────── -Platform: gitlab-ci -Session Type: prod -Commit SHA: a1b2c3d4... -Source Branch: main -Repository: your-org/your-project -Info: Using CI_JOB_TOKEN for platform-specific authentication -────────────────────────── Creating/touching session ─────────────────────────── -Session ID: abc123-def456-ghi789 -Uploading manifest from path "target/manifest.json" -Uploading catalog from path "target/catalog.json" -Notifying upload completion... -──────────────────────────── Uploaded Successfully ───────────────────────────── -Uploaded dbt artifacts to Recce Cloud for session ID "abc123-def456-ghi789" -Artifacts from: "/builds/your-org/your-project/target" -``` - -#### Verify Scheduled Runs - -1. Go to **CI/CD → Schedules** -2. Check **Last pipeline** status for your schedule -3. Verify regular updates appear in pipeline history - -## Troubleshooting - -### Schedule not triggering - -**Issue**: Scheduled pipeline doesn't run - -**Solutions**: - -1. Verify schedule is **Active** in CI/CD → Schedules -2. Check schedule timezone settings (UTC by default) -3. Ensure target branch exists and is protected if required -4. Review project's CI/CD minutes quota - -### Branch protection issues - -**Error**: Pipeline fails on protected branch - -**Solutions**: - -1. Configure protected branch settings to allow scheduled pipelines -2. Ensure CI/CD variables are available to protected branches -3. Verify schedule owner has push permissions - -### Artifact conflicts - -**Issue**: Wrong artifacts uploaded for production - -**Solutions**: - -1. Ensure `needs` dependencies are correct in upload jobs -2. Verify artifact paths match between build and upload jobs: -```yaml -prod-build: - artifacts: - paths: - - target/ # Must match component's dbt_target_path - -recce-cloud-upload-prod: - needs: - - job: prod-build - artifacts: true # Required -``` - -## Complete Example - -Here's a complete working example with unified CI/CD configuration using `recce-cloud` CLI. This example can be used as a reference for your own setup. - -## Next Steps - -If you haven't already, **[Setup CI](./setup-ci.md)** to automatically validate MR changes. The unified configuration above handles both CI and CD together, giving you a complete automated validation pipeline. diff --git a/docs/7-cicd/gitlab/setup-ci.md b/docs/7-cicd/gitlab/setup-ci.md deleted file mode 100644 index 7d37395..0000000 --- a/docs/7-cicd/gitlab/setup-ci.md +++ /dev/null @@ -1,238 +0,0 @@ ---- -title: Setup CI for GitLab ---- - -# Setup CI - -Automatically validate your data changes in every merge request using Recce Cloud. Catch data issues before they reach production, with validation results right in your MR. - -## Purpose - -**Automated MR Validation** prevents data regressions before merge. - -- **Triggers**: MR opened/updated against main -- **Action**: Auto-update Recce session for MR validation -- **Benefit**: Automated data validation and comparison - -## Prerequisites - -You need `manifest.json` and `catalog.json` files (dbt artifacts) for Recce Cloud. See [Start Free with Cloud](../../2-getting-started/start-free-with-cloud.md) for instructions on preparing these files. - -## Implementation - -### 1. Core Workflow - -Add to your `.gitlab-ci.yml`: -```yaml -stages: - - build - - upload - -variables: - DBT_TARGET: "ci" - -dbt-build: - stage: build - image: python:3.11-slim - script: - - pip install -r requirements.txt - - # Install dbt packages - - dbt deps - - # Optional: Build tables to ensure they're materialized - # - dbt build --target $DBT_TARGET - - # Required: Generate artifacts for comparison - - dbt docs generate --target $DBT_TARGET - artifacts: - paths: - - target/ - expire_in: 1 week - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - -recce-upload: - stage: upload - image: python:3.11-slim - script: - - pip install recce-cloud - - recce-cloud upload - dependencies: - - dbt-build - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" -``` - -The `recce-cloud upload` command automatically: - -- Detects your GitLab CI environment -- Creates a session in Recce Cloud for the merge request -- Uploads your dbt artifacts (`manifest.json` and `catalog.json`) -- Links the session to your MR - -### 2. Configuration Options - -The `recce-cloud upload` command supports customization via flags: - -```yaml -recce-upload: - script: - - pip install recce-cloud - - recce-cloud upload --target-path custom-target --type cr -``` - -**Available options:** - -- `--target-path`: Path to dbt artifacts directory (default: `target`) -- `--type`: Session type - `cr`, `prod`, or `dev` (auto-detected by default) -- `--cr`: Override MR number (auto-detected by default) -- `--dry-run`: Preview what would be uploaded without actually uploading - -**Authentication:** - -The command automatically uses your GitLab CI environment for authentication (via `CI_JOB_TOKEN`). No additional token setup required. - -### 3. Artifact Preparation Options - -**Default: Fresh Build** (shown in example above) - -- `dbt docs generate` is required and provides all needed artifacts -- `dbt build` is optional but ensures tables are materialized and updated - -**Alternative Methods:** - -- **External Download**: Download from dbt Cloud, Paradime, or other platforms -- **Pipeline Integration**: Use existing dbt build workflows - -### 4. Verification - -#### Test with an MR - -1. Create a test MR with small data changes -2. Check **CI/CD → Pipelines** for workflow execution -3. Verify validation runs successfully - -#### Verify Success - -- ✅ **Pipeline completes** without errors in CI/CD → Pipelines -- ✅ **MR session updated** in Recce Cloud -- ✅ **Session URL** appears in pipeline job output - -![Recce Cloud showing MR validation session](../../assets/images/7-cicd/verify-setup-gitlab-ci.png){: .shadow} - -#### Expected Output - -When the upload succeeds, you'll see output like this in your pipeline logs: - -``` -─────────────────────────── CI Environment Detection ─────────────────────────── -Platform: gitlab-ci -MR Number: 4 -MR URL: https://gitlab.com/recce/staging-jaffle-shop-snowflake/-/merge_requests/4 -Session Type: cr -Commit SHA: c928e3d5... -Base Branch: main -Source Branch: feature/replace-recce-cicd-component-with-recce-cloud-cli -Repository: recce/staging-jaffle-shop-snowflake -Info: Using CI_JOB_TOKEN for platform-specific authentication -────────────────────────── Creating/touching session ─────────────────────────── -Session ID: f8b0f7ca-ea59-411d-abd8-88b80b9f87ad -Uploading manifest from path "target/manifest.json" -Uploading catalog from path "target/catalog.json" -Notifying upload completion... -──────────────────────────── Uploaded Successfully ───────────────────────────── -Uploaded dbt artifacts to Recce Cloud for session ID "f8b0f7ca-ea59-411d-abd8-88b80b9f87ad" -Artifacts from: "/builds/recce/staging-jaffle-shop-snowflake/target" -Change request: https://gitlab.com/recce/staging-jaffle-shop-snowflake/-/merge_requests/4 -``` - -#### Review MR Session - -To analyze the MR changes in detail: - -- Go to your [Recce Cloud](https://cloud.reccehq.com) -- Find the MR session that was created -- Launch Recce instance to explore data differences - -## Troubleshooting - -### Missing dbt files - -**Error**: `Missing manifest.json` or `Missing catalog.json` - -**Solution**: Ensure `dbt docs generate` runs successfully before the Recce component: -```yaml -dbt-build: - script: - - dbt build - - dbt docs generate # Required - artifacts: - paths: - - target/ -``` - -### Authentication issues - -**Error**: `Failed to create session: 401 Unauthorized` - -**Solutions**: - -1. Verify Recce Cloud GitLab integration is set up for your project -2. Check that your project is connected in [Recce Cloud settings](https://cloud.reccehq.com/settings) -3. For custom tokens, ensure the token has `api` scope ([setup guide](../gitlab-pat-guide.md)) - -### Upload failures - -**Error**: `Failed to upload manifest/catalog` - -**Solutions**: - -1. Check network connectivity to Recce Cloud -2. Verify artifact files exist in `target/` directory -3. Review pipeline job logs for detailed error messages -4. Ensure artifacts are passed between jobs: -```yaml -dbt-build: - artifacts: - paths: - - target/ # Must include dbt artifacts -``` - -## Complete Example - -Here's a full working example combining dbt build and Recce validation: -```yaml -stages: - - build - - upload - -variables: - DBT_TARGET: "ci" - -dbt-build: - stage: build - image: python:3.11-slim - script: - - pip install -r requirements.txt - - dbt deps - - dbt build --target $DBT_TARGET - - dbt docs generate --target $DBT_TARGET - artifacts: - paths: - - target/ - expire_in: 1 week - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - -recce-upload: - stage: upload - image: python:3.11-slim - script: - - pip install recce-cloud - - recce-cloud upload - dependencies: - - dbt-build - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" -``` diff --git a/docs/7-cicd/setup-cd.md b/docs/7-cicd/setup-cd.md new file mode 100644 index 0000000..5a799c3 --- /dev/null +++ b/docs/7-cicd/setup-cd.md @@ -0,0 +1,339 @@ +--- +title: Setup CD +--- + +# Setup CD - Auto-Update Baseline + +Set up automatic updates for your Recce Cloud base sessions. Keep your data comparison baseline current every time you merge to main, with no manual work required. + +## What This Does + +**Automated Base Session Management** eliminates manual baseline maintenance: + +- **Triggers**: Merge to main + scheduled updates + manual runs +- **Action**: Auto-update base Recce session with latest production artifacts +- **Benefit**: Current comparison baseline for all future PRs/MRs + +## Prerequisites + +Before setting up CD, ensure you have: + +- ✅ **Recce Cloud account** - [Start free trial](https://cloud.reccehq.com/) +- ✅ **Repository connected** to Recce Cloud - [Git integration guide](../2-getting-started/start-free-with-cloud.md#git-integration) +- ✅ **dbt artifacts** - Know how to generate `manifest.json` and `catalog.json` from your dbt project + +## Setup + +### GitHub Actions + +Create `.github/workflows/cd-workflow.yml`: + +```yaml linenums="1" hl_lines="42-43" +name: Update Base Recce Session + +on: + push: + branches: ["main"] + schedule: + - cron: "0 2 * * *" # Daily at 2 AM UTC + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: true + +jobs: + update-base-session: + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: "pip" + + - name: Install dependencies + run: pip install -r requirements.txt + + - name: Prepare dbt artifacts + run: | + dbt deps + # Optional: dbt build --target prod + dbt docs generate --target prod + env: + DBT_ENV_SECRET_KEY: ${{ secrets.DBT_ENV_SECRET_KEY }} + + - name: Upload to Recce Cloud + run: | + pip install recce-cloud + recce-cloud upload --type prod +``` + +**Key points:** + +- Authentication is automatic via `GITHUB_TOKEN` +- `recce-cloud upload --type prod` tells Recce this is a baseline session +- `dbt docs generate` creates the required `manifest.json` and `catalog.json` + +### GitLab CI/CD + +Add to your `.gitlab-ci.yml`: + +```yaml linenums="1" hl_lines="30-31" +stages: + - build + - upload + +variables: + DBT_TARGET_PROD: "prod" + +# Production build - runs on schedule or main branch push +prod-build: + stage: build + image: python:3.11-slim + script: + - pip install -r requirements.txt + - dbt deps + # Optional: dbt build --target $DBT_TARGET_PROD + - dbt docs generate --target $DBT_TARGET_PROD + artifacts: + paths: + - target/ + expire_in: 7 days + rules: + - if: $CI_PIPELINE_SOURCE == "schedule" + - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + +# Upload to Recce Cloud +recce-upload-prod: + stage: upload + image: python:3.11-slim + script: + - pip install recce-cloud + - recce-cloud upload --type prod + dependencies: + - prod-build + rules: + - if: $CI_PIPELINE_SOURCE == "schedule" + - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH +``` + +**Key points:** + +- Authentication is automatic via `CI_JOB_TOKEN` +- Configure schedule in **CI/CD → Schedules** (e.g., `0 2 * * *` for daily at 2 AM UTC) +- `recce-cloud upload --type prod` tells Recce this is a baseline session + +### Platform Comparison + +| Aspect | GitHub Actions | GitLab CI/CD | +| -------------------- | ----------------------------------- | ------------------------------------------------------------------------------ | +| **Config file** | `.github/workflows/cd-workflow.yml` | `.gitlab-ci.yml` | +| **Trigger on merge** | `on: push: branches: ["main"]` | `if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH` | +| **Schedule setup** | In workflow YAML (`schedule:`) | In UI: **CI/CD → Schedules** | +| **Authentication** | Automatic (`GITHUB_TOKEN`) | Automatic (`CI_JOB_TOKEN`) | +| **Manual trigger** | `workflow_dispatch:` | Pipeline run from UI | + +## Verification + +### Test the Workflow + +**GitHub:** + +1. Go to **Actions** tab → Select "Update Base Recce Session" +2. Click **Run workflow** → Monitor for completion + +**GitLab:** + +1. Go to **CI/CD → Pipelines** → Click **Run pipeline** +2. Select **main** branch → Monitor for completion + +### Verify Success + +Look for these indicators: + +- ✅ **Workflow/Pipeline completes** without errors +- ✅ **Base session updated** in [Recce Cloud](https://cloud.reccehq.com) + +**GitHub:** + +![Recce Cloud showing updated base sessions](../assets/images/7-cicd/verify-setup-github-cd.png){: .shadow} + +**GitLab:** + +![Recce Cloud showing updated base sessions](../assets/images/7-cicd/verify-setup-gitlab-cd.png){: .shadow} + +### Expected Output + +When the upload succeeds, you'll see output like this in your workflow logs: + +**GitHub:** + +```hl_lines="2 3 13" +─────────────────────────── CI Environment Detection ─────────────────────────── +Platform: github-actions +Session Type: prod +Commit SHA: def456ab... +Source Branch: main +Repository: your-org/your-repo +Info: Using GITHUB_TOKEN for platform-specific authentication +────────────────────────── Creating/touching session ─────────────────────────── +Session ID: abc123-def456-ghi789 +Uploading manifest from path "target/manifest.json" +Uploading catalog from path "target/catalog.json" +Notifying upload completion... +──────────────────────────── Uploaded Successfully ───────────────────────────── +Uploaded dbt artifacts to Recce Cloud for session ID "abc123-def456-ghi789" +Artifacts from: "/home/runner/work/your-repo/your-repo/target" +``` + +**GitLab:** + +```hl_lines="2 3 13" +─────────────────────────── CI Environment Detection ─────────────────────────── +Platform: gitlab-ci +Session Type: prod +Commit SHA: a1b2c3d4... +Source Branch: main +Repository: your-org/your-project +Info: Using CI_JOB_TOKEN for platform-specific authentication +────────────────────────── Creating/touching session ─────────────────────────── +Session ID: abc123-def456-ghi789 +Uploading manifest from path "target/manifest.json" +Uploading catalog from path "target/catalog.json" +Notifying upload completion... +──────────────────────────── Uploaded Successfully ───────────────────────────── +Uploaded dbt artifacts to Recce Cloud for session ID "abc123-def456-ghi789" +Artifacts from: "/builds/your-org/your-project/target" +``` + +## Advanced Options + +### Custom Artifact Path + +If your dbt artifacts are in a non-standard location: + +```bash +recce-cloud upload --type prod --target-path custom-target +``` + +### External Artifact Sources + +You can download artifacts from external sources before uploading: + +```yaml +# GitHub example +- name: Download from dbt Cloud + run: | + # Your download logic here + # Artifacts should end up in target/ directory + +- name: Upload to Recce Cloud + run: | + pip install recce-cloud + recce-cloud upload --type prod +``` + +### Dry Run Testing + +Test your configuration without actually uploading: + +```bash +recce-cloud upload --type prod --dry-run +``` + +## Troubleshooting + +### Missing dbt artifacts + +**Error**: `Missing manifest.json` or `Missing catalog.json` + +**Solution**: Ensure `dbt docs generate` runs successfully before upload: + +**GitHub:** + +```yaml +- name: Prepare dbt artifacts + run: | + dbt deps + dbt docs generate --target prod # Required +``` + +**GitLab:** + +```yaml +prod-build: + script: + - dbt deps + - dbt docs generate --target $DBT_TARGET_PROD # Required + artifacts: + paths: + - target/ +``` + +### Authentication issues + +**Error**: `Failed to create session: 401 Unauthorized` + +**Solutions**: + +1. Verify your repository is connected in [Recce Cloud settings](https://cloud.reccehq.com/settings) +2. **For GitHub**: Ensure workflow has default `GITHUB_TOKEN` permissions +3. **For GitLab**: Verify project has GitLab integration configured + - Check that you've created a [Personal Access Token](../2-getting-started/gitlab-pat-guide.md) + - Ensure the token has appropriate scope (`api` or `read_api`) + - Verify the project is connected in Recce Cloud settings + +### Upload failures + +**Error**: `Failed to upload manifest/catalog` + +**Solutions**: + +1. Check network connectivity to Recce Cloud +2. Verify artifact files exist in `target/` directory +3. Review workflow/pipeline logs for detailed error messages +4. **For GitLab**: Ensure artifacts are passed between jobs: + + ```yaml + prod-build: + artifacts: + paths: + - target/ # Must include dbt artifacts + + recce-upload-prod: + dependencies: + - prod-build # Required to access artifacts + ``` + +### Session not appearing + +**Issue**: Upload succeeds but session doesn't appear in Recce Cloud + +**Solutions**: + +1. Check you're viewing the correct repository in Recce Cloud +2. Verify you're looking at the production/base sessions (not PR/MR sessions) +3. Check session filters in Recce Cloud (may be hidden by filters) +4. Refresh the Recce Cloud page + +### Schedule not triggering (GitLab only) + +**Issue**: Scheduled pipeline doesn't run + +**Solutions**: + +1. Verify schedule is **Active** in CI/CD → Schedules +2. Check schedule timezone settings (UTC by default) +3. Ensure target branch (`main`) exists +4. Review project's CI/CD minutes quota +5. Verify schedule owner has appropriate permissions + +## Next Steps + +**[Setup CI](./setup-ci.md)** to automatically validate PR/MR changes against your updated base session. This completes your CI/CD pipeline by adding automated data validation for every pull request or merge request. diff --git a/docs/7-cicd/setup-ci.md b/docs/7-cicd/setup-ci.md new file mode 100644 index 0000000..38b4039 --- /dev/null +++ b/docs/7-cicd/setup-ci.md @@ -0,0 +1,275 @@ +--- +title: Setup CI +--- + +# Setup CI - Auto-Validate PRs/MRs + +Automatically validate your data changes in every pull request or merge request using Recce Cloud. Catch data issues before they reach production, with validation results right in your PR/MR. + +## What This Does + +**Automated PR/MR Validation** prevents data regressions before merge: + +- **Triggers**: PR/MR opened or updated against main +- **Action**: Auto-update Recce session for validation +- **Benefit**: Automated data validation and comparison visible in your PR/MR + +## Prerequisites + +Before setting up CI, ensure you have: + +- ✅ **Recce Cloud account** - [Start free trial](https://cloud.reccehq.com/) +- ✅ **Repository connected** to Recce Cloud - [Git integration guide](../2-getting-started/start-free-with-cloud.md#git-integration) +- ✅ **dbt artifacts** - Know how to generate `manifest.json` and `catalog.json` from your dbt project +- ✅ **CD configured** - [Setup CD](./setup-cd.md) to establish baseline for comparisons + +## Setup + +### GitHub Actions + +Create `.github/workflows/ci-workflow.yml`: + +```yaml linenums="1" hl_lines="41-42" +name: Validate PR Changes + +on: + pull_request: + branches: ["main"] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + validate-changes: + runs-on: ubuntu-latest + timeout-minutes: 45 + + steps: + - name: Checkout PR branch + uses: actions/checkout@v4 + with: + fetch-depth: 2 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: "pip" + + - name: Install dependencies + run: pip install -r requirements.txt + + - name: Build current branch artifacts + run: | + dbt deps + # Optional: dbt build --target ci + dbt docs generate --target ci + env: + DBT_ENV_SECRET_KEY: ${{ secrets.DBT_ENV_SECRET_KEY }} + + - name: Upload to Recce Cloud + run: | + pip install recce-cloud + recce-cloud upload +``` + +**Key points:** + +- Authentication is automatic via `GITHUB_TOKEN` +- `recce-cloud upload` (without `--type`) auto-detects this is a PR session +- `dbt docs generate` creates the required `manifest.json` and `catalog.json` + +### GitLab CI/CD + +Add to your `.gitlab-ci.yml`: + +```yaml linenums="1" hl_lines="29-30" +stages: + - build + - upload + +variables: + DBT_TARGET: "ci" + +# MR build - runs on merge requests +dbt-build: + stage: build + image: python:3.11-slim + script: + - pip install -r requirements.txt + - dbt deps + # Optional: dbt build --target $DBT_TARGET + - dbt docs generate --target $DBT_TARGET + artifacts: + paths: + - target/ + expire_in: 1 week + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + +# Upload to Recce Cloud +recce-upload: + stage: upload + image: python:3.11-slim + script: + - pip install recce-cloud + - recce-cloud upload + dependencies: + - dbt-build + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" +``` + +**Key points:** + +- Authentication is automatic via `CI_JOB_TOKEN` +- `recce-cloud upload` (without `--type`) auto-detects this is an MR session +- `dbt docs generate` creates the required `manifest.json` and `catalog.json` + +### Platform Comparison + +| Aspect | GitHub Actions | GitLab CI/CD | +| -------------------- | ----------------------------------- | -------------------------------------------------- | +| **Config file** | `.github/workflows/ci-workflow.yml` | `.gitlab-ci.yml` | +| **Trigger** | `on: pull_request:` | `if: $CI_PIPELINE_SOURCE == "merge_request_event"` | +| **Authentication** | Automatic (`GITHUB_TOKEN`) | Automatic (`CI_JOB_TOKEN`) | +| **Session type** | Auto-detected from PR context | Auto-detected from MR context | +| **Artifact passing** | Not needed (single job) | Use `artifacts:` + `dependencies:` | + +## Verification + +### Test with a PR/MR + +**GitHub:** + +1. Create a test PR with small data changes +2. Check **Actions** tab for CI workflow execution +3. Verify validation runs successfully + +**GitLab:** + +1. Create a test MR with small data changes +2. Check **CI/CD → Pipelines** for workflow execution +3. Verify validation runs successfully + +### Verify Success + +Look for these indicators: + +- ✅ **Workflow/Pipeline completes** without errors +- ✅ **PR/MR session created** in [Recce Cloud](https://cloud.reccehq.com) +- ✅ **Session URL** appears in workflow/pipeline output + +**GitHub:** + +![Recce Cloud showing PR validation session](../assets/images/7-cicd/verify-setup-github-ci.png){: .shadow} + +**GitLab:** + +![Recce Cloud showing MR validation session](../assets/images/7-cicd/verify-setup-gitlab-ci.png){: .shadow} + +### Expected Output + +When the upload succeeds, you'll see output like this in your workflow logs: + +**GitHub:** + +```hl_lines="2 5 16" +─────────────────────────── CI Environment Detection ─────────────────────────── +Platform: github-actions +PR Number: 42 +PR URL: https://github.com/your-org/your-repo/pull/42 +Session Type: cr +Commit SHA: abc123de... +Base Branch: main +Source Branch: feature/your-feature +Repository: your-org/your-repo +Info: Using GITHUB_TOKEN for platform-specific authentication +────────────────────────── Creating/touching session ─────────────────────────── +Session ID: f8b0f7ca-ea59-411d-abd8-88b80b9f87ad +Uploading manifest from path "target/manifest.json" +Uploading catalog from path "target/catalog.json" +Notifying upload completion... +──────────────────────────── Uploaded Successfully ───────────────────────────── +Uploaded dbt artifacts to Recce Cloud for session ID "f8b0f7ca-ea59-411d-abd8-88b80b9f87ad" +Artifacts from: "/home/runner/work/your-repo/your-repo/target" +Change request: https://github.com/your-org/your-repo/pull/42 +``` + +**GitLab:** + +```hl_lines="2 5 16" +─────────────────────────── CI Environment Detection ─────────────────────────── +Platform: gitlab-ci +MR Number: 4 +MR URL: https://gitlab.com/your-org/your-project/-/merge_requests/4 +Session Type: cr +Commit SHA: c928e3d5... +Base Branch: main +Source Branch: feature/your-feature +Repository: your-org/your-project +Info: Using CI_JOB_TOKEN for platform-specific authentication +────────────────────────── Creating/touching session ─────────────────────────── +Session ID: f8b0f7ca-ea59-411d-abd8-88b80b9f87ad +Uploading manifest from path "target/manifest.json" +Uploading catalog from path "target/catalog.json" +Notifying upload completion... +──────────────────────────── Uploaded Successfully ───────────────────────────── +Uploaded dbt artifacts to Recce Cloud for session ID "f8b0f7ca-ea59-411d-abd8-88b80b9f87ad" +Artifacts from: "/builds/your-org/your-project/target" +Change request: https://gitlab.com/your-org/your-project/-/merge_requests/4 +``` + +### Review PR/MR Session + +To analyze the changes in detail: + +1. Go to your [Recce Cloud](https://cloud.reccehq.com) +2. Find the PR/MR session that was created +3. Launch Recce instance to explore data differences + +## Advanced Options + +### Custom Artifact Path + +If your dbt artifacts are in a non-standard location: + +```bash +recce-cloud upload --target-path custom-target +``` + +### Dry Run Testing + +Test your configuration without actually uploading: + +```bash +recce-cloud upload --dry-run +``` + +## Troubleshooting + +If CI is not working, the issue is likely in your CD setup. Most problems are shared between CI and CD: + +**Common issues:** + +- Missing dbt artifacts +- Authentication failures +- Upload errors +- Sessions not appearing + +**→ See the [Setup CD Troubleshooting section](./setup-cd.md#troubleshooting)** for detailed solutions. + +**CI-specific tip:** If CD works but CI doesn't, verify: + +1. PR/MR trigger conditions in your workflow configuration +2. The PR/MR is targeting the correct base branch (usually `main`) +3. You're looking at PR/MR sessions in Recce Cloud (not production sessions) + +## Next Steps + +After setting up CI, explore these workflow guides: + +- [PR/MR review workflow](./scenario-pr-review.md) - Collaborate with teammates using Recce +- [Preset checks](./preset-checks.md) - Configure automatic validation checks +- [Best practices](./best-practices-prep-env.md) - Environment preparation tips diff --git a/mkdocs.yml b/mkdocs.yml index f121729..3787c57 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -75,29 +75,13 @@ nav: - 6-collaboration/checklist.md - 6-collaboration/share.md - CI/CD: - # Brief intro explaining GitHub vs GitLab paths - 7-cicd/ci-cd-getting-started.md - - # GitHub CI/CD - - Using GitHub: - - 7-cicd/github/setup-ci.md - #- 7-cicd/cloud-recce-summary.md - #- 7-cicd/cloud-preset-checks.md -# - 7-cicd/github/scenario-ci.md - - 7-cicd/github/setup-cd.md - - # GitLab CI/CD - - Using GitLab: - - 7-cicd/gitlab/setup-ci.md - - 7-cicd/gitlab/setup-cd.md - - 7-cicd/gitlab/gitlab-pat-guide.md - - #- 7-cicd/recce-debug.md # content outdated + - 7-cicd/setup-cd.md + - 7-cicd/setup-ci.md - 7-cicd/scenario-dev.md - 7-cicd/scenario-pr-review.md - - 7-cicd/best-practices-prep-env.md - #- 7-cicd/recce-summary.md content outdated - 7-cicd/preset-checks.md + - 7-cicd/best-practices-prep-env.md - Technical Concepts: - 8-technical-concepts/state-file.md