diff --git a/.github/workflows/ci_dbt_core_testing.yml b/.github/workflows/ci_dbt_core_testing.yml index 64cf3bb6..024fed54 100644 --- a/.github/workflows/ci_dbt_core_testing.yml +++ b/.github/workflows/ci_dbt_core_testing.yml @@ -82,7 +82,6 @@ jobs: echo "dbt-core-ref=${{ github.event.inputs.dbt-core-ref }}" >> $GITHUB_OUTPUT echo "dbt-common-ref=${{ github.event.inputs.dbt-common-ref }}" >> $GITHUB_OUTPUT - # TODO: maybe split these into 2 workflows. Then we can call unit tests always and just do int tests on merge? or just use an trigger checks dbt-core-unit-test: name: "Run unit tests for dbt-core" needs: [job-prep] @@ -102,148 +101,160 @@ jobs: with: python-version: "3.11" - - name: "Install python tools & dependencies" - run: | - python -m pip install --user --upgrade pip - python -m pip --version - python -m pip install -r dev-requirements.txt -r editable-requirements.txt - - - name: "Check installed versions" - run: pip freeze - - - name: "Update the version of dbt-common@${{ inputs.dbt-common-ref }}" - run: | - pip install pip install git+https://github.com/dbt-labs/dbt-common.git@${{ inputs.dbt-common-ref }} --force-reinstall - - - name: "Check installed versions" - run: pip freeze - - - name: Run unit tests - run: python -m pytest tests/unit - - dbt-core-integration-metadata: - name: integration test metadata generation - runs-on: ubuntu-latest - if: ${{ github.event.name != 'pull_request' }} - outputs: - split-groups: ${{ steps.generate-split-groups.outputs.split-groups }} - include: ${{ steps.generate-include.outputs.include }} - - steps: - - name: generate split-groups - id: generate-split-groups - run: | - MATRIX_JSON="[" - for B in $(seq 1 ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }}); do - MATRIX_JSON+=$(sed 's/^/"/;s/$/"/' <<< "${B}") - done - MATRIX_JSON="${MATRIX_JSON//\"\"/\", \"}" - MATRIX_JSON+="]" - echo "split-groups=${MATRIX_JSON}" - echo "split-groups=${MATRIX_JSON}" >> $GITHUB_OUTPUT - - - name: generate include - id: generate-include - run: | - INCLUDE=('"python-version":"3.8","os":"windows-latest"' '"python-version":"3.8","os":"macos-latest"' ) - INCLUDE_GROUPS="[" - for include in ${INCLUDE[@]}; do - for group in $(seq 1 ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }}); do - INCLUDE_GROUPS+=$(sed 's/$/, /' <<< "{\"split-group\":\"${group}\",${include}}") - done - done - INCLUDE_GROUPS=$(echo $INCLUDE_GROUPS | sed 's/,*$//g') - INCLUDE_GROUPS+="]" - echo "include=${INCLUDE_GROUPS}" - echo "include=${INCLUDE_GROUPS}" >> $GITHUB_OUTPUT - - dbt-core-integration-tests: - name: (${{ matrix.split-group }}) integration test / python ${{ matrix.python-version }} / ${{ matrix.os }} - if: ${{ github.event.name != 'pull_request' }} - - runs-on: ${{ matrix.os }} - timeout-minutes: 30 - needs: [job-prep, dbt-core-integration-metadata] - strategy: - fail-fast: false - matrix: - python-version: ["3.8", "3.9", "3.10", "3.11"] - os: [ubuntu-20.04] - split-group: ${{ fromJson(needs.dbt-core-integration-metadata.outputs.split-groups) }} - include: ${{ fromJson(needs.dbt-core-integration-metadata.outputs.include) }} - env: - DBT_INVOCATION_ENV: github-actions - DBT_TEST_USER_1: dbt_test_user_1 - DBT_TEST_USER_2: dbt_test_user_2 - DBT_TEST_USER_3: dbt_test_user_3 - - steps: - - name: "Check out the repository@${{ needs.job-prep.outputs.dbt-core-ref }}" - uses: actions/checkout@v4 - with: - repository: dbt-labs/dbt-core - ref: ${{ needs.job-prep.outputs.dbt-core-ref }} - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - + # TODO: do we want to run other os versions? - name: Set up postgres (linux) if: runner.os == 'Linux' uses: ./.github/actions/setup-postgres-linux - - name: Set up postgres (macos) - if: runner.os == 'macOS' - uses: ./.github/actions/setup-postgres-macos - - - name: Set up postgres (windows) - if: runner.os == 'Windows' - uses: ./.github/actions/setup-postgres-windows - - name: "Install python tools & dependencies" run: | python -m pip install --user --upgrade pip python -m pip --version python -m pip install -r dev-requirements.txt -r editable-requirements.txt + python -m pip install tox + tox --version - name: "Check installed versions" run: pip freeze - - name: "Update the version of dbt-common@${{ needs.job-prep.outputs.dbt-common-ref }}s" + - name: "Update the version of dbt-common@${{ inputs.dbt-common-ref }}" run: | - pip install pip install git+https://github.com/dbt-labs/dbt-common.git@${{ needs.job-prep.outputs.dbt-common-ref }} --force-reinstall + pip install pip install git+https://github.com/dbt-labs/dbt-common.git@${{ inputs.dbt-common-ref }} --force-reinstall - name: "Check installed versions" run: pip freeze - - name: Run tests - run: | - python -m pytest {posargs} tests/functional -k "not tests/functional/graph_selection" - python -m pytest {posargs} tests/functional/graph_selection - python -m pytest {posargs} tests/adapter + - name: Run unit tests + run: tox env: - PYTEST_ADDOPTS: ${{ format('--splits {0} --group {1}', env.PYTHON_INTEGRATION_TEST_WORKERS, matrix.split-group) }} - - integration-report: - if: ${{ always() }} - name: Integration Test Suite - runs-on: ubuntu-latest - needs: [dbt-core-integration-tests] - steps: - - name: "Integration Tests Failed" - if: ${{ contains(needs.dbt-core-integration-tests.result, 'failure') || contains(needs.dbt-core-integration-tests.result, 'cancelled') }} - # when this is true the next step won't execute - run: | - echo "::notice title='Integration test suite failed'" - exit 1 + TOXENV: unit - - name: "Integration Tests Passed" - if: ${{ github.event.name != 'pull_request' }} - run: | - echo "::notice title='Integration test suite passed'" + - name: "Check installed versions" + run: pip freeze - - name: "Integration Tests Skipped" - if: ${{ github.event.name == 'pull_request' }} - run: | - echo "::notice title='Integration test suite skipped on Pull Requests'" + # dbt-core-integration-metadata: + # name: integration test metadata generation + # runs-on: ubuntu-latest + # if: ${{ github.event.name != 'pull_request' }} + # outputs: + # split-groups: ${{ steps.generate-split-groups.outputs.split-groups }} + # include: ${{ steps.generate-include.outputs.include }} + + # steps: + # - name: generate split-groups + # id: generate-split-groups + # run: | + # MATRIX_JSON="[" + # for B in $(seq 1 ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }}); do + # MATRIX_JSON+=$(sed 's/^/"/;s/$/"/' <<< "${B}") + # done + # MATRIX_JSON="${MATRIX_JSON//\"\"/\", \"}" + # MATRIX_JSON+="]" + # echo "split-groups=${MATRIX_JSON}" + # echo "split-groups=${MATRIX_JSON}" >> $GITHUB_OUTPUT + + # - name: generate include + # id: generate-include + # run: | + # INCLUDE=('"python-version":"3.8","os":"windows-latest"' '"python-version":"3.8","os":"macos-latest"' ) + # INCLUDE_GROUPS="[" + # for include in ${INCLUDE[@]}; do + # for group in $(seq 1 ${{ env.PYTHON_INTEGRATION_TEST_WORKERS }}); do + # INCLUDE_GROUPS+=$(sed 's/$/, /' <<< "{\"split-group\":\"${group}\",${include}}") + # done + # done + # INCLUDE_GROUPS=$(echo $INCLUDE_GROUPS | sed 's/,*$//g') + # INCLUDE_GROUPS+="]" + # echo "include=${INCLUDE_GROUPS}" + # echo "include=${INCLUDE_GROUPS}" >> $GITHUB_OUTPUT + + # dbt-core-integration-tests: + # name: (${{ matrix.split-group }}) integration test / python ${{ matrix.python-version }} / ${{ matrix.os }} + # if: ${{ github.event.name != 'pull_request' }} + + # runs-on: ${{ matrix.os }} + # timeout-minutes: 30 + # needs: [job-prep, dbt-core-integration-metadata] + # strategy: + # fail-fast: false + # matrix: + # python-version: ["3.8", "3.9", "3.10", "3.11"] + # os: [ubuntu-20.04] + # split-group: ${{ fromJson(needs.dbt-core-integration-metadata.outputs.split-groups) }} + # include: ${{ fromJson(needs.dbt-core-integration-metadata.outputs.include) }} + # env: + # DBT_INVOCATION_ENV: github-actions + # DBT_TEST_USER_1: dbt_test_user_1 + # DBT_TEST_USER_2: dbt_test_user_2 + # DBT_TEST_USER_3: dbt_test_user_3 + + # steps: + # - name: "Check out the repository@${{ needs.job-prep.outputs.dbt-core-ref }}" + # uses: actions/checkout@v4 + # with: + # repository: dbt-labs/dbt-core + # ref: ${{ needs.job-prep.outputs.dbt-core-ref }} + + # - name: Set up Python ${{ matrix.python-version }} + # uses: actions/setup-python@v5 + # with: + # python-version: ${{ matrix.python-version }} + + # - name: Set up postgres (linux) + # if: runner.os == 'Linux' + # uses: ./.github/actions/setup-postgres-linux + + # - name: Set up postgres (macos) + # if: runner.os == 'macOS' + # uses: ./.github/actions/setup-postgres-macos + + # - name: Set up postgres (windows) + # if: runner.os == 'Windows' + # uses: ./.github/actions/setup-postgres-windows + + # - name: "Install python tools & dependencies" + # run: | + # python -m pip install --user --upgrade pip + # python -m pip --version + # python -m pip install -r dev-requirements.txt -r editable-requirements.txt + + # - name: "Check installed versions" + # run: pip freeze + + # - name: "Update the version of dbt-common@${{ needs.job-prep.outputs.dbt-common-ref }}s" + # run: | + # pip install pip install git+https://github.com/dbt-labs/dbt-common.git@${{ needs.job-prep.outputs.dbt-common-ref }} --force-reinstall + + # - name: "Check installed versions" + # run: pip freeze + + # - name: Run tests + # run: | + # python -m pytest {posargs} tests/functional -k "not tests/functional/graph_selection" + # python -m pytest {posargs} tests/functional/graph_selection + # python -m pytest {posargs} tests/adapter + # env: + # PYTEST_ADDOPTS: ${{ format('--splits {0} --group {1}', env.PYTHON_INTEGRATION_TEST_WORKERS, matrix.split-group) }} + + # integration-report: + # if: ${{ always() }} + # name: Integration Test Suite + # runs-on: ubuntu-latest + # needs: [dbt-core-integration-tests] + # steps: + # - name: "Integration Tests Failed" + # if: ${{ contains(needs.dbt-core-integration-tests.result, 'failure') || contains(needs.dbt-core-integration-tests.result, 'cancelled') }} + # # when this is true the next step won't execute + # run: | + # echo "::notice title='Integration test suite failed'" + # exit 1 + + # - name: "Integration Tests Passed" + # if: ${{ github.event.name != 'pull_request' }} + # run: | + # echo "::notice title='Integration test suite passed'" + + # - name: "Integration Tests Skipped" + # if: ${{ github.event.name == 'pull_request' }} + # run: | + # echo "::notice title='Integration test suite skipped on Pull Requests'"