Split tests (#88)

This commit is contained in:
Simon Lecoq
2021-02-01 20:37:17 +01:00
committed by GitHub
parent c9e530c16b
commit eb89bc3f1b
25 changed files with 575 additions and 361 deletions

View File

@@ -162,7 +162,6 @@ This section explain how metrics is structured.
* `fonts.css` contains additional fonts used to render metrics
* `template.mjs` contains template source code
* `tests/` contains tests
* `testscases.js` contains tests case
* `metrics.test.js` contains metrics testers
* `Dockerfile` contains docker instructions used to build metrics image
* `package.json` contains dependencies and command line aliases
@@ -576,7 +575,7 @@ json:
Creating tests for your plugin ensure that external changes don't break it.
You can define your tests cases in [`testscases.js`](/tests/testscases.js), which will automatically test your plugin with:
You can define your tests cases in `tests.yml` in your plugin directory, which will automatically test your plugin with:
- Metrics action
- Metrics web instance
- Metrics web instance placeholder (rendered by browser)

View File

@@ -43,5 +43,10 @@
"devDependencies": {
"jest": "^26.6.3",
"libxmljs": "^0.19.7"
},
"jest": {
"testEnvironment":"node",
"testTimeout":60000,
"transform":{}
}
}

View File

@@ -0,0 +1,21 @@
- name: Activity plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_activity: yes
- name: Activity plugin (filtered)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_activity: yes
plugin_activity_filter: pr, issue
- name: Activity plugin (complete)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_activity: yes
plugin_activity_limit: 100
plugin_activity_days: 14
plugin_activity_filter: all

View File

@@ -0,0 +1,60 @@
- name: Anilist plugin (default)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_anilist: yes
- name: Anilist plugin (manga only)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_anilist: yes
plugin_anilist_medias: manga
- name: Anilist plugin (anime only)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_anilist: yes
plugin_anilist_medias: anime
- name: Anilist plugin (favorites section)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_anilist: yes
plugin_anilist_sections: favorites
- name: Anilist plugin (watching/reading section)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_anilist: yes
plugin_anilist_sections: watching, reading
- name: Anilist plugin (characters section)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_anilist: yes
plugin_anilist_sections: characters
- name: Anilist plugin (additional options)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_anilist: yes
plugin_anilist_limit: 0
plugin_anilist_shuffle: no
plugin_anilist_user: user
- name: Anilist plugin (complete)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_anilist: yes
plugin_anilist_medias: manga, anime
plugin_anilist_sections: favorites, watching, reading, characters
plugin_anilist_limit: 0
plugin_anilist_shuffle: no
plugin_anilist_user: user

View File

@@ -0,0 +1,45 @@
- name: Base (header)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
base: header
base_header: yes # For web instance
- name: Base (activity)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
base: activity
base_activity: yes # For web instance
- name: Base (community)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
base: community
base_community: yes # For web instance
- name: Base (repositories)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
base: repositories
base_repositories: yes # For web instance
- name: Base (metadata)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
base: metadata
base_metadata: yes # For web instance
- name: Base (complete)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
base: header, activity, community, repositories, metadata
base_header: yes # For web instance
base_activity: yes # For web instance
base_community: yes # For web instance
base_repositories: yes # For web instance
base_metadata: yes # For web instance

View File

@@ -0,0 +1,26 @@
- name: Image output (jpeg)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
config_output: jpeg
- name: Image output (png)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
config_output: png
- name: Disable animations
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
config_animations: no
- name: Community templates
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
template: "@classic"
setup_community_templates: "lowlighter/metrics@master:classic"
modes:
- action

View File

@@ -0,0 +1,5 @@
- name: Follow-up plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_followup: yes

View File

@@ -0,0 +1,5 @@
- name: Gists plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_gists: yes

View File

@@ -0,0 +1,30 @@
- name: Habits plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_habits: yes
- name: Habits plugin (charts)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_habits: yes
plugin_habits_facts: no
plugin_habits_charts: yes
config_timezone: Europe/Paris
- name: Habits plugin (facts)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_habits: yes
plugin_habits_facts: yes
- name: Habits plugin (complete)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_habits: yes
plugin_habits_facts: yes
plugin_habits_charts: yes
config_timezone: Europe/Paris

View File

