Giter Site home page Giter Site logo

cncf / clomonitor Goto Github PK

View Code? Open in Web Editor NEW
100.0 100.0 64.0 22.26 MB

CLOMonitor is a tool that periodically checks open source projects repositories to verify they meet certain project health best practices

Home Page: https://clomonitor.io

License: Apache License 2.0

Rust 36.49% HTML 8.45% Dockerfile 0.68% Shell 0.17% Mustache 0.33% CSS 2.34% TypeScript 40.23% JavaScript 0.25% PLpgSQL 11.05%

clomonitor's People

Contributors

aaguiarz avatar adamdmharvey avatar afrittoli avatar aliok avatar andife avatar bgrasnick avatar chalin avatar crenshaw-dev avatar cynthia-sg avatar dependabot[bot] avatar eddie-knight avatar inteon avatar jdubrick avatar jeefy avatar jeffhollan avatar jkjell avatar jmertic avatar justinabrahms avatar matthewpereira avatar matthyx avatar mattray avatar mowies avatar mrueg avatar nate-double-u avatar raulcabello avatar sandipanpanda avatar tegioz avatar thisisobate avatar tuminoid avatar xmulligan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

clomonitor's Issues

Add check for "DCO"

Essentially we need to check that the project has this app installed https://github.com/dcoapp/app - however not all projects check for DCO this way or use a CLA only

Another way to do this check is to look at say the last 10 commits and ensure commits as signed off via "git commit -s" - e.g., essentially have the "Signed-off-by: <>" in the git commit signature

Define how scores should be calculated

At the moment we have 4 top level categories (documentation, license, quality and security) as illustrated in the following screenshot:

Screenshot 2022-02-07 at 18 57 59

The global score is calculated based on the average of the 4 categories. The score of each category is defined by the weight of each of the items in the category:

Screenshot 2022-02-07 at 19 01 08

It'd be great to think this carefully and come up with a more balanced formula that reflects the real importance of each item (the current one is just provisional).

Cc: @caniszczyk

Improve Website check

Some projects have their website set at the Org level and not the individual project-level.

This is a valid option and should pass the check.

Example:
https://clomonitor.io/projects/chubao-fs/chubao-fs - Failed website check
https://github.com/cubeFS/cubefs - No site specified here
https://github.com/cubeFS - Site is specified here

Edit: That said, I do want to push projects that have (essentially) a primary repo to also have their website linked. But there are some projects that are relatively large in repo-size, so org-level-linking should be valid.

Enable a way for end users to queue a re-check

The method for this could be up for debate, but initial thoughts:

  • Via the site using GH SSO to see if the person is part of the project's org
  • A webhook that projects could tie a GitHub action into (and then each project be given an API key of sorts)
  • A completely offline check by cloning the clo monitor repo down and running make run locally to queue a fresh pull of everything
    • Ninja edit: Another cooler idea would be allowing them to run some sort of command if they clone down this repo. Think:

      make build
      clomonitor-check kubernetes #established project
      # OR
      clomonitor-check https://github.com/jeefy/tenta # unrelated project
      

      And then output a score via the CLI.

      I think the ideal path would be for someone to check their own score without any action from us.

Show timestamp of latest check, per project

It would be useful to know when a particular project was last checked, especially given that there are different re-check rates for projects -- as I understand it from checks.md:

These checks are run every hour, provided the repository has changed since the last time it was checked. In the case of repositories that don't change often, we make sure that they are checked at least once a day anyway.

/cc @nate-double-u

Add "Website" check in Documentation

We expect our projects to have a public website that's not just a github README

My guess is you can get this data from the github UI which has a field for website

Review linter checks

We need to review if the current linter checks are appropriate and what additional ones could be interesting to add.

Screenshot 2022-02-07 at 19 01 08

Similarly, it'd be good to also review how each of these checks is being done (rules behind each of them) to fine tune them. They can be found hovering over the ? icon on each of them in the project detail view.

Screenshot 2022-02-07 at 19 08 28

Cc: @caniszczyk

Document how checks work

At the moment we display some of this information next to each check, but it's not exhaustive and not easy go through. We should add a document that explains the different options to pass each of the checks, how often repositories are checked, etc. This should be a handy guide for projects aiming to make CLOMonitor happy.

Screen Shot 2022-03-09 at 14 30 47

Related to #151

Support per-repo (or repo type?) configuration

This is somewhat related to #66 but warrants a new Issue/Thread

Many projects have different repos for different purposes. clomonitor should expand the db schema so repos can be flagged as governance, docs, or code repos.

For example, Knative has several repos:

  • Community -- A governance repo that holds a lot of policy/procedure info. This should be the primary repo, but it would have a different license (CC 4.0) since it's more of a "Docs" repo. It also is going to fail any sort of "recent release" check since it's not a code repo.
  • Eventing -- A code repo that should have an Apache 2.0 License and a "recent release" check
  • Service -- A code repo that should have an Apache 2.0 License and a "recent release" check
  • Docs -- A docs repo that should have a CC 4.0 License check

