Indexers will translate GitHub/Gitlab/Gogs/Gitea/...'s API response into this ontology.
The grammar itself would mostly likely be JSON-LD so it is compatible with our other metadata (CodeMeta/schema.org)
Current options:
* create our own
* pick an existing forge's ontology, and map everything to it -> this would eventually turn into inventing our own ontology anyway
* [[ https://forgefed.peers.community/vocabulary.html | ForgeFed's ontology ]] (and ActivityPub) -> not suitable for us; at the moment it's a disjoint set from what we want (ForgeFed only cares about issues and PRs)
* GHTorrent -> I am told they are working on a generic way to represent data that isn't tied to GitHub, but I cannot find it
* Wikidata (eg. https://www.wikidata.org/wiki/Property:P9100 )
* DOAP
| Description | [[ https://docs.github.com/en/rest/repos/repos#get-a-repository | GitHub ]] | [[ https://docs.gitlab.com/ee/api/projects.html#get-single-project | Gitlab ]] | [[ https://try.gitea.io/api/swagger#/repository/repoGet | Gitea ]] |schema.org | Codemeta | Forgefed | Wikidata | DOAP |
| -- | -- | -- | -- | -- | -- | -- | -- |
| Project name | name | name | name / full_name
| Project avatar | | | avatar_url
| Owner name | owner.login | namespace.name |
| Owner avatar | owner.avatar_url | namespace.avatar_url |
| Owner homepage | ? | ? | |
| description | description | description | description
| | homepage | | website
| whether it's a fork | fork | | fork
| what it's a fork of | parent + source | |
| whether it's a mirror | ? | |
| what it's a mirror of | source? | |
| | forks_count | forks_count | forks_count
| | created_at | created_at | created_at
| | updated_at | last_activity_at | updated_at
| | pushed_at | |
| | stargazers_count | star_count | stars_count
| | watchers / watchers_count | | watchers_count
| | open_issues / open_issues_count | open_issues_count | open_issues_count
| | | | open_pr_counter
| | visibility (private/internal/public) | visibility (private/internal/public) | internal + private (booleans)
| | default_branch | default_branch | default_branch
| programming language | language | | language
| | license.spdx_id | |
| | | license.nickname |
| possibly inconsistent | license.key | license.key |
| possibly inconsistent | license.name | license.name |
| Tags/labels | topics | topics |
| | has_issues | | has_issues
| | | | internal_tracker.* + external_tracker.*
| | (always true if repo not disabled) | merge_request_enabled | has_pull_requests
| | | jobs_enabled |
| | | snippets_enabled |
| | | can_create_merge_request_in |
| | | resolve_outdated_diff_discussions |
| (different semantics) | | merge_method | allow_merge_commits + allow_rebase + allow_rebase_explicit + allow_squash_merge + default_merge_style
| | | squash_option |
| | has_projects | | has_projects
| | has_downloads | |
| | has_wiki | wiki_enabled | has_wiki
| | | | external_wiki.*
| | has_pages | |
| | archived | archived | archived
| | disabled | |
| | | | empty
| | | mirror | mirror
| | | | mirror_interval
| | | | mirror_updated
| | | | original_url
| | | merge_commit_template |
| | | squash_commit_template |
| | | marked_for_deletion_on |
| not documented | size | |
| not documented | | | size
| | | statistics.commit_count |
| | | statistics.storage_size |
| | | statistics.repository_size |
| | | statistics.<a few more> |
| | | | release_counter