@@ -0,0 +1,20 @@
- name: Isocalendar plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_isocalendar: yes
- name: Isocalendar plugin (half-year)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_isocalendar: yes
plugin_isocalendar_duration: half-year
- name: Isocalendar plugin (full-year)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_isocalendar: yes
plugin_isocalendar_duration: full-year

View File

@@ -0,0 +1,44 @@
- name: Language plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_languages: yes
- name: Language plugin (ignored languages)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_languages: yes
plugin_languages_ignored: html, css, dockerfile
- name: Language plugin (skipped repositories)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_languages: yes
plugin_languages_skipped: metrics
- name: Language plugin (custom color set)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_languages: yes
plugin_languages_colors: complementary
- name: Language plugin (with details)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_languages: yes
plugin_languages_details: percentage
- name: Language plugin (complete)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_languages: yes
plugin_languages_ignored: html, css, dockerfile
plugin_languages_skipped: metrics
plugin_languages_colors: rainbow
plugin_languages_details: bytes-size, percentage

View File

@@ -0,0 +1,7 @@
- name: Lines plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
base: repositories
plugin_lines: yes

View File

@@ -0,0 +1,30 @@
- name: Music plugin (playlist - apple)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_music: yes
plugin_music_playlist: https://embed.music.apple.com/fr/playlist/usr-share/pl.u-V9D7m8Etjmjd0D
- name: Music plugin (playlist - spotify)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_music: yes
plugin_music_playlist: https://open.spotify.com/embed/playlist/3nfA87oeJw4LFVcUDjRcqi
- name: Music plugin (recent - spotify)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_music_token: MOCKED_CLIENT_ID, MOCKED_CLIENT_SECRET, MOCKED_REFRESH_TOKEN
plugin_music: yes
plugin_music_provider: spotify
- name: Music plugin (recent - lastfm)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_music_token: MOCKED_TOKEN
plugin_music: yes
plugin_music_provider: lastfm
plugin_music_user: RJ

View File

@@ -0,0 +1,39 @@
- name: PageSpeed plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_pagespeed_token: MOCKED_TOKEN
plugin_pagespeed: yes
- name: PageSpeed plugin (different url)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_pagespeed_token: MOCKED_TOKEN
plugin_pagespeed: yes
plugin_pagespeed_url: github.com
- name: PageSpeed plugin (detailed)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_pagespeed_token: MOCKED_TOKEN
plugin_pagespeed: yes
plugin_pagespeed_detailed: yes
- name: PageSpeed plugin (screenshot)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_pagespeed_token: MOCKED_TOKEN
plugin_pagespeed: yes
plugin_pagespeed_screenshot: yes
- name: PageSpeed plugin (complete)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_pagespeed_token: MOCKED_TOKEN
plugin_pagespeed: yes
plugin_pagespeed_detailed: yes
plugin_pagespeed_screenshot: yes

View File

@@ -0,0 +1,63 @@
- name: People plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_people: yes
- name: People plugin (followers)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_people: yes
plugin_people_types: followers
- name: People plugin (following)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_people: yes
plugin_people_types: following
- name: People plugin (sponsoring)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_people: yes
plugin_people_types: sponsoring
- name: People plugin (sponsors)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_people: yes
plugin_people_types: sponsors
- name: People plugin (stargazers)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_people: yes
plugin_people_types: stargazers
- name: People plugin (watchers)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_people: yes
plugin_people_types: watchers
- name: People plugin (thanks)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_people: yes
plugin_people_types: thanks
plugin_people_thanks: lowlighter
- name: People plugin (identicons)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOKEN
plugin_people: yes
plugin_people_identicons: yes

View File

@@ -0,0 +1,7 @@
- name: Posts plugin (dev.to)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_posts: yes
plugin_posts_source: dev.to
plugin_posts_user: lowlighter

View File

@@ -0,0 +1,22 @@
- name: Projects plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_projects: yes
- name: Projects plugin (repositories)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_projects: yes
plugin_projects_repositories: lowlighter/metrics/projects/1
plugin_projects_limit: 0
- name: Projects plugin (descriptions)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_projects: yes
plugin_projects_repositories: lowlighter/metrics/projects/1
plugin_projects_limit: 0
plugin_projects_descriptions: yes

View File

@@ -0,0 +1,5 @@
- name: Stargazers plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_stargazers: yes

View File

@@ -0,0 +1,5 @@
- name: Stars plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_stars: yes

View File

