EpiVerse
  • Organization
  • Repositories
  • Maintainers
  • Community Health
    • Source Code
    • Request a Feature

On this page

  • Aggregate Community Health
  • Individual models of community health
  • Community health for individual repositories

Community Health

The Organizational Maintenance and Repository Maintenance pages provide various insights into maintenance deficits and needs across the whole organization and within individual repositories. This page provides more detail on the various CHAOSS (Community Health Analytics in Open Source Software) models used to generate values shown on those two pages. Each of these conceptual models aggregates various individual metrics, and aims to synthesise prominent aspects of community health. This page provides insights into a range of those models, assessed for each repository in the epiverse-trace and reconhub GitHub organizations. Details of individual metrics can be seen on the Repository Maintenance page.

Aggregate Community Health

This page shows aggregate community health scores for all repositories within the reconhub and epiverse-trace organizations. Higher values describe repositories with greater community health scores. Values for individual models are standardised across all repositories to have mean values of zero and standard deviations of one. These results are aggregated across thirteen distinct models, leading to maximal aggregated values slightly exceeding that value.

Plot = import("https://esm.sh/@observablehq/plot")
models_all = {
    return transpose(models_in).map(row => ({
        ...row,
    }));
}
models_final = models_all.filter(function(mod) {
    return mod.name === "final"
})
models_len = models_final.length
Plot.plot({
    height: 20 * models_len,
    marginLeft: 60,
    marginRight: 160,
    marginTop: 50,
    marginBottom: 50,
    axis: null,
    x: {
        axis: "top",
        grid: true,
        label: "Community Health"
    },
    y: { grid: true },
    marks: [
        Plot.barX(models_final, {
            y: "package",
            x: "value",
            sort: {y: "-x" },
            fill: "value",
        }),
        Plot.barX(models_final,
            Plot.pointer(
            {
                y: "package",
                x: "value",
                sort: {y: "-x" },
                stroke: "gray",
                fill: "value",
                strokeWidth: 2,
            })
        ),
        Plot.text(models_final, {
            x: (d) => d.value < 0 ? 0 : d.value,
            y: "package",
            text: "package",
            textAnchor: "start",
            fontSize: 16,
            dx: 5
        })
    ],
    color: {
        scheme: "Cool",
        type: "ordinal"
    }
})

Individual models of community health

The following section shows values for each individual model of community health for all repositories.

commHealthVars = [
    "collab_devel_index",
    "comm_serv_support",
    "comm_welcoming",
    "community_activity",
    "dev_responsiveness",
    "oss_compliance",
    "proj_awareness",
    "proj_engagement",
    "starter_health",
    "viability_community",
    "viability_gov",
    "viability_starter",
    "viability_strategy"
]
viewof commHealthVar = Inputs.select(
    commHealthVars,
    { multiple: "false", label: "Community Health Variable" }
);
models_filtered = models_all.filter(function(mod) {
    return mod.name === commHealthVar
})
Plot.plot({
    height: 20 * models_len,
    marginLeft: 60,
    marginRight: 160,
    marginTop: 50,
    marginBottom: 50,
    axis: null,
    x: {
        axis: "top",
        grid: true,
        label: "Community Health"
    },
    y: { grid: true },
    marks: [
        Plot.barX(models_filtered, {
            y: "package",
            x: "value",
            sort: {y: "-x" },
            fill: "value",
        }),
        Plot.barX(models_filtered,
            Plot.pointer(
            {
                y: "package",
                x: "value",
                sort: {y: "-x" },
                stroke: "gray",
                fill: "value",
                strokeWidth: 2,
            })
        ),
        Plot.text(models_filtered, {
            x: (d) => d.value < 0 ? 0 : d.value,
            y: "package",
            text: "package",
            textAnchor: "start",
            fontSize: 16,
            dx: 5
        })
    ],
    color: {
        scheme: "Cool",
        type: "ordinal"
    }
})

Community health for individual repositories

The following section shows all models of community health for a selected repository.

reposAll = models_all.map(function(item) {
    return item.package;
});
repos = Array.from(new Set(reposAll));
repoSet = localStorage.getItem("orgmetricsRepo") || repos [0]
viewof repo = Inputs.select(
    repos,
    {
        multiple: false,
        value: repoSet,
        label: htl.html`<b>Repository:</b>`
    }
)
localStorage.setItem("orgmetricsRepo", repo.toString());
model_repo = models_all.filter(function(mod) {
    return mod.package === repo && mod.name !== "final"
})
model_repo_len = model_repo.length
Plot.plot({
    height: 40 * model_repo_len,
    marginLeft: 60,
    marginRight: 160,
    marginTop: 50,
    marginBottom: 50,
    axis: null,
    x: {
        axis: "top",
        grid: true,
        label: "Community Health"
    },
    y: { grid: true },
    marks: [
        Plot.barX(model_repo, {
            y: "name",
            x: "value",
            sort: {y: "-x" },
            fill: "value",
        }),
        Plot.barX(model_repo,
            Plot.pointer(
            {
                y: "name",
                x: "value",
                sort: {y: "-x" },
                stroke: "gray",
                fill: "value",
                strokeWidth: 2,
            })
        ),
        Plot.text(model_repo, {
            x: (d) => d.value < 0 ? 0 : d.value,
            y: "name",
            text: "name",
            textAnchor: "start",
            fontSize: 16,
            dx: 5
        })
    ],
    color: {
        scheme: "Cool",
        type: "ordinal"
    }
})
 
Cookie Preferences