Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/pypi-publish.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# This workflows will upload a Python Package using poetry when a release is created
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries

name: Publish RSMetaCheck package to PyPI
name: Publish rsmetacheck package to PyPI

on:
workflow_dispatch:
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ MetaCheck identifies **29 different types of metadata quality issues** across mu
(Python, Java, C++, C, R, Rust). These pitfalls range from version mismatches and
license template placeholders to broken URLs and improperly formatted metadata fields.

You can visit our [catalog](https://softwareunderstanding.github.io/RsMetaCheck/) to see in details what these pitfalls are, where are they usually detected and how to fix them.
You can visit our [catalog](https://softwareunderstanding.github.io/rsmetacheck/) to see in details what these pitfalls are, where are they usually detected and how to fix them.

### Supported Pitfall Types

Expand Down Expand Up @@ -45,8 +45,8 @@ The tool detects the following categories of issues:
1. **Clone the repository**:

```bash
git clone https://github.com/SoftwareUnderstanding/RsMetaCheck.git
cd RsMetaCheck
git clone https://github.com/SoftwareUnderstanding/rsmetacheck.git
cd rsmetacheck
```

2. **Install with Poetry**:
Expand All @@ -67,7 +67,7 @@ The tool detects the following categories of issues:
Alternatively, you can install directly from GitHub:

```bash
pip install git+https://github.com/SoftwareUnderstanding/RsMetaCheck.git
pip install git+https://github.com/SoftwareUnderstanding/rsmetacheck.git
```

## Usage
Expand Down
8 changes: 4 additions & 4 deletions codemeta.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,16 @@
"givenName": "Anas"
}
],
"codeRepository": "git+https://github.com/SoftwareUnderstanding/RsMetaCheck.git",
"codeRepository": "git+https://github.com/SoftwareUnderstanding/rsmetacheck.git",
"dateModified": "2026-07-22",
"description": "Automated tool to detect metadata quality pitfalls in software repositories (Python, Java, C++, etc.). Analyzes SoMEF output files for version mismatches, license issues, broken URLs, and more. ",
"downloadUrl": "https://github.com/SoftwareUnderstanding/RsMetaCheck/archive/refs/heads/main.tar.gz",
"downloadUrl": "https://github.com/SoftwareUnderstanding/rsmetacheck/archive/refs/heads/main.tar.gz",
"keywords": ["codemeta", "pitfalls", "metadata", "analysis"],
"license": "https://spdx.org/licenses/MIT",
"name": "RsMetaCheck",
"name": "rsmetacheck",
"operatingSystem": "Linux",
"programmingLanguage": "Python",
"version": "0.3.5",
"developmentStatus": "active",
"issueTracker": "https://github.com/SoftwareUnderstanding/RsMetaCheck/issues"
"issueTracker": "https://github.com/SoftwareUnderstanding/rsmetacheck/issues"
}
2 changes: 1 addition & 1 deletion data/examples/notes_example.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"total_notes": 1,
"notes": [
{
"repository": "SoftwareUnderstanding/RsMetaCheck",
"repository": "SoftwareUnderstanding/rsmetacheck",
"file_name": "output_1.json",
"code": "P001",
"note": "Version discrepancy: codemeta.json '0.3.2dev' vs release '0.3.1'"
Expand Down
4 changes: 2 additions & 2 deletions docs/catalog.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RsMetaCheck Catalog</title>
<title>rsmetacheck Catalog</title>

<!-- DataTables CSS -->
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
Expand Down Expand Up @@ -179,7 +179,7 @@ <h1>Metadata Pitfalls &amp; Warnings Catalog</h1>
<p>
This is a catalog of the pitfalls and warnings we have come across during our research on software metadata quality.
Based on these findings, we at <a href="https://oeg.fi.upm.es/" target="_blank">Ontology Engineering Group (OEG)</a>
have developed our tool <strong><a href="https://github.com/SoftwareUnderstanding/RsMetaCheck" target="_blank">RSMetaCheck</a></strong> to automatically diagnose and identify these common issues in software metadata files.
have developed our tool <strong><a href="https://github.com/SoftwareUnderstanding/rsmetacheck" target="_blank">rsmetacheck</a></strong> to automatically diagnose and identify these common issues in software metadata files.
Warnings do not have a severity level because originally they were opted due to their low severity and classified as "Warnings" instead of "Pitfalls"
</p>
</div>
Expand Down
4 changes: 2 additions & 2 deletions docs/ground_truth/charts.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RsMetaCheck &mdash; 0.3.0 vs 0.3.5 Charts</title>
<title>rsmetacheck &mdash; 0.3.0 vs 0.3.5 Charts</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
Expand Down Expand Up @@ -80,7 +80,7 @@ <h1>0.3.0 vs 0.3.5 &mdash; Charts</h1>

<p style="text-align: center; color: #555; font-size: 0.95em; line-height: 1.5; max-width: 800px; margin: 0 auto 20px auto;">
Pitfall and warning detection distributions across 150 repositories evaluated by
RsMetaCheck versions 0.3.0 and 0.3.5.
rsmetacheck versions 0.3.0 and 0.3.5.
</p>

<hr class="section-divider">
Expand Down
6 changes: 3 additions & 3 deletions docs/ground_truth/comparison.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RsMetaCheck &mdash; 0.3.0 vs 0.3.5 Comparison</title>
<title>rsmetacheck &mdash; 0.3.0 vs 0.3.5 Comparison</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
Expand Down Expand Up @@ -125,9 +125,9 @@
<h1>0.3.0 vs 0.3.5 &mdash; Comparison</h1>

<p style="text-align: center; color: #555; font-size: 0.95em; line-height: 1.5; max-width: 800px; margin: 0 auto 20px auto;">
This page compares the detection results of RsMetaCheck version 0.3.0 and
This page compares the detection results of rsmetacheck version 0.3.0 and
version 0.3.5 across 150 repositories. What is highlighed in red is what was previously falsly flagged and fixed in the latest
release, and what is highlighted in green is what was not being detected in the ealier version of RSMetaCheck and fixed in the latest
release, and what is highlighted in green is what was not being detected in the ealier version of rsmetacheck and fixed in the latest
release.
</p>

Expand Down
2 changes: 1 addition & 1 deletion docs/ground_truth/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RsMetaCheck Pitfalls Report</title>
<title>rsmetacheck Pitfalls Report</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
Expand Down
8 changes: 4 additions & 4 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RsMetaCheck</title>
<title>rsmetacheck</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
Expand Down Expand Up @@ -96,14 +96,14 @@
})();
</script>
<div class="container">
<h1>RsMetaCheck Study</h1>
<h1>rsmetacheck Study</h1>
<p class="subtitle">
<a href="https://github.com/SoftwareUnderstanding/RsMetaCheck">RsMetaCheck</a> is an automated tool built to detect metadata quality pitfalls in software repositories, from version mismatches, license issues,
<a href="https://github.com/SoftwareUnderstanding/rsmetacheck">rsmetacheck</a> is an automated tool built to detect metadata quality pitfalls in software repositories, from version mismatches, license issues,
broken URLs using <a href="https://github.com/KnowledgeCaptureAndDiscovery/somef">SoMEF</a> extraction capabilities. We built a catalog of the issues we documented
throughout our study, classsifed in two categories: <b>Pitfalls</b> and <b>Warnings</b> based on the severity of the issue and the consensus reached between domain experts. To verify
the performance of our tool we made for this study, we built a ground truth dataset based on a sample of 150 repositories sampled from a dataset of repositories that consists of
<a href="https://github.com/TheOSSci/InnovationSprint2025_Extending_Software_Metadata">InnovationSprint2025</a> and a small sample of openAIRE, amounting to a total of 1500 repositories, then had
RSMetaCheck tested using version 0.3.0 and 0.3.5 (To evaluate the progress of our perfromance) with comparison to the ground truth that we have established.
rsmetacheck tested using version 0.3.0 and 0.3.5 (To evaluate the progress of our perfromance) with comparison to the ground truth that we have established.
</p>
<div class="cards">
<a href="catalog.html" class="card">
Expand Down
6 changes: 3 additions & 3 deletions docs/index.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Research Metadata Check (RSMetaCheck) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.18956787.svg)](https://doi.org/10.5281/zenodo.18956787) [![PyPI - Version](https://img.shields.io/pypi/v/rsmetacheck)](https://pypi.org/project/rsmetacheck/)
# Research Metadata Check (rsmetacheck) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.18956787.svg)](https://doi.org/10.5281/zenodo.18956787) [![PyPI - Version](https://img.shields.io/pypi/v/rsmetacheck)](https://pypi.org/project/rsmetacheck/)

**RSMetaCheck** is an automated tool for detecting common metadata quality issues (pitfalls & warnings) in software repositories.
**rsmetacheck** is an automated tool for detecting common metadata quality issues (pitfalls & warnings) in software repositories.
The tool analyzes SoMEF (Software Metadata Extraction Framework) output files to identify various problems in repository metadata
files such as `codemeta.json`, `package.json`, `setup.py`, `DESCRIPTION`, and others.

## Features

RSMetaCheck identifies **29 different types of metadata quality issues** across multiple programming languages (Python, Java, C++, C, R, Rust).
rsmetacheck identifies **29 different types of metadata quality issues** across multiple programming languages (Python, Java, C++, C, R, Rust).

- **Version Consistency**: Detects mismatches between metadata files and actual software releases.
- **License Validation**: Identifies template placeholders, missing versions, and legal ambiguities in licenses.
Expand Down
8 changes: 4 additions & 4 deletions docs/installation.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# Installation

RSMetaCheck requires **Python 3.11**.
rsmetacheck requires **Python 3.11**.

## Using Poetry (Recommended)

1. **Clone the repository**:

```bash
git clone https://github.com/SoftwareUnderstanding/RsMetaCheck.git
cd RsMetaCheck
git clone https://github.com/SoftwareUnderstanding/rsmetacheck.git
cd rsmetacheck
```

2. **Install with Poetry**:
Expand All @@ -30,5 +30,5 @@ RSMetaCheck requires **Python 3.11**.
Alternatively, you can install directly from GitHub:

```bash
pip install git+https://github.com/SoftwareUnderstanding/RsMetaCheck.git
pip install git+https://github.com/SoftwareUnderstanding/rsmetacheck.git
```
2 changes: 1 addition & 1 deletion docs/output.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Output

When you run RSMetaCheck, it generates several files containing the results of the analysis.
When you run rsmetacheck, it generates several files containing the results of the analysis.

## Generated Files

Expand Down
13 changes: 6 additions & 7 deletions docs/usage.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Usage

RSMetaCheck can be used as a local command-line tool or integrated into your CI/CD pipeline as a GitHub Action or a GitLab CI/CD job.
rsmetacheck can be used as a local command-line tool or integrated into your CI/CD pipeline as a GitHub Action or a GitLab CI/CD job.

## Command Line Interface

Expand Down Expand Up @@ -43,7 +43,7 @@ poetry run rsmetacheck --input repositories.json

### Customize Output Paths

By default RSMetaCheck writes its output to the current working directory. Use the flags below to redirect any of the outputs:
By default rsmetacheck writes its output to the current working directory. Use the flags below to redirect any of the outputs:

| Flag | Default | Description |
|------|---------|-------------|
Expand All @@ -62,7 +62,7 @@ poetry run rsmetacheck --input repositories.json \

### Version Discrepancy Notes

When a metadata version differs from the release version only slightly (every component differs by less than 2, e.g. `0.4.3.dev1` vs `0.4.2` — the pre-release suffix means it is numerically close), RSMetaCheck records a **note** instead of a full pitfall. Notes are only written when `--notes-output` is provided:
When a metadata version differs from the release version only slightly (every component differs by less than 2, e.g. `0.4.3.dev1` vs `0.4.2` — the pre-release suffix means it is numerically close), rsmetacheck records a **note** instead of a full pitfall. Notes are only written when `--notes-output` is provided:

```bash
poetry run rsmetacheck --input https://github.com/example/repo --notes-output ./notes.json
Expand Down Expand Up @@ -126,7 +126,7 @@ poetry run rsmetacheck --input https://github.com/example/repo --generate-codeme

### Configure Analysis Rules

RSMetaCheck automatically detects a `.rsmetacheck.toml` (or `rsmetacheck.toml`) file at the working directory. Alternatively, supply a custom path with `--config`:
rsmetacheck automatically detects a `.rsmetacheck.toml` (or `rsmetacheck.toml`) file at the working directory. Alternatively, supply a custom path with `--config`:

```bash
poetry run rsmetacheck --input https://github.com/example/repo --config ./ci/rsmetacheck.toml
Expand Down Expand Up @@ -174,12 +174,12 @@ poetry run rsmetacheck --input https://github.com/example/repo --config-profile

## GitHub Action

You can integrate RSMetaCheck into your GitHub workflow to test your own repository and detect issues automatically.
You can integrate rsmetacheck into your GitHub workflow to test your own repository and detect issues automatically.
Please refer to our action in the GitHub MarketPlace at [rsmetacheck actions](https://github.com/marketplace/actions/rsmetacheck) for more information.

## GitLab CI/CD

You can integrate RSMetaCheck into your GitLab pipelines by adding the following snippet to your `.gitlab-ci.yml` file:
You can integrate rsmetacheck into your GitLab pipelines by adding the following snippet to your `.gitlab-ci.yml` file:

```yaml
rsmetacheck:
Expand Down Expand Up @@ -220,4 +220,3 @@ rsmetacheck:
when: always
expire_in: 1 week
```

2 changes: 1 addition & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
site_name: RSMetaCheck
site_name: rsmetacheck
theme:
name: material
extra_css:
Expand Down
2 changes: 1 addition & 1 deletion src/rsmetacheck/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ def cli():
parser.add_argument(
"--config",
default=None,
help="Path to RsMetaCheck TOML config file (default: auto-detect .rsmetacheck.toml at repository root).",
help="Path to rsmetacheck TOML config file (default: auto-detect .rsmetacheck.toml at repository root).",
)
parser.add_argument(
"--config-profile",
Expand Down
2 changes: 1 addition & 1 deletion src/rsmetacheck/detect_pitfalls_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ def detect_all_pitfalls(
if "result" in item and "value" in item["result"]:
repo_name = item["result"]["value"]
break
w3id_code = f"https://softwareunderstanding.github.io/RsMetaCheck/#{pitfall_code}"
w3id_code = f"https://softwareunderstanding.github.io/rsmetacheck/#{pitfall_code}"
notes = pitfall_result.get("notes", [])
if notes:
for note_entry in notes:
Expand Down
11 changes: 11 additions & 0 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -552,6 +552,17 @@ def test_cli_input_required(monkeypatch):
pass


def test_cli_help_mentions_rsmetacheck_config(monkeypatch, capsys):
"""Help text should reference the lowercase rsmetacheck config name."""
monkeypatch.setattr("sys.argv", ["rsmetacheck", "--help"])

with pytest.raises(SystemExit):
cli_module.cli()

captured = capsys.readouterr()
assert "Path to rsmetacheck TOML config file" in captured.out


def test_cli_config_profile_forwarded_to_run_analysis(monkeypatch, tmp_path):
"""--config and --config-profile should load and forward analysis config."""
somef_file = tmp_path / "somef_output.json"
Expand Down
3 changes: 2 additions & 1 deletion tests/test_e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,8 @@ def test_notes_output_created_when_specified(self, tmp_path):
assert notes_file.exists()
notes_data = json.loads(notes_file.read_text())
assert "notes" in notes_data
assert notes_data["total_notes"] >= 0
assert notes_data["total_notes"] == 1
assert notes_data["notes"][0]["code"] == "https://softwareunderstanding.github.io/rsmetacheck/#P001"


class TestMultipleRepoPipeline:
Expand Down
Loading