From 0636a0103aeedc1081ea9f2c526f2bede6905c72 Mon Sep 17 00:00:00 2001 From: Vincent Janvid Date: Fri, 24 Jul 2026 11:09:44 +0200 Subject: [PATCH 1/3] Remove outdated information --- .dockerignore | 1 - .github/PULL_REQUEST_TEMPLATE.md | 38 - CHANGELOG.md | 1821 -------------------- CONTRIBUTING.md | 429 ----- README.md | 4 - SUMMARY.md | 10 - documentation/README.md | 283 --- documentation/commands/README.md | 451 ----- documentation/commands/analysis.md | 26 - documentation/images/workflow-overview.png | Bin 157316 -> 0 bytes documentation/orderportal/README.md | 6 - documentation/server_info.md | 13 - documentation/workflow/README.md | 11 - documentation/workflow/analyses.md | 61 - documentation/workflow/queues.md | 62 - documentation/workflow/uploads.md | 22 - 16 files changed, 3238 deletions(-) delete mode 100644 CHANGELOG.md delete mode 100644 CONTRIBUTING.md delete mode 100644 SUMMARY.md delete mode 100644 documentation/README.md delete mode 100644 documentation/commands/README.md delete mode 100644 documentation/commands/analysis.md delete mode 100644 documentation/images/workflow-overview.png delete mode 100644 documentation/orderportal/README.md delete mode 100644 documentation/server_info.md delete mode 100644 documentation/workflow/README.md delete mode 100644 documentation/workflow/analyses.md delete mode 100644 documentation/workflow/queues.md delete mode 100644 documentation/workflow/uploads.md diff --git a/.dockerignore b/.dockerignore index d01bfab0360..fa2c130599f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,5 +11,4 @@ cg.egg-info .gitlint.yaml .pre-commit-config.yaml DEPLOYMENT.md -CONTRIBUTING.md Dockerfile \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 52df1a0c060..d6c80191b27 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,41 +11,3 @@ ### Fixed - - - -### How to prepare for test - -- [ ] Ssh to relevant server (depending on type of change) -- [ ] Use stage: `us` -- [ ] Paxa the environment: `paxa` -- [ ] Install on stage (example for Hasta): - ```shell - bash /home/proj/production/servers/resources/hasta.scilifelab.se/update-tool-stage.sh -e S_cg -t cg -b [THIS-BRANCH-NAME] -a - ``` - -### How to test - -- [ ] Do ... - -### Expected test outcome - -- [ ] Check that ... -- [ ] Take a screenshot and attach or copy/paste the output. - -## Review - -- [ ] Tests executed by -- [ ] "Merge and deploy" approved by -Thanks for filling in who performed the code review and the test! - -### This [version](https://semver.org/) is a - -- [ ] **MAJOR** - when you make incompatible API changes -- [ ] **MINOR** - when you add functionality in a backwards compatible manner -- [ ] **PATCH** - when you make backwards compatible bug fixes or documentation/instructions - -## Implementation Plan - -- [ ] Document in ... -- [ ] Deploy this branch on ... -- [ ] Inform to ... diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 761f25ac740..00000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,1821 +0,0 @@ -# Change Log -All notable changes to this project will be documented in this file. -This project adheres to [Semantic Versioning](http://semver.org/). - -About changelog [here](https://keepachangelog.com/en/1.0.0/) - - - -## [x.x.x] -### Added -### Changed -### Fixed -- Stop removing trailing newlines from export managed variants and panels - -## [22.26.0] -### Added -- Added median target coverage to mip:s pydantic model -- Added step to mips metric deliverables model - -## [22.25.4] -### Fixed -- cg transfer pool: skip samples without pool name - -## [22.25.3] -### Fixed -- Show warnings when priorities differ on a case in an order - -## [22.25.2] -### Fixed -- RML priority on pool-case - -## [22.25.1] -### Fixed -- Database migration order - -## [22.25.0] -### Added -- Support Orderform 1508:25, replaces Orderform 1541:6 -- New Balsamic delivery types - - fastq-qc + analysis + cram - - fastq-qc + analysis + cram + Scout - -## [22.24.1] -### Fixed -- Handle empty values for synopsis in excel orders - -## [22.23.2] -### Fixed -- Add proxy-protocol to dockerfile - -## [22.23.1] -### Fixed -- Synopsis from old and new samples are combined - -## [22.22.1] -### Added -- Added required ENV declarations in dockerfile -- pyyaml dependency required to run app in container - -## [22.22.0] -### Added -- Fluffy samplesheet add control field - -## [22.21.1] -### Fixed -- Balsamic delivery report exception text - -## [22.21.0] -### Added -- Mark a NIPT/Fluffy sample as control - -## [22.20.1] -### Fixed -- Accept synopsis both as list and as string in ordering json - -## [22.20.0] -### Fixed -- Compatability of fluffy and new headers in dragen samplesheets - -## [22.20.1] -### Added -- Case opencow and stillant to MIP validation cases - -## [22.19.7] -### Added -- New fields, subject_id, phenotype_groups in clinical samples json orders for Scout - -## [22.19.5] -### Fixed -- improve avatar search - -## [22.19.4] -### Fixed -- include dragen samplesheet in HK - -## [22.19.3] -### Added -* Action to clean up workflow artifact cache - -## [22.19.2] -### Fixed -- error in post demux process - -## [22.19.1] -### Fixed -- demultiplexed runs project checks - -## [22.19.0] -### Added -- Novaseq Dragen Demultiplexing - -## [22.18.0] -### Added -- Display number of samples in order ticket - -## [22.17.2] -### Changed -- Raised sbatch memory parameter for demultiplexing - -## [22.17.1] -### Fixed -- Delivery type also works for one type - -## [22.17.0] -### Added -- Added support for multiple delivery flags for the command cg deliver analysis. - -## [22.16.0] -### Added -- Function for downloading external data from caesar - -## [22.15.0] -### Changed -- Methods in mutant config to AM doc number - -## [22.14.0] -### Changed - -- Removed balsamic bam and bam index files from cg deliver analysis command - -## [22.13.0] - -### Added - -- MIP command to start after a given step - -## [22.12.0] - -### Added -- Add new model for qc_metrics -- Add new model for mip_analysis - -### Changed -- Use new metrics deliverables format, which is already part of qc_metrics file -- Use new models when parsing mip analysis files - -## [22.11.3] -### Fixed -- Show more errors from parsing orderforms - -## [22.11.2] -### Changed -- Update deployment instructions - -## [22.11.1] -### Changed -- Updated bump2version action to v3 -- Removed build container action (for time being) since we never use the containers - -## [22.11.0] -### Fixed -- New families can be created without the --panel flag - -## [22.10.3] -### Changed -- Increased flowcells ondisk cap - - -## [22.10.2] -### Fixed -- Fixed mean Q score added to cgstats by `cg demultiplex add ` being off by a factor of -100. - -## [22.10.1] -### Fixed -- Integrate with bump2version-ci workflow - -## [22.10.0] -### Fixed -- Changed how qos for rsync is handled - - -## [22.9.4] -### Fixed -- Cases removed from FOHM batch properly - -## [22.9.3] -### Changed -- Remove KS validation cases from upload to GISAID/FOHM - - -## [22.9.2] -### Added -- Added UMI validation cases to skip spring compress - -## [22.9.1] -### Fixed -- Send multiple emails properly -### Added -- Progress bar when uploading to FOHM - -## [22.9.0] -### Added -- Samples that lack data during delivery is reported - - -## [22.8.6] -### Fixed -- Statina load use latest file - -## [22.8.5] -### Fixed -- Sftp upload before sending email to FOHM - -## [22.8.4] -### Fixed -- Tooltips for fohm upload functions - - -## [22.8.3] -### Added -- Data delivery export to LIMS - -## [22.8.2] -### Fixed -- Fail graceful if Avatar url lookup fails - -## [22.8.1] -### Changed -- Upload gisaid uses once again single fasta -- Upload gisaid uses pandas -- Upload gisaid uploads only qc pass files - -## [22.8.0] -### Added -- Added support for FOHM batch upload - - - -## [22.7.0] -### Added -- email functionality - -### Changed -- gisaid upload command: gisaid cli log file will be saved in housekeeper with tag gisaid-log -- gisaid upload command: the log file will be appended to if the upload is run again for the same case. -- gisaid upload command: Accession numbers will be parsed from the log file -- gisaid upload command: The completion file which already exists in housekeeper will be updated with accession numbers -- gisaid upload command: If files are missing or not all samples within the case were uploaded to gisiad, an email will be sent to logwatch. - -## [22.6.1] -### Changed -- Add deepvariant for input file in upload to loqusDB - -## [22.6.0] -### Added -- Added rsync processes into trailblazer -- Added cleanup of rsync directories - -## [22.5.2] -### Fixed -- mip check if analysis is complete - - -## [22.5.1] -### Fixed -- Avatar name lookup problem - -## [22.5.0] -### Added -- Avatars for cases - -## [22.4.1] -### Fixed -- Statina upload api call to raise error when server response is not ok - -## [22.4.0] -### Fixed -- cg will no longer run rsync on the gpu nodes - -## [22.3.1] -### Fixed -- Fixed statina load bug where missing headers prevented data from being read - -## [22.3.0] -### Added -- Add a command to upload both to Statina and ftp -- Adds a command to run the first command for all available cases - -## [22.2.2] -### Changed -- Header in indexreport to versal letters - -## [22.2.1] -### Added -- Add more files to the mip-rna delivery - -## [22.2.0] -### Added -- Add cg clean fluffy_past_run_dirs command - -## [22.1.3] -### Fixed -- Remove dependency to archived pypi colorclass - -## [22.1.2] -### Changed -- Use slurm qos class and constants instead of hard coding priority options - -## [22.1.1] -### Fixed -- Check for case name uniqueness before storing order to avoid half stored orders - -## [22.1.0] -### Changed -- Rsync now run on slurm instead of the login node - -## [22.0.1] -### Added -- Added two more cases to BALSAMIC's validation -### Changed -- Divided VALIDATION_CASES into their own workflow lists to find them easier - -## [22.0.0] -### Added -- Adds store and store-available commands that use Hermes -- Add pydantic models for mip config and mip sample info -- Add constants for getting housekeeper MIP analysis tags - -### Changed -- Remove old MIP-DNA store command using cg internally -- Remove old unused fixtures - -## [21.12.0] -### Added -- cli for upload of data to Statina - -## [21.11.2] -### Fixed -- NIPT upload to sftp server - -## [21.11.1] -### Changed -- Clarified the code for automatic decompression - -## [21.11.0] -### Added -- Deliver, concatenate (if needed) and rsync in one command - -## [21.10.0] -### Added -- Support for showing demultiplexing in CiGRID - -## [21.9.3] -### Fixed -- bugfix - -## [21.9.2] -### Fixed -- gisaid -fixing bug accidentally inserted in the previous pr. - -## [21.9.1] -### Fixed -- gisaid get region and lab from sample udfs -- gisaid adjusting for new fasta consensus file in housekeeper -- gisaid removing failing tests - -### Changed -### Fixed - -## [21.12.0] -### Added -- Support for Orderform 1508:24 for Clinical Samples - -## [21.9.0] -### Added -- Add Fluffy analysis results -> ftp upload functionality for cust002 - -## [21.8.3] -### Changed -- Set memory allocation to 95G when demultiplexing on slurm - -## [21.8.2] -### Changed -- Add batch-ref flag to command string for fluffy analyses - -## [21.8.1] -### Changed -- Changed so that barcode report is written to the correct path - -## [21.8.0] -### Added -- Command `cg demultplex report` to generate barcode report for demuxed flowcells -### Changed -- Automatically generate barcode report when post processing demultiplexed flowcell - -## [21.7.2] -### Added -- Copy sample sheet to demuxed flowcell dir -- Create `copycomplete.txt` after demux post-processing is done - -## [21.7.1] -### Fixed -- Fixed bug when checking if flowcell projects has been renamed - -## [21.7.0] -### Added -- Added support for SARS-CoV-2 Orderform 2184.5 with fields for GISAID upload - -## [21.6.9] -### Changed -- Check if versions are larger than known version when determining reverse complement in demultiplexing - -## [21.6.8] -### Changed -- Validate that flowcell name is correct when demultiplexing - -## [21.6.7] -### Fixed -- Fixed linking sample files from case bundle - -## [21.6.6] -### Changed -- Check that logfile exists before doing demux post-processing - -## [21.6.5] -### Changed -- Check if Unaligned dir exists before doing demux post-processing -### Fixed -- Fix bugs in create sample sheet all command - -## [21.6.4] -### Fixed -- Fix so that delivery will not break if fastq bundle is missing when delivering results with ticket id - -## [21.6.3] -### Fixed -- Fix bug in sqlalchemy models - -## [21.6.2] -### Fixed -- If a boolean value is passed to `cg set sample -kv ` a boolean is passed to the db - -## [21.6.1] -### Fixed -- Fix bug in mip and balsamic crontab - -## [21.6.0] -### Added -- Functionality to do demultiplexing post processing from CG - -## [21.5.7] -### Fixed -- Set status to analyze when resolving decompression - -## [21.5.6] -### Fixed -- Use only the first item from region and lab code values in mutant workflow. - -## [21.5.5] -### Fixed -- Fix tag to deliver correct mutant result files to KS inbox - -## [21.5.4] -### Fixed -- Block orders unintentionally reusing case names - -## [21.5.3] -### Fixed -- Set correct fluffy analysis finish path - -## [21.5.2] -### Fixed -- Fixed content of fluffy samplesheet according to customer specification - -## [21.5.1] -### Fixed -- By default fetch related flowcell information using `cg get sample ` - -## [21.5.0] -### Added -- User field for allowing order portal login -### Changed -- Delivery/Invoicing/Primary Contacts are now relations from Customer to User in admin - -## [21.4.4] -### Fixed -- Propagate all samples to microsalt, even those without reads - -## [21.4.3] -### Fixed -- Display invoice contact on invoice - -## [21.4.2] -### Fixed -- Remove default option for mip-dna priority - -## [21.4.1] -### Changed -- Change how samples are fetched for cgstats select command -### Fixed -- Bug when fetching info with `cg demultiplex select`-command - -## [21.4.0] -### Added -- A column in customer-group admin view in to show customers in the group - -## [21.3.1] -### Fixed -- PDC backup destination server for 2500 flowcells - -## [21.3.0] -### Changed -- Remove dependency `cgstats` from requirements.txt and move used functionality into CG - -## [21.2.0] -### Added -- Functionality for the cgstats api in CG - -## [21.1.0] -### Added -Select analyses to be uploaded to vogue based on analysis completed date (before or after a date, of between two dates) -Add uploaded to vogue date to analysis table -Only select potential analyses to upload that have not been uploaded - -## [21.0.0] -### Changed -- Add support for balsamic 7.x.x -- Rework Balsamic server configurations - -### Fixed -- Upload to scout now possible for all analysis types through cg upload scout - -## [20.26.2] -### Added -- Added more DNA and RNA positive control cases to VALIDATION_CASES - -## [20.26.1] -### Fixed -- Workflow linking also links undetermined files when - -## [20.26.0] -### Changed -- Cases to analyze query checks if any samples in case are newer than latest analysis to start topups -- Microsalt config-case wont include samples that dont pass sequencing qc - -## [20.25.0] -### Changed -- Changes that customer contact persons are referred to as emails instead of users. This removes the need to add each contact as a user in the system and it becomes easier to manage the user list - -## [20.24.0] -### Added -- Show customers in user admin view - -## [20.23.0] -### Added -- gisaid uppload support via cli -- gisaid API - -## [20.22.0] -### Added -- Add command `cg get analysis` to view analysis information - -## [20.21.1] -### Fixed -- Fix subprocess wildcard issue in deliver rsync - -## [20.21.0] -### Added -- Added cg deliver rsync - -## [20.20.1] -### Fixed -- bug in cg clean scout-finished-cases - -## [20.20.0] - -## Added -- CLI command to deploy Loqusdb via shipping - -## [20.19.5] - -### Fixed -- fixed bug where CgError was raised with wrong arguments in AnalysisAPI - -## [20.19.4] - -### Fixed -- fixed bug that cgstats configs was saved as cg_stats in CGConfig - -## [20.19.3] - -### Fixed -- Update sequenced at timestamp of sample whenever sample has been sequenced and flowcell transferred - -## [20.19.2] - -### Fixed -- Bug when instantiating analysis api in upload - -## [20.19.1] -### Fixed -- Bug when fetching the api in mip workflow cli base - -## [20.19.0] - -### Changed -- use pydantic to control CLI context - -## [20.18.0] -### Added -- Trailblazer support for mutant/sars-cov-2 - -## [20.17.5] -### Fixed -- Bugfix allowing orders of single samples from existing families - -## [20.17.4] -### Added -- Added new covid prep method to lims constants - -## [20.17.3] -### Fixed -- Adds support to use original sample lims id in downsampled cases (affects balsamic) - -## [20.17.2] -### Fixed -- Fix duplicate Housekeeper session in scout upload - - -## [20.17.1] -### Changed -- Status of mutant cases is set to running before running analysis, and revoked if start fails. - This prevents users and cron jobs from starting the case which already started, given they check in statusDB first. - -## [20.17.0] -### Added - -- Deliver sarscov2 cli - -## [20.16.0] -### Added - -- Demultiplexing functionality to CG - -## [20.15.1] -### Fixed -- cg to rename mutant fastq files directly - -## [20.15.0] -### Added -- CLI methods for starting mutant - -## [20.14.2] -### Added -- Add RNA validation cases to blacklist, which defines cases to not compress fastq files for - -## [20.14.1] -### Fixed -- So that existing samples don't get added to lims again - -## [20.14.0] -### Added -- Possibility to associate more than one customer to each user - -## [20.13.0] -### Changed -- Update orderform 2184 to latest version 4 - -## [20.12.1] -### Fixed -- Fix skip MIP-DNA (for MAF) for tumours with wgs applications for fastq delivery - -## [20.12.0] -### Added -- Add support for fastq delivery - -## [20.11.0] -### Added -- functionality to upload synopsis, cohort and phenotype information to scout - -## [20.10.1] -### Fixed -- Mip start-available command - -## [20.10.0] -### Added -- Panel command to mip-rna analysis workflow -- Add genome build 38 as default for mip-rna when exporting gene panels from Scout -- Add genome build 37 as default for mip-dna when exporting gene panels from Scout -- Add genome build 37 as default when exporting gene panels from Scout - -### Changed -- Refactor start and start-available for mip - -## [20.9.12] -### Changed -- Use pydantic models for handling lims samples - - -## [20.9.11] -### Fixed -- Fix bug that that prevented wgs fastq samples from being genotyped - -## [20.9.10] -### Fixed -- Move synopsis and cohorts from sample to case in the database since that is how they are used - -## [20.9.9] -### Fixed -- Fixed bug in upload delivery report automation - -## [20.9.8] -### Fixed -- Fixed context in upload vogue - -## [20.9.7] -### Fixed -- Added missing pipeline option in database for SARS-CoV-2 on case in database - -## [20.9.6] -### Fixed -- Use `coverage_qc_report` instead of `delivery_report` when uploading balsamic cases to scout - -## [20.9.5] -### Fixed -- Balsamic crontab start-available auto-disables balsamic dry run - -## [20.9.4] -### Fixed -- Fix bug that pending path was not created - -## [20.9.3] -### Fixed -- Bug in automation of delivery report upload - -## [20.9.2] -### Fixed -- Bug when updating crunchy metadata files - -## [20.9.1] -### Fixed -- Bug preventing MicroSALT to start automatically - -## [20.9.0] -### Added -- SlurmAPI to handle all communication with slurm from cg - -## [20.8.1] -### Changed -- Deletes unused files .gitlint, housekeeper, status, status_db - -## [20.8.0] -### Added -- Support for creating delivery reports for analyses that are not the latest ones - -## [20.7.0] -### Added -- DIAB and NBS-M to master list - -### Fixed -- Alphabetical order of master list - -## [20.6.0] -### Changed -- Use cgmodels for crunchy metadata files - -## [20.5.4] -### Added -- Change ending of lintjob from .py to .yml (accidentaly changed in previous pr) - -## [20.5.3] -### Added -- Support for SARS-CoV-2 Orderform 2184:3 - -## [20.5.2] -### Changed -- Remove pipfile and pipfile.lock since they are not used - -## [20.5.1] -### Changed -- Removes linting gh actions job - -## [20.5.0] -### Added -- Add support for Microbial Orderform 1603:10 -- Add support for Metagenome Orderform 1605:09 - -## [20.4.0] -### Added -- Support for SARS-CoV-2 Orderform 2184:1 - -## [20.3.3] - -### Changed -- Set concentration and concentration sample to str in json orderform sample since this is expected in frontend - -## [20.3.2] -### Fixed -- Fixed cases_to_store for microbial workflow. -- Fixed process call for all workflows to not create a new process object - -## [20.3.1] -### Fixed -- HousekeeperAPI to reuse db connection from context instead of creating new one for each call - -## [20.3.0] -### Changed -- Refactored AnalysisAPI anf FastHandler classes into one class - -## [20.2.1] -### Fixed -- Fixed json orderform special cases - -## [20.2.0] -### Changed -- Use pydantic models to validate orderforms - -## [20.1.4] -### Added -- delivery_report handling from BALSAMIC case import to Scout config export - -## [20.1.3] -### Changed -- Genes are optional when exporting scout variants - -## [20.1.2] -### Changed -- Refactored and removed code from cg.store.utils in backwards compatible way - -## [20.1.1] -### Changed -- Updates issue template - -## [20.1.0] -### Fixed -- Fix automatic decompression to also work for mixed cases - -## [20.0.1] -### Changed -- Removed old unused scripts and scripts directory -- Moved crunchy query from store into CompressAPI - - -## [20.0.0] - -### Changed -- cg workflow mip-rna link command to take case as positional arg - -## [19.5.4] - -### Changed -- Refactor ticket handling from orders API - -## [19.5.3] -### Fixed -- Fix dry run flag when resolving decompression state - -## [19.5.2] -### Fixed -- fix container name when publishing branch builds on dockerhub - -## [19.5.1] - -### Fixed -- changelog - -## [19.5.0] - -### Added -- alembic functionality -### Changed -- destination server PDC retrieval novaseq flowcells thalamus -> hasta -### Fixed -- flowcell status after PDC retrieval ondisk -> retrieved - -## [19.4.0] - -### Added -- Support for storing cohorts, phenotype_terms and synopsis from order json - -## [19.3.2] -### Added -- Dockerhub build app container for release and pull requests -### Changed -- Changed CI actions that run on pull request on push to only run on pull request - -## [19.3.1] -### Added -- Dockerfile declaration for running the cg app. Dockerfile should not be used for the cli toolkit - -## [19.3.0] -### Added -- New options for balsamic report deliver to propagate delivery report data to Balsamic - - -## [19.2.0] -### Added -- Cases that decompression is started for will have the action set to "analyze" - -## [19.1.1] - -### Fixed -- Allow price update files for application-version import to have empty prices - - -## [19.1.1] -### Added -- Cases that decompression is started for will have the action set to "analyze" - -## [19.1.0] -### Added -- Cli command to deliver old balsamic analyses which were stored with old hk tags - -## [19.0.0] - -### Added -- Adds command to start decompression for spring compressed files if needed -### Changed -- Refactors MIP cli slightly to always expect a case id -- workflow start now called start-available -- Checking if flowcells are on disk moved to its own cli command - -## [18.12.0] - -### Added -- Add prep-category 'cov' for applications - -## [18.11.4] - -### Fixed -- Install package in gihub-jobs via pip==21.0.1 - -## [18.11.3] - -### Fixed -- Upgraded insecure cryptography dependency - -## [18.11.2] - -### Fixed -- Chromograph image tags back on track - -## [18.12.1] - -### Fixed -- Fix message in order ticket that says what type of project it is - -## [18.11.1] - -### Fixed - - Fix so that variants gets uploaded to scout for balsamic samples - - Fix so that upload breaks if balsamic case is WGS - -## [18.11.0] -- New Fluffy workflow for preparing, starting and storing of analyses - -## [18.10.2] - -### Fixed -- FLUFFY now have a validation schema and can be submitted in the Order Portal again -- Samples of pools are now marked not to be invoiced, only the pool is invoiced - -## [18.10.1] - -### Added -- Allow existing trio-samples to be re-run as single samples - -## [18.10.0] - -### Added -- Support for delivery type in the Order Portal - - -## [18.9.1] - -### Added -- cg upload vogue bioinfo-all uploads both BALSAMIC as well. - -## [18.9.0] - -### Added - -- Add functionality to upload balsamic analyses to scout - -## [18.8.0] - -### Added -- cg workflow microsalt upload-analysis-vogue [case_id] to upload the latest analysis from specific case -- cg workflow microsalt upload-latest-analyses-vogue to upload all latest analyses what haven't been uploaded - -## [18.7.2] - -### Changed - -- Skip deliver fastq files when delivering balsamic analysis - -## [18.7.1] - -### Fixed - -- clean_fastq command now also skips validation cases when cleaning fastq files - -## [18.7.0] - -### Added -- Added customer name in order tickets - -## [18.6.1] - -### Fixed - -- Fix bug with name clash for created case when submitting RML-orders via Orderportal - - -## [18.6.0] - - -### Added - -- Add command 'delete case' to remove case from the database -- Add command 'delete cases' to remove multiple cases from the database - -## [18.5.1] - -### Fixed - -- Fix bug with microsalt deliverables path where it only returns the path only if it exists. This caused errors in some cases when submitting to Trailblazer - -## [18.5.0] - -### Added -- Added MHT to gene panel master-list - -## [18.4.0] - -### Added - -- Added submission of microsalt cases for tracking in Trailblazer - -## [18.3.0] - -### Changed - -- cg workflow mip-dna --panel-bed and --dry-run options can be set when executing full workflow -- Changed logic for how case links are retrieved in order to support linking of very old cases -- Analysis not submitted to Trailblazer if executing MIP workflow in dry-run - -## [18.2] - -### Changed - -- Remove option to specify delivery path when delivering data - -### Fixed - -- Improved usage of `cg deliver analysis` command - -## [18.1.5] - -### Fixed - -- cg workflow mip-rna link command - -## [18.1.4] - -### Fixed - -- Better help text for microsalt cli commands - - -## [18.1.3] - -### Fixed - -- deliver filtered cnvkit file for balsamic - -## [18.1.2] - -### Fixed - -- cg workflow mip-rna config-case command - -## [18.1.1] - -### Fixed - -- Updates balsamic deliver tags to align with the ones specified in hermes - -## [18.1.0] - -### Added -- Customer in the ticket created for an order from the Orderportal - -## [18.0.0] - -### Added -- New commands for running cron jobs - -### Changed -- Changed cli commands for starting and storing microsalt workflows - -### Fixed -- Full Microsalt can now be executed through cg interface - -## [17.2.1] - -### Fixed - -- HermesApi added to context when running cg clean - -## [17.2.0] - -### Changed - -- Using HermesApi to save Balsamic deliverables in Housekeeper - -## [17.1.0] - -### Added - -- Added support for Balsamic-orderforms as json-file - -### Changed - -## [17.0.0] - -### Added -- Lims ID is sent to Balsamic during case config - -## [16.17.1] - -### Fixed -- Fixed exporting reduced mt_bam to scout config - -## 16.17.0 - -### Changed -- Update Scout config output for images from chromograph - -## 16.16.1 - -### Fixed - -- This PR fixes the problem handling wells in json orders without ":" as separator, e.g. A1 instead of A:1 - -## [16.16.0] - -### Changed - -- Use hermes for generating balsamic deliverables - -## 16.15.1 - -### Fixed -- The problem handling mip-json without specified data_analysis - -## [16.16.0] - -### Added - -- Validation models for excel files in `cg/store/api/import_func.py` - -### Fixed - -- Removes dependency on deprecated excel-parser `xlrd` - - -## 16.15.0 - -### Added -- cg deploy hermes - -## 16.14.0 - -### Added -- cg deploy fluffy - - -## 16.13.0 - -### Added - -- Stop on bad values for analysis (pipeline) when adding family through CLI - -## 16.12.1 - -### Fixed -- Save in Family and Analysis Admin views - -## 16.12.0 - -### Added - -- Added support for RML-orderforms as json-file - -## [16.11.1] - -### Fixed - -- Lock dependency for xlrd so that we can parse modern excel files - - -## 16.11.0 - -### Added -- cg set family [CASEID] now has the option --data-delivery - -## [16.10.4] - -### Fixed -- Bug when building tag definition for balsamic-analysis delivery - -## [16.10.3] - -### Fixed -- Use `--json` when exporting causative variants from scout - -## [16.10.2] - -### Fixed -- Use correct pipeline name when cleaning mip analysis dirs - -## [16.10.1] - -### Added - -- Adds new mip-dna tags to hk - -## [16.10.0] - -### Added - -- Adds new delivery type to balsamic-analysis - -## [16.9.0] - -### Added - -- column percent_reads_guaranteed to application table - -## [16.8.1] - -### Fixed - -- Bug in the interactions with Scout when cleaning Scout cases -- Bug in the interaction with scout in command export_causatives - -## [16.8.0] - -### Added - -- Adds adding samplesheet to HK flowcell bundle to cg transfer flowcell - -## [16.7.1] - -### Fixed - -- Mutacc looks for 'id' instead of '_id' in case export -- Convert 'other' to '0' for sex in case export - -## 16.7.0 - -### Added -- Show sample priorities in created ticket - -## [16.6.0] - -### Changed - -- Split generating config into its own command -- Delete old load config when running `cg upload scout --re-upload` - -## [16.5.0] - -### Added - -- Functionality to deploy scout with cg - -## [16.4.3] - -### Fixed - -- Bug that madeline output files where not uploaded to scout -- Bug when exporting panels with `cg workflow mip-dna panel` - -## [16.4.2] - -### Fixed - -- Bug that display_name was used instead of sample_name - -## [16.4.1] - -### Fixed - -- Change compression query to be both satisfactory syntax for flake and to be working on our version of sql server - -## [16.4.0] - -### Added -- Use Pydantic models to validate Scout input/output - -### Changed -- Decouples scout from CG - -## [16.3.4] - -### Fixed - -- Fixed documentation on Trailblazers purpose - -## [16.3.3] - -### Fixed - -- Fixed setting of priority in statusDB and LIMS for samples - -## [16.3.2] - -### Fixed - -- Fixed setting of apptag in LIMS for samples - -## [16.3.1] - -### Fixed - -- Fixed a bug in naming of "default_gene_panels" in Scout load config - - -## [16.3.0] - -### Changed -- Changed logic for which cases are to be compressed. Now compression will be run on all cases older then 60 days provided their fastq files have not been decompressed less than 21 days prior - - -## [16.2.0] - -### Changed - -- Use CLI to upload to Scout - -## [16.1.1] - -### Fixed -- Accreditation logotype only shown on new delivery reports for accredited analyses - - -## [16.1.0] - -### Changed -- Changed the way cg cleans cases. Now it only uses StatusDB and family status - -### Added -- Added one-time script to iterate over mip directories, and set cleaned_at timestamp on very old cases that were already cleaned - - -## [16.0.6] - -### Fixed -- 'cg upload auto --pipeline' to accept 'mip-dna' as pipeline - -## [16.0.5] - -### Fixed -- Trailblazer integration fixed - -## [16.0.4] - -### Fixed -- Case database entities (Family) can only have specific values for data_analysis -- Analysis database entities can only have specific values for pipeline -- Enum used for pipeline as arguments - -## [16.0.3] - -### Fixed -- Microbial config-case now correctly imports reference from customer provided reference - -## [16.0.2] - -### Added -- Added case intentmayfly to list of cases to except from SPRING compression - -## [16.0.1] - -### Added -- Updated PR template to include implementation plan - -## [16.0.0] - -### Added -- Deliver analysis based on case-id or ticket - -### Changed -- Deliver commands merged into new command `cg deliver analysis` - -## [15.0.4] -### Fixed -- fixed failing `cg microsalt store completed` cronjob - -## [15.0.3] -### Fixed -- Fixed path where microsalt deliverables files are located - -## [15.0.2] -### Fixed -- Wrap more cg workflow mip-dna store code in try-except in order to not cause future production blocks - -## [15.0.1] -### Fixed -- Fix bug in compress clean command - -## [15.0.0] - -### Added -- New command: cg store ticket -- New command: cg store flowcell -- New command: cg store case -- New command: cg store sample - -### Removed -- Old command: cg store fastq - -## [14.0.1] - -### Fixed -- Removed unused options form cg workflow balsamic base command - - -## [14.0.0] - -### Added -- New command: cg decompress ticket -- New command: cg decompress flowcell -- New command: cg decompress case -- New command: cg decompress sample - -### Removed -- Old command: cg compress decompress spring - -## [13.18.0] - - -### Changed -- Changed condition for which cases should be stored in CG. This fixes a bug where cg would try to store cases which already have been stored due to mismatch in timestamp stored in Trailblazer and Housekeeper - -## [13.17.2] - -### Changed -- Only fastq files older than three weeks will be compressed - - -## [13.17.1] - -### Added -- Added new value to lims constants -- Moved lims constants to a constants directory - - -## [13.17.0] - - -### Changed -- Workflow mip-dna store no longer needs analysisrunstatus to be completed to attempt storing bundle - - -## [13.16.2] - -### Fixed - -- Fixed bug where parse_mip_config() only returned values for primary analysis, breaking Upload Delivery Report - - -## [13.16.1] - -### Fixed - - - Fix bug where cg workflow mip store still relied on Trailblazer to find case_config.yaml (Where it can no longer be found) - - Fix bug where microsalt cli lost its store command in merge conflict - - -## [13.16.0] - -### Added -- New REST-based TrailblazerAPI -### Changed -- Trailblazer support for Balsamic -### Fixed -- Naming convention for API harmonized - - -## [13.15.0] - -### Added -- New query to get all cases in ticket - -## [13.14.3] - -### Changed - -- Refactors constants file - -## [13.14.2] - -### Fixed - - - Fixed bug where CalledProcessError class could not be represented as string, and broke workflows. - - Rephrased query used for compression. The query output is unchanged - - Fixed typo in query name - - -## [13.14.1] -### Removed -- Remove data_analysis from sample since it is deprecated - -## [13.14.0] -### Changed -- Move data_analysis from sample level to case level to enable samples to be analysed differently in different cases - -## [13.12.0] -### Added -- Store all available completed microbial analyses in HK - -## [13.11.0] - -### Changed -- Balsamic always skips mutect when application is WES -- SPRING compression is set to run on oldest families first - -### Fixed -- Format print statements - -## [13.10.2] - -### Fixed -- Storing chromograph, upd and rhocall files in housekeeper - -## [13.10.1] - -### Fixed -- Repaired automation query for storing Balsamic cases in Housekeeper - -## [13.10] - -### Added -- Functionality to deploy `genotype` with CG on hasta - -### Fixed -- Stored completed not parsing through all completed entries - -## [13.9] - -### Added -- Deployment command -- Functionality to deploy `shipping` with CG - - -## [13.8.0] -### Added -- Functionality to change multiple families in one go, e.g. cg set families --sample-identifier ticket_number 123456 --priority research - -## [13.7.0] -### Fixed -- Set flowcell status to `ondisk` when retrieving archived flowcell from PDC has finished. - -## [13.6.0] - -### Added -- Store microsalt analyses in Housekeeper with a provided deliverables file - -## [13.5.0] - -### Added -- Possibility to give case-id as argument when setting values on multiple samples by the CLI - - -## [13.4.1] - - -### Fixed -- Updated changelog with correct release version - - -## [13.4.0] - -### Removed -- Microbial order table -- Microbial order model -- Microbial sample table -- Microbial sample model -- Microbial Flowcell-sample table -- Microbial Flowcell-sample model - -### Changed -Show customer name instead of id in invoices view. -Made customer name searchable in invoices view. - -### Fixed -Made unidirectional links to Customer (instead of bi) to speed up customer view -Made unidirectional links to ApplicationVersion (instead of bi) to speed up view - -## [13.3.1] - -### Changed -- Exclude analysis older than hasta in production (2017-09-27) from delivery report generation - -## [13.3.0] - -### Added -- Added new cases to skip during compression - -## [13.2.0] - -### Changed -- Only talk to genotype via subprocess and CLI - - -## [13.1.0] - -### Changed -- Added cases for all microbial samples -- Add a case when a new microbial order is received - -## [13.0.0] - -### Changed -- Moved all microbial samples into samples table and the depending logic - -## [12.7.1] - -### Fixed - - Removed store-housekeeper one-time script that was used to store balsamic results in Housekeeper - -## [12.7.0] - -### Changed -- Moved queries in TrailblazerAPI to Trailblazer - -## [12.6.0] - -### Added -- Added support for MIP9 -- Adds support for MIP 9.0 files and tags in HK: - - telomerecat - - cyrius star-caller - - smncopynumber caller on case level - - tiddit_coverage bigwig track -- Adds smncopynumbercaller file to scout load config -### Changed -- Removed TB mip start source code from cg - -### Fixed -- Return when using mip-dry-run option so that the dry-run is not added to TB - -## [12.5.0] - -### Changed - -- Now ignores errors while cleaning old Balsamic data with cg clean - - -## [12.4.0] - -### Added -- Providing a name of panel bed file in MIP cli now overrides getting capture kit through LimsAPI during case config -### Changed -- Providing panel bed path or capture kit shortname in BALSAMIC cli now overrides getting capture kit through LimsAPI during case config -### Fixed -- Fix Balsamic automation functions to exit with 1 if any of the errors are raised while looping through cases - -## [12.3.6] - -### Fixed -- Fixes bug where scout_api was sent into the compression_api in cli/store. The compression_api does not have scout_as an argument. - - -## [12.3.5] - -### Added -- Added @Mropat as codeowner - -## [12.3.4] - -### Fixed -- Fixes bug where upload_started_at and uploaded_at timestamps were not being updated in StatusDB upon successful Scout upload. -This bug was happening because several instances of Store were instantiated in the same context - -## [12.3.3] - -### Fixed -- Fixes but where linking MIP trio samples only linked the first sample instead of the whole family (Introduced in recent PR) -- Fixes bug where linking by SampleID was not linking the entire family (Old) -- Fixes bug where linking by SampleID would not be able to generate correct linking path (Old) - -## [x.x.x] -### Added - -### Fixed - -### Changed - - -## [13.0.0] -### Changed -- Microbial Samples are now treated as ordinary samples in a case - -## [12.3.2] - -### Fixed - -- Upload delivery report should now only happen for mip analyses -- Re-use the same API within all upload context -- Handle unspecified exceptions in order to keep the cron running when unexpected exception occurs for one case -- When linking file without data analysis set, warn about it and link file correctly - -## [12.3.1] - -### Fixed - -- Fixed bug where AnalysisAPI in cg upload auto was not updated to recent class changes - -## [12.3.0] - -### Changed - -- Class ConfigHandler moved from Trailblazer codebase into CG codebase -- FastqHandler methods moved from Trailblazer to AnalysisAPI -- Merged MipAPI and AnalysisAPI for mip_rna and mip_dna into one meta-api class -- Adjusted tests to support the new architecture -- Removed (unused/deprecated)run method which was used to execute MIP through Trailblazer - -### Fixed - -- MIP workflow once again performs check to skip evaluation -- MIP workflow once again updates StatusDB about the case status - -## [12.2.0] - -### Changed - -- Merged methods cases_to_mip_analyze and cases_to_balsamic_analyze, now called cases_to_analyze for any pipeline. -- Made method cases_to_deliver pipeline aware -- Made method cases_to_store pipeline aware -- Made method cases_to_clean pipeline aware -- Added option to apply read count threshold for cases_to_analyze based on panel in ClinicalDB -- Updated MIP and BALSAMIC workflows to utilize the new methods -- Added tests for new methods in balsamic workflow -- Removed class FastqAPI. FastqAPI was only used by BALSAMIC, and contained one method. The method is now moved to FastqHandler class. - -## [12.1.6] -### Fixed -- Create crunchy pending path outside batch script - -## [12.1.5] -### Fixed -- support current orderform RML-1604:9 again - -## [12.1.4] -### Changed -- Use long description from setup.py on PyPI - -## [12.1.3] -### Fixed -- Use another parameter in build and publish - -## [12.1.2] -### Fixed -- Syntax in github action build and publish workflow - -## [12.1.2] -### Added -- Build and publish on pypi with github actions - -## [12] -### Added -- Create a meta-API (BalsamicAnalysisAPI) to handle communication between balsamic and other cg applications. The API will handle the following: - - Calling BalsamicAPI to execute balsamic commands - - Query Lims and StatusDB to decide what arguments to pass to Balsamic - - Read (new version of) deliverables report generated by Balsamic and store bundle in Housekeeper + StatusDB -- More info in https://github.com/Clinical-Genomics/cg/pull/687 - -### Changed -- Reduce number of options that can/should be passed to run the workflow. Most of the logic for determining the options will be handled by BalsamicAnalysisAPI. -- Every command now requires sample family name as argument. -- No longer support using sample_id to link files for sake of consistency. - -## [11] -### Changed -- Removes all interactions with the beacon software - -## [10.1.2] -### Fixed -- Fixed so that empty gzipped files are considered empty considering metadata - -## [10.1.1] -### Added -- Adds a CHANGELOG.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 97c07c0db42..00000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,429 +0,0 @@ -# Contributing to CG - -:+1::tada: First off, thanks for taking the time to contribute! :tada::+1: - -This is a guide for contributing to the CG package. Please check here first if -you want to [set up an environment and develop](#local-development), [open and issue](#reporting-bugs), -[suggest an enhancement](#suggesting-enhancements), [open a pull request](#pull-requests) etc. - -## Table Of Contents - -[Code of Conduct](#code-of-conduct) - -[Branch Model](#branch-model) - -[How Can I Contribute?](#how-can-i-contribute) - - [Reporting Bugs](#reporting-bugs) - - [Suggesting Enhancements](#suggesting-enhancements) - - [Your First Code Contribution](#your-first-code-contribution) - - [Pull Requests](#pull-requests) - -[Styleguides](#styleguides) - - [Git Commit Messages](#git-commit-messages) - - [Python style guide](#python-styleguide) - - [Documentation Styleguide](#documentation-styleguide) - -[CG Design decisions](#design-decisions) - - [apps](#apps) - - [CLI](#cli) - - [meta](#meta) - - [server](#sever) - - [store](#store) - - -## Code of Conduct - -Communicating around code can be a sensitive thing so please do your best to -keep a positive tone. Remember that people are putting significant amount of -work behind a PR or a review, stay humble :star: - - -## Branch Model - -CG is using github flow branching model as described in our [development manual](https://atlas.scilifelab.se/infrastructure/development/development_flow/). - - -## How Can I Contribute? - -### Reporting Bugs - -This section guides you through submitting a bug report to CG. Following these -guidelines helps other developers and contributors understand your report -:pencil: reproduce the behavior :computer: :computer: and find related issues -and reports :mag_right: - -Before creating bug reports, please try to search the issues (opened and -closed) if the problem has been described before, there might be no reason to -create one. When creating a bug report, please [include as many details as -possible](#how-do-i-submit-a-good-bug-report). - -> **Note:** If you find a **Closed** issue that seems like it is the same thing -> that you're experiencing, open a new issue and include a link to the original -> issue in the body of your new one. - -#### How Do I Submit A (Good) Bug Report? - -Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/). - -Explain the problem and include additional details to help maintainers -reproduce the problem: - -- **Use a clear and descriptive title** for the issue to identify the problem. -- **Describe the exact steps which reproduce the problem** in as many details - as possible. For example, start by explaining where CG was run and how it was - used, i.e. which command exactly you used in the terminal. -- **Provide specific examples to demonstrate the steps**. Include links to - files or case IDs, or copy/pasteable snippets, which you use in those - examples. If you're providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). -- **Describe the behavior you observed after following the steps** and point - out what exactly is the problem with that behavior. -- **Explain which behavior you expected to see instead and why.** - -Provide more context by answering these questions: - -- **Can you reproduce the problem**? -- **Did the problem start happening recently** (e.g. after updating to a new - version of CG) or was this always a problem? -- If the problem started happening recently, **can you reproduce the problem in - an older version of CG?** What's the most recent version in which the problem - doesn't happen? You can test and run older versions of CG in the stage - environments by using the `update-cg-stage.sh` script. - -Include details about your configuration and environment: - -- **Which version of CG are you using?** You can get the exact version by - running `cg --version` in your terminal. -- **What's the name of the environment you're using**? - -### Suggesting Enhancements - -This section guides you through submitting an enhancement suggestion for CG, -including completely new features and minor improvements to existing -functionality. Following these guidelines helps maintainers and the community -understand your suggestion :pencil: and find related suggestions :mag_right: - -#### How Do I Submit A (Good) Enhancement Suggestion? - -Enhancement suggestions are tracked as [GitHub issues](https://guides.github.com/features/issues/). -To suggest an enhancement create an issue on that repository and provide the -following information: - -* **Use a clear and descriptive title** for the issue to identify the - suggestion. -* **Provide a step-by-step description of the suggested enhancement** in as - many details as possible. -* **Provide specific examples to demonstrate the steps**. Include - copy/pasteable snippets which you use in those examples, as [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). -* **Describe the current behavior** and **explain which behavior you expected - to see instead** and why. -* **Explain why this enhancement would be useful** - -#### Local Development - -**NEVER USE PREINSTALLED PYTHON** - -First of all, make sure that you are managing your python versions that are -used on your machine, [never use the OS native python](https://docs.python-guide.org/starting/installation/). -Suggested ways to handle python version are either through -[homebrew](https://brew.sh/#install)(OSX), [pyenv](https://github.com/pyenv/pyenv) or [conda](https://docs.anaconda.com/anaconda/install/). - -For local development, it is recommended to use Poetry. Ensure that you have -Poetry installed and run -```bash -poetry install -``` - -On our servers where the production and stage versions of CG are run the -packages are maintained by using conda environments. For local development it -is suggested to follow the [python packaging guidelines](https://packaging.python.org/tutorials/managing-dependencies/) -where it is suggested to manage your local python environment with -[poetry](https://python-poetry.org/). - -### Pull Requests - -The process described here has several goals: - -- Maintain CG's quality -- Engage the developers in working toward the best possible CG -- Enable a sustainable system for CG's maintainers to review contributions - -Please follow these steps to have your contribution considered by the maintainers: - -1. Follow all instructions in [the template](.github/PULL_REQUEST_TEMPLATE.md) -2. Follow the [styleguides](#styleguides) -3. After you submit your pull request, verify that all [status checks](https://help.github.com/articles/about-status-checks/) - are passing
What if the status checks are - failing?If a status check is failing, and you believe that the - failure is unrelated to your change, please leave a comment on the pull - request explaining why you believe the failure is unrelated. A maintainer - will re-run the status check for you.
-4. Update CHANGELOG.md with relevant information - -While the prerequisites above must be satisfied prior to having your pull -request reviewed, the reviewer(s) may ask you to complete additional design -work, tests, or other changes before your pull request can be ultimately -accepted. - -## Styleguides - -### Git Commit Messages - -- Use the present tense ("Add feature" not "Added feature") -- Limit the first line to 72 characters or less -- Reference issues and pull requests liberally after the first line - -### Python styleguide - -We use black to format all files, this is done automatically with each push on -GitHub so don't forget to update your local branch with `git pull` after -pushing to the origin. More details are described in the general [development manual](https://atlas.scilifelab.se/infrastructure/development/). - -## Design decisions - -This package is a little special. Essentially it should include all the -"Clinical"-specific code that has to be integrated across multiple tools such -as LIMS, Trailblazer, Scout etc. However, we still aim to structure it in such -a way as to make maintainance as smooth as possible! - -### Apps - -This part of the package contains connectors to the various tools that we -integrate with. An app interface can be a wrapper for an external tool like -Trailblazer (`tb`) or be implemented completely in `cg` like `lims`. It's very -important that the code stays confined to each individual tool. The Housekeeper -connector _cannot_ directly talk to Trailblazer for example - such -communication has to go through a `meta` module. - -We also try to group all app-related imports and functionality in these -interfaces. You shouldn't import e.g. a function from Scout from any other -place than its app interface. This way, it's easier to overview if an update to -an external package will affect the rest of the system. - -#### Coverage - -Interface to [Chanjo](https://clinical-genomics.github.io/chanjo/). -It is used to load coverage information from Sambamba output. - -#### Invoice - -Internal app for working with invoices of groups of samples or pools. - -#### Lims - -Internal app for interfacing with the Clarity LIMS API. We use the `genologics` -Python API as much as possible. Some actions are not supported, however, and -then we fall back to using the official XML-based REST API directly. - -We convert all the info that we get from LIMS/`genologics` to dictionaries -before passing it along to other tools. We don't pass around objects that have -some implicit connection to update things in LIMS - such actions needs to go -through the `lims` app interface _explicitly_. - -#### Trailblazer (tb) - -Interface to Trailblazer. - -- Monitor analysis workflow status - -#### Housekeeper (hk) - -Interface to Housekeeper. For storing files from analysis runs and FASTQ files -from demultiplexing. - -#### Loqus - -Interface to LoqusDB. For loading observation counts from the analysis output. - -#### Osticket - -Internal app for opening tickets in SupportSystems. We use this mainly to link -a ticket with the opening of an order for new samples/analyses. - -#### Scout (scoutapi) - -Interface to Scout. For uploading analysis results to Scout. It's also used to -access the generation of gene panels files used in the analysis workflow. - -#### Delivery report - -Module to generate Delivery Reports. This module is designed to convey the -results of genetic analysis to the customer. It includes information on sample -characteristics, laboratory preparation, sequencing attributes, as well as data -analysis performance and limitations. - - -### Cli - -The command line code is written in the [Click](https://click.palletsprojects.com) framework. - -#### Add - -This set of commands let's you quite easily _add things to the status -database_. For example when a new customer is signed you could run: - -```bash -cg add customer cust101 "Massachusetts Institute of Technology" -``` - -You can also accomplish simliar tasks through the admin interface of the REST server. - -#### Transfer - -##### Lims - -Includes: `status`, `lims` - -Some info if primarily stored in LIMS and needs to be syncronized over to -`status`. This is the case for both the date when a samples was received and -when it was finally delivered. This interface is intended to run continuously -as part of a crontab job. - -```bash -cg transfer lims --status received -``` - -And similarly for filling in the delivery date: - - -```bash -cg transfer lims --status delivered -``` - -##### Flowcell - -Includes: `stats`, `hk`, `status` - -The API accepts the name of a flow cell which will be looked up in `stats`. For -all samples on the flow cell it will: - -1. Check if the quality (Q30) is good enough to include the sequencing results -2. update the number of reads that the sample has been sequenced _overall_ and - match this with the requirement given by the application. -3. accordingly, the interface will look up FASTQ files and store them using `hk`. -4. if a sample has sufficient number of reads, the `sequenced_at` date will be - filled in (`status`) according to the sequencing date of the most recent - flowcell. - - - - -### Meta - -This is the interface that bridge various apps. An example is the "orders" -module. When placing orders we need to coordinate information/actions between -the apps: `lims`, `status`, and `osticket`. It also provides some additional -functionality such as setting up the basis for the orders API and which fields -are required for different order types. - -#### Orders - -Includes: `lims`, `status`, `osticket` - -The API exposes a single endpoint for submitting a batch of new -samples/external samples for analysis. It handles a mix of updates to existing -samples with entierly new ones. The API is designed to work well in a REST API -context. - -The interface supports: - -- samples for sequencing + analysis (**scout**) -- samples for sequencing only (**fastq**) -- sequencing of ready-made libraries (**rml**) -- analysis of externally sequenced samples (**external**) -- sequencing and analysis of microbial whole genomes (**microbial**) - -It opens a ticket using the `osticket` API for each order which it links with -the ticket number. It stores information in both LIMS and `status` for samples -and pools linked by LIMS id. It stores only a minimum of information about each -sample in LIMS. Most of the critial information is stored in `status` and this -is also the primary place to go if we need to update e.g. application tag for a -sample. - - -#### Upload - -##### Coverage - -Includes: `status`, `hk`, `coverage` - -The API will fetch information about an analysis like name and case ID and -related samples from `status`. It will get the Sambamba output from `hk` and -use the `coverage` app interface to upload the data to Chanjo for each -individual sample. - -##### Observations - -Includes: `status`, `hk`, `loqus` - -Given an analysis record, it will fetch required files from `hk` and upload the -variants to the observation cound database using `loqus`. This only works for -cases with at least one affected individual. - -##### Scoutapi - -Includes: `status`, `hk`, `scoutapi` - -Given the analysis record it will generate a Scout config file using -information from `status`. It will use the "meta/analysis" API to convert the -default panels for the family to the corresponding set of panels used to run -the analysis. It will fetch all related VCF files and others from `hk`. Finally -it will use the config to upload the resuls to Scout. The `scoutapi` interface -will figure out if there's an existing analysis that needs to be replaced. - -#### Invoice - -Includes: `status`, `lims` - -The creation of an invoice is initiated in LIMS. You then use the process ID to -parse out which samples should be part of the invoice. This process is setup to -be run when a button is clicked in LIMS but can be run externally from any -server with access to LIMS. - -The invoice itself will be stored in an intermediate state in `status` while -links will be created in LIMS to be able to keep track of which samples was -part of which invoice. - -### Server - -The REST API server handles a number of actions. It's written in [Flask](https://flask.palletsprojects.com/) -and exposes an admin interface for quickly editing information in the backend -MySQL database. The admin interface is served under a hidden route but the plan -is to move it to Google OAuth. - -The API is protected by JSON Web Tokens generated by Google OAuth. It -authorizes access using the user table in the database. - -#### Order endpoint - -The `/order/` endpoint accepts orders for new samples. If you supply a -JSON document on the expected format, a new order is opened in `status` and -LIMS. - -### Store - -This really is the `status` app more or less. It's the interface to the central -database that keeps track of samples and it which state they are currently in. -All records that enters the database go through this API. Simple updates to -properies on records are handled directly on the model instances followed by a -manual commit. - -### Misc. - -There's one file for storing all constants like how priority levels are -translated between the database representation and the human readable -equivalent. - -Another module `/exc.py` contains the custom Exception classes that are used -across the package. - -- [trailblazer](https://github.com/Clinical-Genomics/trailblazer) -- [trailblazer-ui](https://trailblazer.scilifelab.se/) -- [housekeeper](https://github.com/Clinical-Genomics/housekeeper) -- [chanjo](https://github.com/Clinical-Genomics/chanjo) -- [scout](https://github.com/Clinical-Genomics/scout) -- [mip](https://github.com/Clinical-Genomics/mip) -- [scilifelab](https://www.scilifelab.se/) -- [flask](https://flask.palletsprojects.com/) -- [click](https://click.palletsprojects.com/) -- [cgweb](https://github.com/Clinical-Genomics/cgweb) -- [servers](https://github.com/Clinical-Genomics/servers) diff --git a/README.md b/README.md index 31019a296f2..bd4cfa8ad76 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,6 @@ In this context, `cg` provides the interface between these tools to facilitate a - HTTP REST for powering the web portal: [clinical.scilifelab.se][portal] - CLI for interactions on the command line. -### Contributing - -Please check out our [guide for contributing to cg](CONTRIBUTING.md) - ## Installation Cg written in Python 3.9+ and is available on the [Python Package Index][pypi] (PyPI). diff --git a/SUMMARY.md b/SUMMARY.md deleted file mode 100644 index 3c9e3982365..00000000000 --- a/SUMMARY.md +++ /dev/null @@ -1,10 +0,0 @@ -# Summary - -* [Introduction](README.md) -* [Documentation](documentation/README.md) -* [Commands](documentation/commands/README.md) - * [Analysis](documentation/commands/analysis.md) -* [Workflows](documentation/workflow/README.md) - * [Analyses](documentation/workflow/analyses.md) - * [Queues](documentation/workflow/queues.md) - * [Uploads](documentation/workflow/uploads.md) diff --git a/documentation/README.md b/documentation/README.md deleted file mode 100644 index 073c341d5d7..00000000000 --- a/documentation/README.md +++ /dev/null @@ -1,283 +0,0 @@ -# cg - -`cg` stands for _Clinical Genomics_; a clinical sequencing platform under [SciLifeLab][scilife]. - -This is our main package for interacting with data and samples that flow through our workflows. -We rely on a set of specialized "apps" to deal with a lot of complexity like: - -- [Trailblazer][trailblazer]: Python wrapper around [MIP][mip], a rare disease genomics workflow -- [Housekeeper][housekeeper]: storage, retrieval, and archival of files - -In this context, `cg` provides the interface between these tools to facilitate automation and other necessary cross-talk. It also exposes some APIs: - -- HTTP REST for powering the web portal: [clinical.scilifelab.se][portal] -- CLI for interactions on the command line - -## This package - -This package is a little special. Essentially it should include all the "Clinical"-specific code that has to be integrated across multiple tools such as LIMS, Trailblazer, Scout etc. However, we still aim to structure it in such a way as to make maintainance as smooth as possible! - -### `apps` - -This part of the package contains connectors to the various tools that we integrate with. An app interface can be a wrapper for an external tool like Trailblazer (`tb`) or be implemented completely in `cg` like `lims`. It's very important that the code stays confined to each individual tool. The Housekeeper connector _cannot_ directly talk to Trailblazer for example - such communication has to go through a `meta` module. - -We also try to group all app-related imports and functionality in these interfaces. You shouldn't import e.g. a function from Scout from any other place than its app interface. This way, it's easier to overview if an update to an external package will affect the rest of the system. - -#### coverage - -Interface to [Chanjo][chanjo]. It's used to load coverage information from Sambamba output. - -#### invoice - -Internal app for working with invoices of groups of samples or pools. - -#### lims - -Internal app for interfacing with the Clarity LIMS API. We use the `genologics` Python API as far as possible. Some actions are not supported, however, and then we fall back to using the official XML-based REST API directly. - -We convert all the info that we get from LIMS/`genologics` to dictionaries before passing it along to other tools. We don't pass around objects that have some implicit connection to update things in LIMS - such actions needs to go through the `lims` app interface _explicitly_. - -#### tb - -Interface to Trailblazer. - -- One responsibility is to define the set of files from MIP to store (in Housekeeper) -- Also used to interact with the workflow for starting it - -#### hk - -Interface to Housekeeper. For storing files from analysis runs and FASTQ files from demultiplexing. - -#### loqus - -Interface to LoqusDB. For loading observation counts from the analysis output. - -#### osticket - -Internal app for opening tickets in SupportSystems. We use this mainly to link a ticket with the opening of an order for new samples/analyses. - -#### scoutapi - -Interface to Scout. For uploading analysis results to Scout. It's also used to access the generation of gene panels files used in the analysis workflow. - - -### `cli` - -The command line code is written in the [Click][click] framework. - -#### add - -This set of commands let's you quite easily _add things to the status database_. For example when a new customer is signed you could run: - -```bash -cg add customer cust101 "Massachusetts Institute of Technology" -``` - -You can also accomplish simliar tasks through the admin interface of the REST server. - -#### analysis - -The MIP workflow is accessed through Trailblazer but `cg` provides additional conventions and hooks into the status database that makes managing analyses simpler. - -You can start the analysis of a single family "raredragon" by just running: - -```bash -cg analysis --family raredragon -``` - -This command will create the MIP config in the correct location, link and rename FASTQ files from Housekeeper, and write an aggregated gene panel file. Then it will start the workflow. All these 4 actions can be issued individually as well: - -```bash -cg analysis [config|link|panel|start] raredragon -``` - -The final command is intended to run in a crontab and will continously check for families where all samples have been sequenced and start them automatically. - -```bash -cg analysis auto -``` - -#### status - -The main interface for getting an overview of data in the system is provided through the [web interface][cgweb], however, it's possible to use the same database APIs to get an idea of the status of things from the command line. - -To get a list of families that are waiting in the analysis queue e.g. you can run: - -```bash -cg status analysis -``` - -To get a general overview of samples or a sample in particular: - -```bash -cg status samples ADM4565A1 -ADM4565A1 (17101-1-1A) [SEQUENCED: 2017-09-02] -``` - -#### store - -This group of commands facilitate the Housekeeper integration. For example, when an analysis finishes and you want to store important files and update the status database accordingly, you run: - -```bash -cg store analysis /path/to/families/raredragon/analysis/raredragon_config.yaml -``` - -... or just wait for the crontab process to pick up the analysis automatically: - -```bash -cg store completed -``` - -#### transfer - -Some information will always exist across multiple database and requires some continous syncing to keep up-to-date. This is the case for information primarily entered through LIMS. To automatically fill-in the date of sample reception for all samples that are waiting in the queue: - -```bash -cg transfer lims --status received -``` - -And similarly for filling in the delivery date: - -```bash -cg transfer lims --status delivered -``` - -Another common task is to transfer data and FASTQ files from the demultiplexed-runs folder when a demultiplexing task completes. This is as easy as determining the flowcell of interest and running: - -```bash -cg demultiplex finish flow-cell -``` - -The command will update the _total_ read counts of each sample and check against the application for the sample if it has been fully sequenced. It will also make sure to link the related FASTQ files to Housekeeper. You can run the command over and over - only additional information will be updated. - -#### upload - -Much like the group of analysis subcommands you can perform an upload of analysis results (stored in Housekeeper) all at once by running: - -```bash -cg upload --case raredragon -``` - -All analyses that are marked as completed will be uploaded this way automatically: - -```bash -cg upload auto -``` - -You can of course specify which upload you want to do yourself as well: - -```bash -cg upload [coverage|observations|scout] raredragon -``` - -### `meta` - -This is the interfaces that bridge various apps. An example would be the "orders" module. When placing orders we need to coordinate information/actions between the apps: `lims`, `status`, and `osticket`. It also provides some additional functionality such as setting up the basis for the orders API and which fields are required for different order types. - -#### orders - -Includes: `lims`, `status`, `osticket` - -The API exposes a single endpoint for submitting a batch of new samples/external samples for analysis. It handles a mix of updates to existing samples with entierly new ones. The API is designed to work well in a REST API context. - -The interface supports: - -- samples for sequencing + analysis (**scout**) -- samples for sequencing only (**fastq**) -- sequencing of ready-made libraries (**rml**) -- analysis of externally sequenced samples (**external**) -- sequencing and analysis of microbial whole genomes (**microbial**) - -It opens a ticket using the `osticket` API for each order which it links with the ticket number. It stores information in both LIMS and `status` for samples and pools linked by LIMS id. It stores only a minimum of information about each sample in LIMS. Most of the critial information is stored in `status` and this is also the primary place to go if we need to update e.g. application tag for a sample. - -#### transfer - -This interface has a few related roles: - -##### lims - -Includes: `status`, `lims` - -Some info if primarily stored in LIMS and needs to be syncronized over to `status`. This is the case for both the date when a samples was received and when it was finally delivered. This interface is intended to run continously as part of a crontab job. - -#### upload - -##### coverage - -Includes: `status`, `hk`, `coverage` - -The API will fetch information about an analysis like name and id of the family and related samples from `status`. It will get the Sambamba output from `hk` and use the `coverage` app interface to upload the data to Chanjo for each individual sample. - -##### observations - -Includes: `status`, `hk`, `loqus` - -Given an analysis record, it will fetch required files from `hk` and upload the variants to the observation cound database using `loqus`. This only works for families with at least one affected individual. - -##### scoutapi - -Includes: `status`, `hk`, `scoutapi` - -Given the analysis record it will generate a Scout config file using information from `status`. It will use the "meta/analysis" API to convert the default panels for the family to the corresponding set of panels used to run the analysis. It will fetch all related VCF files and others from `hk`. Finally it will use the config to upload the resuls to Scout. The `scoutapi` interface will figure out if there's an existing analysis that needs to be replaced. - -#### analysis - -Includes: `status`, `tb`, `hk`, `scoutapi`, `lims` - -Starting an analysis requires complex interactions of many individual tools: - -- the config/pedigree is almost entirely generated from info in `status` -- the only exception is the bait kit for targetted sequencing samples which is fetched using `lims` -- the gene panel file that determines the "clinical" variants is generated from the panels assigned to the family in `status` by using `scoutapi` -- the FASTQ files are fetched for each sample in the family from `hk` and renamed and placed in the correct location using `tb` -- the analysis is finally started using `tb` - -We need to keep track of running analyses so we don't start the same family twice. This status is maintained by the "action" field in `status` which can be used to control when to start runs: - -- **[EMPTY]**: the empty state will trigger an automatic start of the analysis when all related samples have been sequenced AND no previous analysis of the family has occured -- **analyze**: to re-run an analysis of a family you just need to set the field to "analyze" and it will start regardless if a previous analysis has completed -- **running**: this state will be maintained after a successful start of a family until it has completed. If the analysis fails you need to manually make sure to restart it OR set the field to "analyze". -- **hold**: this state will make sure that the family is excluded from any automated starts, however, it will not affect/warn when you start an analysis of the family manually - -You update the status via the admin interface of the server. - -#### invoice - -Includes: `status`, `lims` - -The creation of an invoice is initiated in LIMS. You then use the process id to parse out which samples should be part of the invoice. This process is setup to be run when a button is clicked in LIMS but can be run externally from any server with access to LIMS. - -The invoice itself will be stored in an intermediate state in `status` while links will be created in LIMS to be able to keep track of which samples was part of which invoice. - -### `server` - -The REST API server handles a number of actions. It's written in [Flask][flask] and exposes an admin interface for quickly editing information in the backend MySQL database. The admin interface is served under a hidden route but the plan is to move it to Google OAuth. - -The API is protected by JSON Web Tokens generated by Google OAuth. It authorizes access using the user table in the database. - -#### Order endpoint - -The `/order/` endpoint accepts orders for new samples. If you supply a JSON document on the expected format, a new order is opened in `status` and LIMS. - -### `store` - -This really is the `status` app more or less. It's the interface to the central database that keeps track of samples and it which state they are currently in. All records that enters the database go through this API. Simple updates to properies on records are handled directly on the model instances followed by a manual commit. - -### Misc. - -There's one file for storing all constants like how priority levels are translated between the database representation and the human readable equivalent. - -Another module `/exc.py` contains the custom Exception classes that are used across the package. - -[portal]: https://clinical.scilifelab.se/ -[trailblazer]: https://github.com/Clinical-Genomics/trailblazer -[trailblazer-ui]: https://trailblazer.scilifelab.se/ -[housekeeper]: https://github.com/Clinical-Genomics/housekeeper -[chanjo]: https://github.com/robinandeer/chanjo -[scout]: https://github.com/Clinical-Genomics/scout -[mip]: https://github.com/Clinical-Genomics/mip -[scilife]: https://www.scilifelab.se/ -[flask]: http://flask.pocoo.org/ -[click]: http://click.pocoo.org/5/ -[cgweb]: https://github.com/Clinical-Genomics/cgweb -[servers]: https://github.com/Clinical-Genomics/servers diff --git a/documentation/commands/README.md b/documentation/commands/README.md deleted file mode 100644 index 5724f95820e..00000000000 --- a/documentation/commands/README.md +++ /dev/null @@ -1,451 +0,0 @@ -# cg commands -This is documentation for cg commands. - -Recurring nomenclature: -- sample_id = internal sampleID, provided by LIMS: `ADM..` -- ext_sample_id = external sampleID, provided by customer: `customer's sample_id` -- customer_id = `custxxx` -- ticket_id = `898988` -- family_id = `cuddlygull` - -## cg add -Add new things to statusDB. - -### cg add customer -Add a new customer with a unique INTERNAL_ID and NAME. - -```$ cg add customer CUSTOMER_ID CUSTOMER_NAME``` - -where `CUSTOMER_ID` our internal customer ID, e.g. cust000, and `CUSTOMER_NAME` is the customer name, e.g. institute or P.I. - -### cg add family -Add a family to CUSTOMER_ID with a NAME. - -```$ cg add family CUSTOMER_ID FAMILY_NAME``` - -where `FAMILY_NAME` is the customer's familyID. - -It is required to supply a panel. - -```$ cg add family --panel PANEL CUSTOMER_ID FAMILY_NAME``` - -where `PANEL` are the gene panels. To add multiple panels simply provide `--panel PANEL` again with another gene panel. - -When adding a family, set the priority by using - -```$ cg add family --priority PRIORITY CUSTOMER_ID FAMILY_NAME``` - -where `PRIORITY` could be `low`, `normal`, or `high`. - -### cg add relationship -Create a link between a FAMILY_ID and a SAMPLE_ID. - -```$ cg add relationship FAMILY_ID SAMPLE_ID``` - -where `FAMILY_ID` is our internal family ID, e.g. `cuddlygull`. - -It is required to set the status. - -```cg add relationship --status STATUS FAMILY_ID SAMPLE_ID``` - -where `STATUS` can be `affected`, `unaffected`, or `unknown`. - -Add relationship between parents using the `--mother` and `--father` flags. Example: - -```$ cg add relationship --mother MOTHER_ID FAMILY_ID SAMPLE_ID``` - -where `MOTHER_ID` is the sampleID for the mother of the child sample. - -### cg add sample -Add a sample for CUSTOMER_ID with a SAMPLE_NAME. - -```$ cg add sample CUSTOMER_ID SAMPLE_NAME``` - -where `SAMPLE_NAME` is the customer's sampleID. - -It is required to set the gender of the sample. - -```$ cg add sample --sex SEX CUSTOMER_ID SAMPLE_NAME``` - -where `SEX`can be `male`, `female`, or `unknown`. - -It is also required to set the application tag. - -```$ cg add sample --application APP_TAG CUSTOMER_ID SAMPLE_NAME``` - -where `APP_TAG` is the application tag. - -Add a LIMS id by using the ´--lims´ flag. - -```$ cg add sample --lims LIMS_ID CUSTOMER_ID SAMPLE_NAME``` - -Add the order the sample belongs to by using the `--order` flag. - -```$ cg add sample --order TICKET_ID CUSTOMER_ID SAMPLE_NAME``` - -Add the priority of the sample by using the `--priority` flag. - -```$ cg add sample --priority PRIORITY CUSTOMER_ID SAMPLE_NAME``` - -where `PRIORITY` can be `research`, `standard`, `priority`, or `express`. - -In case that the sample has been downsampled, provide how many reads it has been downsampled to. - -```$ cg add sample --downsampled INTEGER CUSTOMER_ID SAMPLE_NAME``` - -### cg add user -Add a new user with an EMAIL (login) and a NAME (full). ```$ cg add user EMAIL NAME``` - -It is required to connect the user to a customer. ```$ cg add user --customer CUSTOMER_ID EMAIL NAME``` - -To give a user admin rights, use the `--admin` flag. ```$ cg add user --admin EMAIL NAME``` - -## cg analysis -Prepare and start a MIP analysis for a case. To do this use - -```$ cg analysis --family FAMILY_ID``` - -where `FAMILY_ID` is the case name, e.g. `cuddlygull`. - -Using this option will overwrite any configuration files, so if changes has been made to these that should be kept, use instead `cg analysis start`. - -To change the quality of service for an analysis use - -```$ cg analysis --family FAMILY_ID --priority PRIORITY``` - -where `PRIORITY` could be `low`, `normal`, or `high`. The default is set in statusDB. - -Notification of errors will by default be sent to the email of the user who started the analysis. To change the email use - -```$ cg analysis --family FAMILY_ID --email TEXT``` - -where `TEXT` is the email address. - -### cg analysis auto -Start all analyses that are ready for analysis. - -### cg analysis config -Generate a configuration file (pedigree.yaml) for an analysis. - -```$ cg analysis config FAMILY_ID``` - -To print the config to console, rather then creating the `pedigree.yaml`, use the `--dry` flag: - -```$ cg analysis config --dry FAMILY_ID``` - -### cg analysis link -Link FASTQ files for a sample. - -```$ cg analysis SAMPLE_ID``` - -To link files for an entire case, use the `--family` flag: - -```$ cg analysis link --family FAMILY_ID``` - -### cg analysis panel -Write aggregated gene panel file. - -```$ cg analysis panel FAMILY_ID``` - -To only print the panel to console, rather than saving it to a file, use the `--print` flag: - -```$ cg analysis panel --print FAMILY_ID``` - -### cg analysis start -Start the analysis pipeline for a family. - -```$ cg analysis start FAMILY_ID``` - -To change the quality of servive for an analysis use - -```$ cg analysis start --priority PRIORITY FAMILY_ID``` - -where `PRIORITY` could be `low`, `normal`, or `high`. The default is set in statusDB. - -## cg backup -Backup utilities. - -### cg backup fetch-flowcell -Fetch the first flowcell in the requested queue from backup. - -```$ cg backup fetch-flowcell --flowcell FLOWCELL_ID``` - -## cg clean -Remove stuff. *Use caution.* - -### cg clean mip -Remove analysis output. Removes the family directory (as defined in the cg config). - -```$ cg clean mip SAMPLE_INFO``` - -where `SAMPLE_INFO` is the path to the familyID_qc_sample_info.yaml file - -There is an option to skip confirmation: `--yes` - -### cg clean mipauto -Automatically clean up "old" analyses. Removes all the family directories before the date defined by the user. - -```$ cg clean mipauto BEFORE_STR``` - -where `BEFORE_STR` is a date in string format, e.g. `2018-04-19` - -There is an option to skip confirmation: `--yes` - -### cg clean scout -Cleans the bam and bai files of selected bundle in housekeeper. - -```$ cg clean scout BUNDLE``` - -There is an option to skip confirmation: `--yes` - -### cg clean scoutauto -Automatically clean up solved and archived scout cases. Cleans the bam and bai files in housekeeper. - -```cg clean scoutauto``` - -## cg deliver -Deliver stuff. - -### cg deliver inbox -Link files from HK to customer inbox. - -```$ cg deliver inbox FAMILY_ID``` - -where `FAMILY_ID` is the case name, e.g. `cuddlygull`. - -`--dry` flag has not been implemented yet. - -To just deliver a specific analysis version, use the `--version` flag, example: - -```$ cg deliver inbox --version 2018-04-19 FAMILY_ID``` - -To only link specific types of files from HK, tags can be employed: - -```$ cg deliver inbox --tag TAG FAMILY_ID``` where `TAG` are the housekeeper tag(s) - -If you want to deliver to another customer inbox than stated in statusDB, use - -```$ cg deliver inbox --inbox CUSTOMER_ID FAMILY_ID``` - -where `CUSTOMER_ID` is the customerID. - -## cg get -Get information about records in the database. - -The option `-i` makes a guess what type you are looking for. - -```$ cg get -i TEXT``` - -where `TEXT` is a familyID, flowcellID, or sampleID. - -### cg get family -Get information about a family. - -```$ cg get family FAMILY_ID``` - -where `FAMILY_ID` is the familyID, e.g. `cuddlygull`. - -The same information can be reached using options `--customer` and `--name`, instead of the familyID. Example: - -```$ cg get family --name FAMILY_NAME --customer CUSTOMER_ID``` - -where `FAMILY_NAME` is the customer's internal familyID. - -It is possible to toggle if related samples should be shown or not, using `--samples` or `--no-samples`. Example: - -```$ cg get family --no-samples FAMILY_ID``` - -By default the related samples are shown. - -### cg get flowcell -Get information about a flowcell and the samples on it. - -```$ cg get flowcell FLOWCELL_ID``` - -It is possible to toggle if related samples should be shown or not , using `--samples` or `--no-samples`. Example: - -```$ cg get flowcell --no-samples FLOWCELL_ID``` - -By default the related samples are shown. - -### cg get sample -Get information about a sample. - -```$ cg get sample SAMPLE_ID``` - -It is possible to toggle if related families should be shown or not , using `--families` or `--no-families`. Example: - -```$ cg get sample --no-families SAMPLE_ID``` - -By default the related families are shown. - -It is also possible to display related flowcells with the `--flowcells` option. - -```$ cg get sample --flowcells SAMPLE_ID``` - -## cg init - -*Do* **not** *touch this, please.* - -Setup the database. - -```$ cg init``` - -Options for resetting database before setting up tables (`--reset`) and for bypassing manual confirmation (`--force`). - -## cg set -Update information in statusDB. - -### cg set family -Update information about a family. - -```$ cg set family FAMILY_ID``` - -where `FAMILY_ID` is the case name, e.g. `cuddlygull`. - -To update the analysis action for the family, use - -```$ cg set family --action ACTION FAMILY_ID``` - -where `ACTION` can be `analyze`, `running`, or `hold`. - -To update the priority of the analysis, use - -```$ cg set family --priority PRIORITY FAMILY_ID``` - -where `PRIORITY` can be `research`, `standard`, `priority`, or `express`. - -To update the gene panel for an analysis, use - -```$ cg set family --panel PANEL FAMILY_ID``` - -where `PANEL` are the gene panels. To add multiple panels simply provide `--panel PANEL` again with another gene panel. - -### cg set sample -Update information about a sample. - -```$ cg set sample SAMPLE_ID``` - -To update the gender of a sample, use - -```$ cg set sample --sex SEX``` - -where `SEX`can be `male`, `female`, or `unknown`. - -Update the customer, input format `custXXX` with XXX the customer number. -```-c, --customer CUSTOMER_ID``` - -To append a note/comment to a sample, put text between quotation marks! This will not overwrite the current comment. -```-n, --note TEXT``` - -Set number of downsampled total reads. Enter 0 to reset. -```-d, --downsampled-to INTEGER``` - -Set the application tag. Validation of the tag will be performed. -```-a, --application-tag APPLICATION_TAG``` - -Set the capture kit. NO validation of the kit will be performed. -```-k, --capture-kit CAPTURE_KIT``` - - -## cg status -View status of things. - -### cg status analysis -Shows which families will be analyzed. - -```$ cg status analysis``` - -### cg status families -View status of families. - -```$ cg status families``` - -There is an option to skip initial records: - -```$ cg status families --skip INTEGER``` - -where `INTEGER` is the number of lines that should be skipped (shows by default the 30 first entries). - -### cg status samples -View status of samples. - -```$ cg status samples --skip INTEGER``` - -where `INTEGER` is the number of lines that should be skipped (shows by default the 30 first entries). - -## cg store -Store results from MIP in housekeeper. - -### cg store analysis -Store a finished analysis in Housekeeper. - -```$ cg store analysis CONFIG_STREAM``` - -where `CONFIG_STREAM` is the path to the configuration file. - -### cg store completed -Store all completed analyses. - -```$ cg store completed``` - -## cg transfer -Transfer results to the status interface. - -### cg transfer flowcell -Populate results from a flowcell. - -```$ cg transfer flowcell FLOWCELL_ID``` - -### cg transfer lims -Check if samples have been updated in LIMS. - -```$ cg transfer lims --status STATUS``` - -where `STATUS` can be `received`, `prepared`, or `delivered`. - -## cg upload -Upload results from analyses. - -To upload analysis results to all the apps, use the flag `--family`. Example: - -```$ cg upload --family FAMILY_ID``` - -where `FAMILY_ID` is our internal familyID, e.g. `cuddlygull`. - -### cg upload auto -Upload all completed analyses to all the apps. - -```$ cg upload auto``` - -### cg upload coverage -Upload coverage from an analysis to Chanjo. - -```$ cg upload coverage FAMILY_ID``` - -To re-upload an already existing analysis, use: - -```$ cg upload coverage --re-upload FAMILY_ID``` - -### cg upload observations -Upload observations from an analysis to LoqusDB. - -```$ cg upload observations FAMILY_ID``` - -### cg upload scout -Upload variants from analysis to Scout. - -```$ cg upload scout FAMILY_ID``` - -To re-upload already existing analysis to scout, use: - -```$ cg upload scout --re-upload FAMILY_ID``` - -It is possible to get the config values printed to the console: - -```$ cg upload scout --print FAMILY_ID``` - -### cg upload validate -Validate a family of samples. - -```$ cg upload validate FAMILY_ID``` diff --git a/documentation/commands/analysis.md b/documentation/commands/analysis.md deleted file mode 100644 index d6f23869fe4..00000000000 --- a/documentation/commands/analysis.md +++ /dev/null @@ -1,26 +0,0 @@ -# Analysis - - 1. [Config](#1-config) - -## 1. Config -Generate a MIP pedigree.yaml file for the FAMILY_ID and place it in the trailblazer root directory. - -#### Command -```Bash -$ cg analysis config [OPTIONS] FAMILY_ID -``` -#### Input -- FAMILY_ID: `` - -#### Databases -- cg - -#### Apps -- Trailblazer - -#### Action -- Collect `` meta data from the `cg` database. -- Validate the meta data, handle single cases with unknown phenotype and reformat to MIP pedigree.yaml format via `trailblazer`. - -#### Output -- [pedigree.yaml](https://github.com/Clinical-Genomics/MIP/blob/master/templates/643594-miptest_pedigree.yaml) file in MIP format in the trailblazer root directory diff --git a/documentation/images/workflow-overview.png b/documentation/images/workflow-overview.png deleted file mode 100644 index 94fa819cdee0bafb6386c59fcc6d61649f6a7db3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157316 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 z 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 diff --git a/documentation/orderportal/README.md b/documentation/orderportal/README.md deleted file mode 100644 index 7a2f90a5611..00000000000 --- a/documentation/orderportal/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Orderportal - -## RML - -For each pool in the RML order a case is created with the name of the used ticket and the pool-name. -Each sample in the order gets a sample in statusDB and is connected to the pool case. diff --git a/documentation/server_info.md b/documentation/server_info.md deleted file mode 100644 index 31f144e1fb4..00000000000 --- a/documentation/server_info.md +++ /dev/null @@ -1,13 +0,0 @@ -# Info about the production environments - - -Date for below information: - -Wed May 27 16:44:09 CEST 2020 - - -| Machine | python | pip | -| ------- | ------ |---- | -| hasta | 3.7.1 | 18.1| -| clinical| 3.6.2 |9.0.1| - diff --git a/documentation/workflow/README.md b/documentation/workflow/README.md deleted file mode 100644 index f063efa9d10..00000000000 --- a/documentation/workflow/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Workflow - -These sections describe the flow for human samples from incoming order to delivery in Scout. - -This is a visual overview of the same process: - -![Workflow Overview](../images/workflow-overview.png) - -You can also view the [full diagram][kingfisher]. - -[kingfisher]: https://kingfisher.link/maps/O6HYN0G4O diff --git a/documentation/workflow/analyses.md b/documentation/workflow/analyses.md deleted file mode 100644 index 81df99e335c..00000000000 --- a/documentation/workflow/analyses.md +++ /dev/null @@ -1,61 +0,0 @@ -# Analyses - -Analyses are automatically started according to the "Families to analyze" queue. The family is then given an action of "running". - - @ rasta:~/servers/crontab/analysis-auto.sh - $ cg analysis auto - $ cg analysis -f FAMILY-ID - -This process involves a set of steps that setup the environment to prepare for analysis start: - -- [config](https://github.com/Clinical-Genomics/cg/blob/master/documentation/commands/analysis.md#1-config): a pedigree config is created in a "family" directory in the analysis root folder. Information is mainly fetched from _status_ with some exceptions like picking up capture kit version which is stored in LIMS. - - cg analysis config FAMILY-ID - -- **link**: link and rename FASTQ files for each sample in the family. We rely on all FASTQ files to already be stored in _Housekeeper_ for each sample. Information to rename samples and link paried-end reads is fetched from the headers in the FASTQ-file itself. - - cg analysis link -f FAMILY-ID - -- **panel**: generate a gene panel with relevant _clinical_ genes for the analysis. The latest version of the "OMIM-AUTO" panel is seeded with every analysis to avoid errors with very few variants in the output. Panels information is managed in _Scout_. For collaborating customers: cust002-4 we run a pre-defined set of panels for most cases. - - cg analysis panel FAMILY-ID - -- **start**: just start the pipeline with existing config/FASTQs/panel. This can be useful if you need to make custom edits to the config that you want to run with. - - cg analysis start FAMILY-ID - -The analysis is thereafter tracked in _Trailblazer_ until it's successfully completed. An analysis can fail and be restarted but when it eventually completes it is automatically picked up first by _Trailblazer_. - - @ rasta:~/servers/crontab/trailblazer-scan.sh - $ trailblazer scan - -Relevant files from all completed analyses are then stored in _Housekeeper_. An analysis record is also created in _status_ in this process. Finally, the action ("running") for the related family is reset. - - @ rasta:~/servers/crontab/store-completed.sh - $ cg store completed - $ cg store analysis [ANALYSIS-CONFIG-PATH] - -The files to store are defined in the _Trailblazer_ API in _cg_. - -Analysis output of completed runs should be cleaned up after two weeks if it's been stored in _Housekeeper_. - - cg clean auto - -The command will promt you for confirmation before deleting any files. - -## Failed runs - -### `analysisrunstatus` - -Failure in this step indicates a quality-related error. The next step is usually to make an assesment of the deviation. You can start by running: - - trailblazer check FAMILY-ID - -This command will report sex determination and duplicates for all samples. - -#### Saliva samples - -#### Missing FASTQ files - -Poor coverage can be caused by missing FASTQ files that weren't linked before analysis start. It could also be a result of certain sample origins, e.g. "saliva" where it's expected to see a higher number of duplicates and mapping to bacterial genome sequences. You can find out the origin of the sample in the "Source" sample UDF in LIMS. - diff --git a/documentation/workflow/queues.md b/documentation/workflow/queues.md deleted file mode 100644 index c07bd503d52..00000000000 --- a/documentation/workflow/queues.md +++ /dev/null @@ -1,62 +0,0 @@ -# Sample/Analysis queues - -There's a list of queues available in the [portal][portal] for keeping track of samples. - -Most queues are based around dates in _status_. You can manually set a sample as e.g. "sequenced" by logging into the database [admin inteface][clinical-api]. - -## Incoming samples - -Samples where the order has been placed but the samples haven't been given a "reception date" in LIMS. - -External (based on application) and downsampled samples are excluded. If a sample is marked as "sequenced" they also dissaprear from this queue. - -Samples are sorted on the date they were ordered. - -## Samples to prep - -Samples that have been received but not marked as prepared in LIMS. - -External/downsampled samples are excluded. Also samples marked as "sequenced" are excluded. - -Samples are ordered by priority first and reception date second. - -## Samples to sequence - -Samples that have been prepared but not yet _completely_ sequenced. - -External/downsampled samples are excluded. Pools of RML samples currently don't show up in this list. - -Samples are sorted by priority, and reception date. - -## Families to analyze - -Families where _each_ of the samples have been marked "sequenced" and who haven't been analyzed before OR who have the action set to "analyze". - -Families with actions other than "analyze" are excluded ("running", "hold" etc.) You can manually set a family to show up in the queue by running: - - cg set family --action analyze FAMILY-ID - -Families are sorted based on priority and date of order. - -Analysis for families in this queue are automatically started. - - @ rasta:~/servers/crontab/analysis-auto.sh - $ cg analysis auto - $ cg analysis -f FAMILY-ID - -## Analyses to upload - -Analyses that have successfully completed but haven't yet uploaded. - -Analyses in this queue are automatically uploaded. - - @ rasta:~/servers/crontab/upload-auto.sh - $ cg upload auto - $ cg upload -f FAMILY-ID - -## Analyses to deliver - -Currently not in use :warning: - -[portal]: https://clinical.scilifelab.se/ -[clinical-api]: https://clinical-api.scilifelab.se/admin/ diff --git a/documentation/workflow/uploads.md b/documentation/workflow/uploads.md deleted file mode 100644 index c2687e89d30..00000000000 --- a/documentation/workflow/uploads.md +++ /dev/null @@ -1,22 +0,0 @@ -# Uploads - -Uploads of completed analyses results that are stored in `Housekeeper` happen automatically. - - @ rasta:~/servers/crontab/upload-auto.sh - $ cg upload auto - $ cg upload -f FAMILY-ID - -This process is split into multiple steps: - -## Coverage - -Coverage and completeness levels calculated by _Sambamba_ are uploaded to _Chanjo_. Only one set of results are stored for each sample so old results will automatically replace previous ones. - -Coverage/completeness is stored on transcript level for all RefSeq transcripts (+ MT all transcripts) as defined in _Scout_. - - cg upload coverage FAMILY-ID - -## Scout - -We deliver variants along with annotations to `Scout` - the main portal for data delivery. - From 5acbdc87433632c99f10a592c200e53f0d79a94d Mon Sep 17 00:00:00 2001 From: Vincent Janvid Date: Fri, 24 Jul 2026 14:38:49 +0200 Subject: [PATCH 2/3] Re-write deployment description --- .github/PULL_REQUEST_TEMPLATE.md | 11 +++-- DEPLOYMENT.md | 78 ++++++++++---------------------- 2 files changed, 31 insertions(+), 58 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d6c80191b27..3a2331c27c0 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,13 +1,14 @@ ## Description ### Added - -- + ### Changed - -- + ### Fixed + + +--- -- +[Deployment instructions](../DEPLOYMENT.md#deploying-a-branch-to-stage) \ No newline at end of file diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 59ff9a4d564..62b5bc4364c 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -1,53 +1,25 @@ -# Steps - -When all tests done and successful and PR is approved by codeowners, follow these steps: - -1. Select "Squash and merge" to merge branch into default branch (master/main). - - -2. A prompt for writing merge commit message will pop up. - - -3. Find the title of the pull request already pre-filled in the merge commit title, or copy and paste -the title if not. - - -4. Append version increment value `( major | minor | patch )` to specify what kind of release is to be created. - - -5. Fill in markdown formatted changelog in merge commit comment details: - -` ### Added ` - -` ### Changed ` - -` ### Fixed ` - -6. Review the details once again and merge the branch into master. - - -7. Wait for GitHub actions to process the event, bump version, create release, publish to Dockerhub and PyPi. - - -8. Deploy master to stage: - 1. Log in to appropriate server `ssh ` - 2. `us` - 3. Request stage environment `paxa` and follow instructions - 4. ```shell - bash /home/proj/production/servers/resources/hasta.scilifelab.se/update-tool-stage.sh -e S_cg -t cg -b master -a - ``` - 5. Make sure that installation was successful - - -9. Deploy master to production - 1. Log in to appropriate server `ssh ` - 2. `up` - 3. Make sure the action publishing the most recent version to PyPi is finished. - 4. ```shell - bash /home/proj/production/servers/resources/hasta.scilifelab.se/update-tool-prod.sh -e P_cg -t cg -b master -a - ``` - 5. Make sure that installation was successful - - -11. Take a screenshot or copy log text and post as a comment on the PR. Screenshot should include environment and that it succeeded. - +## Deploying a new release to production +Before deploying, ensure that all GitHub actions related to the merge have finished, eg. bump version, create release, publish to Dockerhub and PyPi. + +### Deploy CLI +1. ssh to the login-node +2. Install the master branch +```shell + bash /home/proj/production/servers/resources/hasta.scilifelab.se/update-tool-prod.sh -e P_cg -t cg -b master -a +``` +### Deploy APP +1. Use the action **[Deploy release to production environment](https://github.com/Clinical-Genomics/atlas/actions/workflows/deploy_prod.yml)** to deploy your branch. Make sure to provide the **release-tag** and NOT master to the action. +2. Check [the production deployment page](https://github.com/Clinical-Genomics/atlas/deployments/production) to ensure the deployment was successful. + + +## Deploying a branch to stage +Before deploying, ensure that all GitHub actions related to the last push have finished. +### Deploy CLI +1. ssh to the login-node +2. Install your branch +```shell + bash /home/proj/production/servers/resources/hasta.scilifelab.se/update-tool-stage.sh -e S_cg -t cg -b [YOUR-BRANCH-NAME] -a +``` +### Deploy APP +1. Use the action **[Deploy branch to staging environment](https://github.com/Clinical-Genomics/atlas/actions/workflows/deploy_stage.yml)** to deploy your branch. +2. Check [the stage deployment page](https://github.com/Clinical-Genomics/atlas/deployments/stage) to ensure the deployment was successful. \ No newline at end of file From 720a461a33c1f2a9713cf96508d1234a750684aa Mon Sep 17 00:00:00 2001 From: Vincent Janvid Date: Fri, 24 Jul 2026 15:28:38 +0200 Subject: [PATCH 3/3] Fix incorrect links in DEPLOYMENT.md --- DEPLOYMENT.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 62b5bc4364c..a4e31bac3da 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -8,8 +8,8 @@ Before deploying, ensure that all GitHub actions related to the merge have finis bash /home/proj/production/servers/resources/hasta.scilifelab.se/update-tool-prod.sh -e P_cg -t cg -b master -a ``` ### Deploy APP -1. Use the action **[Deploy release to production environment](https://github.com/Clinical-Genomics/atlas/actions/workflows/deploy_prod.yml)** to deploy your branch. Make sure to provide the **release-tag** and NOT master to the action. -2. Check [the production deployment page](https://github.com/Clinical-Genomics/atlas/deployments/production) to ensure the deployment was successful. +1. Use the action **[Deploy release to production environment](https://github.com/Clinical-Genomics/cg/actions/workflows/deploy_prod.yml)** to deploy your branch. Make sure to provide the **release-tag** and NOT master to the action. +2. Check [the production deployment page](https://github.com/Clinical-Genomics/cg/deployments/production) to ensure the deployment was successful. ## Deploying a branch to stage @@ -21,5 +21,5 @@ Before deploying, ensure that all GitHub actions related to the last push have f bash /home/proj/production/servers/resources/hasta.scilifelab.se/update-tool-stage.sh -e S_cg -t cg -b [YOUR-BRANCH-NAME] -a ``` ### Deploy APP -1. Use the action **[Deploy branch to staging environment](https://github.com/Clinical-Genomics/atlas/actions/workflows/deploy_stage.yml)** to deploy your branch. -2. Check [the stage deployment page](https://github.com/Clinical-Genomics/atlas/deployments/stage) to ensure the deployment was successful. \ No newline at end of file +1. Use the action **[Deploy branch to staging environment](https://github.com/Clinical-Genomics/cg/actions/workflows/deploy_stage.yml)** to deploy your branch. +2. Check [the stage deployment page](https://github.com/Clinical-Genomics/cg/deployments/stage) to ensure the deployment was successful. \ No newline at end of file