{"id":27254832,"url":"https://github.com/jgautheron/exago","last_synced_at":"2025-04-11T02:09:04.417Z","repository":{"id":66722789,"uuid":"51616720","full_name":"jgautheron/exago","owner":"jgautheron","description":"Go code quality inspector","archived":false,"fork":false,"pushed_at":"2020-01-29T21:33:35.000Z","size":4665,"stargazers_count":8,"open_issues_count":1,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-11T02:08:54.470Z","etag":null,"topics":["api","exago","go","metrics","quality-control"],"latest_commit_sha":null,"homepage":"https://exago.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jgautheron.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-02-12T21:11:01.000Z","updated_at":"2020-01-29T21:33:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"6dfc3458-dc4f-48fe-bab7-84e80371ad6e","html_url":"https://github.com/jgautheron/exago","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgautheron%2Fexago","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgautheron%2Fexago/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgautheron%2Fexago/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgautheron%2Fexago/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jgautheron","download_url":"https://codeload.github.com/jgautheron/exago/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248328160,"owners_count":21085261,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","exago","go","metrics","quality-control"],"created_at":"2025-04-11T02:09:03.580Z","updated_at":"2025-04-11T02:09:04.367Z","avatar_url":"https://github.com/jgautheron.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Exago\n\nExago is a code quality tool that inspects your Go repository and reports on what could be improved. The dashboard displays metrics that we consider as your application pillars, you can dive deeper and browse directly the recommandations in the code.\n\nThis is the API backend consumed by the [app](https://github.com/jgautheron/exago-app).\n\n## How it works\n\nExago \"outsources\" the entire code processing to two dedicated AWS Lambda functions that take care of pulling and processing the code concurrently.  \n\nOnce both functions are done processing the code, this service retrieves the KPIs and outputs them as JSON formatted output, which is then displayed by the [frontend](https://github.com/jgautheron/exago-app). Every successful processing is cached in LevelDB.\n\nFor those familiar with Lambda, there is a default limit of 100 concurrent running functions, which means that we can process about 50 projects simultaneously. Reaching that limit won't cause any dysfunction as Exago is relying on a routine pool to execute orderly repository checks.\n\n## Rank calculation\n\nAll metrics are factored with the amount of lines of code, so that bigger projects can also get into high ranks. Actually the bigger the project the more we try to be permissive.\n\nThe amount of tests is not factored in the calculation of the rank, the dot only shows two colors: green or red, depending if the tests ran successfully or not.\n\nWe spent months tuning the [algorithms](https://docs.google.com/spreadsheets/d/150xwGQVrY-3qH8-VNDqCDzcQRC0wsIG7-uMps-fXQB0/edit?usp=sharing) to make sure that Exago is fair with every project size. Evaluating a project's quality is tricky and metrics are not everything, but there are a few indicators that can give us hints.\n\n1. If the README is missing or the code is not gofmt'd it's usually a bad sign\n2. Having many third parties is a liability but it's important to have good ones: preferably higher rank \u0026 maintained (we show all third parties, not only the direct ones - also if you click on the detailed view you will see their rank)\n3. No test is a bad sign but high code coverage is not necessarily a must, what's important is testing what really matters, not reaching 99%.\n4. Each linter is not equal and has a different weight\n\nExago tries its best to show you relevant KPIs but ultimately it's up to you to make your own opinion.\n\n## Known limits\n\n- The repository analysis will fail if processing the code exceeds AWS Lambda's 5 mins time limit\n- Every project that relies on `CGO` will fail since it's disabled\n- Not `go-get`table projects will fail\n\n## Building blocks\n\n- [exago-app](https://github.com/jgautheron/exago-app) - The exago client\n- [exago-runner](https://github.com/jgautheron/exago-runner) - Runs all quality checks concurrently\n- [exago-lambda-project-runner](https://github.com/jgautheron/exago-lambda-project-runner) - Function that runs `exago-runner` in Amazon Lambda\n- [cov](https://github.com/chreble/cov) - The coverage tool generator which includes every possible detail\n- [go](https://github.com/chreble/go) - Go fork that speeds up `go get` by implementing the option to do shallow clones\n\n## Getting started\n\n#### Configuration\n\nThe configuration is managed exclusively through environment variables.\n\nVariable               | Description | Mandatory\n---------------- | ------ | ------------\nGITHUB_ACCESS_TOKEN       | Necessary to consume GitHub's API | Yes\nAWS_ACCESS_KEY_ID        | Required for AWS Lambda | Yes\nAWS_SECRET_ACCESS_KEY     | Required for AWS Lambda | Yes\nAWS_REGION     | Required for AWS Lambda | Yes\nHTTP_PORT      | HTTP port to bind | Yes\nDATABASE_PATH      | Path to the database | No\nALLOW_ORIGIN   | Origin allowed for API calls (CORS) | Yes\nLOG_LEVEL   | Log level (debug, info, warn, error, fatal) | Yes\nPOOL_SIZE   | Processing pool size | Yes\n\n## Contributing\n\nSee the [dedicated page](CONTRIBUTING.md).\n\n## Contributors\n\n- Karol Górecki [@karolgorecki](https://twitter.com/karolgorecki)\n- Christophe Eble [@christopheeble](https://twitter.com/christopheeble)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjgautheron%2Fexago","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjgautheron%2Fexago","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjgautheron%2Fexago/lists"}