From 24ab8e90c9bbef1b95512f641f3aa51b633ceacd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rasmus=20Skytte=20Randl=C3=B8v?= Date: Wed, 14 Feb 2024 12:22:26 +0100 Subject: [PATCH] test: Run CI tests with SCDB v0.4 --- .github/workflows/R-CMD-check-v0.3.yaml | 117 ++++++++ .github/workflows/R-CMD-check-v0.4.yaml | 130 +++++++++ .github/workflows/all-workflows.yaml | 1 + .github/workflows/code-coverage-v0.3.yaml | 310 +++++++++++++++++++++ .github/workflows/code-coverage-v0.4.yaml | 322 ++++++++++++++++++++++ 5 files changed, 880 insertions(+) create mode 100644 .github/workflows/R-CMD-check-v0.3.yaml create mode 100644 .github/workflows/R-CMD-check-v0.4.yaml create mode 100644 .github/workflows/code-coverage-v0.3.yaml create mode 100644 .github/workflows/code-coverage-v0.4.yaml diff --git a/.github/workflows/R-CMD-check-v0.3.yaml b/.github/workflows/R-CMD-check-v0.3.yaml new file mode 100644 index 00000000..ecc83e32 --- /dev/null +++ b/.github/workflows/R-CMD-check-v0.3.yaml @@ -0,0 +1,117 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + inputs: + cache_version: + type: string + default: '1' + +jobs: + R-CMD-check: + name: "๐Ÿ”Ž Check: SCDB v0.3, ${{ matrix.config.os }} (${{ matrix.config.r }})" + runs-on: ${{ matrix.config.os }}-latest + + strategy: + fail-fast: false + matrix: + config: + - {os: macos, r: 'release'} + - {os: windows, r: 'release'} + - {os: ubuntu, r: 'release'} + - {os: ubuntu, r: 'oldrel-1'} + + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + R_KEEP_PKG_SOURCE: yes + BACKEND: SQLite + BACKEND_DRV: RSQLite::SQLite + BACKEND_ARGS: 'list(dbname = file.path(tempdir(), "SQLite.SQLite"))' + + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + r-version: ${{ matrix.config.r }} + http-user-agent: ${{ matrix.config.http-user-agent }} + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: ${{ inputs.cache_version }} + extra-packages: any::rcmdcheck + needs: check + + - uses: r-lib/actions/check-r-package@v2 + with: + upload-snapshots: true + args: c("--no-manual", "--as-cran", "--no-tests") + + R-CMD-check-hard: + runs-on: ubuntu-latest + name: "๐Ÿ”Ž Check: SCDB v0.3, ubuntu (release, no dependencies)" + + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + R_KEEP_PKG_SOURCE: yes + BACKEND: SQLite + BACKEND_DRV: RSQLite::SQLite + BACKEND_ARGS: 'list(dbname = file.path(tempdir(), "SQLite.SQLite"))' + + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + dependencies: '"hard"' + cache: false + extra-packages: | + any::rcmdcheck + any::testthat + any::knitr + any::rmarkdown + needs: check + + - uses: r-lib/actions/check-r-package@v2 + with: + upload-snapshots: true + + + R-CMD-check-devel: + runs-on: ubuntu-latest + name: "๐Ÿ”Ž Check: SCDB v0.3, ubuntu (r-devel)" + + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + R_KEEP_PKG_SOURCE: yes + BACKEND: SQLite + BACKEND_DRV: RSQLite::SQLite + BACKEND_ARGS: 'list(dbname = file.path(tempdir(), "SQLite.SQLite"))' + + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: ${{ inputs.cache_version }} + extra-packages: any::rcmdcheck + needs: check + + - uses: r-lib/actions/check-r-package@v2 + with: + upload-snapshots: true diff --git a/.github/workflows/R-CMD-check-v0.4.yaml b/.github/workflows/R-CMD-check-v0.4.yaml new file mode 100644 index 00000000..a95a763a --- /dev/null +++ b/.github/workflows/R-CMD-check-v0.4.yaml @@ -0,0 +1,130 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + inputs: + cache_version: + type: string + default: '0' + +jobs: + R-CMD-check: + name: "๐Ÿ”Ž Check: SCDB v0.4, ${{ matrix.config.os }} (${{ matrix.config.r }})" + runs-on: ${{ matrix.config.os }}-latest + + strategy: + fail-fast: false + matrix: + config: + - {os: macos, r: 'release'} + - {os: windows, r: 'release'} + - {os: ubuntu, r: 'release'} + - {os: ubuntu, r: 'oldrel-1'} + + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + R_KEEP_PKG_SOURCE: yes + BACKEND: SQLite + BACKEND_DRV: RSQLite::SQLite + BACKEND_ARGS: 'list(dbname = file.path(tempdir(), "SQLite.SQLite"))' + + steps: + - uses: actions/checkout@v4 + + - name: Set SCDB version to v0.4 + run: | + perl -pi -e 's/SCDB \(>= 0.3.0\)/SCDB \(>= 0.4.0\)/g' DESCRIPTION + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + r-version: ${{ matrix.config.r }} + http-user-agent: ${{ matrix.config.http-user-agent }} + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: ${{ inputs.cache_version }} + extra-packages: any::rcmdcheck, github::ssi-dk/SCDB@rc-v0.4 + needs: check + + - uses: r-lib/actions/check-r-package@v2 + with: + upload-snapshots: true + args: c("--no-manual", "--as-cran", "--no-tests") + + R-CMD-check-hard: + runs-on: ubuntu-latest + name: "๐Ÿ”Ž Check: SCDB v0.4, ubuntu (release, no dependencies)" + + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + R_KEEP_PKG_SOURCE: yes + BACKEND: SQLite + BACKEND_DRV: RSQLite::SQLite + BACKEND_ARGS: 'list(dbname = file.path(tempdir(), "SQLite.SQLite"))' + + steps: + - uses: actions/checkout@v4 + + - name: Set SCDB version to v0.4 + run: | + perl -pi -e 's/SCDB \(>= 0.3.0\)/SCDB \(>= 0.4.0\)/g' DESCRIPTION + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + dependencies: '"hard"' + cache: false + extra-packages: | + any::rcmdcheck + any::testthat + any::knitr + any::rmarkdown + github::ssi-dk/SCDB@rc-v0.4 + needs: check + + - uses: r-lib/actions/check-r-package@v2 + with: + upload-snapshots: true + + + R-CMD-check-devel: + runs-on: ubuntu-latest + name: "๐Ÿ”Ž Check: SCDB v0.4, ubuntu (r-devel)" + + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + R_KEEP_PKG_SOURCE: yes + BACKEND: SQLite + BACKEND_DRV: RSQLite::SQLite + BACKEND_ARGS: 'list(dbname = file.path(tempdir(), "SQLite.SQLite"))' + + steps: + - uses: actions/checkout@v4 + + - name: Set SCDB version to v0.4 + run: | + perl -pi -e 's/SCDB \(>= 0.3.0\)/SCDB \(>= 0.4.0\)/g' DESCRIPTION + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: ${{ inputs.cache_version }} + extra-packages: any::rcmdcheck, github::ssi-dk/SCDB@rc-v0.4 + needs: check + + - uses: r-lib/actions/check-r-package@v2 + with: + upload-snapshots: true diff --git a/.github/workflows/all-workflows.yaml b/.github/workflows/all-workflows.yaml index 79efb4d8..74218f43 100644 --- a/.github/workflows/all-workflows.yaml +++ b/.github/workflows/all-workflows.yaml @@ -32,6 +32,7 @@ jobs: event_name: ${{ github.event_name }} run_id: ${{ github.run_id }} main_branches: main + skip: code-coverage # code-coverage creates data bases for the tests. Here you can specify the schemas you need for the workflow schemas: test_ds,not_test_ds diff --git a/.github/workflows/code-coverage-v0.3.yaml b/.github/workflows/code-coverage-v0.3.yaml new file mode 100644 index 00000000..672af1ac --- /dev/null +++ b/.github/workflows/code-coverage-v0.3.yaml @@ -0,0 +1,310 @@ +on: + push: + inputs: + cache_version: + type: string + default: '1' + schemas: + type: string + default: 'test_ds,not_test_ds' + + +jobs: + code-coverage-sqlite: + name: "๐Ÿงช Tests: SCDB v0.3, ${{ matrix.config.backend }}" + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + config: + - backend: SQLite + id: sqlite + args: 'list(dbname = file.path(tempdir(), "SQLite.SQLite"))' + schemas: '' + + - backend: SQLite - w. schemas + id: sqlite-schemas + args: 'list(dbname = file.path(tempdir(), "SQLite_schemas.SQLite"))' + schemas: ${{ inputs.schemas }} + + env: + BACKEND: ${{ matrix.config.backend }} + BACKEND_DRV: RSQLite::SQLite + BACKEND_ARGS: ${{ matrix.config.args }} + + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: ${{ inputs.cache_version }} + extra-packages: any::covr + needs: coverage + + - name: Setup BACKEND_POST_CONNECT + if: ${{ matrix.config.schemas != '' }} + run: | + set -o xtrace + IFS=',' read -ra schemas <<< "${{ matrix.config.schemas }}" + + CONN_POST_CONNECT="list(" + for schema in "${schemas[@]}"; do + CONN_POST_CONNECT+="paste0(\"ATTACH '\", file.path(tempdir(), \"SQLite_schemas_${schema}.SQLite\"), \"' AS '${schema}'\"), " + done + # Trim trailing ", " from CONN_POST_CONNECT + CONN_POST_CONNECT=${CONN_POST_CONNECT%??} + CONN_POST_CONNECT+=")" + + echo "BACKEND_POST_CONNECT=$CONN_POST_CONNECT" >> $GITHUB_ENV + + - name: Test coverage + run: | + covr::codecov( + quiet = FALSE, + clean = FALSE, + install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package") + ) + shell: Rscript {0} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + TESTTHAT_OUT=$(find ${{ runner.temp }}/package -name 'testthat.Rout*') + + cat $TESTTHAT_OUT + + # Throw errors on failures or warnings + grep -q "FAIL 0" $TESTTHAT_OUT || { echo "Test failures found"; exit 1; } + grep -q "WARN 0" $TESTTHAT_OUT || { echo "Test warnings found"; exit 1; } + + # Throw error if error: are found + if grep -q "Error:" $TESTTHAT_OUT; then + echo "Error: found" + exit 1 + fi + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures-${{ matrix.config.id }} + path: ${{ runner.temp }}/package + + + code-coverage-postgres: + name: "๐Ÿงช Tests: SCDB v0.3, PostgreSQL" + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:latest + env: + POSTGRES_DB: test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + options: --health-cmd "pg_isready -U postgres" --health-interval 10s --health-timeout 5s --health-retries 5 + + env: + BACKEND: PostgreSQL + BACKEND_DRV: RPostgres::Postgres + BACKEND_ARGS: '' + + PGHOST: localhost + PGPORT: 5432 + PGDATABASE: test + PGUSER: postgres + PGPASSWORD: postgres + + steps: + - name: Setup testing schemata in PostgreSQL + if: ${{ inputs.schemas != 'none' }} + run: | + set -o xtrace + IFS=',' read -ra schemas <<< "${{ inputs.schemas }}" + for schema in "${schemas[@]}"; do + psql test -c "CREATE SCHEMA \"$schema\";" + done + + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: ${{ inputs.cache_version }} + extra-packages: any::covr + needs: coverage + + - name: Test coverage + run: | + covr::codecov( + quiet = FALSE, + clean = FALSE, + install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package") + ) + shell: Rscript {0} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + TESTTHAT_OUT=$(find ${{ runner.temp }}/package -name 'testthat.Rout*') + + cat $TESTTHAT_OUT + + # Throw errors on failures or warnings + grep -q "FAIL 0" $TESTTHAT_OUT || { echo "Test failures found"; exit 1; } + grep -q "WARN 0" $TESTTHAT_OUT || { echo "Test warnings found"; exit 1; } + + # Throw error if error: are found + if grep -q "Error:" $TESTTHAT_OUT; then + echo "Error: found" + exit 1 + fi + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures-postgres + path: ${{ runner.temp }}/package + + - name: Collect docker logs + if: always() + uses: jwalton/gh-docker-logs@v1 + with: + dest: '${{ runner.workspace }}/logs-docker' + + - name: Check docker logs for PostgreSQL ERRORs + if: always() + run: | + ## -------------------------------------------------------------------- + log=$(find ${{ runner.workspace }}/logs-docker/ -name '*postgres*.log') + + errors=$(awk '/(ERROR:|STATEMENT:)/{flag=1}/LOG:|^[A-Z]/{flag=0}flag {print $0}' $log) + + echo "$output" + + # Throw error if ERRORs are found + if [[ -n "$errors" ]]; then + echo "$errors" + exit 1 + fi + + code-coverage-mssql: + name: "๐Ÿงช Tests: SCDB v0.3, SQL Server 2019" + runs-on: ubuntu-latest + + env: + BACKEND: MSSQL + BACKEND_DRV: odbc::odbc + BACKEND_ARGS: '' + + CONN_ARGS_JSON: > + { + "MSSQL": { + "driver": "ODBC Driver 17 for SQL Server", + "server": "localhost", + "database": "master", + "UID": "SA", + "PWD": "dbatools.I0" + } + } + + steps: + - name: Install a SQL Server suite of tools + uses: potatoqualitee/mssqlsuite@v1.7 + with: + install: sqlengine, sqlpackage, sqlclient + show-log: true + + - name: Setup testing schemata in SQL server + if: ${{ inputs.schemas != 'none' }} + run: | + set -o xtrace + + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -Q "ALTER LOGIN SA WITH DEFAULT_DATABASE = master;" + + IFS=',' read -ra schemas <<< "${{ inputs.schemas }}" + for schema in "${schemas[@]}"; do + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -d master -Q "CREATE SCHEMA [$schema];" + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -d master -Q "GO" + done + + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -d master -Q "SELECT * FROM sys.schemas" + + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -d master -Q "SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE schema_name = 'test'" + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -d master -Q "SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE schema_name = 'test.one'" + + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: ${{ inputs.cache_version }} + extra-packages: any::covr + needs: coverage + + - name: Test coverage + run: | + covr::codecov( + quiet = FALSE, + clean = FALSE, + install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package") + ) + shell: Rscript {0} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + TESTTHAT_OUT=$(find ${{ runner.temp }}/package -name 'testthat.Rout*') + + cat $TESTTHAT_OUT + + # Throw errors on failures or warnings + grep -q "FAIL 0" $TESTTHAT_OUT || { echo "Test failures found"; exit 1; } + grep -q "WARN 0" $TESTTHAT_OUT || { echo "Test warnings found"; exit 1; } + + # Throw error if error: are found + if grep -q "Error:" $TESTTHAT_OUT; then + echo "Error: found" + exit 1 + fi + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures-mssql + path: ${{ runner.temp }}/package + + - name: Collect docker logs + if: always() + uses: jwalton/gh-docker-logs@v1 + with: + dest: '${{ runner.workspace }}/logs-docker' + + - name: Check docker logs for SQL Server ERRORs + if: always() + run: | + ## -------------------------------------------------------------------- + log=$(find ${{ runner.workspace }}/logs-docker/ -name 'sql.log') + + cat "$log" diff --git a/.github/workflows/code-coverage-v0.4.yaml b/.github/workflows/code-coverage-v0.4.yaml new file mode 100644 index 00000000..af80823f --- /dev/null +++ b/.github/workflows/code-coverage-v0.4.yaml @@ -0,0 +1,322 @@ +on: + push: + inputs: + cache_version: + type: string + default: '0' + schemas: + type: string + default: 'test_ds,not_test_ds' + + +jobs: + code-coverage-sqlite: + name: "๐Ÿงช Tests: SCDB v0.4, ${{ matrix.config.backend }}" + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + config: + - backend: SQLite + id: sqlite + args: 'list(dbname = file.path(tempdir(), "SQLite.SQLite"))' + schemas: '' + + - backend: SQLite - w. schemas + id: sqlite-schemas + args: 'list(dbname = file.path(tempdir(), "SQLite_schemas.SQLite"))' + schemas: ${{ inputs.schemas }} + + env: + BACKEND: ${{ matrix.config.backend }} + BACKEND_DRV: RSQLite::SQLite + BACKEND_ARGS: ${{ matrix.config.args }} + + steps: + - uses: actions/checkout@v4 + + - name: Set SCDB version to v0.4 + run: | + perl -pi -e 's/SCDB \(>= 0.3.0\)/SCDB \(>= 0.4.0\)/g' DESCRIPTION + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: ${{ inputs.cache_version }} + extra-packages: any::covr, github::ssi-dk/SCDB@rc-v0.4 + needs: coverage + + - name: Setup BACKEND_POST_CONNECT + if: ${{ matrix.config.schemas != '' }} + run: | + set -o xtrace + IFS=',' read -ra schemas <<< "${{ matrix.config.schemas }}" + + CONN_POST_CONNECT="list(" + for schema in "${schemas[@]}"; do + CONN_POST_CONNECT+="paste0(\"ATTACH '\", file.path(tempdir(), \"SQLite_schemas_${schema}.SQLite\"), \"' AS '${schema}'\"), " + done + # Trim trailing ", " from CONN_POST_CONNECT + CONN_POST_CONNECT=${CONN_POST_CONNECT%??} + CONN_POST_CONNECT+=")" + + echo "BACKEND_POST_CONNECT=$CONN_POST_CONNECT" >> $GITHUB_ENV + + - name: Test coverage + run: | + covr::codecov( + quiet = FALSE, + clean = FALSE, + install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package") + ) + shell: Rscript {0} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + TESTTHAT_OUT=$(find ${{ runner.temp }}/package -name 'testthat.Rout*') + + cat $TESTTHAT_OUT + + # Throw errors on failures or warnings + grep -q "FAIL 0" $TESTTHAT_OUT || { echo "Test failures found"; exit 1; } + grep -q "WARN 0" $TESTTHAT_OUT || { echo "Test warnings found"; exit 1; } + + # Throw error if error: are found + if grep -q "Error:" $TESTTHAT_OUT; then + echo "Error: found" + exit 1 + fi + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures-${{ matrix.config.id }} + path: ${{ runner.temp }}/package + + + code-coverage-postgres: + name: "๐Ÿงช Tests: SCDB v0.4, PostgreSQL" + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:latest + env: + POSTGRES_DB: test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + options: --health-cmd "pg_isready -U postgres" --health-interval 10s --health-timeout 5s --health-retries 5 + + env: + BACKEND: PostgreSQL + BACKEND_DRV: RPostgres::Postgres + BACKEND_ARGS: '' + + PGHOST: localhost + PGPORT: 5432 + PGDATABASE: test + PGUSER: postgres + PGPASSWORD: postgres + + steps: + - name: Setup testing schemata in PostgreSQL + if: ${{ inputs.schemas != 'none' }} + run: | + set -o xtrace + IFS=',' read -ra schemas <<< "${{ inputs.schemas }}" + for schema in "${schemas[@]}"; do + psql test -c "CREATE SCHEMA \"$schema\";" + done + + - uses: actions/checkout@v4 + + - name: Set SCDB version to v0.4 + run: | + perl -pi -e 's/SCDB \(>= 0.3.0\)/SCDB \(>= 0.4.0\)/g' DESCRIPTION + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: ${{ inputs.cache_version }} + extra-packages: any::covr, github::ssi-dk/SCDB@rc-v0.4 + needs: coverage + + - name: Test coverage + run: | + covr::codecov( + quiet = FALSE, + clean = FALSE, + install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package") + ) + shell: Rscript {0} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + TESTTHAT_OUT=$(find ${{ runner.temp }}/package -name 'testthat.Rout*') + + cat $TESTTHAT_OUT + + # Throw errors on failures or warnings + grep -q "FAIL 0" $TESTTHAT_OUT || { echo "Test failures found"; exit 1; } + grep -q "WARN 0" $TESTTHAT_OUT || { echo "Test warnings found"; exit 1; } + + # Throw error if error: are found + if grep -q "Error:" $TESTTHAT_OUT; then + echo "Error: found" + exit 1 + fi + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures-postgres + path: ${{ runner.temp }}/package + + - name: Collect docker logs + if: always() + uses: jwalton/gh-docker-logs@v1 + with: + dest: '${{ runner.workspace }}/logs-docker' + + - name: Check docker logs for PostgreSQL ERRORs + if: always() + run: | + ## -------------------------------------------------------------------- + log=$(find ${{ runner.workspace }}/logs-docker/ -name '*postgres*.log') + + errors=$(awk '/(ERROR:|STATEMENT:)/{flag=1}/LOG:|^[A-Z]/{flag=0}flag {print $0}' $log) + + echo "$output" + + # Throw error if ERRORs are found + if [[ -n "$errors" ]]; then + echo "$errors" + exit 1 + fi + + code-coverage-mssql: + name: "๐Ÿงช Tests: SCDB v0.4, SQL Server 2019" + runs-on: ubuntu-latest + + env: + BACKEND: MSSQL + BACKEND_DRV: odbc::odbc + BACKEND_ARGS: '' + + CONN_ARGS_JSON: > + { + "MSSQL": { + "driver": "ODBC Driver 17 for SQL Server", + "server": "localhost", + "database": "master", + "UID": "SA", + "PWD": "dbatools.I0" + } + } + + steps: + - name: Install a SQL Server suite of tools + uses: potatoqualitee/mssqlsuite@v1.7 + with: + install: sqlengine, sqlpackage, sqlclient + show-log: true + + - name: Setup testing schemata in SQL server + if: ${{ inputs.schemas != 'none' }} + run: | + set -o xtrace + + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -Q "ALTER LOGIN SA WITH DEFAULT_DATABASE = master;" + + IFS=',' read -ra schemas <<< "${{ inputs.schemas }}" + for schema in "${schemas[@]}"; do + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -d master -Q "CREATE SCHEMA [$schema];" + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -d master -Q "GO" + done + + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -d master -Q "SELECT * FROM sys.schemas" + + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -d master -Q "SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE schema_name = 'test'" + sqlcmd -V 10 -S localhost -U SA -P dbatools.I0 -d master -Q "SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE schema_name = 'test.one'" + + - uses: actions/checkout@v4 + + - name: Set SCDB version to v0.4 + run: | + perl -pi -e 's/SCDB \(>= 0.3.0\)/SCDB \(>= 0.4.0\)/g' DESCRIPTION + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: ${{ inputs.cache_version }} + extra-packages: any::covr, github::ssi-dk/SCDB@rc-v0.4 + needs: coverage + + - name: Test coverage + run: | + covr::codecov( + quiet = FALSE, + clean = FALSE, + install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package") + ) + shell: Rscript {0} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + TESTTHAT_OUT=$(find ${{ runner.temp }}/package -name 'testthat.Rout*') + + cat $TESTTHAT_OUT + + # Throw errors on failures or warnings + grep -q "FAIL 0" $TESTTHAT_OUT || { echo "Test failures found"; exit 1; } + grep -q "WARN 0" $TESTTHAT_OUT || { echo "Test warnings found"; exit 1; } + + # Throw error if error: are found + if grep -q "Error:" $TESTTHAT_OUT; then + echo "Error: found" + exit 1 + fi + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures-mssql + path: ${{ runner.temp }}/package + + - name: Collect docker logs + if: always() + uses: jwalton/gh-docker-logs@v1 + with: + dest: '${{ runner.workspace }}/logs-docker' + + - name: Check docker logs for SQL Server ERRORs + if: always() + run: | + ## -------------------------------------------------------------------- + log=$(find ${{ runner.workspace }}/logs-docker/ -name 'sql.log') + + cat "$log"