diff --git a/.mdl_style.rb b/.mdl_style.rb new file mode 100644 index 0000000..234a985 --- /dev/null +++ b/.mdl_style.rb @@ -0,0 +1,7 @@ +all +exclude_rule 'MD014' # Dollar signs used before commands without showing output +exclude_rule 'MD029' # Ordered list item prefix +exclude_rule 'MD033' # Inline HTML +exclude_rule 'MD034' # Bare URL used +exclude_rule 'MD036' # Emphasis used instead of a header +rule 'MD013', :line_length => 120, :code_blocks => false, :tables => false \ No newline at end of file diff --git a/.mdlrc b/.mdlrc new file mode 100644 index 0000000..f7152f1 --- /dev/null +++ b/.mdlrc @@ -0,0 +1 @@ +style "#{File.dirname(__FILE__)}/.mdl_style.rb" \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0c1ead0..ff9deb3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,4 +18,9 @@ repos: rev: v2.2.6 hooks: - id: codespell - files: ^.*\.(md|rst|yml)$ \ No newline at end of file + files: ^.*\.(md|rst|yml)$ + - repo: https://github.com/markdownlint/markdownlint + rev: v0.11.0 + hooks: + - id: markdownlint + files: ^.*\.(md)$ \ No newline at end of file diff --git a/README.md b/README.md index 1cd5999..7f87b11 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ git remote add upstream https://github.com/lasp/developer-guide.git # For HTTPS 10. Iterate with the reviewer over any needed changes until the reviewer approves of the pull request. This may require additional commits to the pull request. Once all changes are approved, merge the pull request. + ## Questions? Any questions about this effort may be directed to the ``#ds-best-practices-documentation`` Slack channel. diff --git a/docs/README.md b/docs/README.md index 026dbe0..44e654d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -## How to build the documentation +# How to build the documentation ```bash # Make the html documentation diff --git a/docs/source/data_management/file_formats/netcdf.md b/docs/source/data_management/file_formats/netcdf.md index 23a6165..be49adb 100644 --- a/docs/source/data_management/file_formats/netcdf.md +++ b/docs/source/data_management/file_formats/netcdf.md @@ -1,4 +1,5 @@ # NetCDF + >**Warning** > This guide needs additional information @@ -9,7 +10,9 @@ directly, without knowing how the data are stored, and metadata information may * Self-describing, includes metadata * Multi-dimensional array data model -The [netCDF data model](https://docs.unidata.ucar.edu/netcdf-c/current/netcdf_data_model.html) consists of the following: +The [netCDF data model](https://docs.unidata.ucar.edu/netcdf-c/current/netcdf_data_model.html) consists of the +following: + * variable * Multi-dimensional array * Column-oriented: each variable as a separate entity @@ -22,13 +25,14 @@ The [netCDF data model](https://docs.unidata.ucar.edu/netcdf-c/current/netcdf_da * Akin to directories * Avoid unless you really need the complex structure - ## Why use NetCDF + NetCDF is a file format commonly used at LASP as it is the "highly preferred" format for NASA Earth Observing System Data and Information System data products, per their Data Product Development Guide for Data Producers. This affects all NASA Earth Science missions. NetCDF features: + * Self-describing * structure captures coordinate system (functional relationship) * includes metadata @@ -42,14 +46,17 @@ NetCDF features: * Open specification (unlike IDL save files) ## Options available + There are two netCDF data models: + * NetCDF-3 classic * NetCDF-4 built on HDF5 * recommended but prefer classic constructs ## How to use this data format -#### NetCDF Files +### NetCDF Files + * Binary format with open specification * Requires software libraries to read and write C, Fortran, Java, python, IDL, ... * Internal compression, don't bother to compress NetCDF files externally @@ -58,7 +65,8 @@ There are two netCDF data models: * nc file extension * Don't be afraid of big files -#### Coordinate System +### Coordinate System + * Dimensions should be used to define a coordinate system * e.g. temporal, spatial, spectral * Avoid using dimensions to group data @@ -72,14 +80,16 @@ There are two netCDF data models: * shared dimensions * Each variable should reuse dimensions to indicate that they share the same coordinates (domain set) -#### Time as Coordinate Variable +### Time as Coordinate Variable + * If the data are a function of a single time dimension then there should be a single time variable * avoid breaking time up by date and time of day * Prefer numeric time units * time unit since an epoch * e.g. "seconds since 1970-01-01", "microseconds since 1980-01-06" -#### Metadata +### Metadata + * Optional but useful to make NetCDF file self-describing * attribute * global (dataset level) @@ -93,20 +103,22 @@ There are two netCDF data models: * [Attribute Convention for Data Discovery (ACDD)](https://wiki.esipfed.org/Attribute_Convention_for_Data_Discovery_1-3) * [udunits](https://www.unidata.ucar.edu/software/udunits/): standard units -#### Other useful variable attributes +### Other useful variable attributes + * _FillValue * missing_value is considered deprecated and is not recommended by the NetCDF Users Group. * NaN is another option, however, NaNs in files are handled differently in every language and so it may be better to pick a value for official data products that many users will be using * valid_range, valid_min, valid_max * scale_factor, add_offset (packed values) -* [cell_methods](https://cfconventions.org/Data/cf-conventions/cf-conventions-1.8/cf-conventions.html#_data_representative_of_cells): standards for representing data cells (bins) +* [cell_methods](https://cfconventions.org/Data/cf-conventions/cf-conventions-1.8/cf-conventions.html#_data_representative_of_cells) + : standards for representing data cells (bins) * e.g. daily average, wavelength bins ## Useful Links + * [NetCDF User's Guide](https://docs.unidata.ucar.edu/nug/current/) * [NetCDF ToolsUI](https://docs.unidata.ucar.edu/netcdf-java/current/userguide/toolsui_ref.html) * [NetCDF Workshop Materials](https://www.unidata.ucar.edu/software/netcdf/workshops/2011/index.html) - Credit: Content taken from a Confluence guide written by Doug Lindholm \ No newline at end of file diff --git a/docs/source/licensing.md b/docs/source/licensing.md index f650acd..0ec4506 100644 --- a/docs/source/licensing.md +++ b/docs/source/licensing.md @@ -4,15 +4,16 @@ Licenses provide legally binding guidelines for the use and distribution of soft proprietary or free and open source. ## Purpose for this guideline + In Data Systems, many of our code repositories are open source. An open source license gives others explicit permission to use any part of the code legally. This guide provides options for choosing the right license for your project. - ## Options for this guideline ### Software To avoid copyright concerns, it is recommended that: + 1. Any software created by LASP is properly licensed to provide sufficient guidance on their usage 2. Any software used by LASP are licensed and used accordingly to protect against potential legal action from the owner of that intellectual property @@ -36,28 +37,27 @@ Some fairly common options: * [MIT](https://opensource.org/license/MIT) - Short and sweet, very similar to BSD-3 * [Apache-2](https://opensource.org/license/apache-2-0) - Commonly used in the Java/Scala communities - Some examples from groups at LASP: * MIT: * Apache-2: - *NOTE: There is a NASA Open Source License: ; However, it DOES NOT satisfy the Free Software Foundation’s definition of open source.* ### Data + A creative commons license can be used to restrict who can use data and how they use it. Creative Commons: Data rights qualifiers + * BY – Credit must be given to you, the creator. * NC – Only noncommercial use of your work is permitted. * ND – No derivatives or adaptations of your work are permitted. * SA – Adaptations must be shared under the same terms. - You can mix and match the qualifiers on the data rights depending on what limitations you want to enact on the data you’re distributing/producing. @@ -69,10 +69,11 @@ you’re distributing/producing. * CC BY-NC-SA 4.0 – Anyone can use the data/work, but NOT for commercial purposes and the work must be shared alike (SA), meaning it must have the same terms of use. - ## How to apply this guideline + ### Software + 1. CU Venture Partners (CU lawyers) recommend using BSD-3 license. 2. Make sure that you put the license file in the root directory and call it `LICENSE` or `LICENSE.md` so that the code repository (GitHub, GitLab, Bitbucket) can immediately identify what license your code is released under and let @@ -80,7 +81,6 @@ you’re distributing/producing. 3. Fill out the copyright, noting that it is NOT LASP, but *Regents of CU. Copyright (c) YYYY, Regents of the University of Colorado* - ## Useful Links * [Public license selector](https://ufal.github.io/public-license-selector/) diff --git a/docs/source/programming_languages/python/packaging_and_distribution.md b/docs/source/programming_languages/python/packaging_and_distribution.md index 3a3d7b6..5085d2e 100644 --- a/docs/source/programming_languages/python/packaging_and_distribution.md +++ b/docs/source/programming_languages/python/packaging_and_distribution.md @@ -1,33 +1,35 @@ -> **Warning:** More information is needed to complete this guideline. - # Python Packaging and Distribution + +> > **Warning:** More information is needed to complete this guideline. + Examples of Python packaging and distribution options and how to use them. ## Purpose + > **Warning** Need to add an explanation of how this guideline supports DS workflows, meets internal and external > policies, and aids in collaboration and our overall success ## Options + The options for Python packaging and distribution that we often see used at LASP are: + - [PyPI](#packaging-for-pypi--pip-install-) - [Conda](#packaging-for-conda--conda-install-) ## Packaging for PyPI (`pip install`) -### PyPI resources: +### PyPI resources - [PyPI Help Page](https://pypi.org/help/) - - [Setting up a PyPI account](https://pypi.org/account/register/) - - [Getting a PyPI access token](https://pypi.org/help/#apitoken) - ### Built-In (`build` + `twine`) > **Warning**: Need to add introductory paragraph that summarizes Built-In #### How to use Built-In + Python Packaging User Guide: https://packaging.python.org/en/latest/ The link below is a fairly complete tutorial. There are also instructions there for using various other build tools: https://packaging.python.org/en/latest/tutorials/packaging-projects/ @@ -37,10 +39,11 @@ https://packaging.python.org/en/latest/tutorials/packaging-projects/ - [Python Packaging User Guide](https://packaging.python.org/en/latest/) #### Setuptools Example – Library Package +
setup.py -``` +```python """ Setup file for the science data processing pipeline. @@ -86,6 +89,7 @@ setup( } ) ``` +
### Poetry @@ -95,7 +99,8 @@ setup( [Poetry Build and Publish Docs](https://python-poetry.org/docs/cli/#build) How to Publish to PyPI from Poetry -``` + +```bash poetry lock poetry install poetry version @@ -110,7 +115,7 @@ poetry publish # You will be prompted for your PyPI credentials if you don't pr
pyproject.toml - ``` + ```toml # pyproject.toml # See: https://python-poetry.org/docs/pyproject/ @@ -158,12 +163,15 @@ poetry publish # You will be prompted for your PyPI credentials if you don't pr requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" ``` +
## Packaging for Conda (`conda install`) + > **Warning**: Need a volunteer to expand on Conda ### How to install and use Conda + https://conda.io/projects/conda-build/en/latest/user-guide/tutorials/build-pkgs.html > Conda Develop: @@ -172,6 +180,7 @@ conda recommend using `pip install` to install an editable package in developmen > See: https://github.com/conda/conda-build/issues/1992 ## Useful Links + Here are some helpful resources: - [Python Packaging User's Guide](https://packaging.python.org/en/latest/) diff --git a/docs/source/programming_languages/python/terminology.md b/docs/source/programming_languages/python/terminology.md index 84937d3..844bb18 100644 --- a/docs/source/programming_languages/python/terminology.md +++ b/docs/source/programming_languages/python/terminology.md @@ -3,6 +3,7 @@ Some Python terminology that a user might encounter, particularly when working through this Python guide. ## Purpose + Like all programming languages, Python has some terminology that is unique to it and it is helpful to have that language explained. This page may be updated over time so that it holds the most useful terminology to those that use this developer's guide. @@ -35,6 +36,7 @@ boasts a similar dependency resolver to Conda. One major drawback to Conda in pa and over instead of simply making code changes in place. ## Useful Links + Helpful links to additional resources on the topic Credit: Content taken from a Confluence guide written by Gavin Medley diff --git a/docs/source/workflows/docker/beginner_guide_to_docker.md b/docs/source/workflows/docker/beginner_guide_to_docker.md index 3656db4..e3e264e 100644 --- a/docs/source/workflows/docker/beginner_guide_to_docker.md +++ b/docs/source/workflows/docker/beginner_guide_to_docker.md @@ -6,7 +6,7 @@ This guide is intended to provide an overview of what Docker is, how it's used, containers. It will not go in depth on creating a Docker image, or on the more nuanced aspects of using Docker. For a more in-depth introduction, you can read through the official Docker docs. -## A Beginner's Guide to Docker +## Overview Docker is a tool for containerizing code. You can basically think of it as a lightweight virtual machine. Docker works by defining an image which includes whatever you need to run your code. You start with a base image, which is a pre-made @@ -48,7 +48,6 @@ So, you define a Docker *image* using a *Dockerfile* and/or a *Docker Compose* f Docker *container*, which runs your code and environment. An image can be pushed up to a *registry*, where anyone with access can pull the image and run the container themselves without needing access to the Dockerfile. - ## Getting Started This section will outline some basic commands and use cases for Docker. First, you need to @@ -94,7 +93,7 @@ rebuild, and you can find a full list of flags [here](https://docs.docker.com/re Now that we have built the image, we can see all the Docker images that are built on our system by running the `docker images` command: -``` +```plaintext $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker_tutorial latest 71736be7c555 5 minutes ago 91.9MB @@ -176,6 +175,7 @@ docker image prune ``` ## Useful Links + * [Official Docker documentation](https://docs.docker.com/) * [Installing Docker engine](https://docs.docker.com/engine/install/) * [Installing Docker Desktop for Mac](https://docs.docker.com/desktop/install/mac-install/) diff --git a/docs/source/workflows/docker/containerizing_idl_with_docker.md b/docs/source/workflows/docker/containerizing_idl_with_docker.md index 2eb2ef8..eb9b6ac 100644 --- a/docs/source/workflows/docker/containerizing_idl_with_docker.md +++ b/docs/source/workflows/docker/containerizing_idl_with_docker.md @@ -6,19 +6,19 @@ This document provides a preliminary implementation of IDL in a Docker container ## A Few Things to Note -- Although the implementation described below is only valid for IDL version 8.6 and greater, the Dockerfile could +* Although the implementation described below is only valid for IDL version 8.6 and greater, the Dockerfile could presumably be modified to accommodate older versions. The difference is that the network license access is different for IDL 8.5 and earlier versions. -- This is not the same as Docker containers that access an external IDL on the host machine or via a network connection. -- The IDL image size is approximately 3GB, which is reasonable for an IDL installation (see +* This is not the same as Docker containers that access an external IDL on the host machine or via a network connection. +* The IDL image size is approximately 3GB, which is reasonable for an IDL installation (see https://www.l3harrisgeospatial.com/docs/PlatformSupportTable.html). The base CentOS 8 image is only 210MB, so the IDL installation accounts for more than 90% of the image. -- The IDLDE image size is approximately 3.5GB because a web browser (Firefox) has to be installed to export the display. -- For a simple container deployment, there is no Docker Compose file. The container is easily generated with simple +* The IDLDE image size is approximately 3.5GB because a web browser (Firefox) has to be installed to export the display. +* For a simple container deployment, there is no Docker Compose file. The container is easily generated with simple command-line arguments. -- Provided that the host machine has LASP VPN access (for licensing purposes), the containerized IDL should work +* Provided that the host machine has LASP VPN access (for licensing purposes), the containerized IDL should work directly "out of the box" (i.e., no manual post-container creation steps are required). -- Although both the IDL and IDLDE images can be built locally using the Dockerfiles below, they are also available from +* Although both the IDL and IDLDE images can be built locally using the Dockerfiles below, they are also available from the [LASP Image Registry](lasp_docker_registry). ## Dockerfile @@ -75,11 +75,11 @@ installation. **The remainder of this guideline describes the implementation of The following issues are associated with using IDL in a stand-alone container: -- Cross-container access -- File sharing between containers -- Access from a Jenkins service -- Integration of git -- Integration of `mgunit` +* Cross-container access +* File sharing between containers +* Access from a Jenkins service +* Integration of git +* Integration of `mgunit` ## Build the Image @@ -138,7 +138,7 @@ command. The following demonstrates how to utilize IDL by directly interacting with a running container. In this example, the (optional) container name is `idl_container` and the name of the (previously created) image is `idl_image`: -``` +```bash (base) MacL3947:idl stmu4541$ docker container run -it --name=idl_container idl_image IDL 8.7.3 (linux x86_64 m64). (c) 2020, Harris Geospatial Solutions, Inc. @@ -322,7 +322,6 @@ Note that a Dockerfile is not required for this simple example since the contain Jenkins image (`jenkins/jenkins:lts-centos`). A Dockerfile is required only when it is necessary to install additional tools, such as Ant, Gradle, various compilers, etc. - ## Run a Containerized IDLDE and Export the Display to the Host Machine Also, see [Export Display from Docker Container - Proof of Concept Confluence @@ -331,12 +330,12 @@ general discussion of exporting a display from a Docker container. The following steps are necessary to run a containerized IDLDE and export the display to the host machine: -1) A web browser must be installed in the container (or, ideally, as below, the image from which the container is +1. A web browser must be installed in the container (or, ideally, as below, the image from which the container is generated). -2) A very short IDLDE Dockerfile is necessary to add a web browser to the IDL Image. This will create a new IDLDE image. -3) Source the `idl_setup` script during image creation. -4) The IDLDE container must be run with the `DISPLAY` environment parameter set to that of the host machine. -5) For Linux, the IDLDE container must be run with the host machine X socket bind mounted to the container. +2. A very short IDLDE Dockerfile is necessary to add a web browser to the IDL Image. This will create a new IDLDE image. +3. Source the `idl_setup` script during image creation. +4. The IDLDE container must be run with the `DISPLAY` environment parameter set to that of the host machine. +5. For Linux, the IDLDE container must be run with the host machine X socket bind mounted to the container. Create a very short IDLDE Dockerfile that sources the IDL setup script and adds a Firefox web browser to the base IDL image. Note that the base image (named `idl_image` in the following Dockerfile) must exist before this Dockerfile can be @@ -405,6 +404,7 @@ docker container run -e DISPLAY=host.docker.internal:0 idlde_image ``` ## Useful Links + * [Official Docker documentation](https://docs.docker.com/) ## Acronyms diff --git a/docs/source/workflows/docker/lasp_docker_registry.md b/docs/source/workflows/docker/lasp_docker_registry.md index a34c9f1..30ee218 100644 --- a/docs/source/workflows/docker/lasp_docker_registry.md +++ b/docs/source/workflows/docker/lasp_docker_registry.md @@ -110,7 +110,6 @@ $ docker logout > **Info**: Don't forget to delete your local images if you no longer need them. - ### Automated To script the process of creating an image, you can use something like Ansible with its @@ -132,11 +131,10 @@ and clicking "Delete Folder": ![Delete an image](../../_static/lasp_docker_registry_delete_image2.png) - ## Pulling an Image 1. Login to the remote registry using your username/password. Note that this is only necessary if you are accessing a -docker image that is NOT in a public namespace: + docker image that is NOT in a public namespace: ```bash $ docker login docker-registry.pdmz.lasp.colorado.edu diff --git a/docs/source/workflows/docker/multi_stage_builds.md b/docs/source/workflows/docker/multi_stage_builds.md index 5334549..92f6a12 100644 --- a/docs/source/workflows/docker/multi_stage_builds.md +++ b/docs/source/workflows/docker/multi_stage_builds.md @@ -226,6 +226,7 @@ Here is what each piece of the service setting means: for the `single_test` service, to set the test that you want to run. ## Useful Links + * [Official Docker documentation](https://docs.docker.com/) * [Multi-stage Builds Documentation](https://docs.docker.com/build/building/multi-stage/) diff --git a/docs/source/workflows/docker/running_docker_with_m1.md b/docs/source/workflows/docker/running_docker_with_m1.md index c5051d0..a159fa8 100644 --- a/docs/source/workflows/docker/running_docker_with_m1.md +++ b/docs/source/workflows/docker/running_docker_with_m1.md @@ -73,7 +73,6 @@ Docker programs. The best way to fix it is to go to the Docker Desktop Dashboard > Settings > Resources and change the number of CPUs down to 1. This will obviously impact performance in other ways, but may help avoid encountering this permanent hang. - ## Acronyms * **amd64** = 64-bit Advanced Micro Devices diff --git a/docs/source/workflows/open_source/citing_software.md b/docs/source/workflows/open_source/citing_software.md index 097c37d..85d2c40 100644 --- a/docs/source/workflows/open_source/citing_software.md +++ b/docs/source/workflows/open_source/citing_software.md @@ -3,14 +3,15 @@ This guideline provides information on how to publish, archive, and create a citable DOI for your project. ## Purpose + Publishing code offers benefits including preserving code, making it accessible to others, and enabling users of code to cite and reproduce it - all key components of open science goals. Additionally, it supports compliance with NASA's SPD-41a policy which requires the open sharing of publications, data, and software created by SMD-funded scientific activities. Below are steps for how to publish, archive, and create a citable DOI for your project. - ## Options for citing your software + Zenodo is a free service developed by researchers to support archiving and publishing code, datasets, and other research outputs. Software can be archived and assigned a DOI through Zenodo, and it's integration with GitHub automates a lot of the work. For each software release, Zenodo uses GitHub's APIs to create and store a zipped @@ -18,10 +19,10 @@ copy of the code and extract metadata from the repository to mint a DOI. This in through Zenodo's website. Note, that in addition to DOIs for each release, Zenodo creates a single DOI for the entire project. - ## How to create a citable DOI for your software -#### Using Zenodo's GitHub integration: +### Using Zenodo's GitHub integration + 1. **Make your code public**: If your code is not already public, make it public on GitHub. Ensure that you have an ownership role. This will enable Zenodo integration with your repository for automatic publishing of each software release. @@ -29,41 +30,46 @@ project. text file with human- and machine-readable citation information for your code repository. It includes basic metadata such as author, name of the software, brief abstract, organization name, etc. Zenodo will scrape this file for specific metadata you want included in your DOI. - - + [More information on citation.cff](https://citation-file-format.github.io/#/supported-by-zenodo-) - - + [cff file generator tool](https://citation-file-format.github.io/cff-initializer-javascript/#/) + * [More information on citation.cff](https://citation-file-format.github.io/#/supported-by-zenodo-) + * [cff file generator tool](https://citation-file-format.github.io/cff-initializer-javascript/#/) 3. **Create a free Zenodo account**: Go to [Zenodo](https://zenodo.org/) and create an account. 4. **Connect your GitHub account**: Follow these steps to connect your GitHub account to Zenodo: - + Log into Zenodo with your GitHub credentials. - + Go to your Zenodo account settings. - + Click on the "GitHub" tab - + Authorize the repositories you want to connect to Zenodo. + * Log into Zenodo with your GitHub credentials. + * Go to your Zenodo account settings. + * Click on the "GitHub" tab + * Authorize the repositories you want to connect to Zenodo. 5. **Create a new release**: When you create a new release on GitHub, Zenodo will automatically create a DOI for your code. 6. **Cite your code**: Add the DOI provided by Zenodo to your repository to make it easy for others to cite your code. - + Go to your Zenodo account settings. - + Click on the "GitHub" tab - + Click on the DOI badge icon next to the repository to get the markdown code to add a DOI badge to your repository's - `README.md` file. + * Go to your Zenodo account settings. + * Click on the "GitHub" tab + * Click on the DOI badge icon next to the repository to get the markdown code to add a DOI badge to your repository's + `README.md` file. + +### Manually uploading to Zenodo -#### Manually uploading to Zenodo: Don't have a GitHub account? If you're using bitbucket or another service, a DOI can still be created by manually uploading it to Zenodo. + 1. **Create a Zenodo account**: Go to [Zenodo](https://zenodo.org/) and create an account. 2. **Create a new upload**: Click on the "Upload" button and follow the prompts to upload your code. -3. **Describe your upload**: Fill in the metadata fields to describe your upload. This information will be used to create a DOI for your project. +3. **Describe your upload**: Fill in the metadata fields to describe your upload. This information will be used to + create a DOI for your project. 4. **Publish your upload**: Click on the "Publish" button to publish your code and create a DOI. -5. **Update your code**: If you make changes to your code, you can create a new release on GitHub to create a new version with a new DOI. +5. **Update your code**: If you make changes to your code, you can create a new release on GitHub to create a new + version with a new DOI. ![Zenodo steps](../../_static/zenodo-steps.png) -#### Once set up with Zenodo, you can: +### Once set up with Zenodo, you can + * **Cite your code**: Use the DOI provided by Zenodo to cite your code in publications and other research outputs. * **Get credit for your code**: Zenodo provides metrics on the usage of your code, including downloads and citations. -Note: The total file size limit per record is 50GB (max 100 files). A one-time 100GB quota can be requested and granted on a case-by-case basis. +Note: The total file size limit per record is 50GB (max 100 files). A one-time 100GB quota can be requested and granted +on a case-by-case basis. ## Helpful resources + * [Learn more about NASA's SPD-41a policy](https://science.nasa.gov/researchers/science-information-policy/) * [Learn more about Zenodo](https://about.zenodo.org/) * [Step-by-step instructions using Zenodo from the University of Iowa](https://www.lib.uiowa.edu/data/files/2022/10/Share_and_Preserve_Your_Code_20220728.pdf) @@ -82,5 +88,4 @@ Note: The total file size limit per record is 50GB (max 100 files). A one-time 1 * **API** = Application Programming Interface * **SMD** = Science Mission Directorate - Credit: Content taken from a Confluence guide written by Veronica Martinez diff --git a/guideline_template.md b/guideline_template.md index e972ae9..c4c7508 100644 --- a/guideline_template.md +++ b/guideline_template.md @@ -3,19 +3,24 @@ A short description of the guideline ## Purpose for this guideline + An explanation of how this guideline supports DS workflows, meets internal and external policies, and aids in collaboration and our overall success ## Options for this guideline + An explanation of the options available for this guideline (could be one or more options) ## How to apply this guideline + Detailed instructions or general guidance for implementation of the guideline ## Useful Links + Helpful links to additional resources on the topic ## Acronyms + List of acronyms used in the guideline * **acronym1** = full name