A MIxS extension proposal for 'ancient DNA' samples.
The repo is laid out as follows:
feedback/<date>-<eventid>: contains collated tables from community feedback sessions
proposals/<upcoming version>: contains consensus term update proposals for inclusion in the next version of the standard
project/:class-model-tsvs/: contains MIxS <= v5 style TSVs for the extension for more-human readable inspection
scripts/: contains various helper scripts for processing JSON, YAML, and feedback data where necessarysrc/mixs/: contains the structured YAML and JSON files of the latest release of the extension
- Gather all feedback from feedback sessions (
feedback/) and development workshops (proposals/<upcoming_version>) in the forms of JSONs - Coordination team makes two branch and associated PRs:
<upcoming version>-termupdates<upcoming version>-newterms
- Update existing terms and add new terms in/to the
src/mixs/schema/ancient.yamlfile on the two branches- Updates as per the aggregated feedback under
proposals/, but can be evaluated or 'vetoed' for technical reasons - Important: try to make one commit for each new term and term update, with a descriptive message as to the change.
- For each term, all changes to (description, examples, etc.) should be in one commit and described in the commit message (this will allow us further automate release notes)
- Updates as per the aggregated feedback under
- Coordination team cross-reviews the two PRs and merge in
- Run validation (TO BE AUTOMATED)
linkml lint --config linkml-lint-config.yml src/mixs/schema/ancient.yml: to ensure there are no errors or important missing information about or misformatting of each term (slot)linkml validate -s <schema>.yaml --target-class Ancient <test_data>.csv: checks that the schema can be used against an actual metadata test file [NOT YET IMPLEMENTED]
- In a new PR, generate additional JSON and TSV files based on instructions on technical notes (containing all changes/new terms)
gen-csv src/mixs/schema/ancient.yml > src/mixs/schema/ancient.csv: checks that the schema can be converted to a basic CSV formatgen-json-schema src/mixs/schema/ancient.yml > src/mixs/schema/ancient.jsonchecks that the schema can be converted to a basic JSON format- The YAML -> JSON conversion will include additioanl LinkML schema validation, so additional correction PRs made be required at this point!
- Generate the 'old style' MIxS checklist
./scripts/linkml2class_tsvs.py --schema-file src/mixs/schema/ancient.yml --output-dir project/class-model-tsvs/
- Open PR with highly informative PR title (this will be used for auto-changelog)
- Update the
CITATION.cfffile with the new version number and authors, and update theversionfield to match the new version number- The
titleshould be descriptive of the extension, e.g. "Minimum Information about any Ancient Sequence: Ancient Extension Schema (MInAS)" - The
versionshould be updated to match the new version number, e.g. "1.8.0"
- The
- Make a GitHub release with the following format:
- Tag: vX.X.X
- Title: vX.X.X
- Generate release notes based on a cleaned up
git log --onelinethat has the git hash and the informative commit message - Set as latest
- Go to the MInAS repo and make an updated mega-yaml plus release following instructions there
Use the YAML (in as far as possible similar format as MIxS LinkML structure) as the source of truth.
To convert to the original MIxS TSV style, we can use a script developed by @TurboMam.
This script has been copied and modified very slightly to include the python3 shebang, and is placed under scripts until properly packaged for the MIxS project.
To use this script, you only need python3 and no other dependencies (it seems).
In the root of this directory run:
./scripts/linkml2class_tsvs.py --schema-file src/mixs/schema/ancient.yml --output-dir projects/class-model-tsvs/We use a GitHub action to generate a special 'latest' tag that points to the commit of the latest release. This allows a more 'user friendly' URL for downloading a specific file, rather than making users have to download a release tarball and extract a specific file.