Checklist

CIG welcomes contributions of modeling codes in geophysics that meet our software best practices. Software best practices aid your project in becoming discoverable and reusable. Best practices help you increase the impact of your work and get appropriate credit. By sharing your software, you make science more reproducible, and contribute to a growing software ecosystem. Additionally, following best practices allows you to direct more effort towards feature rich code while increasing your userbase. CIG provides support and resources for projects that have been accepted into the CIG software community.

The Checklist below, is meant as a guide to prepare your software for CIG review.

LEGEND
Bold: mandatory – following minimum best practices
Plain: optional – following standard or target best practices
 * : CIG support available.


Checklist  

▢  Include a ‘README.md’ file

The file should have the following attributes:

✓  Description.
Explain the research problem the software is designed to address.  Discuss any limitations and vulnerabilities. Include instructions on the best way to install and run the software.

✓ Feedback, support, and help.
Explain how a user should provide feedback, report bugs, and get help. Describe how to create new issues and the project’s timeline for responding to bug reports and enhancement requests. You may choose to include this in the CONTRIBUTING.md file.

✓ How to Cite.
Summarizes and reinforces the information in CITATION.

✓ How to get more information.
Provide links to a website, manual, contact information, and any other information helpful to the user.

✓ License.
States the license type and links to the full LICENSE file.

▢  Include an easy-to-find documentation directory, preferably named ‘doc/’

Folder containing user documentation. User manual describes the problem the code addresses and its theoretical basis.  Should include a description of the layout of the code, installations instructions, how to get started, workflows, included benchmarks to verify and validate results where appropriate, and user examples (cookbooks). 

▢  Include a ‘LICENSE’ file

Add a plain text copy of your OSI approved software license to your repository. See:

https://opensource.org/licenses

CIG codes are required to use an OSI approved license. We recommend the GPL-2.0, GPL-3.0, or MIT licenses. 

For more information see also licensing.

▢  Include a ‘CONTRIBUTING.md’ file

Describe how to contribute to code development.  Should include guidelines for coding standards, acceptable contributions, and requirements for additional tests.

▢  Include an ‘INSTALL’ file, or refer to installation instructions in your ‘README.md’

Describes how to build the code including all dependencies in plain text. Codes are required to use a build system like cmake*, or make*

