Git Dependency
View full source code on GitHub
What does this applet do?
This applet performs a basic SAMtools count of alignments present in an input BAM.
Prerequisites
The app must have network access to the hostname where the git repository is located. In this example, access.network is set to:
"access": {
"network": ["github.com"]
}To learn more about access and network fields see Execution Environment Reference.
How is the SAMtools dependency added?
SAMtools is cloned and built from the SAMtools GitHub repository. The following is a closer look at the dxapp.json file's runSpec.execDepends property:
"runSpec": {
...
"execDepends": [
{
"name": "htslib",
"package_manager": "git",
"url": "https://github.com/samtools/htslib.git",
"tag": "1.3.1",
"destdir": "/home/dnanexus"
},
{
"name": "samtools",
"package_manager": "git",
"url": "https://github.com/samtools/samtools.git",
"tag": "1.3.1",
"destdir": "/home/dnanexus",
"build_commands": "make samtools"
}
],
...
}The execDepends value is a JSON array of dependencies to resolve before the applet source code is run. In this applet, the git fetch dependencies for htslib and SAMtools are specified. Dependencies resolve in the order listed. Specify htslib first, before the SAMtools build_commands, because newer versions of SAMtools depend on htslib. An overview of each property in the git dependency:
package_manager- Details the type of dependency and how to resolve. supplementary details.url- Must point to the server containing the repository. In this case, a GitHub URL.tag/branch- Git tag/branch to fetch.destdir- Directory on worker to which the git repository is cloned.build_commands- Commands to build the dependency, run from the repositorydestdir. In this example,htslibis built when SAMtools is built, so only the SAMtools entry includesbuild_commands.
The build_commands are executed from the destdir. Use cd when appropriate.
How is SAMtools called in the src script?
src script?Because "destdir": "/home/dnanexus" is set in dxapp.json, the git repository is cloned to the same directory from which the script executes. The example directory's structure:
├── home
│ ├── dnanexus
│ ├── < app script >
│ ├── htslib
│ ├── samtools
│ ├── < samtools binary >The SAMtools command in the app script is samtools/samtools.
Applet Script
main() {
set -e -x -o pipefail
dx download "$mappings_bam"
count_filename="${mappings_bam_prefix}.txt"
readcount=$(samtools/samtools view -c "${mappings_bam_name}")
echo "Total reads: ${readcount}" > "${count_filename}"
counts_txt=$(dx upload "${count_filename}" --brief)
dx-jobutil-add-output counts_txt "${counts_txt}" --class=file
}You can build SAMtools in a directory that is on the $PATH or add the binary directory to $PATH. Keep this in mind for your app(let) development.
Last updated
Was this helpful?