diff --git a/.github/workflows/manual-test.yml b/.github/workflows/manual-test.yml new file mode 100644 index 0000000000..9c0ccc7085 --- /dev/null +++ b/.github/workflows/manual-test.yml @@ -0,0 +1,54 @@ +name: Manual Junit test the project + +on: + workflow_dispatch: + inputs: + branch: + description: 'Opencga branch to run the tests' + default: 'develop' + required: true + fail-never: + type: boolean + description: 'The process executes all tests even if some fail.' + default: false + required: false + +jobs: + test: + name: JUnit Test + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.branch }} + fetch-depth: '0' + - name: Set up JDK 11 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '11' + cache: 'maven' + - name: K8s Tunnel MongoDB + run: | + wget https://dl.k8s.io/release/v1.28.2/bin/linux/amd64/kubectl + chmod +x ./kubectl + echo "${{ secrets.AZURE_KUBE_CONFIG }}" > admin.conf + ./kubectl -n cellbase-db port-forward services/cellbase-rs0-svc 27017:27017 --kubeconfig ./admin.conf & + - name: Install dependencies branches + run: | + if [ -f "./.github/workflows/scripts/get_same_branch.sh" ]; then + chmod +x ./.github/workflows/scripts/get_same_branch.sh + ./.github/workflows/scripts/get_same_branch.sh ${{ github.ref_name }} + else + echo "./.github/workflows/scripts/get_same_branch.sh does not exist." + fi + - name: Test and Analyze + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: | + FAIL_NEVER="" + if [ "${{ github.event.inputs.fail-never }}" == "true" ]; then + FAIL_NEVER="--fail-never" + fi + mvn install surefire-report:report ${FAIL_NEVER} -Dcheckstyle.skip \ No newline at end of file diff --git a/.github/workflows/pull-request-approved.yml b/.github/workflows/pull-request-approved.yml new file mode 100644 index 0000000000..eb410c9cba --- /dev/null +++ b/.github/workflows/pull-request-approved.yml @@ -0,0 +1,15 @@ +name: Pull request approve workflow + +on: + pull_request_review: + types: [ submitted ] + +jobs: + build: + uses: opencb/java-common-libs/.github/workflows/build-java-app-workflow.yml@develop + + test: + name: "Test analysis" + uses: ./.github/workflows/test-analysis.yml + needs: build + secrets: inherit diff --git a/.github/workflows/test-analysis.yml b/.github/workflows/test-analysis.yml index 413f274921..7725528041 100644 --- a/.github/workflows/test-analysis.yml +++ b/.github/workflows/test-analysis.yml @@ -11,11 +11,11 @@ jobs: name: Test and push Sonar analysis runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: '0' - name: Set up JDK 11 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '11' diff --git a/cellbase-app/app/cloud/docker/cellbase-builder/Dockerfile b/cellbase-app/app/cloud/docker/cellbase-builder/Dockerfile index 17d5accff4..6e1657d1bf 100644 --- a/cellbase-app/app/cloud/docker/cellbase-builder/Dockerfile +++ b/cellbase-app/app/cloud/docker/cellbase-builder/Dockerfile @@ -28,4 +28,4 @@ RUN cd /opt/ensembl && \ git clone https://github.com/Ensembl/ensembl-compara.git && \ git clone https://github.com/Ensembl/ensembl-io.git -ENV PERL5LIB=$PERL5LIB:/opt/ensembl/bioperl-live:/opt/ensembl/ensembl/modules:/opt/ensembl/ensembl-variation/modules:/opt/ensembl/ensembl-funcgen/modules:/opt/ensembl/ensembl-compara/modules:/opt/ensembl/lib/perl/5.18.2:/opt/cellbase +ENV PERL5LIB=$PERL5LIB:/opt/ensembl/bioperl-live:/opt/ensembl/ensembl/modules:/opt/ensembl/ensembl-variation/modules:/opt/ensembl/ensembl-funcgen/modules:/opt/ensembl/ensembl-compara/modules:/opt/ensembl/lib/perl/5.18.2:/opt/cellbase/scripts/ensembl-scripts diff --git a/cellbase-app/app/scripts/ensembl-scripts/DB_CONFIG.pm b/cellbase-app/app/scripts/ensembl-scripts/DB_CONFIG.pm index aa22cf10b1..70865465e9 100755 --- a/cellbase-app/app/scripts/ensembl-scripts/DB_CONFIG.pm +++ b/cellbase-app/app/scripts/ensembl-scripts/DB_CONFIG.pm @@ -134,10 +134,10 @@ our $ENSEMBL_GENOMES_PORT = "4157"; our $ENSEMBL_GENOMES_USER = "anonymous"; ## Vertebrates -our $HOMO_SAPIENS_CORE = "homo_sapiens_core_104_38"; -our $HOMO_SAPIENS_VARIATION = "homo_sapiens_variation_104_38"; -our $HOMO_SAPIENS_FUNCTIONAL = "homo_sapiens_funcgen_104_38"; -our $HOMO_SAPIENS_COMPARA = "homo_sapiens_compara_104_38"; +our $HOMO_SAPIENS_CORE = "homo_sapiens_core_110_38"; +our $HOMO_SAPIENS_VARIATION = "homo_sapiens_variation_110_38"; +our $HOMO_SAPIENS_FUNCTIONAL = "homo_sapiens_funcgen_110_38"; +our $HOMO_SAPIENS_COMPARA = "homo_sapiens_compara_110_38"; #our $HOMO_SAPIENS_CORE = "homo_sapiens_core_78_38"; #our $HOMO_SAPIENS_VARIATION = "homo_sapiens_variation_78_38"; #our $HOMO_SAPIENS_FUNCTIONAL = "homo_sapiens_funcgen_78_38"; diff --git a/cellbase-app/app/scripts/gnomad/mitochondrial/README.md b/cellbase-app/app/scripts/gnomad/mitochondrial/README.md new file mode 100644 index 0000000000..27aefcb881 --- /dev/null +++ b/cellbase-app/app/scripts/gnomad/mitochondrial/README.md @@ -0,0 +1,10 @@ +gnomAD Mitochondrial DNA (mtDNA) variants v3.1: +URL: https://storage.googleapis.com/gcp-public-data--gnomad/release/3.1/vcf/genomes/gnomad.genomes.v3.1.sites.chrM.vcf.bgz + +Mapping file in ticket BIOINFO-99: mapping_file_gnomad_mt_mod_file.txt + +Script to preprocess original VCF from gnomad: gnomad_mt.py + +Script to load gnomad mt variants into OpenCGA and export them in json format annotation.populationFrequencies object: opencga_gnomad_mt.sh + + diff --git a/cellbase-app/app/scripts/gnomad/mitochondrial/gnomad_mt.py b/cellbase-app/app/scripts/gnomad/mitochondrial/gnomad_mt.py new file mode 100644 index 0000000000..34ae614eef --- /dev/null +++ b/cellbase-app/app/scripts/gnomad/mitochondrial/gnomad_mt.py @@ -0,0 +1,120 @@ +import sys +import gzip + + +POPULATIONS = ['afr', 'ami', 'amr', 'asj', 'eas', 'fin', 'nfe', 'oth', 'sas', 'mid'] +HEADER_COMMON = [ + '##INFO=', + '##INFO=', + '##INFO=' +] +HEADER_POP = [ + '##INFO=', + '##INFO=', + '##INFO=', + '##INFO=' +] + + +def main(): + + # Creating custom header + custom_header = [] + custom_header += HEADER_COMMON + for pop in POPULATIONS: + custom_header += ['\n'.join(HEADER_POP).format(pop=pop)] + custom_header = '\n'.join(custom_header) + '\n' + + # Opening input/output files + vcf_input_fpath = sys.argv[1] + vcf_output_fpath = sys.argv[2] + vcf_input_fhand = gzip.open(vcf_input_fpath, 'r') + vcf_output_fhand = gzip.open(vcf_output_fpath, 'wt') + + # Calculating new INFO fields for each variant + for line in vcf_input_fhand: + line = line.decode() + + # Writing header to output + if line.startswith('##VEP'): # adding custom header before "##VEP" line + vcf_output_fhand.write(custom_header) + vcf_output_fhand.write(line) + continue + if line.startswith('#'): + vcf_output_fhand.write(line) + continue + + # Dict to store the new calculated data + new_info = {} + + # Getting variant and INFO data + variant_items = line.strip().split() + info_items = variant_items[7].split(';') + + for info_item in info_items: + + # Getting key/value for each INFO item + if len(info_item.split('=', maxsplit=1)) < 2: # skipping flags + continue + info_key, info_value = info_item.split('=', maxsplit=1) + + # Getting INFO data for calculations + if info_key == 'pop_AF_hom': + pop_AF_hom = list(map(float, info_value.split('|'))) + if info_key == 'pop_AF_het': + pop_AF_het = list(map(float, info_value.split('|'))) + if info_key == 'AF_hom': + AF_hom = float(info_value) + if info_key == 'AF_het': + AF_het = float(info_value) + if info_key == 'pop_AC_hom': + pop_AC_hom = list(map(int, info_value.split('|'))) + if info_key == 'pop_AC_het': + pop_AC_het = list(map(int, info_value.split('|'))) + if info_key == 'AC_hom': + AC_hom = int(info_value) + if info_key == 'AC_het': + AC_het = int(info_value) + if info_key == 'pop_AN': + pop_AN = list(map(int, info_value.split('|'))) + if info_key == 'AN': + AN = int(info_value) + + # Calculating AF_{pop} and AF + # e.g. AF_sas = pop_AF_hom[i] + pop_AF_het[i] (i = index of sas population) + pop_AF = [x + y for x, y in zip(pop_AF_hom, pop_AF_het)] + for i, pop in enumerate(POPULATIONS): + new_info['AF_' + pop] = pop_AF[i] + new_info['AF'] = AF_hom + AF_het + + # Calculating AC_{pop} and AC + # e.g. AC_sas = pop_AC_hom[i] + pop_AC_het[i] (i = index of sas population) + pop_AC = [x + y for x, y in zip(pop_AC_hom, pop_AC_het)] + for i, pop in enumerate(POPULATIONS): + new_info['AC_' + pop] = pop_AC[i] + new_info['AC'] = AC_hom + AC_het + + # Calculating AN_{pop} + # e.g. AN_sas = pop_AN[i] (i = index of sas population) + for i, pop in enumerate(POPULATIONS): + new_info['AN_' + pop] = pop_AN[i] + + # Calculating GTC_{pop} + # e.g. GTC_sas = (pop_AN[i] - (pop_AC_het[i] + pop_AC_hom[i])) + "," + pop_AC_het[i] + "," + pop_AC_hom[i] + pop_AC = [x + y for x, y in zip(pop_AC_hom, pop_AC_het)] + hom_ref = [x - y for x, y in zip(pop_AN, pop_AC)] + for i, pop in enumerate(POPULATIONS): + new_info['GTC_' + pop] = ','.join(map(str, [hom_ref[i], pop_AC_het[i], pop_AC_hom[i]])) + new_info['GTC'] = ','.join(map(str, [AN - (AC_hom + AC_het), AC_het, AC_hom])) + + # Joining existing INFO field and new custom INFO data + custom_info_data = ';'.join(['='.join([k, str(new_info[k])]) for k in new_info]) + new_info_field = ';'.join(info_items + [custom_info_data]) + + # Replacing original INFO field + variant_items[7] = new_info_field + vcf_output_fhand.write('\t'.join(variant_items) + '\n') + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/cellbase-app/app/scripts/gnomad/mitochondrial/opencga_gnomad_mt.sh b/cellbase-app/app/scripts/gnomad/mitochondrial/opencga_gnomad_mt.sh new file mode 100644 index 0000000000..8b1f97dcac --- /dev/null +++ b/cellbase-app/app/scripts/gnomad/mitochondrial/opencga_gnomad_mt.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# Variables +user="user" +host="host_name" +project="population" +project_name="Population" +study="gnomad_mt" +study_name="gnomAD v3.1 Mitocondrial DNA Variants" +study_path="data/"$study +folder_path="/home/gnomad_mt" +mapping_file="mapping_file_gnomad_mt_mod_file.txt" +vcf_file="gnomad.genomes.v3.1.sites.chrM.mod.vcf.gz" +mapping_file_path=$folder_path$mapping_file +vcf_file_path=$folder_path$vcf_file + +# Login +/home/opencga-client-2.12.0/bin/opencga.sh login $user --host $host + +# Project creation +/home/opencga-client-2.12.0/bin/opencga.sh projects create --id $project --name $project_name --organism-scientific-name hsapiens --organism-assembly grch38 --host $host + +# Study creation +/home/opencga-client-2.12.0/bin/opencga.sh studies create --id $study --name $study_name --project $project --host $host + +# Folders creation within Catalog +/home/opencga-client-2.12.0/bin/opencga.sh files create --path $study_path --parents --study $study --type DIRECTORY --host $host + +# Uploading gnomad mt variants VCF and mapping file for gnomad mt variants +/home/opencga-client-2.12.0/bin/opencga.sh files upload -i $mapping_file_path --path $study_path --study $study --host $host + +/home/opencga-client-2.12.0/bin/opencga.sh files upload -i $vcf_file_path --path $study_path --study $study --host $host + +# Variant index for gnomad mt variants VCF +/home/opencga-client-2.12.0/bin/opencga.sh operations variant-index --study $study --file $vcf_file --load-archive NO --load-split-data CHROMOSOME --host $host + +# Variant stats index for gnomad mt variants. The corresponding cohorts and variant cohort stats will be generated using the information of interest provided in the mapping file and INFO column of the gnomad mt VCF +/home/opencga-client-2.12.0/bin/opencga.sh operations variant-stats-index --study $study --aggregation-mapping-file $mapping_file --aggregated BASIC --host $host + +# Variant cohort stats will be converted to population frequencies data model (julie-tool) +/home/opencga-client-2.12.0/bin/opencga.sh operations variant-julie-run --project $project --host $host + +# Export of annotation.populationFrequencies in json format +/home/opencga-client-2.12.0/bin/opencga.sh variant export-run --body_include annotation.populationFrequencies --body_project $project --project $project --output-file-format json --host $host diff --git a/cellbase-app/app/scripts/gnomad_mt_prepare.py b/cellbase-app/app/scripts/gnomad_mt_prepare.py new file mode 100755 index 0000000000..0863370c33 --- /dev/null +++ b/cellbase-app/app/scripts/gnomad_mt_prepare.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 + +# Copyright 2015-2020 OpenCB +# +# 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. + +import argparse +import os +import requests +import sys +import json +import pathlib +from pathlib import Path + + +## Configure command-line options +parser = argparse.ArgumentParser() +parser.add_argument('-i', help="VCF file", required=True) + + +## Parse command-line parameters and init basedir, tag and build_folder +args = parser.parse_args() +print(args.i) + +if os.path.isfile(args.i) == False: + print("no existe") + + +# Opening file +vcf_file = open(args.i, 'r') +count = 0 + +# Using for loop +print("Using for loop") +for line in vcf_file: + count += 1 + if not line.startswith("#"): + line = line.strip() + cols = line.split("\t") + print(line) + info_cols = cols[7].split(";") + var = [x for x in info_cols if x.startswith("AN=")] + print("{}".format(var)) + + +# Closing files +vcf_file.close() \ No newline at end of file diff --git a/cellbase-core/src/main/java/org/opencb/cellbase/core/config/DownloadProperties.java b/cellbase-core/src/main/java/org/opencb/cellbase/core/config/DownloadProperties.java index 9a097fd202..507e85a75f 100644 --- a/cellbase-core/src/main/java/org/opencb/cellbase/core/config/DownloadProperties.java +++ b/cellbase-core/src/main/java/org/opencb/cellbase/core/config/DownloadProperties.java @@ -26,6 +26,7 @@ public class DownloadProperties { private EnsemblProperties ensembl; private EnsemblProperties ensemblGenomes; private URLProperties hgnc; + private URLProperties cancerHotspot; private URLProperties refSeq; private URLProperties refSeqFasta; private URLProperties refSeqProteinFasta; @@ -71,6 +72,7 @@ public class DownloadProperties { private URLProperties hpoObo; private URLProperties goObo; private URLProperties doidObo; + private URLProperties mondoObo; private URLProperties goAnnotation; private URLProperties revel; private URLProperties pubmed; @@ -527,6 +529,24 @@ public DownloadProperties setHgnc(URLProperties hgnc) { return this; } + public URLProperties getCancerHotspot() { + return cancerHotspot; + } + + public DownloadProperties setCancerHotspot(URLProperties cancerHotspot) { + this.cancerHotspot = cancerHotspot; + return this; + } + + public URLProperties getMondoObo() { + return mondoObo; + } + + public DownloadProperties setMondoObo(URLProperties mondoObo) { + this.mondoObo = mondoObo; + return this; + } + public static class EnsemblProperties { private DatabaseCredentials database; diff --git a/cellbase-core/src/main/resources/configuration.yml b/cellbase-core/src/main/resources/configuration.yml index bbeee761bb..409c66ba1e 100644 --- a/cellbase-core/src/main/resources/configuration.yml +++ b/cellbase-core/src/main/resources/configuration.yml @@ -62,7 +62,11 @@ download: url: host: ftp://ftp.ensemblgenomes.org/pub hgnc: - host: https://ftp.ebi.ac.uk/pub/databases/genenames/hgnc/archive/monthly/tsv/hgnc_complete_set_2022-01-01.txt + host: https://ftp.ebi.ac.uk/pub/databases/genenames/hgnc/archive/monthly/tsv/hgnc_complete_set_2023-11-01.txt + version: 2023-11-01 + cancerHotspot: + host: https://www.cancerhotspots.org/files/hotspots_v2.xls + version: "v2" refSeq: host: https://ftp.ncbi.nih.gov/refseq/H_sapiens/annotation/GRCh38_latest/refseq_identifiers/GRCh38_latest_genomic.gtf.gz refSeqFasta: @@ -73,12 +77,15 @@ download: host: https://ftp.ncbi.nih.gov/refseq/H_sapiens/annotation/GRCh38_latest/refseq_identifiers/GRCh38_latest_rna.fna.gz maneSelect: # host: https://ftp.ncbi.nlm.nih.gov/refseq/MANE/MANE_human/release_0.93/MANE.GRCh38.v0.93.summary.txt.gz - host: https://ftp.ncbi.nlm.nih.gov/refseq/MANE/MANE_human/release_1.0/MANE.GRCh38.v1.0.summary.txt.gz - version: 0.93 +# host: https://ftp.ncbi.nlm.nih.gov/refseq/MANE/MANE_human/release_1.0/MANE.GRCh38.v1.0.summary.txt.gz + host: https://ftp.ncbi.nlm.nih.gov/refseq/MANE/MANE_human/release_1.1/MANE.GRCh38.v1.1.summary.txt.gz + version: "1.1" lrg: host: http://ftp.ebi.ac.uk/pub/databases/lrgex/list_LRGs_transcripts_xrefs.txt + version: "2021-03-30" geneUniprotXref: host: http://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/idmapping/by_organism/ + version: "2023-11-08" geneExpressionAtlas: host: ftp://ftp.ebi.ac.uk/pub/databases/microarray/data/gxa/allgenes_updown_in_organism_part_2.0.14.tab.gz mirbase: @@ -88,33 +95,49 @@ download: targetScan: host: http://hgdownload.cse.ucsc.edu/goldenPath/ miRTarBase: - host: https://mirtarbase.cuhk.edu.cn/~miRTarBase/miRTarBase_2022/cache/download/8.0/hsa_MTI.xlsx + host: https://mirtarbase.cuhk.edu.cn/~miRTarBase/miRTarBase_2022/cache/download/9.0/hsa_MTI.xlsx + version: "9.0" + + ## Protein Data uniprot: - host: ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.xml.gz + host: https://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.xml.gz + version: "2023-11-08" uniprotRelNotes: - host: ftp://ftp.uniprot.org/pub/databases/uniprot/relnotes.txt - intact: - host: ftp://ftp.ebi.ac.uk/pub/databases/intact/current/psimitab/intact.txt + host: https://ftp.uniprot.org/pub/databases/uniprot/relnotes.txt + version: "2023-11-08" interpro: - host: ftp://ftp.ebi.ac.uk/pub/databases/interpro/current/protein2ipr.dat.gz + host: https://ftp.ebi.ac.uk/pub/databases/interpro/current_release/protein2ipr.dat.gz + version: "2023-11-08" interproRelNotes: - host: ftp://ftp.ebi.ac.uk/pub/databases/interpro/current/release_notes.txt + host: https://ftp.ebi.ac.uk/pub/databases/interpro/current_release/release_notes.txt + intact: + host: https://ftp.ebi.ac.uk/pub/databases/intact/current/psimitab/intact.txt + version: "2023-10-07" + + ## Conservation Scores conservation: host: https://hgdownload.cse.ucsc.edu/goldenPath/ + version: "2022-08-30" gerp: - host: http://ftp.ensembl.org/pub/release-104/compara/conservation_scores/90_mammals.gerp_conservation_score/gerp_conservation_scores.homo_sapiens.GRCh38.bw + host: http://ftp.ensembl.org/pub/release-110/compara/conservation_scores/91_mammals.gerp_conservation_score/gerp_conservation_scores.homo_sapiens.GRCh38.bw + version: "2023-05-17" clinvar: # host: https://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/ClinVarFullRelease_2021-07.xml.gz # host: https://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/ClinVarFullRelease_2022-02.xml.gz - host: https://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/ClinVarFullRelease_2022-11.xml.gz +# host: https://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/ClinVarFullRelease_2022-11.xml.gz + host: https://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/ClinVarFullRelease_2023-12.xml.gz + version: "2023-12-01" clinvarVariation: # host: https://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/clinvar_variation/ClinVarVariationRelease_2021-07.xml.gz # host: https://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/clinvar_variation/ClinVarVariationRelease_2022-02.xml.gz - host: https://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/clinvar_variation/ClinVarVariationRelease_2022-11.xml.gz +# host: https://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/clinvar_variation/ClinVarVariationRelease_2022-11.xml.gz + host: https://ftp.ncbi.nlm.nih.gov/pub/clinvar/xml/clinvar_variation/ClinVarVariationRelease_2023-12.xml.gz clinvarSummary: host: http://ftp.ncbi.nlm.nih.gov/pub/clinvar/tab_delimited/variant_summary.txt.gz + version: "2023-12-01" clinvarVariationAllele: host: http://ftp.ncbi.nlm.nih.gov/pub/clinvar/tab_delimited/variation_allele.txt.gz + version: "2023-12-01" clinvarEfoTerms: host: ftp://ftp.ebi.ac.uk/pub/databases/eva/ClinVar/2015/ClinVar_Traits_EFO_Names_260615.csv dbSNP: @@ -135,9 +158,12 @@ download: genomicSuperDups: host: http://hgdownload.cse.ucsc.edu/goldenPath gwasCatalog: - host: http://resources.opencb.org/opencb/cellbase/data/gwas/gwas_catalog_v1.0.2-associations_e106_r2022-05-17.tsv - version: "1.0.2 associations_e106_r2022-05-17" +# host: http://resources.opencb.org/opencb/cellbase/data/gwas/gwas_catalog_v1.0.2-associations_e106_r2022-05-17.tsv +# version: "1.0.2 associations_e106_r2022-05-17" + host: ftp://ftp.ebi.ac.uk/pub/databases/gwas/releases/2023/12/21/gwas-catalog-associations.tsv + version: "23-12-21" hpo: + ## Downlaod manually from here now: https://hpo.jax.org/app/data/annotations host: https://ci.monarchinitiative.org/view/hpo/job/hpo.annotations/lastSuccessfulBuild/artifact/rare-diseases/util/annotation/phenotype_to_genes.txt disgenet: host: https://www.disgenet.org/static/disgenet_ap1/files/downloads @@ -145,20 +171,30 @@ download: - all_gene_disease_associations.tsv.gz - readme.txt dgidb: - host: https://dgidb.org/data/monthly_tsvs/2021-Jan/interactions.tsv + host: https://old.dgidb.org/data/monthly_tsvs/2022-Feb/interactions.tsv + version: "2022-02-01" cadd: - host: https://krishna.gs.washington.edu/download/CADD/v1.6/GRCh38/whole_genome_SNVs.tsv.gz + ## Nacho: Move to https://krishna.gs.washington.edu/download/CADD/v1.7-pre/GRCh38/whole_genome_SNVs.tsv.gz ASAP! +# host: https://krishna.gs.washington.edu/download/CADD/v1.6/GRCh38/whole_genome_SNVs.tsv.gz + host: https://krishna.gs.washington.edu/download/CADD/v1.7-pre/GRCh38/whole_genome_SNVs.tsv.gz + version: "1.7-pre" reactome: host: http://www.reactome.org/download/current/biopax.zip gnomadConstraints: host: https://storage.googleapis.com/gcp-public-data--gnomad/release/2.1.1/constraint/gnomad.v2.1.1.lof_metrics.by_transcript.txt.bgz - version: 2.1.1 + version: "2.1.1" hpoObo: host: http://purl.obolibrary.org/obo/hp.obo + version: "2023-12-01" goObo: host: http://purl.obolibrary.org/obo/go/go-basic.obo + version: "2023-12-01" doidObo: host: http://purl.obolibrary.org/obo/doid.obo + version: "2023-12-01" + mondoObo: + host: http://purl.obolibrary.org/obo/mondo.obo + version: "2023-12-01" goAnnotation: host: http://geneontology.org/gene-associations/goa_human.gaf.gz revel: @@ -185,7 +221,7 @@ species: - id: hsapiens scientificName: Homo sapiens assemblies: - - ensemblVersion: '104_38' + - ensemblVersion: '110_38' name: GRCh38 - ensemblVersion: '82_37' name: GRCh37 diff --git a/cellbase-lib/pom.xml b/cellbase-lib/pom.xml index 780fc20043..9b4dd7fbe0 100644 --- a/cellbase-lib/pom.xml +++ b/cellbase-lib/pom.xml @@ -137,10 +137,10 @@ com.github.samtools htsjdk - + io.jsonwebtoken jjwt-api @@ -187,4 +187,22 @@ + + + + + src/test/resources + + configuration.test.yaml + + + + src/test/resources + + configuration.test.yaml + + true + + + diff --git a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/EtlCommons.java b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/EtlCommons.java index edf41c1e11..6330cb71a3 100644 --- a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/EtlCommons.java +++ b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/EtlCommons.java @@ -77,6 +77,7 @@ public class EtlCommons { public static final String HPO_FILE = "hp.obo"; public static final String GO_FILE = "go-basic.obo"; public static final String DOID_FILE = "doid.obo"; + public static final String MONDO_FILE = "mondo.obo"; public static final String PFM_DATA = "regulatory_pfm"; // Build specific data options diff --git a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/builders/GeneBuilder.java b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/builders/GeneBuilder.java index 563f76dea7..cd0863a259 100644 --- a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/builders/GeneBuilder.java +++ b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/builders/GeneBuilder.java @@ -90,8 +90,8 @@ public GeneBuilder(Path geneDirectoryPath, Path genomeSequenceFastaFile, Species boolean flexibleGTFParsing, CellBaseSerializer serializer) throws CellBaseException { this(null, geneDirectoryPath.resolve("description.txt"), geneDirectoryPath.resolve("xrefs.txt"), - geneDirectoryPath.resolve("hgnc_complete_set_2022-01-01.txt"), - geneDirectoryPath.resolve("MANE.GRCh38.v1.0.summary.txt.gz"), + geneDirectoryPath.resolve("hgnc_complete_set_2023-11-01.txt"), + geneDirectoryPath.resolve("MANE.GRCh38.v1.1.summary.txt.gz"), geneDirectoryPath.resolve("list_LRGs_transcripts_xrefs.txt"), geneDirectoryPath.resolve("idmapping_selected.tab.gz"), geneDirectoryPath.getParent().resolve("regulation/motif_features.gff.gz"), diff --git a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/builders/OntologyBuilder.java b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/builders/OntologyBuilder.java index 8873dd7f93..1eabf8975a 100644 --- a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/builders/OntologyBuilder.java +++ b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/builders/OntologyBuilder.java @@ -32,12 +32,14 @@ public class OntologyBuilder extends CellBaseBuilder { private Path hpoFile; private Path goFile; private Path doidFile; + private Path mondoFile; public OntologyBuilder(Path oboDirectoryPath, CellBaseSerializer serializer) { super(serializer); hpoFile = oboDirectoryPath.resolve(EtlCommons.HPO_FILE); goFile = oboDirectoryPath.resolve(EtlCommons.GO_FILE); doidFile = oboDirectoryPath.resolve(EtlCommons.DOID_FILE); + mondoFile = oboDirectoryPath.resolve(EtlCommons.MONDO_FILE); } @Override @@ -64,6 +66,13 @@ public void parse() throws Exception { serializer.serialize(term); } + bufferedReader = FileUtils.newBufferedReader(mondoFile); + terms = parser.parseOBO(bufferedReader, "Mondo Ontology"); + for (OntologyTerm term : terms) { + term.setSource("MONDO"); + serializer.serialize(term); + } + serializer.close(); } } diff --git a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/GeneDownloadManager.java b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/GeneDownloadManager.java index 9d2685eadf..260ff75427 100644 --- a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/GeneDownloadManager.java +++ b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/GeneDownloadManager.java @@ -82,6 +82,8 @@ public List download() throws IOException, InterruptedException { downloadFiles.addAll(downloadRefSeq(refseqFolder)); downloadFiles.add(downloadMane(geneFolder)); downloadFiles.add(downloadLrg(geneFolder)); + downloadFiles.add(downloadHgnc(geneFolder)); + downloadFiles.add(downloadCancerHotspot(geneFolder)); downloadFiles.add(downloadDrugData(geneFolder)); downloadFiles.addAll(downloadGeneUniprotXref(geneFolder)); downloadFiles.add(downloadGeneExpressionAtlas(geneFolder)); @@ -208,6 +210,30 @@ private DownloadFile downloadLrg(Path geneFolder) throws IOException, Interrupte return null; } + private DownloadFile downloadHgnc(Path geneFolder) throws IOException, InterruptedException { + if (speciesConfiguration.getScientificName().equals("Homo sapiens")) { + logger.info("Downloading HGNC ..."); + String url = configuration.getDownload().getHgnc().getHost(); + saveVersionData(EtlCommons.GENE_DATA, "HGNC_GENE", configuration.getDownload().getHgnc().getVersion(), + getTimeStamp(), Collections.singletonList(url), geneFolder.resolve("hgncVersion.json")); + String[] array = url.split("/"); + return downloadFile(url, geneFolder.resolve(array[array.length - 1]).toString()); + } + return null; + } + + private DownloadFile downloadCancerHotspot(Path geneFolder) throws IOException, InterruptedException { + if (speciesConfiguration.getScientificName().equals("Homo sapiens")) { + logger.info("Downloading Cancer Hotspot ..."); + String url = configuration.getDownload().getCancerHotspot().getHost(); + saveVersionData(EtlCommons.GENE_DATA, "CANCER_HOTSPOT", configuration.getDownload().getHgnc().getVersion(), + getTimeStamp(), Collections.singletonList(url), geneFolder.resolve("cancerHotspotVersion.json")); + String[] array = url.split("/"); + return downloadFile(url, geneFolder.resolve(array[array.length - 1]).toString()); + } + return null; + } + private DownloadFile downloadGO(Path geneFolder) throws IOException, InterruptedException { if (speciesConfiguration.getScientificName().equals("Homo sapiens")) { logger.info("Downloading go annotation..."); diff --git a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/GenomeDownloadManager.java b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/GenomeDownloadManager.java index 5a0609867f..0ba9f39db4 100644 --- a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/GenomeDownloadManager.java +++ b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/GenomeDownloadManager.java @@ -47,11 +47,11 @@ public GenomeDownloadManager(String species, String assembly, Path targetDirecto public List download() throws IOException, InterruptedException { List downloadFiles = new ArrayList<>(); downloadFiles.addAll(downloadReferenceGenome()); -// downloadFiles.addAll(downloadConservation()); -// downloadFiles.addAll(downloadRepeats()); + downloadFiles.addAll(downloadConservation()); + downloadFiles.addAll(downloadRepeats()); // cytobands - runGenomeInfo(); +// runGenomeInfo(); return downloadFiles; } @@ -115,16 +115,16 @@ public List downloadConservation() throws IOException, Interrupted List phastconsUrls = new ArrayList<>(chromosomes.length); List phyloPUrls = new ArrayList<>(chromosomes.length); for (String chromosome : chromosomes) { - String phastConsUrl = url + "/phastCons100way/hg38.100way.phastCons/chr" + chromosome - + ".phastCons100way.wigFix.gz"; + String phastConsUrl = url + "/phastCons470way/hg38.470way.phastCons/chr" + chromosome + + ".phastCons470way.wigFix.gz"; downloadFiles.add(downloadFile(phastConsUrl, conservationFolder.resolve("phastCons") - .resolve("chr" + chromosome + ".phastCons100way.wigFix.gz").toString())); + .resolve("chr" + chromosome + ".phastCons470way.wigFix.gz").toString())); phastconsUrls.add(phastConsUrl); - String phyloPUrl = url + "/phyloP100way/hg38.100way.phyloP100way/chr" + chromosome - + ".phyloP100way.wigFix.gz"; + String phyloPUrl = url + "/phyloP470way/hg38.470way.phyloP/chr" + chromosome + + ".phyloP470way.wigFix.gz"; downloadFiles.add(downloadFile(phyloPUrl, conservationFolder.resolve("phylop") - .resolve("chr" + chromosome + ".phyloP100way.wigFix.gz").toString())); + .resolve("chr" + chromosome + ".phyloP470way.wigFix.gz").toString())); phyloPUrls.add(phyloPUrl); } String gerpUrl = configuration.getDownload().getGerp().getHost(); diff --git a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/OntologyDownloadManager.java b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/OntologyDownloadManager.java index 0776354e80..522be7b27d 100644 --- a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/OntologyDownloadManager.java +++ b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/OntologyDownloadManager.java @@ -36,7 +36,7 @@ public OntologyDownloadManager(String species, String assembly, Path targetDirec public List download() throws IOException, InterruptedException { - logger.info("Downloading obo files ..."); + logger.info("Downloading OBO files ..."); List downloadFiles = new ArrayList<>(); Path oboFolder = downloadFolder.resolve("ontology"); @@ -44,22 +44,24 @@ public List download() throws IOException, InterruptedException { String url = configuration.getDownload().getHpoObo().getHost(); downloadFiles.add(downloadFile(url, oboFolder.resolve("hp.obo").toString())); - saveVersionData(EtlCommons.OBO_DATA, "HPO", getTimeStamp(), getTimeStamp(), Collections.singletonList(url), buildFolder.resolve(EtlCommons.HPO_VERSION_FILE)); url = configuration.getDownload().getGoObo().getHost(); downloadFiles.add(downloadFile(url, oboFolder.resolve("go-basic.obo").toString())); - saveVersionData(EtlCommons.OBO_DATA, "GO", getTimeStamp(), getTimeStamp(), Collections.singletonList(url), buildFolder.resolve(EtlCommons.GO_VERSION_FILE)); url = configuration.getDownload().getDoidObo().getHost(); downloadFiles.add(downloadFile(url, oboFolder.resolve("doid.obo").toString())); - saveVersionData(EtlCommons.OBO_DATA, "DO", getTimeStamp(), getTimeStamp(), Collections.singletonList(url), buildFolder.resolve(EtlCommons.DO_VERSION_FILE)); + url = configuration.getDownload().getMondoObo().getHost(); + downloadFiles.add(downloadFile(url, oboFolder.resolve("mondo.obo").toString())); + saveVersionData(EtlCommons.OBO_DATA, "MONDO", getTimeStamp(), getTimeStamp(), + Collections.singletonList(url), buildFolder.resolve(EtlCommons.DO_VERSION_FILE)); + return downloadFiles; } } diff --git a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/ProteinDownloadManager.java b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/ProteinDownloadManager.java index 08f28cfdad..5a722ed448 100644 --- a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/ProteinDownloadManager.java +++ b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/ProteinDownloadManager.java @@ -22,7 +22,6 @@ import org.opencb.commons.utils.FileUtils; import java.io.BufferedReader; -import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.nio.file.Files; @@ -34,6 +33,8 @@ public class ProteinDownloadManager extends AbstractDownloadManager { private static final String UNIPROT_NAME = "UniProt"; + private static final String INTERPRO_NAME = "InterPro"; + private static final String INTACT_NAME = "IntAct"; public ProteinDownloadManager(String species, String assembly, Path targetDirectory, CellBaseConfiguration configuration) throws IOException, CellBaseException { @@ -56,6 +57,7 @@ public List download() throws IOException, InterruptedException { Files.createDirectories(proteinFolder); List downloadFiles = new ArrayList<>(); + // Uniprot String url = configuration.getDownload().getUniprot().getHost(); downloadFiles.add(downloadFile(url, proteinFolder.resolve("uniprot_sprot.xml.gz").toString())); Files.createDirectories(proteinFolder.resolve("uniprot_chunks")); @@ -63,23 +65,25 @@ public List download() throws IOException, InterruptedException { String relNotesUrl = configuration.getDownload().getUniprotRelNotes().getHost(); downloadFiles.add(downloadFile(relNotesUrl, proteinFolder.resolve("uniprotRelnotes.txt").toString())); - saveVersionData(EtlCommons.PROTEIN_DATA, UNIPROT_NAME, getLine(proteinFolder.resolve("uniprotRelnotes.txt"), 1), getTimeStamp(), Collections.singletonList(url), proteinFolder.resolve("uniprotVersion.json")); - return downloadFiles; + // Interpro + String interproUrl = configuration.getDownload().getInterpro().getHost(); + downloadFiles.add(downloadFile(interproUrl, proteinFolder.resolve("protein2ipr.dat.gz").toString())); + + relNotesUrl = configuration.getDownload().getInterproRelNotes().getHost(); + downloadFiles.add(downloadFile(relNotesUrl, proteinFolder.resolve("interproRelnotes.txt").toString())); + saveVersionData(EtlCommons.PROTEIN_DATA, INTERPRO_NAME, getLine(proteinFolder.resolve("interproRelnotes.txt"), 5), + getTimeStamp(), Collections.singletonList(interproUrl), proteinFolder.resolve("interproVersion.json")); -// url = configuration.getDownload().getIntact().getHost(); -// downloadFile(url, proteinFolder.resolve("intact.txt").toString()); -// saveVersionData(EtlCommons.PROTEIN_DATA, INTACT_NAME, null, getTimeStamp(), Collections.singletonList(url), -// proteinFolder.resolve("intactVersion.json")); -// -// url = configuration.getDownload().getInterpro().getHost(); -// downloadFile(url, proteinFolder.resolve("protein2ipr.dat.gz").toString()); -// relNotesUrl = configuration.getDownload().getInterproRelNotes().getHost(); -// downloadFile(relNotesUrl, proteinFolder.resolve("interproRelnotes.txt").toString()); -// saveVersionData(EtlCommons.PROTEIN_DATA, INTERPRO_NAME, getLine(proteinFolder.resolve("interproRelnotes.txt"), 5), -// getTimeStamp(), Collections.singletonList(url), proteinFolder.resolve("interproVersion.json")); + // Intact + String intactUrl = configuration.getDownload().getIntact().getHost(); + downloadFiles.add(downloadFile(intactUrl, proteinFolder.resolve("intact.txt").toString())); + saveVersionData(EtlCommons.PROTEIN_DATA, INTACT_NAME, configuration.getDownload().getIntact().getVersion(), + getTimeStamp(), Collections.singletonList(intactUrl), proteinFolder.resolve("intactVersion.json")); + + return downloadFiles; } private void splitUniprot(Path uniprotFilePath, Path splitOutdirPath) throws IOException { @@ -96,7 +100,7 @@ private void splitUniprot(Path uniprotFilePath, Path splitOutdirPath) throws IOE inEntry = true; beforeEntry = false; if (count % 10000 == 0) { - pw = new PrintWriter(new FileOutputStream(splitOutdirPath.resolve("chunk_" + chunk + ".xml").toFile())); + pw = new PrintWriter(Files.newOutputStream(splitOutdirPath.resolve("chunk_" + chunk + ".xml").toFile().toPath())); pw.println(header.toString().trim()); } count++; diff --git a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/RegulationDownloadManager.java b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/RegulationDownloadManager.java index 1abb352fbe..51152e478d 100644 --- a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/RegulationDownloadManager.java +++ b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/download/RegulationDownloadManager.java @@ -64,8 +64,8 @@ public List download() throws IOException, InterruptedException, N List downloadFiles = new ArrayList<>(); downloadFiles.addAll(downloadRegulatoryaAndMotifFeatures()); - downloadFiles.add(downloadMirna()); downloadFiles.add(downloadMiRTarBase()); + downloadFiles.add(downloadMirna()); return downloadFiles; } diff --git a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/impl/core/MetaMongoDBAdaptor.java b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/impl/core/MetaMongoDBAdaptor.java index e5cd4d38cc..5d7dbc65d0 100644 --- a/cellbase-lib/src/main/java/org/opencb/cellbase/lib/impl/core/MetaMongoDBAdaptor.java +++ b/cellbase-lib/src/main/java/org/opencb/cellbase/lib/impl/core/MetaMongoDBAdaptor.java @@ -16,6 +16,8 @@ package org.opencb.cellbase.lib.impl.core; + +import com.fasterxml.jackson.databind.ObjectMapper; import com.mongodb.ReadPreference; import com.mongodb.WriteConcern; import com.mongodb.client.model.Filters; @@ -23,7 +25,6 @@ import org.bson.BsonDocument; import org.bson.Document; import org.bson.conversions.Bson; -import org.codehaus.jackson.map.ObjectMapper; import org.opencb.cellbase.core.api.key.ApiKeyStats; import org.opencb.cellbase.core.api.query.AbstractQuery; import org.opencb.cellbase.core.api.query.ProjectionQueryOptions; diff --git a/cellbase-lib/src/test/resources/configuration.test.yaml b/cellbase-lib/src/test/resources/configuration.test.yaml index 1322d2fa52..e1750e7b4b 100644 --- a/cellbase-lib/src/test/resources/configuration.test.yaml +++ b/cellbase-lib/src/test/resources/configuration.test.yaml @@ -7,24 +7,24 @@ maintainerContact: joaquin.tarraga@zettagenomics.com secretKey: "xPacig89igHSieEnveJEi4KCfdEslhmssC3vui1JJQGgDQ0y8v" databases: mongodb: - host: localhost:27017 - user: 'cellbase' - password: 'cellbase' + host: "${JUNIT.CELLBASE.DB.MONGODB.HOST}" + user: "${JUNIT.CELLBASE.DB.USER}" + password: "${JUNIT.CELLBASE.DB.PASSWORD}" options: - authenticationDatabase: 'admin' - authenticationMechanism: 'SCRAM-SHA-256' + authenticationDatabase: "${JUNIT.CELLBASE.DB.MONGODB.AUTHENTICATIONDATABASE}" + authenticationMechanism: "${JUNIT.CELLBASE.DB.MONGODB.AUTHENTICATION_MECHANISM}" readPreference: '' replicaSet: '' connectionsPerHost: 20 neo4j: hsapiens: - host: "${CELLBASE.DB.NEO4J.HOST}" - user: "${CELLBASE.DB.USER}" - password: "${CELLBASE.DB.PASSWORD}" + host: "${JUNIT.CELLBASE.DB.NEO4J.HOST}" + user: "${JUNIT.CELLBASE.DB.USER}" + password: "${JUNIT.CELLBASE.DB.PASSWORD}" mmusculus: - host: "${CELLBASE.DB.NEO4J.HOST}" - user: "${CELLBASE.DB.USER}" - password: "${CELLBASE.DB.PASSWORD}" + host: "${JUNIT.CELLBASE.DB.NEO4J.HOST}" + user: "${JUNIT.CELLBASE.DB.USER}" + password: "${JUNIT.CELLBASE.DB.PASSWORD}" defaultOutdir: "/tmp" download: ensembl: @@ -32,7 +32,7 @@ download: host: ensembldb.ensembl.org:3306 user: anonymous password: '' - libs: "${CELLBASE.ENSEMBL.LIBS}" + libs: "${JUNIT.CELLBASE.ENSEMBL.LIBS}" url: host: ftp://ftp.ensembl.org/pub ensemblGenomes: @@ -40,7 +40,7 @@ download: host: mysql-eg-publicsql.ebi.ac.uk:4157 user: anonymous password: '' - libs: "${CELLBASE.ENSEMBL.LIBS}" + libs: "${JUNIT.CELLBASE.ENSEMBL.LIBS}" url: host: ftp://ftp.ensemblgenomes.org/pub geneUniprotXref: diff --git a/pom.xml b/pom.xml index 8454cea683..7d22cff469 100644 --- a/pom.xml +++ b/pom.xml @@ -23,18 +23,21 @@ ${project.version} - 4.12.0 - 2.12.2 + 5.3.0-SNAPSHOT + 3.3.0-SNAPSHOT + 0.1.0 - 2.11.4 - 1.9.13 + 9.4.51.v20230217 + + 2.14.3 + 3.14.0 + 1.7.36 + 2.30.1 - 1.7.32 2.17.2 1.5.2 5.5.2 0.8.8 - 9.4.17.v20190418 0.11.5 1.6.5 3.1.0 @@ -50,7 +53,6 @@ 1.48.0 2.4 2.4 - 3.12.0 2.1.6 4.4 1.69 @@ -412,11 +414,11 @@ swagger-annotations ${swagger-annotations.version} - + io.jsonwebtoken jjwt-jackson @@ -614,6 +616,15 @@ secondaryPreferred 9090 + + + localhost:27017 + cellbase + cellbase + admin + SCRAM-SHA-256