From b07e3cf4640532bdcf2925d80fea09e983aa96dd Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Thu, 18 Sep 2025 07:09:24 -0400 Subject: [PATCH 01/11] update pipeline to run on GH with configurable deployment repository --- .gitattributes | 27 +- .github/workflows/build.yaml | 54 ++++ .github/workflows/post_build.yaml | 58 +++++ .mvn/jvm.config | 1 - .mvn/wrapper/maven-wrapper.properties | 5 +- pom.xml | 53 +++- rxnorm-export/pom.xml | 190 +++++--------- .../rxnorm-export-pom.xml | 39 --- rxnorm-integration/pom.xml | 3 +- rxnorm-origin/pom.xml | 245 +++++++----------- .../rxnorm-origin-pom.xml | 39 --- rxnorm-pipeline/pom.xml | 57 +++- rxnorm-starterdata/pom.xml | 3 +- 13 files changed, 369 insertions(+), 405 deletions(-) create mode 100644 .github/workflows/build.yaml create mode 100644 .github/workflows/post_build.yaml delete mode 100644 rxnorm-export/rxnorm-export-pom-template/rxnorm-export-pom.xml delete mode 100644 rxnorm-origin/rxnorm-origin-pom-template/rxnorm-origin-pom.xml diff --git a/.gitattributes b/.gitattributes index 19ab79c..7d30ac8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,14 +1,10 @@ ############################ # Common settings that generally should always be used with your language specific settings -############################ # Auto detect text files and perform LF normalization * text=auto - # # The above will handle all files NOT found below -# - # Documents *.bibtex text diff=bibtex *.doc diff=astextplain @@ -33,7 +29,6 @@ *.txt text *.sql text *.epub diff=astextplain - # Graphics *.png binary *.jpg binary @@ -48,7 +43,6 @@ # use the following line instead. # *.svg binary *.eps binary - # Scripts *.bash text eol=lf *.fish text eol=lf @@ -58,35 +52,25 @@ *.bat text eol=crlf *.cmd text eol=crlf *.ps1 text eol=crlf - # Serialisation *.json text *.toml text *.xml text *.yaml text *.yml text - # Archives *.7z binary *.gz binary *.tar binary *.tgz binary *.zip binary - # Text files where line endings should be preserved *.patch -text - -# # Exclude files from exporting -# .gitattributes export-ignore .gitignore export-ignore .gitkeep export-ignore - -############################ # Web -############################ - # These files are text and should be normalized (Convert crlf => lf) *.css text diff=css *.scss text diff=css @@ -103,22 +87,16 @@ *.tag text *.tagx text *.xml text - - # Common build-tool wrapper scripts ('.cmd' versions are handled by 'Common.gitattributes') mvnw text eol=lf gradlew text eol=lf - -############################ # Java sources -############################ *.java text diff=java *.kt text diff=kotlin *.groovy text diff=java *.scala text diff=java *.gradle text diff=java *.gradle.kts text diff=kotlin - # These files are binary and should be left untouched (and ideally not checked in) # (binary is a macro for -text -diff) *.class binary @@ -128,10 +106,7 @@ gradlew text eol=lf *.so binary *.war binary *.jks binary - - -############################ # Custom Binaries -############################ **/*.zip filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text +*.zip !text !filter !merge !diff diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..a270e21 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,54 @@ +name: Build Workflow + +run-name: 'Build Workflow -- ${{ github.head_ref || github.ref_name }}' + +# Pipeline/Workflow Triggers +on: + push: + pull_request: + workflow_dispatch: + + +jobs: + pr-verification: + name: Pull Request Validation + runs-on: ubuntu-24.04 + if: github.event_name == 'pull_request' + steps: + - name: Pull Request Version Validation + uses: ikmdev/maven-pull-request-version-validation-action@v2.1.0 + + build-job: + name: Build Job + runs-on: ubuntu-24.04 + steps: + - name: Maven Settings File + uses: whelk-io/maven-settings-xml-action@v22 + with: + servers: '[{"id": "tinkar-nexus-private", "username": "admin", "password": "${{secrets.EC2_NEXUS_PASSWORD}}"}]' + mirrors: '[{"id": "tinkar-nexus-private", "mirrorOf": "*", "url": "https://nexus.tinkarbuild.com/repository/maven-private/"}]' + repositories: ' + [ + { + "id": "tinkar-nexus-private", + "name": "tinkar-nexus-private", + "url": "https://nexus.tinkarbuild.com/repository/maven-private/", + "releases": { + "enabled": "true", + "updatePolicy": "always", + "checksumPolicy": "fail" + }, + "snapshots": { + "enabled": "true", + "updatePolicy": "always", + "checksumPolicy": "fail" + } + } + ]' + output_file: ../.m2/tinkar-settings.xml + + - name: Build Data Pipeline + uses: ikmdev/maven-clean-install-build-action@v3.5.0 + with: + branch_name: ${{github.ref_name}} + mvn_additional_args: " -s '/home/runner/work/${{github.event.repository.name}}/.m2/tinkar-settings.xml'" diff --git a/.github/workflows/post_build.yaml b/.github/workflows/post_build.yaml new file mode 100644 index 0000000..69692fd --- /dev/null +++ b/.github/workflows/post_build.yaml @@ -0,0 +1,58 @@ +name: Post Build Action + +run-name: 'Post Build Action -- ${{github.event.workflow_run.head_branch}}' + +on: + workflow_run: + workflows: + - Build Workflow + types: + - completed + +permissions: + contents: write + +jobs: + post-build: + name: Post Build Actions + runs-on: ubuntu-24.04 + if: github.event.workflow_run.conclusion == 'success' && github.repository_owner == 'ikmdev' + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + with: + repository: ${{github.event.workflow_run.head_repository.full_name}} + ref: ${{github.event.workflow_run.head_branch}} + fetch-depth: 0 + + - name: Maven Settings File + uses: whelk-io/maven-settings-xml-action@v22 + with: + servers: ' + [ + {"id": "tinkar-nexus-private", "username": "admin", "password": "${{secrets.EC2_NEXUS_PASSWORD}}"}, + {"id": "maven-snapshots", "username": "admin", "password": "${{secrets.EC2_NEXUS_PASSWORD}}"} + ]' + mirrors: '[{"id": "tinkar-nexus-private", "mirrorOf": "*", "url": "https://nexus.tinkarbuild.com/repository/maven-private/"}]' + output_file: ../.m2/tinkar-settings.xml + + - name: Build Plugins + uses: ikmdev/maven-clean-install-build-action@v3.5.0 + with: + branch_name: ${{github.ref_name}} + mvn_additional_args: " -f plugin" + + - name: Deploy To Nexus + shell: bash + run: | + ./mvnw clean deploy \ + --batch-mode \ + -U \ + -e \ + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ + -DskipTests \ + -DskipITs \ + -s '/home/runner/work/${{github.event.repository.name}}/.m2/tinkar-settings.xml'\ + -DaltDeploymentRepository='maven-snapshots::https://nexus.tinkarbuild.com/repository/maven-snapshots/' \ + -Dmaven.build.cache.enabled=false \ + -PgenerateData diff --git a/.mvn/jvm.config b/.mvn/jvm.config index 2e112fe..b4388b0 100644 --- a/.mvn/jvm.config +++ b/.mvn/jvm.config @@ -1,4 +1,3 @@ ---enable-preview --enable-native-access=ALL-UNNAMED --add-modules jdk.incubator.vector -Xmx12g diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index 1a60da7..12fbe1e 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -14,5 +14,6 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip diff --git a/pom.xml b/pom.xml index 9aaf977..c6ff4fc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,6 +4,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + + dev.ikm.build + java-parent + 1.64.0 + + dev.ikm.rxnorm rxnorm-data 1.0.0-SNAPSHOT @@ -27,14 +33,13 @@ 1.35.0 3.7.1 3.4.1 - 3.8.0 1.121.0 3.9.7 2.0.17 1.8.0 3.13.0 11.1.0-r11 - 3.13.0 + 3.15.1 3.3.1 3.1.0 3.6.0 @@ -45,11 +50,12 @@ 2024-04-10 Pilot-Defined-RxNorm-with-SNCT-classes-${source.version}-with-custom-annotations.owl ${user.home}/Downloads/${rxnormOwl} - ${user.home}/Downloads RxNorm Starter Export 07072025.zip + ${project.basedir}/../../snomed-ct-data/target snomedct-international ElkSnomedReasoner + ${dataStore}-${source.version}+1.0.0-SNAPSHOT IKM Dev @@ -59,6 +65,11 @@ + + dev.ikm.rxnorm + rxnorm-transformation-maven-plugin + ${project.version} + dev.ikm.tinkar entity-provider @@ -185,17 +196,45 @@ ${exec-maven-plugin.version} - org.apache.maven.plugins - maven-dependency-plugin - ${maven-dependency-plugin.version} + dev.ikm.rxnorm + rxnorm-transformation-maven-plugin + ${project.version} + + + org.codehaus.mojo + flatten-maven-plugin + 1.7.2 org.sonatype.central central-publishing-maven-plugin - false + + false + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + enforce-no-bad-sections + + enforce + + + + requireProperty + false + + + + + diff --git a/rxnorm-export/pom.xml b/rxnorm-export/pom.xml index 847ea91..46e1a57 100644 --- a/rxnorm-export/pom.xml +++ b/rxnorm-export/pom.xml @@ -7,7 +7,9 @@ 1.0.0-SNAPSHOT - rxnorm-export + dev.ikm.tinkar.data + rxnorm + ${revision} pom rxnorm-export @@ -16,167 +18,99 @@ - dev.ikm.tinkar.data - rxnorm - ${data-artifact.path-prefix} - ${source.version}-1.0.6 - ${project.artifactId}-${project.version} - ${project.build.directory}/${data-artifact.prefix} - https://nexus.tinkarbuild.com/repository/private-assets/ - false + ${source.version}+1.0.0-SNAPSHOT - - - - nexus - private-assets-nexus - ${deployNexusURL} - - - - - - - dev.ikm.maven.tinkar - tinkar-maven-plugin - - - - ${project.artifactId}-reasoned-export - - export-tinkar-data - - - ${project.build.directory} - ${dataStoreLocation}/${dataStore} - ${data-artifact.filename}-reasoned-pb.zip - false - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - assemble-origin-artifact - package - - single - - - - - reasoned-sa - - zip - - - - rxnorm - ${dataStoreLocation}/${dataStore} - - ** - - - MANIFEST.MF - - - - false - - - - - - - - - - generateData + generateDataLocal - deployToNexus - true + altDeploymentRepository - org.codehaus.mojo - templating-maven-plugin + dev.ikm.maven.tinkar + tinkar-maven-plugin + - inject-maven-properties + ${project.artifactId}-reasoned-export - filter-sources + export-tinkar-data - rxnorm-export-pom-template - ${project.build.directory} - false + ${project.build.directory} + ${dataStoreLocation}/${dataStore} + ${project.artifactId}-${project.version}-reasoned-pb.zip + false - - - - - - - deployZipArtifacts - - - deployToNexus - true - - - - org.apache.maven.plugins - maven-deploy-plugin + maven-assembly-plugin - deploy-reasoned-sa - deploy + assemble-origin-artifact + package - deploy-file + single - nexus - ${deployNexusURL} - ${data-artifact.groupId} - ${data-artifact.artifactId} - ${data-artifact.version} - ${project.build.directory}/rxnorm-export-pom.xml - ${data-artifact.filename}-reasoned-sa.zip - zip - reasoned-sa + + + reasoned-sa + + zip + + + + . + ${dataStoreLocation}/${dataStore} + + ** + + + MANIFEST.MF + + + + false + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + - deploy-reasoned-pb - deploy + attach-artifacts + install - deploy-file + attach-artifact - nexus - ${deployNexusURL} - ${data-artifact.groupId} - ${data-artifact.artifactId} - ${data-artifact.version} - ${project.build.directory}/rxnorm-export-pom.xml - ${data-artifact.filename}-reasoned-pb.zip - zip - reasoned-pb + + + ${project.build.directory}/${project.artifactId}-${project.version}-reasoned-sa.zip + reasoned-sa + zip + + + ${project.build.directory}/${project.artifactId}-${project.version}-reasoned-pb.zip + reasoned-pb + zip + + diff --git a/rxnorm-export/rxnorm-export-pom-template/rxnorm-export-pom.xml b/rxnorm-export/rxnorm-export-pom-template/rxnorm-export-pom.xml deleted file mode 100644 index 5f12ec6..0000000 --- a/rxnorm-export/rxnorm-export-pom-template/rxnorm-export-pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - ${data-artifact.groupId} - ${data-artifact.artifactId} - ${data-artifact.version} - pom - - ${data-artifact.artifactId} generated from ${project.artifactId} - ${data-artifact.artifactId} generated from ${project.artifactId} - ${project.url} - - - - Apache License, Version 2.0 - https://www.apache.org/licenses/LICENSE-2.0.txt - repo - A business-friendly OSS license - - - - - - - ikmdev - IKM Development Team - support@ikm.dev - - - - - - ${project.scm.url} - - - \ No newline at end of file diff --git a/rxnorm-integration/pom.xml b/rxnorm-integration/pom.xml index 48ddab7..a505d03 100644 --- a/rxnorm-integration/pom.xml +++ b/rxnorm-integration/pom.xml @@ -61,7 +61,6 @@ dev.ikm.rxnorm rxnorm-transformation-maven-plugin - 1.0.0-SNAPSHOT test @@ -71,9 +70,9 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.5.2 false + 1 ${dataStoreLocation}/${dataStore} ${source.zip} diff --git a/rxnorm-origin/pom.xml b/rxnorm-origin/pom.xml index 573a893..b14f772 100644 --- a/rxnorm-origin/pom.xml +++ b/rxnorm-origin/pom.xml @@ -9,194 +9,135 @@ ../pom.xml + dev.ikm.data.rxnorm rxnorm-origin + ${revision} pom rxnorm-origin - dev.ikm.data.rxnorm - rxnorm-origin - ${data-artifact.path-prefix} - Pilot-Defined-RxNorm_${source.version}+1.0.0-SNAPSHOT - ${project.artifactId}-${project.version} - ${project.build.directory}/${data-artifact.prefix} - https://nexus.tinkarbuild.com/repository/maven-snapshots/ - false + ${rxnorm-origin.version} - - - - nexus - private-assets-nexus - ${deployNexusURL} - - - - - - - - dev.ikm.maven.tinkar - tinkar-maven-plugin - - - create-origin-manifest - - generate-manifest-resource - - - ${packager.name} - ${project.version} - ${origin.url} - ${origin.namespace} - ${origin.working.directory} - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - assemble-origin-artifact - package - - single - - - - - data - - zip - - - - src - ${origin.working.directory} - - ** - - - MANIFEST.MF - - - - META-INF - ${origin.working.directory} - - MANIFEST.MF - - - - - - src - ${source.zip} - - - false - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - attach-artifacts - install - - attach-artifact - - - - - ${project.build.directory}/${project.artifactId}-${project.version}-data.zip - - zip - - - - - - - - - - - generateData + generateDataLocal - deployToNexus - true + altDeploymentRepository - + + + dev.ikm.maven.tinkar + tinkar-maven-plugin + + + create-origin-manifest + + generate-manifest-resource + + + ${packager.name} + ${project.version} + ${origin.url} + ${origin.namespace} + ${origin.working.directory} + + + + org.codehaus.mojo - templating-maven-plugin + flatten-maven-plugin - inject-maven-properties + flatten-test + initialize - filter-sources + flatten - rxnorm-origin-pom-template + resolveCiFriendliesOnly + true + true ${project.build.directory} - false - - - - - - - deployZipArtifacts - - - deployToNexus - true - - - - + org.apache.maven.plugins - maven-deploy-plugin + maven-assembly-plugin + + + assemble-origin-artifact + package + + single + + + + + data + + zip + + + + src + ${origin.working.directory} + + ** + + + MANIFEST.MF + + + + META-INF + ${origin.working.directory} + + MANIFEST.MF + + + + + + src + ${source.zip} + + + false + + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin - deploy-origin-data - deploy + attach-artifacts + install - deploy-file + attach-artifact - nexus - ${deployNexusURL} - ${data-artifact.groupId} - ${data-artifact.artifactId} - ${data-artifact.version} - ${project.build.directory}/rxnorm-origin-pom.xml - ${data-artifact.filename}-data.zip - zip + + + ${project.build.directory}/${project.artifactId}-${project.version}-data.zip + zip + + diff --git a/rxnorm-origin/rxnorm-origin-pom-template/rxnorm-origin-pom.xml b/rxnorm-origin/rxnorm-origin-pom-template/rxnorm-origin-pom.xml deleted file mode 100644 index 5f12ec6..0000000 --- a/rxnorm-origin/rxnorm-origin-pom-template/rxnorm-origin-pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - ${data-artifact.groupId} - ${data-artifact.artifactId} - ${data-artifact.version} - pom - - ${data-artifact.artifactId} generated from ${project.artifactId} - ${data-artifact.artifactId} generated from ${project.artifactId} - ${project.url} - - - - Apache License, Version 2.0 - https://www.apache.org/licenses/LICENSE-2.0.txt - repo - A business-friendly OSS license - - - - - - - ikmdev - IKM Development Team - support@ikm.dev - - - - - - ${project.scm.url} - - - \ No newline at end of file diff --git a/rxnorm-pipeline/pom.xml b/rxnorm-pipeline/pom.xml index b97b283..3e2d7c2 100644 --- a/rxnorm-pipeline/pom.xml +++ b/rxnorm-pipeline/pom.xml @@ -16,22 +16,66 @@ http://maven.apache.org - 23 - 23 - UTF-8 + ${project.build.directory}/origin-data + 20250801T120000Z+1.0.0-SNAPSHOT + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-origin-data + generate-sources + + copy + + + true + + + dev.ikm.data.rxnorm + rxnorm-origin + ${rxnorm-origin.version} + zip + true + ${origin.directory} + + + + + + unpack-datastore-dependency + generate-sources + + unpack + + + + + dev.ikm.tinkar.data + snomedct-international + ${snomedct.version} + reasoned-sa + zip + true + ${project.build.directory}/${dataStore} + + + + + + dev.ikm.rxnorm rxnorm-transformation-maven-plugin - 1.0.0-SNAPSHOT ${origin.namespace} ${project.build.directory}/src/${rxnormOwl} ${dataStoreLocation}/${dataStore} - ${user.home}/.m2/repository/dev/ikm/rxnorm/rxnorm-origin/${project.version}/rxnorm-origin-${project.version}-data.zip + ${origin.directory}/rxnorm-origin.zip ${project.build.directory} @@ -46,5 +90,4 @@ - - \ No newline at end of file + diff --git a/rxnorm-starterdata/pom.xml b/rxnorm-starterdata/pom.xml index 2d7b372..8580f34 100644 --- a/rxnorm-starterdata/pom.xml +++ b/rxnorm-starterdata/pom.xml @@ -19,13 +19,12 @@ dev.ikm.maven.tinkar tinkar-maven-plugin - ${maven-artifacts.version} ${dataStoreLocation}/${dataStore} - ${starterSetLocation} + ${project.basedir}/src/main/resources **/${starterSet} From 6520fc6caf06c95f73a42c4596f78be28f6efa04 Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Thu, 18 Sep 2025 08:16:55 -0400 Subject: [PATCH 02/11] cleanup --- plugin/rxnorm-transformation-maven-plugin/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/plugin/rxnorm-transformation-maven-plugin/pom.xml b/plugin/rxnorm-transformation-maven-plugin/pom.xml index a230dd4..5b0fe4c 100644 --- a/plugin/rxnorm-transformation-maven-plugin/pom.xml +++ b/plugin/rxnorm-transformation-maven-plugin/pom.xml @@ -18,7 +18,6 @@ org.apache.maven.plugins maven-plugin-plugin - ${maven-plugin-plugin.version} mojo-descriptor From 3e885b5b1ddaef9aa84f841abccf366f7151557c Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Thu, 18 Sep 2025 11:21:28 -0400 Subject: [PATCH 03/11] add rxnorm starter data --- .../RxNorm Starter Export 07072025.zip | Bin 0 -> 24817 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 rxnorm-starterdata/src/main/resources/RxNorm Starter Export 07072025.zip diff --git a/rxnorm-starterdata/src/main/resources/RxNorm Starter Export 07072025.zip b/rxnorm-starterdata/src/main/resources/RxNorm Starter Export 07072025.zip new file mode 100644 index 0000000000000000000000000000000000000000..e844b87f57d4e9289cbffb51d8aec36517ea7bf8 GIT binary patch literal 24817 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