@@ -0,0 +1,69 @@
- name: Topics plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_topics: yes
- name: Topics plugin (starred - starred sort)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_topics: yes
plugin_topics_mode: starred
plugin_topics_sort: starred
- name: Topics plugin (starred - activity sort)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_topics: yes
plugin_topics_mode: starred
plugin_topics_sort: activity
- name: Topics plugin (starred - stars sort)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_topics: yes
plugin_topics_mode: starred
plugin_topics_sort: stars
- name: Topics plugin (starred - random sort)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_topics: yes
plugin_topics_mode: starred
plugin_topics_sort: random
- name: Topics plugin (mastered - starred sort)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_topics: yes
plugin_topics_mode: mastered
plugin_topics_sort: starred
- name: Topics plugin (mastered - activity sort)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_topics: yes
plugin_topics_mode: mastered
plugin_topics_sort: activity
- name: Topics plugin (mastered - stars sort)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_topics: yes
plugin_topics_mode: mastered
plugin_topics_sort: stars
- name: Topics plugin (mastered - random sort)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
plugin_topics: yes
plugin_topics_mode: mastered
plugin_topics_sort: random

View File

@@ -0,0 +1,6 @@
- name: Traffic plugin (default)
uses: lowlighter/metrics@latest
with:
token: MOCKED_TOCKEN
base: repositories
plugin_traffic: yes

View File

@@ -0,0 +1,14 @@
- name: Tweets plugin (default)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_tweets: yes
plugin_tweets_token: MOCKED_TOKEN
- name: Tweets plugin (different user)
uses: lowlighter/metrics@latest
with:
token: NOT_NEEDED
plugin_tweets: yes
plugin_tweets_user: twitterdev
plugin_tweets_token: MOCKED_TOKEN

View File

@@ -11,7 +11,7 @@
//Retrieving single repository
console.debug(`metrics/compute/${login}/${repo} > retrieving single repository ${repo}`)
const {[account]:{repository}} = await graphql(queries.base.repository({login, repo, account}))
const {[account === "bypass" ? "user" : account]:{repository}} = await graphql(queries.base.repository({login, repo, account}))
data.user.repositories.nodes = [repository]
data.repo = repository

View File

