Somesy (software metadata sync) is a CLI tool to avoid messy software project metadata by keeping it in sync.
Many development tools either declare or need information about the software project they are used in, such as: the project name, description, version, repository url, license or project authors. Most such tools come with configuration files and conventions that are specific to the programming language or chosen technology. Emerging best practices for FAIR software metadata require to add even more files where such metadata must be stated.
If good project metadata was a fire-and-forget issue, this would be acceptable, but software is never standing still - maintainers change, contributors come and go, the version number is regularly increased, the project might be moved to a different location. Properly maintaining this kind of information in various files scattered around the project is usually tedious, error-prone and time consuming manual labor.
Somesy automates the synchronization of software project metadata and frees your time to focus on your actual work.
You can find more information on configuring, using and contributing to somesy
in the
documentation.
Starting with version 0.3.0, somesy
supports Linux, MacOS and Windows.
Make sure that you use the latest version in order to avoid any problems.
Somesy requires Python >=3.8
. To get a first impression, you can install the
latest stable version of somesy from PyPI using pip
:
pip install somesy
Yes, somesy is another tool with its own configuration. However, for your
project metadata it is hopefully the last file you need, and the only one you
have to think about, somesy
will take care of the others for you!
To get started, create a file named somesy.toml
:
[project]
name = "my-amazing-project"
version = "0.1.0"
description = "Brief description of my amazing software."
keywords = ["some", "descriptive", "keywords"]
license = "MIT"
repository = "https://github.com/username/my-amazing-project"
# This is you, the proud author of your project:
[[project.people]]
given-names = "Jane"
family-names = "Doe"
email = "[email protected]"
orcid = "https://orcid.org/0000-0000-0000-0001"
author = true # is a full author of the project (i.e. appears in citations)
maintainer = true # currently maintains the project (i.e. is a contact person)
# this person is an acknowledged contributor, but not author or maintainer:
[[project.people]]
given-names = "Another"
family-names = "Contributor"
email = "[email protected]"
orcid = "https://orcid.org/0000-0000-0000-0002"
# ... but for scientific publications, this contributor should be listed as author:
publication_author = true
[config]
verbose = true # show detailed information about what somesy is doing
Alternatively, you can also add the somesy configuration to an existing
pyproject.toml
, package.json
, Project.toml
, or fpm.toml
file. The somesy manual contains examples showing how to do that.
Once somesy is installed and configured, somesy can take over and manage your project metadata.
Now you can run somesy
simply by using
somesy sync
The information in your somesy.toml
is used as the primary and
authoritative source for project metadata, which is used to update all
supported (and enabled) target files. You can find an overview of supported
formats further below.
By default, somesy
will create (if they did not exist) or update CITATION.cff
and codemeta.json
files in your repository.
If you happen to use
pyproject.toml
(in Python projects),package.json
(in JavaScript projects),Project.toml
(in Julia projects),fpm.toml
(in Fortran projects),pom.xml
(in Java projects),mkdocs.yml
(in projects using MkDocs),Cargo.toml
(in Rust projects)
then somesy would also update the respective information there.
You can see call available options with somesy --help
,
all of these can also be conveniently set in your somesy.toml
file.
We highly recommend to use somesy
as a pre-commit hook.
A pre-commit hook runs on every commit to automatically point out issues or fix them on the spot,
so if you do not use pre-commit in your project yet, you should start today!
When used this way, somesy
can fix most typical issues with your project
metadata even before your changes can leave your computer.
To add somesy
as a pre-commit hook, add it to your .pre-commit-config.yaml
file in the root folder of your repository:
repos:
# ... (your other hooks) ...
- repo: https://github.com/Materials-Data-Science-and-Informatics/somesy
rev: "v0.4.3"
hooks:
- id: somesy
Note that pre-commit
gives somesy
the staged version of files,
so when using somesy
with pre-commit, keep in mind that
- if
somesy
changed some files, you need togit add
them again (and rerun pre-commit) - if you explicitly run
pre-commit
, make sure togit add
all changed files (just like before a commit)
Here is an overview of all the currently supported files and formats.
Input Formats | Status | Target Formats | Status | |
---|---|---|---|---|
(.)somesy.toml | ✓ | pyproject.toml (poetry) | ✓ | |
pyproject.toml | ✓ | pyproject.toml (setuptools) | ✓(1.) | |
package.json | ✓ | package.json (JavaScript) | ✓(2.) | |
Project.toml | ✓ | Project.toml (Julia) | ✓ | |
fpm.toml | ✓ | fpm.toml (Fortran) | ✓(3.) | |
✓ | pom.toml (Java) | ✓(4.) | ||
Cargo.toml | ✓ | Cargo.toml (Rust) | ✓ | |
mkdocs.yml | ✓(5.) | |||
CITATION.cff | ✓ | |||
codemeta.json | ✓(6.) |
Notes:
- note that
somesy
does not support setuptools dynamic fields package.json
only supports one author, sosomesy
will pick the first listed authorfpm.toml
only supports one author and maintainer, sosomesy
will pick the first listed author and maintainerpom.xml
has no concept ofmaintainers
, but it can have multiple licenses (somesy only supports one main project license)mkdocs.yml
is a bit special, as it is not a project file, but a documentation file.somesy
will only update it if it exists and is enabled in the configuration- unlike other targets,
somesy
will re-create thecodemeta.json
(i.e. do not edit it by hand!)
If you want to cite this project in your scientific work, please use the citation file in the repository.
We kindly thank all authors and contributors.
This project was developed at the Institute for Materials Data Science and Informatics (IAS-9) of the Jülich Research Center and funded by the Helmholtz Metadata Collaboration (HMC), an incubator-platform of the Helmholtz Association within the framework of the Information and Data Science strategic initiative.