Below is an example for a jekyll template to provide structed data in JSON-LD for a software application using the site.github
namespace (provided by the github-metadata) plugin). Assuming there is at least one release, this snippet is a starting point. Content represented by three dots ...
usually needs to be added manually to the snippet:
{%- assign release = site.github.latest_release -%}
{
"@context": "http://schema.org/",
"@type": "SoftwareApplication",
"codeRepository": "{{ repository_url }}",
"programmingLanguage": {
"@type": "ComputerLanguage",
"name": "{{ site.github.language }}",
},
"targetProduct": {
"@type": "SoftwareApplication",
"name": "{{ site.github.project_title | default: site.github.repository_name }}",
"softwareVersion": "{{ release.tag_name | strip | remove: 'v' }}",
"alternateName": [
"...",
"{{ release.name }}"
],
"description": "{{ site.github.project_tagline }}",
"applicationCategory": "...",
"inLanguage": ["...", "..."],
"operatingSystem": [
"...",
"...",
"..."
],
"downloadUrl": "{{ release.assets[0].browser_download_url | release.assets[0].html_url | default: site.github.releases_url }}",
"fileSize": "{{ release.assets[0].size | divided_by: 1024 }}",
"releaseNotes": [
{{ release.body | jsonify }},
"{{ release.html_url }}"
],
"license": "{{ site.github.license.url | default: https://raw.githubusercontent.com/:user/:project/master/LICENSE }}",
"url": "{{ site.github.repository_url }}",
"datePublished": "{{ release.published_at }}",
"dateCreated": "{{ release.created_at }}",
"author": {%- include json/person.json -%},
"publisher": {%- include json/person.json -%}
},
"creator": {%- include json/person.json -%}
}
The included file person.json
could look like this (here based on the minima theme):
{%- assign social = site.minima.social_links -%}
{
"@context": "http://schema.org/",
"@type": "Person",
"name": "{{ site.author | default: site.github.owner.name }}",
"email": "mailto:{{ site.email | default: site.github.owner.email }}",
"url": "{{ site.github.owner.blog }}",
"sameAs": [
"https://github.com/{{ site.github_username | default: social.github | cgi_escape | escape }}",
"https://instagram.com/{{ site.instagram_username | default: social.instagram | cgi_escape | escape }}",
"https://www.xing.com/profile/{{ site.xing_username | default: social.xing | cgi_escape | escape }}",
"https://m.youtube.com/channel/{{ site.youtube_username | default: social.youtube_channel | cgi_escape | escape }}",
"https://pgp.mit.edu/pks/lookup?op=get&search={{ site.gnupg_key | default: social.gnupg | cgi_escape | escape }}",
"{{ site.url }}"
]
}
The examples above don't test for the existence of variables and cannot be blindly copied. But they can be easily adapted.