|
1 | 1 | # LinkML Registry |
2 | 2 |
|
3 | | -Registry of LinkML schemas |
| 3 | +An automatically generated registry of LinkML schemas discovered from GitHub repositories. |
4 | 4 |
|
5 | | -See the registry: |
| 5 | +## View the Registry |
6 | 6 |
|
7 | | - * [linkml-registry](https://linkml.github.io/linkml-registry/registry/) |
| 7 | +* **Documentation**: [https://linkml.github.io/linkml-registry/registry/](https://linkml.github.io/linkml-registry/registry/) |
| 8 | +* **Registry Data**: [linkml_registry.yaml](linkml_registry.yaml) |
8 | 9 |
|
9 | | -Metadata: |
| 10 | +## Registry Generation |
10 | 11 |
|
11 | | - * [models.yaml](models.yaml) |
| 12 | +The LinkML Registry is automatically generated using GitHub's Search API to discover repositories that use LinkML. |
| 13 | +The registry is updated through automated scripts that search for, analyze, and catalog LinkML projects. |
12 | 14 |
|
13 | | -Registry Schema: |
| 15 | +### Discovery Script |
14 | 16 |
|
15 | | - * [https://linkml.github.io/linkml-registry/registry/](https://linkml.github.io/linkml-registry/registry) |
| 17 | +The main discovery script (`src/scripts/discover_linkml_repos.py`) performs the following operations: |
16 | 18 |
|
17 | | -## How to register a schema |
| 19 | +#### Search Queries |
| 20 | +- **Repository searches**: Queries for repositories containing "linkml", "linkml-project-cookiecutter", |
| 21 | +"linkml in:description", and "LinkML in:description" |
| 22 | +- **File content searches**: Searches for "linkml" in specific files including: |
| 23 | + - `pyproject.toml` |
| 24 | + - `requirements.txt` |
| 25 | + - `setup.py`, `setup.cfg` |
| 26 | + - `poetry.lock`, `Pipfile` |
| 27 | + - README files (`.md`, `.rst`) |
18 | 28 |
|
19 | | -Make a Pull Request on: |
| 29 | +#### Filtering Logic |
| 30 | +The following filters are applied to discovered repositories: |
20 | 31 |
|
21 | | - * [src/linkml_registry/data/models.yaml](src/linkml_registry/data/models.yaml) |
| 32 | +- **Fork exclusion**: Skips forked repositories to focus on original projects |
| 33 | +- **LinkML organization exclusion**: Excludes repositories from the `linkml/` organization itself to focus on external usage |
| 34 | +- **Minimum stars**: Configurable minimum GitHub star count (default: 0) |
| 35 | +- **Archive status**: Filters out archived repositories during analysis |
22 | 36 |
|
23 | | -You should also add the `linkml` tag on your repo so it shows up here: [https://github.com/topics/linkml](https://github.com/topics/linkml) |
| 37 | +#### Repository Analysis |
| 38 | +For each discovered repository, the script extracts: |
24 | 39 |
|
25 | | -This is then compiled to the models.yaml in the top level (do not edit this directly). Currently this is a manual step but in future this will be done with github actions |
| 40 | +- **Basic metadata**: Title, description, license, GitHub URL |
| 41 | +- **Domain classification**: Categorizes projects by domain (Biology, Computer Science, Chemistry, etc.) |
| 42 | +- **Status determination**: Assesses if projects are active, inactive, or maintenance mode |
| 43 | +- **Topics extraction**: Collects relevant GitHub topics, filtering out generic ones |
| 44 | +- **Schema URL detection**: Attempts to identify documentation URLs (GitHub Pages, w3id.org) |
| 45 | +- **Contact information**: Extracts repository owner/organization |
26 | 46 |
|
27 | | -## Rebuilding the index |
| 47 | +#### Sorting and Organization |
| 48 | +- **Primary sort**: By GitHub star count (descending) |
| 49 | +- **Secondary sort**: Alphabetically by repository title within same star count |
28 | 50 |
|
29 | | -TODO: run via gh actions |
| 51 | +### Regeneration Schedule |
| 52 | + |
| 53 | +The registry is automatically updated through GitHub Actions workflows: |
| 54 | + |
| 55 | +- **Trigger**: Push to main branch or manual dispatch |
| 56 | +- **Frequency**: Can be run on-demand via the GitHub Actions interface |
| 57 | +- **Process**: |
| 58 | + 1. Runs discovery script to update `linkml_registry.yaml` |
| 59 | + 2. Generates documentation from the updated registry |
| 60 | + 3. Commits changes back to the repository |
| 61 | + 4. Deploys updated documentation to GitHub Pages |
| 62 | + |
| 63 | +### Manual Generation |
| 64 | + |
| 65 | +To manually update the registry: |
30 | 66 |
|
31 | 67 | ```bash |
32 | | -make src/docs/registry.md |
| 68 | +# Discover and update the registry |
| 69 | +make discover |
| 70 | + |
| 71 | +# Generate documentation |
| 72 | +make gendoc |
| 73 | + |
| 74 | +# View locally |
| 75 | +make testdoc |
33 | 76 | ``` |
| 77 | + |
| 78 | +### Scripts and Configuration |
| 79 | + |
| 80 | +- **Discovery script**: `src/scripts/discover_linkml_repos.py` |
| 81 | +- **Documentation generator**: `src/scripts/generate_registry_docs.py` |
| 82 | +- **Template files**: `src/doc_templates/` |
| 83 | +- **Makefile targets**: `discover`, `gendoc`, `testdoc` |
| 84 | + |
| 85 | +### GitHub Workflows |
| 86 | + |
| 87 | +- **`.github/workflows/regenerate-registry.yaml`**: Updates registry data |
| 88 | +- **`.github/workflows/deploy-docs.yaml`**: Deploys documentation to GitHub Pages |
| 89 | +- **`.github/workflows/test-pr.yaml`**: Runs tests on pull requests |
| 90 | + |
| 91 | +The registry serves as a comprehensive catalog of the LinkML ecosystem, helping users discover projects, tools, |
| 92 | +and schemas that utilize the LinkML framework. |
0 commit comments