Skip to content

Commit

Permalink
Inital functions (#4)
Browse files Browse the repository at this point in the history
* Adding initial functions
* add github actions
* add tests
  • Loading branch information
gowthamrao authored Jul 9, 2022
1 parent f274951 commit 56fe722
Show file tree
Hide file tree
Showing 65 changed files with 3,689 additions and 35 deletions.
171 changes: 171 additions & 0 deletions .github/workflows/R_CMD_check_Hades.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
# For help debugging build failures open an issue on the RStudio community with the 'github-actions' tag.
# https://community.rstudio.com/new-topic?category=Package%20development&tags=github-actions
on:
push:
branches:
- '**'
pull_request:
branches:
- '**'

name: R-CMD-check

jobs:
R-CMD-check:
runs-on: ${{ matrix.config.os }}

name: ${{ matrix.config.os }} (${{ matrix.config.r }})

strategy:
fail-fast: false
matrix:
config:
- {os: windows-latest, r: 'release'}
- {os: macOS-latest, r: 'release'}
- {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}

env:
GITHUB_PAT: ${{ secrets.GH_TOKEN }}
R_REMOTES_NO_ERRORS_FROM_WARNINGS: true
RSPM: ${{ matrix.config.rspm }}
CDM5_ORACLE_CDM_SCHEMA: ${{ secrets.CDM5_ORACLE_CDM_SCHEMA }}
CDM5_ORACLE_OHDSI_SCHEMA: ${{ secrets.CDM5_ORACLE_OHDSI_SCHEMA }}
CDM5_ORACLE_PASSWORD: ${{ secrets.CDM5_ORACLE_PASSWORD }}
CDM5_ORACLE_SERVER: ${{ secrets.CDM5_ORACLE_SERVER }}
CDM5_ORACLE_USER: ${{ secrets.CDM5_ORACLE_USER }}
CDM5_POSTGRESQL_CDM_SCHEMA: ${{ secrets.CDM5_POSTGRESQL_CDM_SCHEMA }}
CDM5_POSTGRESQL_OHDSI_SCHEMA: ${{ secrets.CDM5_POSTGRESQL_OHDSI_SCHEMA }}
CDM5_POSTGRESQL_PASSWORD: ${{ secrets.CDM5_POSTGRESQL_PASSWORD }}
CDM5_POSTGRESQL_SERVER: ${{ secrets.CDM5_POSTGRESQL_SERVER }}
CDM5_POSTGRESQL_USER: ${{ secrets.CDM5_POSTGRESQL_USER }}
CDM5_SQL_SERVER_CDM_SCHEMA: ${{ secrets.CDM5_SQL_SERVER_CDM_SCHEMA }}
CDM5_SQL_SERVER_OHDSI_SCHEMA: ${{ secrets.CDM5_SQL_SERVER_OHDSI_SCHEMA }}
CDM5_SQL_SERVER_PASSWORD: ${{ secrets.CDM5_SQL_SERVER_PASSWORD }}
CDM5_SQL_SERVER_SERVER: ${{ secrets.CDM5_SQL_SERVER_SERVER }}
CDM5_SQL_SERVER_USER: ${{ secrets.CDM5_SQL_SERVER_USER }}
CDM5_REDSHIFT_CDM_SCHEMA: ${{ secrets.CDM5_REDSHIFT_CDM_SCHEMA }}
CDM5_REDSHIFT_OHDSI_SCHEMA: ${{ secrets.CDM5_REDSHIFT_OHDSI_SCHEMA }}
CDM5_REDSHIFT_PASSWORD: ${{ secrets.CDM5_REDSHIFT_PASSWORD }}
CDM5_REDSHIFT_SERVER: ${{ secrets.CDM5_REDSHIFT_SERVER }}
CDM5_REDSHIFT_USER: ${{ secrets.CDM5_REDSHIFT_USER }}
CDM5_SPARK_USER: ${{ secrets.CDM5_SPARK_USER }}
CDM5_SPARK_PASSWORD: ${{ secrets.CDM5_SPARK_PASSWORD }}
CDM5_SPARK_CONNECTION_STRING: ${{ secrets.CDM5_SPARK_CONNECTION_STRING }}

steps:
- uses: actions/checkout@v2

- uses: r-lib/actions/setup-r@v2
with:
r-version: ${{ matrix.config.r }}

- uses: r-lib/actions/setup-tinytex@v2

- uses: r-lib/actions/setup-pandoc@v2

- name: Install system requirements
if: runner.os == 'Linux'
run: |
sudo apt-get install -y libssh-dev
Rscript -e 'install.packages("remotes")'
while read -r cmd
do
eval sudo $cmd
done < <(Rscript -e 'writeLines(remotes::system_requirements("ubuntu", "20.04"))')
- uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: any::rcmdcheck
needs: check

- uses: r-lib/actions/check-r-package@v2
with:
args: 'c("--no-manual", "--as-cran")'
error-on: '"warning"'
check-dir: '"check"'

- name: Upload source package
if: success() && runner.os == 'macOS' && github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
uses: actions/upload-artifact@v2
with:
name: package_tarball
path: check/*.tar.gz

- name: Install covr
if: runner.os == 'macOS'
run: |
install.packages("covr")
shell: Rscript {0}

- name: Test coverage
if: runner.os == 'macOS'
run: covr::codecov()
shell: Rscript {0}

Release:
needs: R-CMD-Check

runs-on: macOS-latest

env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}

if: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main' }}

steps:

- uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Check if version has increased
run: |
echo "new_version="$(perl compare_versions --tag) >> $GITHUB_ENV
- name: Display new version number
if: ${{ env.new_version != '' }}
run: |
echo "${{ env.new_version }}"
- name: Create release
if: ${{ env.new_version != '' }}
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
with:
tag_name: ${{ env.new_version }}
release_name: Release ${{ env.new_version }}
body: |
See NEWS.md for release notes.
draft: false
prerelease: false

- uses: r-lib/actions/setup-r@v2
if: ${{ env.new_version != '' }}

- name: Install drat
if: ${{ env.new_version != '' }}
run: |
install.packages('drat')
shell: Rscript {0}

- name: Remove any tarballs that already exists
if: ${{ env.new_version != '' }}
run: |
rm -f *.tar.gz
- name: Download package tarball
if: ${{ env.new_version != '' }}
uses: actions/download-artifact@v2
with:
name: package_tarball

- name: Push to drat
if: ${{ env.new_version != '' }}
run: |
bash deploy.sh
- name: Push to BroadSea
if: ${{ env.new_version != '' }}
run: |
curl --data "build=true" -X POST https://registry.hub.docker.com/u/ohdsi/broadsea-methodslibrary/trigger/f0b51cec-4027-4781-9383-4b38b42dd4f5/
18 changes: 18 additions & 0 deletions .github/workflows/nightly_cleanup_Hades.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: 'nightly artifacts cleanup'
on:
schedule:
- cron: '0 1 * * *' # every night at 1 am UTC

jobs:
remove-old-artifacts:
runs-on: ubuntu-latest
timeout-minutes: 10

steps:
- name: Remove old artifacts
uses: c-hive/gha-remove-artifacts@v1
with:
age: '7 days'
# Optional inputs
# skip-tags: true
skip-recent: 1
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
.Ruserdata
*.tmp
.Rprofile
errorReportSql.txt
22 changes: 17 additions & 5 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,22 +1,34 @@
Package: CohortAlgebra
Type: Package
Title: Cohort Algebra to create new cohort(s) from existing cohorts.
Title: Cohort Algebra to create new cohort(s) from existing cohorts
Version: 0.0.1
Date: 2022-07-07
Author: Gowtham Rao [aut, cre]
Authors@R: c(
person("Gowtham", "Rao", email = "[email protected]", role = c("aut", "cre")),
person("Adam", "Black", email = "[email protected]", role = c("aut")),
person("Observational Health Data Science and Informatics", role = c("cph"))
)
Maintainer: Gowtham Rao <[email protected]>
Description: An R package that creates new cohort(s) from previously instantiated cohorts.
Depends:
DatabaseConnector (>= 5.0.0),
R (>= 4.1.0)
Imports:
checkmate,
rlang,
testthat
dplyr,
ParallelLogger,
rlang
Suggests:
testthat
remotes,
rmarkdown,
knitr,
testthat,
withr
Remotes:
ohdsi/ParallelLogger
License: Apache License
RoxygenNote: 7.2.0
VignetteBuilder: knitr
Roxygen: list(markdown = TRUE)
Encoding: UTF-8
Language: en-US
Expand Down
4 changes: 4 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# Generated by roxygen2: do not edit by hand

export(eraFyCohorts)
export(intersectCohorts)
export(minusCohorts)
import(DatabaseConnector)
import(dplyr)
importFrom(rlang,.data)
1 change: 1 addition & 0 deletions R/CohortAlgebra.R
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#' @keywords internal
"_PACKAGE"

#' @import DatabaseConnector
#' @import dplyr
#' @importFrom rlang .data
NULL
79 changes: 79 additions & 0 deletions R/CopyCohortsToTempTable.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Copyright 2022 Observational Health Data Sciences and Informatics
#
# This file is part of CohortAlgebra
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#' Get cohort ids in table
#'
#' @description
#' Get cohort ids in table. This function is not exported.
#'
#' @template Connection
#'
#' @template OldToNewCohortId
#'
#' @template TempEmulationSchema
#'
#' @param sourceCohortDatabaseSchema The database schema of the source cohort table.
#'
#' @param sourceCohortTable The name of the source cohort table.
#'
#' @param targetCohortTable A temp table to copy the cohorts from the source table.
#'
#' @return
#' NULL
#'
copyCohortsToTempTable <- function(connection = NULL,
oldToNewCohortId,
sourceCohortDatabaseSchema = NULL,
sourceCohortTable,
targetCohortTable = "#cohort_rows",
tempEmulationSchema = getOption("sqlRenderTempEmulationSchema")) {
DatabaseConnector::insertTable(
connection = connection,
tableName = "#old_to_new_cohort_id",
createTable = TRUE,
dropTableIfExists = TRUE,
tempTable = TRUE,
tempEmulationSchema = tempEmulationSchema,
progressBar = FALSE,
bulkLoad = (Sys.getenv("bulkLoad") == TRUE),
camelCaseToSnakeCase = TRUE,
data = oldToNewCohortId
)

sqlCopyCohort <- "
DROP TABLE IF EXISTS @target_cohort_table;
SELECT target.new_cohort_id cohort_definition_id,
source.subject_id,
source.cohort_start_date,
source.cohort_end_date
INTO @target_cohort_table
FROM {@source_database_schema != ''} ? {@source_database_schema.@source_cohort_table} : {@source_cohort_table} source
INNER JOIN #old_to_new_cohort_id target
ON source.cohort_definition_id = target.old_cohort_id
;"

DatabaseConnector::renderTranslateExecuteSql(
connection = connection,
sql = sqlCopyCohort,
profile = FALSE,
progressBar = FALSE,
reportOverallTime = FALSE,
source_database_schema = sourceCohortDatabaseSchema,
source_cohort_table = sourceCohortTable,
target_cohort_table = targetCohortTable,
tempEmulationSchema = tempEmulationSchema
)
}
Loading

0 comments on commit 56fe722

Please sign in to comment.