If we can decouple the idea of "primary/secondary" repos to instead allow a repo to be flagged as one or more of these categories, I think it will better match many of the projects that exist or will soon be onboarded.

Community bootstrapping

As this has moved forward significantly, we should open this up to the Cloud Native contributor community at large :)

  • Schedule a monthly(?) community meeting / office hours (first meeting would be an intro to clomonitor)
  • Create #clomonitor Slack channel in CNCF Slack
  • Send out comms to maintainers on the purpose of clomonitor, and signal boost the community meeting / slack channel

@tegioz @cynthia-sg I'm happy to tackle all of this :) I just want to make sure you're both aware of it AND make sure when scheduling the meeting it fits in your calendars. Feel free to thread with questions!

/assign

Add CONTRIBUTING.md

Create a contributing.md file that discusses how to contribute to the project, rough architecture + how to contribute linters etc

Increase .clomonitor.yml configuration

Feel free to close this and break it up into separate issues, but I want to capture all the ideas under one since they all involve .clomonitor.yml :)

  • We should be able to specify alternative locations for some checks
    For example, https://github.com/project-akri/akri has the header Community, Contributing, and Support, which also links to their Contributing page https://docs.akri.sh/community/contributing.
    Being able to specify in the YAML something like contributing_url: https://docs.akri.sh/community/contributing and pass the check would be great
  • We should be able to skip/pass certain checks in .clomonitor.yml. For example(s), Akri or Envoy explicitly state on their docs that they're part of the CNCF. This is technically an accepted path (See cncf/toc#719 (comment))

Check for groups.io presence

(Most) CNCF projects are expected to have a presence on cncf.groups.io. I propose a check to ensure there's at least one mailing list created that follows the pattern of cncf-{project-name}-* (ex. cncf-buildpacks or cncf-buildpacks-dev would both be valid)

There are some exceptions that we need to think about however (mainly, older/graduated projects). Kubernetes uses Google Groups, for example. So perhaps this check should be (initially) only valid on projects that have been adopted starting in 2020 and newer?

Produce metrics over time / Reporting ideas

I'm a huge supporter of providing metrics that we can scrape and do reporting on. To that end, I think a basic Prometheus metrics endpoint that publishes the CLO monitor data could be useful.

With that, we could then:

  • create reports showing project trajectory over time (And hide projects that have hit some threshold)
  • create "alerts" if projects slip or have a negative trajectory
  • create "alerts" if a project has not improved their grade over a reasonable amount of time

Theoretically these numbers won't move often, but with every additional project we have more numbers to track.

"Quality" change

We should call this "best practices" instead!
Happy to be overruled.

Consider a Makefile for easier development

I'd love it if there were a Makefile so I could simply run make run or make serve off my fork and have a local copy up and running for tinkering. Likewise from there you could have things like make images and make images-push and whatnot tied together.

Consider supporting checks exemptions

Should we allow repositories to declare some exemptions in certain cases? There are some checks that may not be applicable in some cases (i.e. Artifact Hub badge in the Kubernetes project) and it could be interesting to handle them accordingly (computing scores, displaying a special status in the UI, etc). If we go ahead with this, maybe we should limit the checks this feature would be available for.

Related to #151

Check for Slack Presence

Projects should link to their Slack presence, and said Slack presence is required to be on either the Kubernetes slack (kubernetes.slack.com) or the CNCF Slack (cloud-native.slack.com)

I propose two checks:

  1. Slack presence exists at all (by looking through the Repo's markdown files for any Slack links)
  2. Slack presence exists on moderated Workspaces (CNCF or K8s)

Edit/Thought: The list of "moderated" workspaces could expand, and so should be able to be updated relatively easily.

Extending Security Checks (and others)

I'd love to see the Security portion of clomonitor include the recommended template files, not as hard and fast checks but as additional visibility of projects exceeding the minimum.
https://contribute.cncf.io/maintainers/github/templates/

For example pass/fail yay/nay for required, and additional items like SECURITY_CONTACTS.md indicated through "dedicated" stars. (2/3 stars for most recommended security templates) (just spitballing here)

Support changelogs within GitHub releases

Many projects provide a changelog within the actual GitHub release instead of a markdown file in the main repo. This should be considered a valid path and the tool should support both.

Add a way to specific a different location for info

e.g. our roadmap isn't at the root of the repo, it's in "community". It would be nice if there was a way to tell the tool to look some place else. Perhaps via a .clomonitor file? I do think that it would be good to have the tool check to see if the main README included a pointer to the file regardless of where the file lives.

Add check for SBOM output

This is complicated as there are many ways to produce SBOMs, I need to think through how we can check for this but for now wanted to keep this feature request in the backlog

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.