{"id":13800831,"url":"https://github.com/crownedgrouse/geas","last_synced_at":"2025-04-05T19:13:15.915Z","repository":{"id":30272322,"uuid":"33823779","full_name":"crownedgrouse/geas","owner":"crownedgrouse","description":"Guess Erlang Application Scattering","archived":false,"fork":false,"pushed_at":"2024-07-14T14:12:32.000Z","size":7225,"stargazers_count":109,"open_issues_count":1,"forks_count":5,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-10-11T13:37:07.471Z","etag":null,"topics":["beam-files","erlang"],"latest_commit_sha":null,"homepage":null,"language":"Erlang","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crownedgrouse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2015-04-12T16:11:49.000Z","updated_at":"2024-07-23T19:43:44.000Z","dependencies_parsed_at":"2023-01-14T16:39:50.341Z","dependency_job_id":"f4b32be1-3f1a-4e10-b597-b4981d2acf9b","html_url":"https://github.com/crownedgrouse/geas","commit_stats":{"total_commits":343,"total_committers":2,"mean_commits":171.5,"dds":0.002915451895043719,"last_synced_commit":"c650970e55f26faaf3198c8e5b052d15b281d361"},"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crownedgrouse%2Fgeas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crownedgrouse%2Fgeas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crownedgrouse%2Fgeas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crownedgrouse%2Fgeas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crownedgrouse","download_url":"https://codeload.github.com/crownedgrouse/geas/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247386265,"owners_count":20930619,"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":["beam-files","erlang"],"created_at":"2024-08-04T00:01:16.743Z","updated_at":"2025-04-05T19:13:15.887Z","avatar_url":"https://github.com/crownedgrouse.png","language":"Erlang","funding_links":[],"categories":["Code Analysis"],"sub_categories":[],"readme":"# geas ![Build status](https://github.com/crownedgrouse/geas/actions/workflows/erlang.yml/badge.svg) #\n\nGuess Erlang Application Scattering\n\n``Geas : (In Irish folklore) an obligation or prohibition magically imposed on a person.``\n\nBy extension, obligation or prohibition imposed by an Erlang application or module, which may modify its scattering.\n\n## Overview ##\n\nGeas is a tool detecting the runnable official Erlang release window for your project.\n\nGeas will tell you also :\n\n   - what are the offending functions in the beam/source files that reduce the available window.\n   - if some beam files are compiled native.\n   - the installed patches and recommend patches that should be installed depending your code.\n\nFor example , if a dependency is using ``application:ensure_all_started/1`` your project can only be used starting ``R16B02`` or if ``maps`` is used somewhere, starting ``17.0``. On contrary, ``pg`` module cannot be used after ``17.5`` but is back again in ``23.0``.\n\nFor more details, see [Wiki](https://github.com/crownedgrouse/geas/wiki).\n\nGeas is also available on [hex.pm](https://hex.pm/packages/geas).\n\n## Donations ##\n\nHelp this project to be maintained ! If you find this project useful, please donate to:\n\n    Bitcoin: 1Ep9VoyNtnNiGoXM52V6NwcMh4SZ9bxkAG\n    Ethereum: 0xfac5e46ffe12ec1fc2830d95c22e6583d163d7f9 \n\n## When using it ? ##\n\n- Each time you prepare a project release or update a dependency.\n- When you plan to add a dependency to your project\n- When writing your README, to inform your project's users on possible release window\n- To limit test of CI tools on only possible release window\n\n## Plugins ##\n\n``geas`` is available as a [module](https://github.com/crownedgrouse/geas/wiki/Module-API), but you will probably prefer to use geas plugins with your usual build tool.\n\nPlugin is available for [`erlang.mk`](https://github.com/crownedgrouse/geas/wiki/Erlang.mk-plugin) and [`rebar`](https://github.com/crownedgrouse/geas/wiki/Rebar-plugins) .\n\n## Output example ##\n\nExample on a test project using cowboy :\n\n```\n   R15                   27.1       Geas database                       2.9.0\n---Min--------Arch-------Max----------------------------------------------------\n   R16B                  23.3       cowboy                              1.0.4\n                         19.3       cowlib                              1.0.0\n                         23.3       ranch                               1.0.0\n   R16B03                18.1       test                                0.0.1\n--------------------------------------------------------------------------------\n   R16B03                18.1       Global project                      0.0.1\n\nC : 27.1\nT : \u003e=R16B03 \u003c=18.1\n\n./_build/default/lib/cowboy/ebin/cowboy_clock.beam\nR16B      erlang:integer_to_binary/1\n\n./_build/default/lib/cowboy/ebin/cowboy_handler.beam\n23.3      erlang:get_stacktrace/0\n\n./_build/default/lib/cowboy/ebin/cowboy_req.beam\nR16B      erlang:integer_to_binary/1\n\n./_build/default/lib/cowboy/ebin/cowboy_rest.beam\n23.3      erlang:get_stacktrace/0\n\n./_build/default/lib/cowboy/ebin/cowboy_static.beam\nR16B      erlang:integer_to_binary/1\n\n./_build/default/lib/cowboy/ebin/cowboy_websocket.beam\nR15B02    crypto:hash/2\n\n23.3      erlang:get_stacktrace/0\n\n./_build/default/lib/cowlib/ebin/cow_multipart.beam\n19.3      crypto:rand_bytes/1\n\n./_build/default/lib/ranch/ebin/ranch_ssl.beam\n23.3      ssl:cipher_suites/0, ssl:ssl_accept/2\n\n./_build/default/lib/test/ebin/test.beam\nR16B03    ssh_message:encode_host_key/1\n\n18.1      ssh_message:encode_host_key/1\n===\u003e The Erlang/OTP version used for analysis (27.1) is incompatible with the project's release window\n\n```\n\nCurrent (C) Erlang release found is `27.1` and no patches (P) was detected.\nThe global project can run starting R16B03 up to 18.1 in such case, due to use of a function introduced in R16B03 and another one removed in 18.2.\nNo native compilation was detected on any module.\nRecommended patches (R) is optionally proposed when an application used in code is referenced in a not installed patche, even if in this example, current Erlang release cannot run the project.\n\n## Tuning output ##\n\nOutput can be tuned depending some [environment variables](https://github.com/crownedgrouse/geas/wiki/Tuning-output).\n\nNote : starting version 2.6, variables can be set in `rebar.config`. \n\nEnvironment variables cheatsheet :\n\n**Key**          | **Value type** | **Value**             | **Comment**                           | **Details** | **Since** |\n-----------------|----------------|-----------------------|---------------------------------------|-------------|--------|\n`GEAS_USE_SRC`   | `boolean`      | [**0** / 1]           | Use source code instead beam files    | [...](https://github.com/crownedgrouse/geas/wiki/Tuning-output#using-source-code) | |\n`GEAS_MY_RELS`   | `string`       | Erlang release list   | List possible releases                | [...](https://github.com/crownedgrouse/geas/wiki/Tuning-output#listing-possible-releases) | |\n`GEAS_EXC_RELS`  | `string`       | Erlang release list   | Exclude some releases                 | [...](https://github.com/crownedgrouse/geas/wiki/Tuning-output#exclude-some-releases) | |\n`GEAS_DISC_RELS` | `boolean`      | [**0** / 1]           | Show discarded buggy Erlang releases  | [...](https://github.com/crownedgrouse/geas/wiki/Tuning-output#discard-some-releases) | |\n`GEAS_LOG`       | `string`       | Log level list        | Log informations                      | [...](https://github.com/crownedgrouse/geas/wiki/Tuning-output#log-informations) | |\n`GEAS_TIPS`      | `boolean`      | [**0** / 1]           | Give tips on patches to apply         | [...](https://github.com/crownedgrouse/geas/wiki/Tuning-output#tips) | |\n`GEAS_RANGE`     | `string`       | SEMVER range          | Set an OTP range for project          | [...](https://github.com/crownedgrouse/geas/wiki/SEMVER-range-and-frame) | |\n`GEAS_FRAME`     | `string`       | SEMVER range          | Set an OTP frame for project          | [...](https://github.com/crownedgrouse/geas/wiki/SEMVER-range-and-frame) | 2.6 |\n`GEAS_UPDATE`    | `boolean`      | [**0** / 1]           | Force update of OTP version table     |            | 2.6 |\n`GEAS_HTTP_OPTS` | `string`       | `httpc` options       | Erlang term string with a final dot   |            | 2.6 |\n`GEAS_GUILTY`    | `boolean`      | [**0** / 1]           | Show concise (0) guilty function lists or not (1) | | 2.9 |\n\n\nUnder compat table output, some information can be shown depending those environment variables and analyze result.\nA single capital letter is used as tag for each information.\n\n   - C = Current : Current Erlang major.minor release used (for example 20.2)\n   - P = Patches : List of patches detected to be installed on current release, if any (for example 20.2.2)\n   - T = Total   : All releases inside computed release window\n      `GEAS_MY_RELS=\"\"`\n   - L = Local   : All local releases given by user inside computed window\n      `GEAS_MY_RELS=\"18.1 19.0\"`\n   - D = Discarded  : Show releases that was automatically discarded\n      `GEAS_DISC_RELS=1`\n   - E = Excluded  : User excluded release list\n      `GEAS_EXC_RELS=\"R16B03\"`\n   - R = Recommended : Patches that should be applied, because code is using module impacted by a patch for current version\n         `GEAS_TIPS=1`\n\n## Quick Start ##\n\n```\ngit clone git://github.com/crownedgrouse/geas.git\ncd geas\nmake\nmake shell\n```\n\n## Contributing ##\n\nContributions are welcome. Please use pull-requests.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrownedgrouse%2Fgeas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrownedgrouse%2Fgeas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrownedgrouse%2Fgeas/lists"}