@@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
//Imports
const processes = require("child_process")
const yaml = require("js-yaml")
@@ -33,21 +29,13 @@
//Web instance
const web = {}
web.run = async (vars) => (await axios(`http://localhost:3000/lowlighter?${new url.URLSearchParams(Object.fromEntries(Object.entries(vars).map(([key, value]) => [key.replace(/^plugin_/, "").replace(/_/g, "."), value])))}`)).status === 200
beforeAll(async done => {
await fs.promises.rmdir(path.join(__dirname, "../source/templates/@classic"), {recursive:true})
await new Promise((solve, reject) => {
web.start = async () => new Promise(solve => {
let stdout = ""
web.instance = processes.spawn("node", ["source/app/web/index.mjs"], {env:{...process.env, USE_MOCKED_DATA:true, NO_SETTINGS:true}})
web.instance.stdout.on("data", data => (stdout += data, /Server ready !/.test(stdout) ? solve() : null))
web.instance.stderr.on("data", data => console.error(`${data}`))
})
done()
})
afterAll(async done => {
await web.instance.kill("SIGKILL")
await fs.promises.rmdir(path.join(__dirname, "../source/templates/@classic"), {recursive:true})
done()
})
web.stop = async () => await web.instance.kill("SIGKILL")
//Web instance placeholder
require("./../source/app/web/statics/app.placeholder.js")
@@ -69,8 +57,42 @@
}) === "string"
}
//Test cases
const tests = require("./testscases")()
//Setup
beforeAll(async done => {
//Clean community template
await fs.promises.rmdir(path.join(__dirname, "../source/templates/@classic"), {recursive:true})
//Start web instance
await web.start()
done()
})
//Teardown
afterAll(async done => {
//Stop web instance
await web.stop()
//Clean community template
await fs.promises.rmdir(path.join(__dirname, "../source/templates/@classic"), {recursive:true})
done()
})
//Load metadata (as jest doesn't support ESM modules, we use this dirty hack)
const metadata = JSON.parse(`${processes.spawnSync("node", [
"--input-type", "module",
"--eval", 'import metadata from "./source/app/metrics/metadata.mjs";console.log(JSON.stringify(await metadata({log:false})))'
]).stdout}`)
//Build tests index
const tests = []
for (const name in metadata.plugins) {
const cases = yaml
.load(fs.readFileSync(path.join(__dirname, "../source/plugins", name, "tests.yml"), "utf8"))
.map(({name:test, with:inputs, modes = []}) => {
const skip = new Set(Object.entries(metadata.templates).filter(([_, {readme:{compatibility}}]) => !compatibility[name]).map(([template]) => template))
if (!(metadata.plugins[name].supports.includes("repository")))
skip.add("repository")
return [test, inputs, {skip:[...skip], modes}]
})
tests.push(...cases)
}
//Tests run
describe("GitHub Action", () =>
@@ -83,16 +105,7 @@
if ((skip.includes(template))||((modes.length)&&(!modes.includes("action"))))
test.skip(name, () => null)
else
test(name, async () => expect(await action.run({
token:"MOCKED_TOKEN",
plugin_pagespeed_token:"MOCKED_TOKEN",
plugin_tweets_token:"MOCKED_TOKEN",
plugin_music_token:"MOCKED_CLIENT_ID, MOCKED_CLIENT_SECRET, MOCKED_REFRESH_TOKEN",
template, base:"", query:JSON.stringify(query),
config_timezone:"Europe/Paris",
plugins_errors_fatal:true, dryrun:true, use_mocked_data:true, verify:true,
...input
})).toBe(true), 60*1e3)
test(name, async () => expect(await action.run({template, base:"", query:JSON.stringify(query), plugins_errors_fatal:true, dryrun:true, use_mocked_data:true, verify:true, ...input})).toBe(true))
})
)
@@ -106,12 +119,7 @@
if ((skip.includes(template))||((modes.length)&&(!modes.includes("web"))))
test.skip(name, () => null)
else
test(name, async () => expect(await web.run({
template, base:0, ...query,
config_timezone:"Europe/Paris",
plugins_errors_fatal:true, verify:true,
...input
})).toBe(true), 60*1e3)
test(name, async () => expect(await web.run({template, base:0, ...query, plugins_errors_fatal:true, verify:true, ...input})).toBe(true))
})
)
@@ -124,13 +132,6 @@
if ((skip.includes(template))||((modes.length)&&(!modes.includes("placeholder"))))
test.skip(name, () => null)
else
test(name, async () => expect(await placeholder.run({
template, base:0, ...query,
config_timezone:"Europe/Paris",
plugins_errors_fatal:true, verify:true,
...input
})).toBe(true))
test(name, async () => expect(await placeholder.run({template, base:0, ...query, ...input})).toBe(true))
})
)

View File