▢  Optional: Include a folder docker/*

Folder containing instructions to build a docker or similar container. 

▢  Include a ‘VERSION’ file

State the current version number. Version numbers must be unique. We recommend following the semantic versioning scheme: https://semver.org/

▢  Include a ‘CHANGES’ file or another form of release notes

Provide a plain text summary of major changes in all existing releases (release notes). Changes should describe new features as well as incompatibilities to previous versions.

▢  If available, use a continuous integration system* and include necessary file

Continuous integration testing is used to automatically build and test code.  Automated tests should be provided to verify software functionality.

▢  Include tests

Provide at least one test, e.g. in a directory ‘tests/’ that ensures the correct execution of the compiled program. Include instructions for how to run and interpret the results in our ‘README.md’ or inside the documentation.

▢  Include citation information at least by providing a ‘CITATION’ file

Explain how you want your work cited in plain text.  This should include a text and bibtex version of any publications and to the software package itself.

We recommend a machine-readable version using one of the following formats:

†      ✓  codemeta.json          https://codemeta.github.io/create/

†      ✓  citation.cff                 https://citation-file-format.github.io/

▢  Optional: Include an ‘AUTHORS’ file

List the authors of your code. This may or may not be the same as those listed in the citation and/or the list of project committers.

▢  Optional: Include an ‘ACKNOWLEDGE’ file

Acknowledge funding agencies or other sources of support to credit.

▢  Optional: Include a ‘CODE_OF_CONDUCT.md’ file

All accepted projects  are required to abide by the CIG Code of Conduct

You may add your own code of conduct. If you do, we recommend using the Contributor Covenant CoC as a base file.

 


Helpful Examples and Links

Useful CIG projects as examples:

 

Some other useful checklists:

  • CII Best Practices Badge Program, Best Practices Criteria for Free/Libre and Open Source Software (FLOSS)

            https://github.com/coreinfrastructure/best-practices-badge/blob/master/doc/criteria.md

  • Journal of Open Source Software – Review checklist

            https://joss.readthedocs.io/en/latest/review_checklist.html

  • EURISE

            https://fair-software.nl/recommendations/checklist

Debug Console

Close19 MBRequestSessionTimelineDatabase32Events25
$_GET
Array( ) Array(

)
$_POST
Array( ) Array(

)
$_COOKIE
Array( ) Array(

)
$_SERVER
Array( TEMP => /var/www/tmp, TMPDIR => /var/www/tmp, TMP => /var/www/tmp, PATH => /usr/lo... Array(
TEMP => /var/www/tmp,
TMPDIR => /var/www/tmp,
TMP => /var/www/tmp,
PATH => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin,
USER => apache,
HOME => /var/www,
FCGI_ROLE => RESPONDER,
REDIRECT_HTTP_AUTHORIZATION => ,
REDIRECT_UNIQUE_ID => YUuxWr6MgZVUr@sGCj52zAAAAAY,
REDIRECT_SCRIPT_URL => /software/software-contribute/software-checklist,
REDIRECT_SCRIPT_URI => https://geodynamics.hubzero.org/software/software-contribute/software-checklist,
REDIRECT_GIT_HTTP_EXPORT_ALL => ,
REDIRECT_HTTPS => on,
REDIRECT_SSL_TLS_SNI => geodynamics.hubzero.org,
REDIRECT_STATUS => 200,
HTTP_AUTHORIZATION => ,
UNIQUE_ID => YUuxWr6MgZVUr@sGCj52zAAAAAY,
SCRIPT_URL => /software/software-contribute/software-checklist,
SCRIPT_URI => https://geodynamics.hubzero.org/software/software-contribute/software-checklist,
GIT_HTTP_EXPORT_ALL => ,
HTTPS => on,
SSL_TLS_SNI => geodynamics.hubzero.org,
HTTP_USER_AGENT => CCBot/2.0 (https://commoncrawl.org/faq/),
HTTP_ACCEPT => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,
HTTP_ACCEPT_LANGUAGE => en-US,en;q=0.5,
HTTP_IF_MODIFIED_SINCE => Sun, 13 Jun 2021 16:26:34 GMT,
HTTP_ACCEPT_ENCODING => br,gzip,
HTTP_HOST => geodynamics.hubzero.org,
HTTP_CONNECTION => Keep-Alive,
SERVER_SIGNATURE => ,
SERVER_SOFTWARE => Apache,
SERVER_NAME => geodynamics.hubzero.org,
SERVER_ADDR => 132.249.203.114,
SERVER_PORT => 443,
REMOTE_ADDR => 3.215.177.171,
DOCUMENT_ROOT => /var/www/geodynamics,
REQUEST_SCHEME => https,
CONTEXT_PREFIX => ,
CONTEXT_DOCUMENT_ROOT => /var/www/geodynamics,
SERVER_ADMIN => root@localhost,
SCRIPT_FILENAME => /var/www/geodynamics/index.php,
REMOTE_PORT => 45672,
REDIRECT_URL => /software/software-contribute/software-checklist,
GATEWAY_INTERFACE => CGI/1.1,
SERVER_PROTOCOL => HTTP/1.1,
REQUEST_METHOD => GET,
QUERY_STRING => ,
REQUEST_URI => /software/software-contribute/software-checklist,
SCRIPT_NAME => /index.php,
PHP_SELF => /index.php,
REQUEST_TIME_FLOAT => 1632350554.4887,
REQUEST_TIME => 1632350554
)
separator .
orderBy id
orderDir asc
1 registerIP
2 access
always
renew
tracker.sid db18638e92345a87696d1f99abe624f3
tracker.ssid db18638e92345a87696d1f99abe624f3
tracker.rsid db18638e92345a87696d1f99abe624f3
  • site 0.067 seconds (+0.067); 12.25 MB (+12.250) - afterInitialise
  • site 0.106 seconds (+0.039); 14.75 MB (+2.500) - afterRoute
  • site 0.152 seconds (+0.046); 17.75 MB (+3.000) - afterDispatch
  • site 0.159 seconds (+0.007); 18.00 MB (+0.250) - beforeRenderModule mod_search (Search)
  • site 0.161 seconds (+0.002); 18.25 MB (+0.250) - afterRenderModule mod_search (Search)
  • site 0.161 seconds (+0.000); 18.25 MB (0.000) - beforeRenderModule mod_menu (Main Menu)
  • site 0.213 seconds (+0.052); 18.75 MB (+0.500) - afterRenderModule mod_menu (Main Menu)
  • site 0.217 seconds (+0.004); 18.75 MB (0.000) - onAfterRender
  • site 0.220 seconds (+0.002); 18.75 MB (0.000) - sessionStore
19 MB

32 Queries Logged: 0.012861967086792 seconds

  1. SELECT data
      FROM `jos_session`
      WHERE `session_id` = 'd2078fe4a5a0f06309ece06bbc9883df'
  2. DELETE
      FROM `jos_session`
      WHERE `session_id` = 'd2078fe4a5a0f06309ece06bbc9883df'
  3. SELECT data
      FROM `jos_session`
      WHERE `session_id` = 'db18638e92345a87696d1f99abe624f3'
  4. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_languages'
  5. SELECT session_id
      FROM `jos_session`
      WHERE `session_id` = 'db18638e92345a87696d1f99abe624f3'
      LIMIT 1
  6. INSERT INTO `jos_session` (`session_id`,`client_id`,`time`,`ip`)
      VALUES ('db18638e92345a87696d1f99abe624f3','0','1632350554','3.215.177.171')
  7. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_members'
  8. SELECT b.id
      FROM `jos_usergroups` AS `a`
      LEFT JOIN jos_usergroups AS b
      ON b.lft <= a.lft
      AND b.rgt >= a.rgt
      WHERE `a`.`id` = '1'
  9. SELECT *
      FROM `jos_viewlevels`
  10. SELECT folder AS type,element AS name,protected,params
      FROM `jos_extensions`
      WHERE `enabled` >= '1'
      AND `type` = 'plugin'
      AND `state` >= '0'
      AND `access` IN ('1','1','4')
      ORDER BY `ordering` ASC
  11. SELECT m.id,m.menutype,m.title,m.alias,m.note,m.path AS route,m.link,m.type,m.level,m.language,m.browserNav,m.access,m.params,m.home,m.img,m.template_style_id,m.component_id,m.parent_id,e.element AS component
      FROM `jos_menu` AS `m`
      LEFT JOIN jos_extensions AS e
      ON e.extension_id = m.component_id
      WHERE `m`.`published` = '1'
      AND `m`.`parent_id` > '0'
      AND `m`.`client_id` = '0'
      ORDER BY `m`.`lft` ASC
  12. SELECT jos_template_styles.id,jos_template_styles.home,jos_template_styles.template,jos_template_styles.params,jos_extensions.protected
      FROM `jos_template_styles`
      INNER JOIN jos_extensions
      ON jos_extensions.element = jos_template_styles.template
      WHERE `jos_template_styles`.`client_id` = '0'
      AND `jos_extensions`.`enabled` = '1'
      AND `jos_extensions`.`type` = 'template'
      AND jos_extensions.`client_id` = `jos_template_styles`.`client_id`
      ORDER BY `home` DESC
  13. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_content'
  14. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_categories'
  15. SELECT a.rules
      FROM `jos_assets` AS `a`
      WHERE `a`.`id` = '1'
      GROUP BY a.id, a.rules, a.lft
  16. SELECT b.rules
      FROM `jos_assets` AS `a`
      LEFT JOIN jos_assets AS b
      ON b.lft <= a.lft
      AND b.rgt >= a.rgt
      WHERE `a`.`name` = 'com_content'
      GROUP BY b.id, b.rules, b.lft
      ORDER BY `b`.`lft` ASC
  17. SELECT a.*,a.id,a.asset_id,a.title,a.alias,a.title_alias,a.introtext,a.fulltext,
      CASE WHEN badcats.id IS NULL THEN a.state ELSE 0 END AS state,a.mask,a.catid,a.created,a.created_by,a.created_by_alias,
      CASE WHEN a.modified IS NULL THEN a.created ELSE a.modified END AS modified,a.modified_by,a.checked_out,a.checked_out_time,a.publish_up,a.publish_down,a.images,a.urls,a.attribs,a.version,a.parentid,a.ordering,a.metakey,a.metadesc,a.access,a.hits,a.metadata,a.featured,a.language,a.xreference,c.title AS category_title,c.alias AS category_alias,c.access AS category_access,u.name AS author,parent.title AS parent_title,parent.id AS parent_id,parent.path AS parent_route,parent.alias AS parent_alias,ROUND(v.rating_sum / v.rating_count, 0) AS rating,v.rating_count AS rating_count
      FROM `jos_content` AS `a`
      LEFT JOIN jos_categories AS c
      ON c.id = a.catid
      LEFT JOIN jos_users AS u
      ON u.id = a.created_by
      LEFT JOIN jos_categories as parent
      ON parent.id = c.parent_id
      LEFT JOIN jos_content_rating AS v
      ON a.id = v.content_id
      LEFT
      OUTER JOIN (SELECT cat.id as id
      FROM jos_categories AS cat JOIN jos_categories AS parent
      ON cat.lft BETWEEN parent.lft
      AND parent.rgt
      WHERE parent.extension = 'com_content'
      AND parent.published <= 0
      GROUP BY cat.id) AS badcats
      ON badcats.id = c.id
      WHERE `a`.`id` = '70'
      AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= '2021-09-22 22:42:34' )
      AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= '2021-09-22 22:42:34' )
      AND `a`.`state` IN ('1','2')
  18. SELECT c.*,
      CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(':', c.id, c.alias) ELSE c.id END as slug
      FROM `jos_categories` AS `c`
      LEFT JOIN jos_categories AS s
      ON (s.lft <= c.lft
      AND s.rgt >= c.rgt) OR (s.lft > c.lft
      AND s.rgt < c.rgt)
      LEFT JOIN (SELECT cat.id as id
      FROM jos_categories AS cat JOIN jos_categories AS parent
      ON cat.lft BETWEEN parent.lft
      AND parent.rgt
      WHERE parent.extension = 'com_content'
      AND parent.published != 1
      GROUP BY cat.id) AS badcats
      ON badcats.id = c.id
      WHERE (`c`.`extension` = 'com_content' OR `c`.`extension` = 'system' )
      AND `c`.`access` IN ('1','1','4')
      AND `c`.`published` = '1'
      AND `s`.`id` = '29'
      AND badcats.id is null
      GROUP BY c.id,c.asset_id,c.access,c.alias,c.checked_out,c.checked_out_time,c.created_time,c.created_user_id,c.description,c.extension,c.hits,c.language,c.level,c.lft,c.metadata,c.metadesc,c.metakey,c.modified_time,c.note,c.params,c.parent_id,c.path,c.published,c.rgt,c.title,c.modified_user_id
      ORDER BY `c`.`lft` ASC
  19. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_users'
  20. SELECT m.id,m.title,m.module,m.position,m.content,m.showtitle,m.params,mm.menuid,e.protected
      FROM `jos_modules` AS `m`
      LEFT JOIN jos_modules_menu AS mm
      ON mm.moduleid = m.id
      LEFT JOIN jos_extensions AS e
      ON e.element = m.module
      AND e.client_id = m.client_id
      WHERE `m`.`published` = '1'
      AND `e`.`enabled` = '1'
      AND (`m`.`publish_up` IS NULL OR `m`.`publish_up` <= '2021-09-22 22:42:34' )
      AND (`m`.`publish_down` IS NULL OR `m`.`publish_down` >= '2021-09-22 22:42:34' )
      AND `m`.`access` IN ('1','1','4')
      AND `m`.`client_id` = '0'
      AND (`mm`.`menuid` = '188' OR `mm`.`menuid` <= '0' )
      ORDER BY `m`.`position` ASC,`m`.`ordering` ASC
  21. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_search'
  22. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_events'
  23. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_newsletter'
  24. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_groups'
  25. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_projects'
  26. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_citations'
  27. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_courses'
  28. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_resources'
  29. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_support'
  30. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_kb'
  31. SELECT extension_id AS id,element AS "option",params,enabled
      FROM `jos_extensions`
      WHERE `type` = 'component'
      AND `element` = 'com_wishlist'
  32. UPDATE `jos_session`
      SET `data` = '__default|a:9:{s:15:\"session.counter\";i:1;s:19:\"session.timer.start\";i:1632350554;s:18:\"session.timer.last\";i:1632350554;s:17:\"session.timer.now\";i:1632350554;s:8:\"registry\";O:23:\"Hubzero\\Config\\Registry\":2:{s:7:\"\0*\0data\";O:8:\"stdClass\":1:{s:1:\"0\";s:7:\"session\";}s:9:\"separator\";s:1:\".\";}s:4:\"user\";C:17:\"Hubzero\\User\\User\":22:{a:1:{s:5:\"guest\";b:1;}}s:11:\"tracker.sid\";s:32:\"db18638e92345a87696d1f99abe624f3\";s:12:\"tracker.ssid\";s:32:\"db18638e92345a87696d1f99abe624f3\";s:12:\"tracker.rsid\";s:32:\"db18638e92345a87696d1f99abe624f3\";}',`time` = '1632350554',`ip` = '3.215.177.171'
      WHERE `session_id` = 'db18638e92345a87696d1f99abe624f3'
  • onAfterInitialise Method plgSystemP3p::onAfterInitialise /core/plugins/system/p3p/p3p.php:21
  • onAfterInitialise Method plgSystemRemember::onAfterInitialise /core/plugins/system/remember/remember.php:20
  • onAfterInitialise Method plgSystemHubzero::onAfterInitialise /core/plugins/system/hubzero/hubzero.php:21
  • onAfterInitialise Method plgSystemXFeed::onAfterInitialise /core/plugins/system/xfeed/xfeed.php:21
  • onAfterInitialise Method plgSystemSupergroup::onAfterInitialise /core/plugins/system/supergroup/supergroup.php:113
  • onAfterInitialise Method plgSystemReferrerpolicy::onAfterInitialise /core/plugins/system/referrerpolicy/referrerpolicy.php:21
  • onAfterRoute Method plgSystemJquery::onAfterRoute /core/plugins/system/jquery/jquery.php:21
  • onAfterRoute Method plgSystemSpamjail::onAfterRoute /core/plugins/system/spamjail/spamjail.php:21
  • onAfterRoute Method plgSystemIncomplete::onAfterRoute /core/plugins/system/incomplete/incomplete.php:21
  • onAfterRoute Method plgSystemUnconfirmed::onAfterRoute /core/plugins/system/unconfirmed/unconfirmed.php:21
  • onAfterRoute Method plgSystemUnapproved::onAfterRoute /core/plugins/system/unapproved/unapproved.php:21
  • onAfterRoute Method plgSystemPassword::onAfterRoute /core/plugins/system/password/password.php:21
  • onContentPrepare Method plgContentLoadmodule::onContentPrepare /core/plugins/content/loadmodule/loadmodule.php:35
  • onContentPrepare Method plgContentEmailcloak::onContentPrepare /core/plugins/content/emailcloak/emailcloak.php:25
  • onContentPrepare Method plgContentPagebreak::onContentPrepare /core/plugins/content/pagebreak/pagebreak.php:35
  • onContentPrepare Method plgContentXhubtags::onContentPrepare /core/plugins/content/xhubtags/xhubtags.php:25
  • onContentPrepare Method plgContentFormatwiki::onContentPrepare /core/plugins/content/formatwiki/formatwiki.php:63
  • onContentPrepare Method plgContentFormathtml::onContentPrepare /core/plugins/content/formathtml/formathtml.php:105
  • onContentPrepare Method plgContentExternalhref::onContentPrepare /core/plugins/content/externalhref/externalhref.php:41
  • onContentBeforeDisplay Method plgContentPagenavigation::onContentBeforeDisplay /core/plugins/content/pagenavigation/pagenavigation.php:25
  • onContentBeforeDisplay Method plgContentVote::onContentBeforeDisplay /core/plugins/content/vote/vote.php:32
  • onAfterDispatch Method plgSystemMobile::onAfterDispatch /core/plugins/system/mobile/mobile.php:22
  • onAfterDispatch Method plgSystemDebug::onAfterDispatch /core/plugins/system/debug/debug.php:60
  • onAfterDispatch Method PlgSystemHighlight::onAfterDispatch /core/plugins/system/highlight/highlight.php:25
  • onAfterRender Method plgSystemSef::onAfterRender /core/plugins/system/sef/sef.php:21