4+W;x3?R%k zE~upqJ6@}Z_G2(hKrLP&1IYQCggl{Y8fp37G3J;4R^!5Xw+P$b^MJ_~9e4h;2~P;Z z+rAgNPa50DjarzMLGHTs?DHq**qO|afFY(VIlWYvz>L(aTzv*%zIW?&-)SNw7?Zbw z!PNfN7#U+q!+46|UIu3+ex7!;{rIvLZ6lpXhqBeSedD2aLui*5UtX+==r*$SoJRfN zn~-kZ;D2;d^5<$@esiLceDbrtHD(t_@vmMvj?YYAszeZo)pYa!T-{&jWdQ45N}BK( z!M2R*SMrmp`0NGeR1in=<`CW%cP|tzo(UBVJs)e9!I(>m!j9S&E+ejWB7^g!fbkZ3 z*Cc`A@5=sTDfY|8>@~DxZjtO6b#PUNqW=9?zh95p9_A{XQ`_fA>7=!QzU=xo@_xNE z9ldtdr|FJXvuzmRB83I`ix%o&B@%Cm?O>8Zx6pt+XB<1YEmPGicP{KW8#1P*rdCXgd&KS% z6|~Y%Xt9a9-*>dmzorX@zIGcyCoZYi7(!)|Y>aBsqoZ4&o&?%lp7wQ{mD+Wpt0ptZ zXL2m*bpc7^P{X-%t$p=}G)oJ;;EQjLZVrirlaX1>9ngr%2fsRd9Jrv#=`D1EQ-lI6 zh6>x}zeX-YAk+GiIq6QppG*3mH_SENBSu&K-c6T61p$t$yW}Sc5Ko^UN20$wB|4_T zAL+vH?3qx@ZGq}M#4RYh$X_at-VaB3;7Ho3DU7CLP2XXYdo?D#;^RsL*0_`sePFzi zLh1fi-t=GrjkCLlVY<_DBx_1plmUaC4O1T1S#UhfQcm($upwph?E#pRW#7$J(`T9| zf7@rCQcZDHK+)_^VQd@RiKz4G`SRrbfgsos0!EA7;#MynbWXSKwRtJm?wbs7v$zPc zx!Kc2QuG{kb7l$-H|C1pZ!>=F$a@dO%YQhl3=n{$9QX;P!#RSdzUY1Q)z|TrX)Phb z9Z%=cW8QdjYe!%ZiNq-t^BjQ$edA!QmQZsCn}v&odVczZVce83bwz`F>exipdw14efl z3Qj|U_Bd5Yr`f0$27~pAq)KVpOYv+xE=3~DAb4#hM(HGYZ3$3V`iO-OTv zvcghB0sm)|a?=F)O7C~yx7i$TaWClThN_CH7UkEA@xcisx=kTi;XT^?*@oyo#_V*2ynZ!oViw7lxX?WMMHEUj?FecEi+US zWNd!GI6an6F%ImrU2A#6klh)9G+567&o&BN?w><%fWE{ScH!8CHW_qdbENQhJAzOP z8CIlx>l3YWWdD{US%+ad=?@<1*$M2%^(j(M*Ny5#jS_q@q6^ZpeRB2GnlR9(%aIT5 z??m{z=gO;FiiFXm*89`3X>S+_adkS7#B&Z`CEoL8@2c|U<(CGeCvE&UuIDOW={WLB z-2IBR!zlJ+$<*X{ixgUHl8+?k$EZ+3EC%|AeYl$W85LG1bh2j)n{IcGA!}&8XGIbI z=luj+TZowwz^i&MUW%+1aHgsb57f&W-r5Ps`o3$9iBj=1vZGar-RLf~7uf)aSw6t- zBY)Gj)_Sh^uxB2kW{7#uWD(J6NKyv#qU{9(n zT;^WKZ$hq-^6DzDXP42yTddAeow!1?LHVPvha_ zVX<{SsX|q!eOXMFi2ThPys|tZfDBGK|Es}!y?Q1XDCPgNqCM_=MSF$M>f+3@ic+i! z;)=3TpVib^6r}VMCan9}Fhef9k;!zAQs=8_Hsxm2GRP7;0-35;lvg=oNmiPxtz^hU z%`y6i$7|Yex5om00cAzd{=#Podtd$pL z&SahDD|{>iI$BOtG!{aC{Pt7^n)$xMYC`}3 literal 0 HcmV?d00001 From fa8d5b7413c583818c48a8004bdde98859c4f795 Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Thu, 18 Sep 2025 16:35:55 -0400 Subject: [PATCH 04/11] mavenify data dependency --- pom.xml | 8 ++++---- rxnorm-pipeline/pom.xml | 21 --------------------- rxnorm-starterdata/pom.xml | 26 ++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/pom.xml b/pom.xml index c6ff4fc..1d68ab6 100644 --- a/pom.xml +++ b/pom.xml @@ -51,18 +51,18 @@ Pilot-Defined-RxNorm-with-SNCT-classes-${source.version}-with-custom-annotations.owl ${user.home}/Downloads/${rxnormOwl} RxNorm Starter Export 07072025.zip - - ${project.basedir}/../../snomed-ct-data/target - snomedct-international + ${project.basedir}/../target + rxnorm ElkSnomedReasoner ${dataStore}-${source.version}+1.0.0-SNAPSHOT + 20250801T120000Z+1.0.0-SNAPSHOT IKM Dev https://www.nlm.nih.gov/research/umls/rxnorm/docs/rxnormfiles.html 3094dbd1-60cf-44a6-92e3-0bb32ca4d3de - + diff --git a/rxnorm-pipeline/pom.xml b/rxnorm-pipeline/pom.xml index 3e2d7c2..1a9e46c 100644 --- a/rxnorm-pipeline/pom.xml +++ b/rxnorm-pipeline/pom.xml @@ -17,7 +17,6 @@ ${project.build.directory}/origin-data - 20250801T120000Z+1.0.0-SNAPSHOT @@ -46,26 +45,6 @@ - - unpack-datastore-dependency - generate-sources - - unpack - - - - - dev.ikm.tinkar.data - snomedct-international - ${snomedct.version} - reasoned-sa - zip - true - ${project.build.directory}/${dataStore} - - - - diff --git a/rxnorm-starterdata/pom.xml b/rxnorm-starterdata/pom.xml index 8580f34..ea5e20c 100644 --- a/rxnorm-starterdata/pom.xml +++ b/rxnorm-starterdata/pom.xml @@ -16,6 +16,32 @@ + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack-datastore-dependency + generate-sources + + unpack + + + + + dev.ikm.tinkar.data + snomedct-international + ${snomedct.version} + reasoned-sa + zip + true + ${dataStoreLocation}/${dataStore} + + + + + + dev.ikm.maven.tinkar tinkar-maven-plugin From d0791df068c0f2aba59159857745ca4f17088b95 Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Mon, 22 Sep 2025 14:07:59 -0400 Subject: [PATCH 05/11] snomed data dependency updates --- pom.xml | 4 ++-- rxnorm-starterdata/pom.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 1d68ab6..c0e2e22 100644 --- a/pom.xml +++ b/pom.xml @@ -52,9 +52,9 @@ ${user.home}/Downloads/${rxnormOwl} RxNorm Starter Export 07072025.zip ${project.basedir}/../target - rxnorm + snomedct-international ElkSnomedReasoner - ${dataStore}-${source.version}+1.0.0-SNAPSHOT + rxnorm-${source.version}+1.0.0-SNAPSHOT 20250801T120000Z+1.0.0-SNAPSHOT diff --git a/rxnorm-starterdata/pom.xml b/rxnorm-starterdata/pom.xml index ea5e20c..281e6c2 100644 --- a/rxnorm-starterdata/pom.xml +++ b/rxnorm-starterdata/pom.xml @@ -35,7 +35,7 @@ reasoned-sa zip true - ${dataStoreLocation}/${dataStore} + ${dataStoreLocation} From 94230f21727296186a89eaf54009dc948c6aa306 Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Mon, 22 Sep 2025 14:08:06 -0400 Subject: [PATCH 06/11] update readme --- README.md | 72 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index e435371..5cdce7a 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,64 @@ -# rxnorm-data +# RxNorm Pipeline -### Team Ownership - Product Owner -Data Team +**Prerequisites** -## Getting Started - -Follow these instructions to generate a rxnorm dataset: +* JDK 24+ +* Maven 3.9.9+ +* Nexus Repository (optional) +* SnomedCt Pipeline Artifact (see [snomed-ct-data repository](https://github.com/ikmdev/snomed-ct-data)) + +**Clone Project and Configure Maven Settings** 1. Clone the [rxnorm-data repository](https://github.com/ikmdev/rxnorm-data) -```bash -git clone [Rep URL] -``` + ``` + git clone https://github.com/ikmdev/rxnorm-data.git + ``` + +2. Configure Maven settings.xml based on the [provided sample](https://ikmdev.atlassian.net/wiki/spaces/IKDT/pages/1036648449/Centralized+Documentation+for+Maven+Settings+File+Configuration). + +3. Change local directory to `rxnorm-data` + +**Run Origin Packaging** + +The following source data is required for this pipeline: -2. Change local directory to `rxnorm-data` +* Pilot-Defined-RxNorm-with-SNCT-classes-2024-04-10-with-custom-annotations.owl -3. Download RxNorm File from National Library of Medicine (RxNorm-in-OWL/RxNorm Files): https://www.nlm.nih.gov/research/umls/rxnorm/index.html +More information can be found on National Library of Medicine (RxNorm-in-OWL/RxNorm Files): https://www.nlm.nih.gov/research/umls/rxnorm/index.html -4. Place the downloaded Pilot-Defined-RxNorm_*_.owl in your local Downloads directory. +1. Place the downloaded file in your ~/Downloads directory. -5. Ensure the rxnorm-data/pom.xml contains the proper tags containing source filename for the downloaded files such as: - , , , , etc. +2. Ensure the properties defined in rxnorm-data/pom.xml are set to the correct file names: + - + - -6. Create a ~/Solor directory and ensure ~/Solor/generated-data does not exist or is empty. +3. Run origin packaging and deployment. -7. You can create a reasoned or unreasoned dataset by either including or commenting out the rxnorm-data/pom.xml rxnorm-reasoner + To deploy origin artifact to a shared Nexus repository, run the following command, specifying the repository ID and URL in `-DaltDeploymentRepository` + ``` + mvn clean deploy -f rxnorm-origin -Ptinkarbuild -DaltDeploymentRepository=tinkar-snapshot::https://nexus.tinkar.org/repository/maven-snapshots/ -Dmaven.build.cache.enabled=false + ``` -8. Enter the following command to build the dataset: + To install origin artifact to a local M2 repository, run the following command: + ``` + mvn clean install -f rxnorm-origin -Ptinkarbuild,generateDataLocal -Dmaven.build.cache.enabled=false + ``` -```bash -mvn clean install -U "-DMaven.build.cache.enable=false" -``` +**Run Transformation Pipeline** -9. Enter the following command to deploy the dataset: +The transformation pipeline can be built after origin data is available in Nexus or a local M2 repository. -```bash -mvn deploy -f rxnorm-export "-DdeployToNexus=true" "-Dmaven.deploy.skip=true" "-Dmaven.build.cache.enabled=false" -``` +1. Ensure the rxnorm-data/pom.xml contains the proper tags containing source filename for the downloaded files such as: + , , , , etc. -- NOTE. This repo is built on top of an unreasoned spined array DB from snomed-ct-data. Therefore, make sure you have it built before running step #8. +2. Build the pipeline with the following command: + ``` + mvn clean install -U -Ptinkarbuild -Dmaven.build.cache.enabled=false + ``` +3. Deploy transformed data artifacts to Nexus, run the following command: + ``` + mvn deploy -f snomed-ct-export -Ptinkarbuild -DaltDeploymentRepository=tinkar-snapshot::https://nexus.tinkar.org/repository/maven-snapshots/ -Dmaven.build.cache.enabled=false + ``` + \ No newline at end of file From c606d26a5e5fff0ddb2d2e276644ee12693e3015 Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Mon, 22 Sep 2025 14:17:18 -0400 Subject: [PATCH 07/11] update build action --- .github/workflows/build.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index a270e21..367d1d4 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -25,14 +25,14 @@ jobs: - name: Maven Settings File uses: whelk-io/maven-settings-xml-action@v22 with: - servers: '[{"id": "tinkar-nexus-private", "username": "admin", "password": "${{secrets.EC2_NEXUS_PASSWORD}}"}]' - mirrors: '[{"id": "tinkar-nexus-private", "mirrorOf": "*", "url": "https://nexus.tinkarbuild.com/repository/maven-private/"}]' + servers: '[{"id": "tinkar-nexus", "username": "${{secrets.NEXUS_USER}}", "password": "${{secrets.NEXUS_PASSWORD}}"}]' + mirrors: '[{"id": "tinkar-nexus", "mirrorOf": "*", "url": "${{secrets.NEXUS_URL}}/repository/maven-public/"}]' repositories: ' [ { - "id": "tinkar-nexus-private", - "name": "tinkar-nexus-private", - "url": "https://nexus.tinkarbuild.com/repository/maven-private/", + "id": "tinkar-nexus", + "name": "tinkar-nexus", + "url": "${{secrets.NEXUS_URL}}/repository/maven-public/", "releases": { "enabled": "true", "updatePolicy": "always", From e6a72062be3c28cd07fc702a9febfaab6c450746 Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Mon, 22 Sep 2025 16:09:43 -0400 Subject: [PATCH 08/11] fix readme typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5cdce7a..a2bc108 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,6 @@ The transformation pipeline can be built after origin data is available in Nexus 3. Deploy transformed data artifacts to Nexus, run the following command: ``` - mvn deploy -f snomed-ct-export -Ptinkarbuild -DaltDeploymentRepository=tinkar-snapshot::https://nexus.tinkar.org/repository/maven-snapshots/ -Dmaven.build.cache.enabled=false + mvn deploy -f rxnorm-export -Ptinkarbuild -DaltDeploymentRepository=tinkar-snapshot::https://nexus.tinkar.org/repository/maven-snapshots/ -Dmaven.build.cache.enabled=false ``` \ No newline at end of file From 9507c9faa44944ac0c2c4a1b0e86ff927fffedf5 Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Wed, 24 Sep 2025 10:59:35 -0400 Subject: [PATCH 09/11] update datastorelocation variable --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c0e2e22..0a18aa1 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ Pilot-Defined-RxNorm-with-SNCT-classes-${source.version}-with-custom-annotations.owl ${user.home}/Downloads/${rxnormOwl} RxNorm Starter Export 07072025.zip - ${project.basedir}/../target + ${project.parent.basedir}/target snomedct-international ElkSnomedReasoner rxnorm-${source.version}+1.0.0-SNAPSHOT From eb87f55760b46f8a41566517027a8a67f0e215a4 Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Thu, 25 Sep 2025 10:10:03 -0400 Subject: [PATCH 10/11] cleanup .gitattributes --- .gitattributes | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.gitattributes b/.gitattributes index 7d30ac8..767228f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -106,7 +106,3 @@ gradlew text eol=lf *.so binary *.war binary *.jks binary -# Custom Binaries -**/*.zip filter=lfs diff=lfs merge=lfs -text -*.zip filter=lfs diff=lfs merge=lfs -text -*.zip !text !filter !merge !diff From 58708a946d97028af7a3192cdc430622c8b5993f Mon Sep 17 00:00:00 2001 From: rbradley813 Date: Thu, 25 Sep 2025 11:39:40 -0400 Subject: [PATCH 11/11] update README.md commands --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a2bc108..97e5d85 100644 --- a/README.md +++ b/README.md @@ -37,12 +37,12 @@ More information can be found on National Library of Medicine (RxNorm-in-OWL/RxN To deploy origin artifact to a shared Nexus repository, run the following command, specifying the repository ID and URL in `-DaltDeploymentRepository` ``` - mvn clean deploy -f rxnorm-origin -Ptinkarbuild -DaltDeploymentRepository=tinkar-snapshot::https://nexus.tinkar.org/repository/maven-snapshots/ -Dmaven.build.cache.enabled=false + mvn clean deploy --projects rxnorm-origin --also-make -Ptinkarbuild -DaltDeploymentRepository=tinkar-snapshot::https://nexus.tinkar.org/repository/maven-snapshots/ -Dmaven.build.cache.enabled=false ``` To install origin artifact to a local M2 repository, run the following command: ``` - mvn clean install -f rxnorm-origin -Ptinkarbuild,generateDataLocal -Dmaven.build.cache.enabled=false + mvn clean install --projects rxnorm-origin --also-make -Ptinkarbuild,generateDataLocal -Dmaven.build.cache.enabled=false ``` **Run Transformation Pipeline** @@ -59,6 +59,6 @@ The transformation pipeline can be built after origin data is available in Nexus 3. Deploy transformed data artifacts to Nexus, run the following command: ``` - mvn deploy -f rxnorm-export -Ptinkarbuild -DaltDeploymentRepository=tinkar-snapshot::https://nexus.tinkar.org/repository/maven-snapshots/ -Dmaven.build.cache.enabled=false + mvn deploy --projects rxnorm-export --also-make -Ptinkarbuild -DaltDeploymentRepository=tinkar-snapshot::https://nexus.tinkar.org/repository/maven-snapshots/ -Dmaven.build.cache.enabled=false ``` \ No newline at end of file