Run All Tests Coverage #27
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
name: Run All Tests Coverage | |
on: | |
schedule: | |
- cron: "0 5 * * *" | |
push: | |
branches: | |
- main | |
paths: | |
- "**" | |
- "!Demos/**" | |
- "!docs/**" | |
- "!snowpark-checkpoints-testing/**" | |
permissions: | |
contents: read | |
pull-requests: write | |
jobs: | |
test: | |
name: All Tests Coverage ${{ matrix.download_name }}-${{ matrix.python-version }} | |
runs-on: ${{ matrix.os }} | |
env: | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_AUTHENTICATOR: SNOWFLAKE_JWT | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_DATABASE: ${{ secrets.SNOWFLAKE_DATABASE }} | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA: "${{ secrets.SNOWFLAKE_SCHEMA }}" | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_WAREHOUSE: ${{ secrets.SNOWFLAKE_WH }} | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_ROLE: ${{ secrets.SNOWFLAKE_ROLE }} | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_USER: ${{ secrets.SNOWFLAKE_USER }} | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} | |
SNOWPARK_CHECKPOINTS_TELEMETRY_TESTING: "true" | |
HADOOP_HOME: "${{ github.workspace }}\\hadoop" | |
HADOOP_VERSION: "3.3.6" | |
JAVA_VERSION: "21" | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-latest | |
python-version: "3.11" | |
cloud-provider: aws | |
snow_cli_version: "3.2.2" | |
download_name: linux | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Set up Java | |
uses: actions/[email protected] | |
with: | |
distribution: "temurin" | |
java-version: ${{ env.JAVA_VERSION }} | |
check-latest: true | |
- run: java --version | |
- name: Generate timestamp | |
id: timestamp | |
run: echo "::set-output name=timestamp::$(date +%Y%m%d%H%M%S%3N)" | |
- name: Set Snowflake Schema ID | |
run: echo "SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID=${{ secrets.SNOWFLAKE_SCHEMA }}_${{ github.run_id }}_${{ github.run_number }}_${{ steps.timestamp.outputs.timestamp }}" >> $GITHUB_ENV | |
- name: Display Python version | |
run: | | |
python -c "import sys; print(sys.version)" | |
python .github/scripts/py_show_env.py | |
shell: bash | |
working-directory: ${{ github.workspace }} | |
- name: Install Python packages | |
run: | | |
python -m pip install --upgrade pip -q | |
pip install requests pytest -q | |
pip list | |
shell: bash | |
working-directory: ${{ github.workspace }} | |
- name: Display Host Info | |
run: | | |
python .github/scripts/py_show_host.py | |
shell: bash | |
working-directory: ${{ github.workspace }} | |
- name: Set up Snowflake CLI | |
uses: Snowflake-Labs/snowflake-cli-action@a0d3f3a90914a6a91e6537cc6fde98ebe27e17be | |
with: | |
cli-version: ${{ matrix.snow_cli_version }} | |
default-config-file-path: ".github/config/config.toml" | |
- name: Set up keys | |
if: runner.os == 'Linux' | |
shell: bash | |
run: | | |
PARENT_DIR=$(dirname "${{ github.workspace }}") | |
PRIVATE_KEY_FILE=$PARENT_DIR/.ssh/key.p8 | |
echo "PARENT_DIR=$PARENT_DIR" >> $GITHUB_ENV | |
echo "PRIVATE_KEY_FILE=$PRIVATE_KEY_FILE" >> $GITHUB_ENV | |
mkdir -v $PARENT_DIR/.ssh && ls -la $PARENT_DIR && pwd | |
echo "${SNOWFLAKE_CONNECTIONS_MYCONNECTION_PRIVATE_KEY_RAW}" > $PRIVATE_KEY_FILE | |
sudo chmod 600 $PRIVATE_KEY_FILE | |
file $PRIVATE_KEY_FILE && ls -la $PRIVATE_KEY_FILE | |
- name: Set up Connection Snowflake CLI | |
if: runner.os == 'Linux' | |
shell: bash | |
run: | | |
echo "Setting up Connection Snowflake CLI" | |
echo "Current directory: $(pwd)" && ls -la | |
echo "MYCONNECTION_SCHEMA_ID: = ${SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID}" | |
PARENT_DIR=$(dirname "${{ github.workspace }}") | |
PRIVATE_KEY_FILE=$PARENT_DIR/.ssh/key.p8 | |
CONFIG_FILE=".github/config/config.toml" | |
SNOWFLAKE_CONFIG_DIR="/home/runner/.snowflake" | |
SNOWFLAKE_CONFIG_PATH="$SNOWFLAKE_CONFIG_DIR/config.toml" | |
if [ ! -d "$SNOWFLAKE_CONFIG_DIR" ]; then | |
mkdir -p "$SNOWFLAKE_CONFIG_DIR" | |
else | |
echo "Snowflake Configuration directory already exists: $SNOWFLAKE_CONFIG_DIR" | |
fi | |
echo "[connections.myconnection]" > "$CONFIG_FILE" | |
echo "authenticator = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_AUTHENTICATOR\"" >> "$CONFIG_FILE" | |
echo "schema = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA\"" >> "$CONFIG_FILE" | |
echo "account = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT\"" >> "$CONFIG_FILE" | |
echo "user = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_USER\"" >> "$CONFIG_FILE" | |
echo "database = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_DATABASE\"" >> "$CONFIG_FILE" | |
echo "warehouse = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_WAREHOUSE\"" >> "$CONFIG_FILE" | |
echo "role = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_ROLE\"" >> "$CONFIG_FILE" | |
echo "private_key_file = \"$PRIVATE_KEY_FILE\"" >> "$CONFIG_FILE" | |
echo "[connections.integration]" >> "$CONFIG_FILE" | |
echo "authenticator = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_AUTHENTICATOR\"" >> "$CONFIG_FILE" | |
echo "schema = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID\"" >> "$CONFIG_FILE" | |
echo "account = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT\"" >> "$CONFIG_FILE" | |
echo "user = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_USER\"" >> "$CONFIG_FILE" | |
echo "database = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_DATABASE\"" >> "$CONFIG_FILE" | |
echo "warehouse = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_WAREHOUSE\"" >> "$CONFIG_FILE" | |
echo "role = \"$SNOWFLAKE_CONNECTIONS_MYCONNECTION_ROLE\"" >> "$CONFIG_FILE" | |
echo "private_key_file = \"$PRIVATE_KEY_FILE\"" >> "$CONFIG_FILE" | |
cp "$CONFIG_FILE" "$SNOWFLAKE_CONFIG_PATH" | |
chmod 600 "$PRIVATE_KEY_FILE" | |
chmod 600 "$SNOWFLAKE_CONFIG_PATH" | |
echo "Snowflake configuration at $SNOWFLAKE_CONFIG_PATH:" | |
cat "$SNOWFLAKE_CONFIG_PATH" | |
env: | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID: ${{ env.SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID }} | |
- name: Set up Default Snowflake CLI | |
if: runner.os == 'Linux' | |
shell: bash | |
run: | | |
set -e | |
snow --info && snow --version | |
snow connection test -c myconnection | |
snow connection set-default myconnection | |
snow sql -q " Select current_organization_name(); SELECT CURRENT_DATABASE(), CURRENT_SCHEMA();" -c myconnection | |
snow connection list | |
snow sql -q " CREATE SCHEMA IF NOT EXISTS ${DATABASE}.${SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID} WITH MANAGED ACCESS; " -c myconnection | |
snow connection test -c integration | |
snow connection set-default integration | |
snow connection list | |
env: | |
DATABASE: "${{ env.SNOWFLAKE_CONNECTIONS_MYCONNECTION_DATABASE }}" | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID: ${{ env.SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID }} | |
- name: Install required tools [collectors] | |
run: | | |
python -m pip install ".[development]" -q | |
pip install hatch pyyaml frictionless requests -q | |
pip list | |
working-directory: ./snowpark-checkpoints-collectors | |
- name: Install required tools [configuration] | |
run: | | |
python -m pip install ".[development]" -q | |
pip install hatch pyyaml frictionless requests -q | |
pip list | |
working-directory: ./snowpark-checkpoints-configuration | |
- name: Install required tools [hypothesis] | |
run: | | |
python -m pip install ".[development]" -q | |
pip install hatch pyyaml frictionless requests -q | |
pip list | |
working-directory: ./snowpark-checkpoints-hypothesis | |
- name: Install required tools [validators] | |
run: | | |
python -m pip install ".[development]" -q | |
pip install hatch pyyaml frictionless requests -q | |
pip list | |
shell: bash | |
working-directory: ./snowpark-checkpoints-validators | |
- name: Run tests [collectors] | |
if: always() | |
run: | | |
echo "Current directory: $(pwd)" && ls -la | |
hatch run test:check | |
hatch run test:coverage | |
env: | |
PYTHON_VERSION: ${{ matrix.python-version }} | |
PYTEST_ADDOPTS: --color=yes --tb=short -v | |
shell: bash | |
working-directory: ./snowpark-checkpoints-collectors | |
- name: Run tests [configuration] | |
if: always() | |
run: | | |
echo "Current directory: $(pwd)" && ls -la | |
hatch run test:check | |
hatch run test:coverage | |
env: | |
PYTHON_VERSION: ${{ matrix.python-version }} | |
PYTEST_ADDOPTS: --color=yes --tb=short -v | |
shell: bash | |
working-directory: ./snowpark-checkpoints-configuration | |
- name: Run tests [hypothesis] | |
if: always() | |
run: | | |
echo "Current directory: $(pwd)" && ls -la | |
hatch run test:check | |
hatch run test:coverage | |
env: | |
PYTHON_VERSION: ${{ matrix.python-version }} | |
PYTEST_ADDOPTS: --color=yes --tb=short -v | |
shell: bash | |
working-directory: ./snowpark-checkpoints-hypothesis | |
- name: Run tests [validators] | |
if: always() | |
run: | | |
echo "Current directory: $(pwd)" && ls -la | |
hatch run test:check | |
hatch run test:coverage | |
env: | |
PYTHON_VERSION: ${{ matrix.python-version }} | |
PYTEST_ADDOPTS: --color=yes --tb=short -v | |
shell: bash | |
working-directory: ./snowpark-checkpoints-validators | |
- name: Snowflake Schema Cleanup | |
if: always() | |
shell: bash | |
run: | | |
set -e | |
if [ -n "${SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID}" ]; then | |
snow sql -q "DROP SCHEMA IF EXISTS ${SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID} CASCADE;" -c myconnection | |
fi | |
env: | |
SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID: ${{ env.SNOWFLAKE_CONNECTIONS_MYCONNECTION_SCHEMA_ID }} | |
working-directory: ${{ github.workspace }} | |
- name: Get Coverage Report | |
run: | | |
echo "Current directory: $PWD" | |
find . -name 'coverage*.xml' -print && find . -name '.coverage' -print | |
working-directory: ./snowpark-checkpoints-validators | |
- name: Upload coverage reports | |
uses: actions/upload-artifact@v4 | |
with: | |
include-hidden-files: true | |
name: coverage_python-${{ matrix.python-version }} | |
path: | | |
**/test/outcome/coverage*.xml | |
**/.coverage | |
coverage: | |
name: Coverage Report | |
runs-on: ubuntu-latest | |
needs: test | |
env: | |
PYTHON_VERSION: "3.11" | |
COVERAGE_THRESHOLD: 92 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
- name: Verify Python version | |
run: python --version | |
- name: Install required tools | |
run: | | |
python -m pip install ".[development]" -q | |
pip install coverage diff_cover pytest-rerunfailures -q | |
pip list | |
working-directory: ${{ github.workspace }} | |
- name: Install tree | |
run: | | |
sudo apt-get update && sudo apt-get install -y tree | |
- name: Download coverage reports | |
uses: actions/download-artifact@v4 | |
with: | |
name: coverage_python-3.11 | |
path: ./coverage_reports | |
- name: Get Coverage Report | |
run: | | |
echo "Current directory: $PWD" | |
find . -name 'coverage*.xml' -print && find . -name '.coverage' -print | |
find . -type f -path "*/test/outcome/coverage-*.xml" -exec sh -c 'mv "$1" "$(dirname "$1")/../../" ' _ {} \; | |
find . -type d -empty -delete | |
echo "Combining coverage reports" | |
find . -name ".coverage" -exec sh -c 'cp {} .coverage.$(basename $(dirname {}))' \; | |
coverage combine .coverage.* | |
echo "Generating coverage report" | |
coverage xml -o coverage-all.xml | |
tree -La 4 | |
echo "Generating coverage html report" | |
coverage report --show-missing --skip-empty --fail-under=$COVERAGE_THRESHOLD | |
working-directory: ./coverage_reports | |
env: | |
COVERAGE_THRESHOLD: ${{ env.COVERAGE_THRESHOLD }} | |
- name: Upload coverage reports to Codecov | |
uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 | |
with: | |
fail_ci_if_error: true | |
files: ./coverage_reports/coverage-all.xml | |
verbose: true | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} |