Skip to content

Migrating dbt to 1.6 and programmatic invocations #38

Migrating dbt to 1.6 and programmatic invocations

Migrating dbt to 1.6 and programmatic invocations #38

Workflow file for this run

name: ci_pipeline
on:
pull_request:
branches:
- stg
- prd
env:
DBT_CICD_RUN: "true"
DESTINATION_BRANCH: "${{ github.event.pull_request.base.ref }}"
DBT_DATASET: "ci_${{ github.event.number }}_${{ github.run_number }}_${{ github.sha }}"
DBT_PROFILES_DIR: "."
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
ci_pipeline:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Save stg GCP credentials to runner
run: |
echo "${{ secrets.DBT_CICD_SA_SECRET_KEY_STG_BASE64_ENCODED }}" | base64 --decode >> ./service_account.json && \
export GOOGLE_APPLICATION_CREDENTIALS="$(pwd)/service_account.json"
if: ${{ github.event.pull_request.base.ref == 'stg' }}
- name: Save prd GCP credentials to runner
run: |
echo "${{ secrets.DBT_CICD_SA_SECRET_KEY_PRD_BASE64_ENCODED }}" | base64 --decode >> ./service_account.json && \
export GOOGLE_APPLICATION_CREDENTIALS="$(pwd)/service_account.json"
if: ${{ github.event.pull_request.base.ref == 'prd' }}
- name: Authenticate with GCP
run: |
gcloud auth activate-service-account dbt-cicd@beyond-basics-$DESTINATION_BRANCH.iam.gserviceaccount.com --key-file=./service_account.json && \
gcloud config set project beyond-basics-$DESTINATION_BRANCH
- name: Install python packages
run: pip install -r requirements.txt -r requirements_dev.txt
- name: dbt compile
run: dbt compile --target $DESTINATION_BRANCH
- name: dbt docs generate
run: dbt docs generate --target $DESTINATION_BRANCH
- name: pre-commit run -a
run: SKIP=dbt-compile,dbt-docs-generate pre-commit run -a
- run: pytest ./tests/pytest -m no_deps -n 5
- run: dbt deps
- name: dbt debug
run: dbt debug --target $DESTINATION_BRANCH
# Run dbt
- name: dbt build
run: dbt --warn-error build --fail-fast --target $DESTINATION_BRANCH
- run: pytest ./tests/pytest -m run_results_json -n 5
- name: dbt source freshness
run: dbt source freshness --target $DESTINATION_BRANCH || true # source freshness is allowed to fail in CI due to stale sources, the next command runs pytest on sources.json to validate the generated SQL (the prupose of this step)
- run: pytest ./tests/pytest -m sources_json -n 5
- name: dbt build incremental models
run: dbt --warn-error build --fail-fast --select config.materialized:incremental --target $DESTINATION_BRANCH
# Mart Monitor
- run: if [ "$DESTINATION_BRANCH" == "stg" ]; then DBT_CICD_RUN="false" dbt compile --target $DESTINATION_BRANCH --threads 64; else echo "Only runs for PRs to stg"; fi # Need manifest.json as exists during $DESTINATION_BRANCH runs and not during CI runs
- run: if [ "$DESTINATION_BRANCH" == "stg" ]; then python ./scripts/mart_monitor_commenter.py --dbt_dataset $DBT_DATASET --pull_request_id ${{ github.event.number }} --target_branch $DESTINATION_BRANCH; else echo "Only runs for PRs to stg"; fi
dev_container:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build container and run dbt command
uses: devcontainers/[email protected]
env:
DBT_DATASET: "cicd_${{ github.event.number }}_${{ github.run_number }}_${{ github.sha }}_dev_container"
DBT_PROFILES_DIR: "."
DESTINATION_BRANCH: "${{ github.event.pull_request.base.ref }}"
with:
runCmd: |
echo "${{ secrets.DBT_CICD_SA_SECRET_KEY_STG_BASE64_ENCODED }}" | base64 --decode >> ./service_account.json
export GOOGLE_APPLICATION_CREDENTIALS="$(pwd)/service_account.json"cloud auth activate-service-account dbt-cicd@beyond-basics-$DESTINATION_BRANCH.iam.gserviceaccount.com --key-file=./service_account.json
gcloud config set project beyond-basics-$DESTINATION_BRANCH
dbt compile --target $DESTINATION_BRANCH
env: |
DBT_DATASET
DBT_PROFILES_DIR
DESTINATION_BRANCH