@@ -1,314 +0,0 @@
/** Test cases */
module.exports = function () {
return [
["Base (header)", {
base:"header",
base_header:true,
}],
["Base (activity", {
base:"activity",
base_activity:true,
}],
["Base (community)", {
base:"community",
base_community:true,
}],
["Base (repositories)", {
base:"repositories",
base_repositories:true,
}],
["Base (metadata)", {
base:"metadata",
base_metadata:true,
}],
["Base (complete)", {
base:"header, activity, community, repositories, metadata",
base_header:true,
base_activity:true,
base_community:true,
base_repositories:true,
base_metadata:true,
}],
["Image output (jpeg)", {
config_output:"jpeg",
}],
["Image output (png)", {
config_output:"png",
}],
["Disable animations", {
config_animations:"no",
}],
["PageSpeed plugin (default)", {
plugin_pagespeed:true,
}],
["PageSpeed plugin (different url)", {
plugin_pagespeed:true,
plugin_pagespeed_url:"github.com",
}],
["PageSpeed plugin (detailed)", {
plugin_pagespeed:true,
plugin_pagespeed_detailed:true,
}],
["PageSpeed plugin (screenshot)", {
plugin_pagespeed:true,
plugin_pagespeed_screenshot:true,
}],
["PageSpeed plugin (complete)", {
plugin_pagespeed:true,
plugin_pagespeed_detailed:true,
plugin_pagespeed_screenshot:true,
}],
["Isocalendar plugin (default)", {
plugin_isocalendar: true,
}, {skip:["terminal", "repository"]}],
["Isocalendar plugin (half-year)", {
plugin_isocalendar: true,
plugin_isocalendar_duration: "half-year",
}, {skip:["terminal", "repository"]}],
["Isocalendar plugin (full-year)", {
plugin_isocalendar: true,
plugin_isocalendar_duration: "full-year",
}, {skip:["terminal", "repository"]}],
["Music plugin (playlist - apple)", {
plugin_music:true,
plugin_music_playlist:"https://embed.music.apple.com/fr/playlist/usr-share/pl.u-V9D7m8Etjmjd0D",
}, {skip:["terminal", "repository"]}],
["Music plugin (playlist - spotify)", {
plugin_music:true,
plugin_music_playlist:"https://open.spotify.com/embed/playlist/3nfA87oeJw4LFVcUDjRcqi",
}, {skip:["terminal", "repository"]}],
["Music plugin (recent - spotify)", {
plugin_music:true,
plugin_music_provider: "spotify",
}, {skip:["terminal", "repository"]}],
["Music plugin (recent - lastfm)", {
plugin_music:true,
plugin_music_provider: "lastfm",
plugin_music_user: "RJ",
}, {skip:["terminal", "repository"]}],
["Language plugin (default)", {
plugin_languages:true,
}],
["Language plugin (ignored languages)", {
plugin_languages:true,
plugin_languages_ignored:"html, css, dockerfile",
}],
["Language plugin (skipped repositories)", {
plugin_languages:true,
plugin_languages_skipped:"metrics",
}],
["Language plugin (custom color set)", {
plugin_languages:true,
plugin_languages_colors:"0:ff0000,1:red",
}],
["Language plugin (custom color set)", {
plugin_languages:true,
plugin_languages_colors:"complementary",
}],
["Language plugin (with details)", {
plugin_languages:true,
plugin_languages_details:"percentage",
}],
["Language plugin (complete)", {
plugin_languages:true,
plugin_languages_ignored:"html, css, dockerfile",
plugin_languages_skipped:"metrics",
plugin_languages_colors:"rainbow",
plugin_languages_details:"bytes-size, percentage",
}],
["Follow-up plugin (default)", {
plugin_followup:true,
}],
["Topics plugin (default)", {
plugin_topics:true,
}, {skip:["terminal", "repository"]}],
["Topics plugin (starred - starred sort)", {
plugin_topics:true,
plugin_topics_mode:"starred",
plugin_topics_sort:"starred",
}, {skip:["terminal", "repository"]}],
["Topics plugin (starred - activity sort)", {
plugin_topics:true,
plugin_topics_mode:"starred",
plugin_topics_sort:"activity",
}, {skip:["terminal", "repository"]}],
["Topics plugin (starred - stars sort)", {
plugin_topics:true,
plugin_topics_mode:"starred",
plugin_topics_sort:"stars",
}, {skip:["terminal", "repository"]}],
["Topics plugin (starred - random sort)", {
plugin_topics:true,
plugin_topics_mode:"starred",
plugin_topics_sort:"random",
}, {skip:["terminal", "repository"]}],
["Topics plugin (mastered - starred sort)", {
plugin_topics:true,
plugin_topics_mode:"mastered",
plugin_topics_sort:"starred",
}, {skip:["terminal", "repository"]}],
["Topics plugin (mastered - activity sort)", {
plugin_topics:true,
plugin_topics_mode:"mastered",
plugin_topics_sort:"activity",
}, {skip:["terminal", "repository"]}],
["Topics plugin (mastered - stars sort)", {
plugin_topics:true,
plugin_topics_mode:"mastered",
plugin_topics_sort:"stars",
}, {skip:["terminal", "repository"]}],
["Topics plugin (mastered - random sort)", {
plugin_topics:true,
plugin_topics_mode:"mastered",
plugin_topics_sort:"random",
}, {skip:["terminal", "repository"]}],
["Projects plugin (default)", {
plugin_projects:true,
}, {skip:["terminal"]}],
["Projects plugin (repositories)", {
plugin_projects:true,
plugin_projects_repositories:"lowlighter/metrics/projects/1",
plugin_projects_limit:0,
}, {skip:["terminal"]}],
["Projects plugin (descriptions)", {
plugin_projects:true,
plugin_projects_repositories:"lowlighter/metrics/projects/1",
plugin_projects_limit:0,
plugin_projects_descriptions:true,
}, {skip:["terminal"]}],
["Lines plugin (default)", {
base:"repositories",
plugin_lines:true,
}],
["Traffic plugin (default)", {
base:"repositories",
plugin_traffic:true,
}],
["Tweets plugin (default)", {
plugin_tweets:true,
}, {skip:["terminal", "repository"]}],
["Tweets plugin (different user)", {
plugin_tweets:true,
plugin_tweets_user:"twitterdev",
}, {skip:["terminal", "repository"]}],
["Posts plugin (dev.to)", {
user:"lowlighter",
plugin_posts:true,
plugin_posts_source:"dev.to",
}, {skip:["terminal", "repository"]}],
["Habits plugin (default)", {
plugin_habits:true,
plugin_habits_from:5,
}, {skip:["terminal", "repository"]}],
["Habits plugin (charts)", {
plugin_habits:true,
plugin_habits_from:5,
plugin_habits_charts:true,
}, {skip:["terminal", "repository"]}],
["Habits plugin (facts)", {
plugin_habits:true,
plugin_habits_from:5,
plugin_habits_facts:true,
}, {skip:["terminal", "repository"]}],
["Habits plugin (complete)", {
plugin_habits:true,
plugin_habits_from:5,
plugin_habits_charts:true,
}, {skip:["terminal", "repository"]}],
["Activity plugin (default)", {
plugin_activity:true,
plugin_activity_limit:100,
plugin_activity_days:14,
plugin_activity_filter:"all",
}, {skip:["terminal", "repository"]}],
["Activity plugin (filtered)", {
plugin_activity:true,
plugin_activity_filter:"pr, issue",
}, {skip:["terminal", "repository"]}],
["Stars plugin (default)", {
plugin_stars:true,
}, {skip:["terminal", "repository"]}],
["Stargazers plugin (default)", {
plugin_stargazers:true,
}, {skip:["terminal"]}],
["Gists plugin (default)", {
plugin_gists:true,
}, {skip:["terminal", "repository"]}],
["People plugin (default)", {
plugin_people:true,
}, {skip:["terminal", "repository"]}],
["People plugin (followers)", {
plugin_people:true,
plugin_people_types:"followers",
}, {skip:["terminal", "repository"]}],
["People plugin (following)", {
plugin_people:true,
plugin_people_types:"following",
}, {skip:["terminal", "repository"]}],
["People plugin (sponsoring)", {
plugin_people:true,
plugin_people_types:"sponsoring",
}, {skip:["terminal", "repository"]}],
["People plugin (sponsors)", {
plugin_people:true,
plugin_people_types:"sponsors",
}, {skip:["terminal"]}],
["People plugin (stargazers)", {
plugin_people:true,
plugin_people_types:"stargazers",
}, {skip:["classic", "terminal"]}],
["People plugin (watchers)", {
plugin_people:true,
plugin_people_types:"watchers",
}, {skip:["classic", "terminal"]}],
["People plugin (thanks)", {
plugin_people:true,
plugin_people_types:"thanks",
plugin_people_thanks:"lowlighter",
}, {skip:["classic", "terminal"]}],
["People plugin (identicons)", {
plugin_people:true,
plugin_people_identicons:true,
}, {skip:["terminal", "repository"]}],
["Anilist plugin (default)", {
plugin_anilist:true,
}, {skip:["terminal", "repository"]}],
["Anilist plugin (manga only)", {
plugin_anilist:true,
plugin_anilist_medias:"manga",
}, {skip:["terminal", "repository"]}],
["Anilist plugin (anime only)", {
plugin_anilist:true,
plugin_anilist_medias:"anime",
}, {skip:["terminal", "repository"]}],
["Anilist plugin (favorites section)", {
plugin_anilist:true,
plugin_anilist_sections:"favorites",
}, {skip:["terminal", "repository"]}],
["Anilist plugin (watching/reading section)", {
plugin_anilist:true,
plugin_anilist_sections:"watching, reading",
}, {skip:["terminal", "repository"]}],
["Anilist plugin (characters section)", {
plugin_anilist:true,
plugin_anilist_sections:"characters",
}, {skip:["terminal", "repository"]}],
["Anilist plugin (additional options)", {
plugin_anilist:true,
plugin_anilist_limit:0,
plugin_anilist_shuffle:false,
plugin_anilist_user:"anilist",
}, {skip:["terminal", "repository"]}],
["Anilist plugin (complete)", {
plugin_anilist:true,
plugin_anilist_medias:"manga, anime",
plugin_anilist_sections:"favorites, watching, reading, characters",
plugin_anilist_limit:0,
plugin_anilist_shuffle:false,
}, {skip:["terminal", "repository"]}],
["Community templates", {
template:"@classic",
setup_community_templates:"lowlighter/metrics@master:classic",
}, {skip:["terminal", "repository"], modes:["action"]}]
]
}