-
Notifications
You must be signed in to change notification settings - Fork 189
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
671 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
[bumpversion] | ||
current_version = 0.21.0rc2 | ||
parse = (?P<major>\d+) | ||
\.(?P<minor>\d+) | ||
\.(?P<patch>\d+) | ||
(\.(?P<pluginpatch>\d+))? | ||
((?P<prerelease>[a-z]+)(?P<num>\d+))? | ||
serialize = | ||
{major}.{minor}.{patch}.{pluginpatch}{prerelease}{num} | ||
{major}.{minor}.{patch}{prerelease}{num} | ||
{major}.{minor}.{patch}.{pluginpatch} | ||
{major}.{minor}.{patch} | ||
commit = False | ||
tag = False | ||
|
||
[bumpversion:part:prerelease] | ||
first_value = a | ||
values = | ||
a | ||
b | ||
rc | ||
|
||
[bumpversion:part:num] | ||
first_value = 1 | ||
|
||
[bumpversion:part:pluginpatch] | ||
first_value = 1 | ||
|
||
[bumpversion:file:dbt/adapters/snowflake/__version__.py] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
version: 2 | ||
updates: | ||
# python dependencies | ||
- package-ecosystem: "pip" | ||
directory: "/dbt" | ||
schedule: | ||
interval: "daily" | ||
rebase-strategy: "disabled" |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
module.exports = ({ context }) => { | ||
const defaultPythonVersion = "3.8"; | ||
const supportedPythonVersions = ["3.6", "3.7", "3.8", "3.9"]; | ||
const supportedAdapters = ["snowflake"]; | ||
|
||
// if PR, generate matrix based on files changed and PR labels | ||
if (context.eventName.includes("pull_request")) { | ||
// `changes` is a list of adapter names that have related | ||
// file changes in the PR | ||
// ex: ['postgres', 'snowflake'] | ||
const changes = JSON.parse(process.env.CHANGES); | ||
const labels = context.payload.pull_request.labels.map(({ name }) => name); | ||
console.log("labels", labels); | ||
console.log("changes", changes); | ||
const testAllLabel = labels.includes("test all"); | ||
const include = []; | ||
|
||
for (const adapter of supportedAdapters) { | ||
if ( | ||
changes.includes(adapter) || | ||
testAllLabel || | ||
labels.includes(`test ${adapter}`) | ||
) { | ||
for (const pythonVersion of supportedPythonVersions) { | ||
if ( | ||
pythonVersion === defaultPythonVersion || | ||
labels.includes(`test python${pythonVersion}`) || | ||
testAllLabel | ||
) { | ||
// always run tests on ubuntu by default | ||
include.push({ | ||
os: "ubuntu-latest", | ||
adapter, | ||
"python-version": pythonVersion, | ||
}); | ||
|
||
if (labels.includes("test windows") || testAllLabel) { | ||
include.push({ | ||
os: "windows-latest", | ||
adapter, | ||
"python-version": pythonVersion, | ||
}); | ||
} | ||
|
||
if (labels.includes("test macos") || testAllLabel) { | ||
include.push({ | ||
os: "macos-latest", | ||
adapter, | ||
"python-version": pythonVersion, | ||
}); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
console.log("matrix", { include }); | ||
|
||
return { | ||
include, | ||
}; | ||
} | ||
// if not PR, generate matrix of python version, adapter, and operating | ||
// system to run integration tests on | ||
|
||
const include = []; | ||
// run for all adapters and python versions on ubuntu | ||
for (const adapter of supportedAdapters) { | ||
for (const pythonVersion of supportedPythonVersions) { | ||
include.push({ | ||
os: 'ubuntu-latest', | ||
adapter: adapter, | ||
"python-version": pythonVersion, | ||
}); | ||
} | ||
} | ||
|
||
// additionally include runs for all adapters, on macos and windows, | ||
// but only for the default python version | ||
for (const adapter of supportedAdapters) { | ||
for (const operatingSystem of ["windows-latest", "macos-latest"]) { | ||
include.push({ | ||
os: operatingSystem, | ||
adapter: adapter, | ||
"python-version": defaultPythonVersion, | ||
}); | ||
} | ||
} | ||
|
||
console.log("matrix", { include }); | ||
|
||
return { | ||
include, | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,212 @@ | ||
# **what?** | ||
# This workflow runs all integration tests for supported OS | ||
# and python versions and core adapters. If triggered by PR, | ||
# the workflow will only run tests for adapters related | ||
# to code changes. Use the `test all` and `test ${adapter}` | ||
# label to run all or additional tests. Use `ok to test` | ||
# label to mark PRs from forked repositories that are safe | ||
# to run integration tests for. Requires secrets to run | ||
# against different warehouses. | ||
|
||
# **why?** | ||
# This checks the functionality of dbt from a user's perspective | ||
# and attempts to catch functional regressions. | ||
|
||
# **when?** | ||
# This workflow will run on every push to a protected branch | ||
# and when manually triggered. It will also run for all PRs, including | ||
# PRs from forks. The workflow will be skipped until there is a label | ||
# to mark the PR as safe to run. | ||
|
||
name: Adapter Integration Tests | ||
|
||
on: | ||
# pushes to release branches | ||
push: | ||
branches: | ||
- "main" | ||
- "develop" | ||
- "*.latest" | ||
- "releases/*" | ||
# all PRs, important to note that `pull_request_target` workflows | ||
# will run in the context of the target branch of a PR | ||
pull_request_target: | ||
# manual trigger | ||
workflow_dispatch: | ||
|
||
# explicitly turn off permissions for `GITHUB_TOKEN` | ||
permissions: read-all | ||
|
||
# will cancel previous workflows triggered by the same event and for the same ref for PRs or same SHA otherwise | ||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.event_name }}-${{ contains(github.event_name, 'pull_request') && github.event.pull_request.head.ref || github.sha }} | ||
cancel-in-progress: true | ||
|
||
# sets default shell to bash, for all operating systems | ||
defaults: | ||
run: | ||
shell: bash | ||
|
||
jobs: | ||
# generate test metadata about what files changed and the testing matrix to use | ||
test-metadata: | ||
# run if not a PR from a forked repository or has a label to mark as safe to test | ||
if: >- | ||
github.event_name != 'pull_request_target' || | ||
github.event.pull_request.head.repo.full_name == github.repository || | ||
contains(github.event.pull_request.labels.*.name, 'ok to test') | ||
runs-on: ubuntu-latest | ||
|
||
outputs: | ||
matrix: ${{ steps.generate-matrix.outputs.result }} | ||
|
||
steps: | ||
- name: Check out the repository (non-PR) | ||
if: github.event_name != 'pull_request_target' | ||
uses: actions/checkout@v2 | ||
with: | ||
persist-credentials: false | ||
|
||
- name: Check out the repository (PR) | ||
if: github.event_name == 'pull_request_target' | ||
uses: actions/checkout@v2 | ||
with: | ||
persist-credentials: false | ||
ref: ${{ github.event.pull_request.head.sha }} | ||
|
||
- name: Check if relevant files changed | ||
# https://github.com/marketplace/actions/paths-changes-filter | ||
# For each filter, it sets output variable named by the filter to the text: | ||
# 'true' - if any of changed files matches any of filter rules | ||
# 'false' - if none of changed files matches any of filter rules | ||
# also, returns: | ||
# `changes` - JSON array with names of all filters matching any of the changed files | ||
uses: dorny/paths-filter@v2 | ||
id: get-changes | ||
with: | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
filters: | | ||
snowflake: | ||
- 'dbt/**' | ||
- 'tests/**' | ||
- name: Generate integration test matrix | ||
id: generate-matrix | ||
uses: actions/github-script@v4 | ||
env: | ||
CHANGES: ${{ steps.get-changes.outputs.changes }} | ||
with: | ||
script: | | ||
const script = require('./.github/scripts/integration-test-matrix.js') | ||
const matrix = script({ context }) | ||
console.log(matrix) | ||
return matrix | ||
test: | ||
name: ${{ matrix.adapter }} / python ${{ matrix.python-version }} / ${{ matrix.os }} | ||
|
||
# run if not a PR from a forked repository or has a label to mark as safe to test | ||
# also checks that the matrix generated is not empty | ||
if: >- | ||
needs.test-metadata.outputs.matrix && | ||
fromJSON( needs.test-metadata.outputs.matrix ).include[0] && | ||
( | ||
github.event_name != 'pull_request_target' || | ||
github.event.pull_request.head.repo.full_name == github.repository || | ||
contains(github.event.pull_request.labels.*.name, 'ok to test') | ||
) | ||
runs-on: ${{ matrix.os }} | ||
|
||
needs: test-metadata | ||
|
||
strategy: | ||
fail-fast: false | ||
matrix: ${{ fromJSON(needs.test-metadata.outputs.matrix) }} | ||
|
||
env: | ||
TOXENV: integration-${{ matrix.adapter }} | ||
PYTEST_ADDOPTS: "-v --color=yes -n4 --csv integration_results.csv" | ||
DBT_INVOCATION_ENV: github-actions | ||
|
||
steps: | ||
- name: Check out the repository | ||
if: github.event_name != 'pull_request_target' | ||
uses: actions/checkout@v2 | ||
with: | ||
persist-credentials: false | ||
|
||
# explicity checkout the branch for the PR, | ||
# this is necessary for the `pull_request_target` event | ||
- name: Check out the repository (PR) | ||
if: github.event_name == 'pull_request_target' | ||
uses: actions/checkout@v2 | ||
with: | ||
persist-credentials: false | ||
ref: ${{ github.event.pull_request.head.sha }} | ||
|
||
- name: Set up Python ${{ matrix.python-version }} | ||
uses: actions/setup-python@v2 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
|
||
- name: Install python dependencies | ||
run: | | ||
pip install --upgrade pip | ||
pip install tox | ||
pip --version | ||
tox --version | ||
- name: Run tox (snowflake) | ||
if: matrix.adapter == 'snowflake' | ||
env: | ||
SNOWFLAKE_TEST_ACCOUNT: ${{ secrets.SNOWFLAKE_TEST_ACCOUNT }} | ||
SNOWFLAKE_TEST_PASSWORD: ${{ secrets.SNOWFLAKE_TEST_PASSWORD }} | ||
SNOWFLAKE_TEST_USER: ${{ secrets.SNOWFLAKE_TEST_USER }} | ||
SNOWFLAKE_TEST_WAREHOUSE: ${{ secrets.SNOWFLAKE_TEST_WAREHOUSE }} | ||
SNOWFLAKE_TEST_OAUTH_REFRESH_TOKEN: ${{ secrets.SNOWFLAKE_TEST_OAUTH_REFRESH_TOKEN }} | ||
SNOWFLAKE_TEST_OAUTH_CLIENT_ID: ${{ secrets.SNOWFLAKE_TEST_OAUTH_CLIENT_ID }} | ||
SNOWFLAKE_TEST_OAUTH_CLIENT_SECRET: ${{ secrets.SNOWFLAKE_TEST_OAUTH_CLIENT_SECRET }} | ||
SNOWFLAKE_TEST_ALT_DATABASE: ${{ secrets.SNOWFLAKE_TEST_ALT_DATABASE }} | ||
SNOWFLAKE_TEST_ALT_WAREHOUSE: ${{ secrets.SNOWFLAKE_TEST_ALT_WAREHOUSE }} | ||
SNOWFLAKE_TEST_DATABASE: ${{ secrets.SNOWFLAKE_TEST_DATABASE }} | ||
SNOWFLAKE_TEST_QUOTED_DATABASE: ${{ secrets.SNOWFLAKE_TEST_QUOTED_DATABASE }} | ||
SNOWFLAKE_TEST_ROLE: ${{ secrets.SNOWFLAKE_TEST_ROLE }} | ||
run: tox | ||
|
||
- uses: actions/upload-artifact@v2 | ||
if: always() | ||
with: | ||
name: logs | ||
path: ./logs | ||
|
||
- name: Get current date | ||
if: always() | ||
id: date | ||
run: echo "::set-output name=date::$(date +'%Y-%m-%dT%H_%M_%S')" #no colons allowed for artifacts | ||
|
||
- uses: actions/upload-artifact@v2 | ||
if: always() | ||
with: | ||
name: integration_results_${{ matrix.python-version }}_${{ matrix.os }}_${{ matrix.adapter }}-${{ steps.date.outputs.date }}.csv | ||
path: integration_results.csv | ||
|
||
require-label-comment: | ||
runs-on: ubuntu-latest | ||
|
||
needs: test | ||
|
||
permissions: | ||
pull-requests: write | ||
|
||
steps: | ||
- name: Needs permission PR comment | ||
if: >- | ||
needs.test.result == 'skipped' && | ||
github.event_name == 'pull_request_target' && | ||
github.event.pull_request.head.repo.full_name != github.repository | ||
uses: unsplash/comment-on-pr@master | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
msg: | | ||
"You do not have permissions to run integration tests, @dbt-labs/core "\ | ||
"needs to label this PR with `ok to test` in order to run integration tests!" | ||
check_for_duplicate_msg: true |
Oops, something went wrong.