I started with this problem as something to simply discuss with the maintainers of certain build and package management projects -- sinan and agner specifically. But it seems to be more broad and cover how all of us who keep apps on github handle versioning and dependencies.
<div><br></div><div>The basic issue is app versions within .app files on branches in github, the resultant directory from a agner install and the discrepancies this causes.</div><div><br></div><div>For an example take an app like Cowboy that its .app files in the master branch has {vsn, "0.5.0"} but this is not really 0.5.0. That is a tagged version. What is in master is a version beyond 0.5.0.</div>
<div><br></div><div>An agner install of this results in lib/cowboy-@master with the .app file still being vsn 0.5.0, of course.</div><div><br></div><div>Rebar has a partial work around for these where you can put {vsn git} in your .app.src file and it will populate it on build with part of the git hash for the repo at that time. This I think could be part of the ultimate solution. Though another problem arises for cut versions put into tags, like if you simply download <a href="https://github.com/boundary/folsom/zipball/0.6">https://github.com/boundary/folsom/zipball/0.6</a> you can not build it by default because it is not a git repo. And if you pull the tag and build it (as Agner does for when you do a 'agner install folsom -v 0.6' the version is not 0.6 in the .app as you'd expect, but instead 0.6-<git sha>. Thus I had to create an agner package for the tag 0.6-51-gdaa75cb that points to the 0.6 tag of folsom -- other wise the dir name and the actual app version would not match.</div>
<div><br></div><div>So I've been doing many work arounds for this for my needs, none of them yet satisfying.</div><div><br></div><div>For real development of an Erlang project on a team its important to keep versions of dependencies in sync AND accurate. I've not found a good flow for this with the current environment of Erlang apps from their main source, github.</div>
<div><br></div><div>Am I the only one going crazy with this? haha Does anyone have suggestions/examples of what they do for production projects on teams to ease these annoyances?</div><div><br></div><div>I mostly just create my own packages and repos of dependencies, or package third party deps with the project.</div>
<div><br></div><div>Tristan</div>