Hi everyone, I'm the new maintainer of hk. It's actually not very new :) You can see that Keith Rarick did most of the work on it over a year ago, along with some other major contributors: https://github.com/heroku/hk/graphs/contributors
What is new is that I moved it to the Heroku org this week and will be spending a lot of my time turning it into a proper replacement for the Heroku Toolbelt & gem.
It's still very early stage software, though. There isn't currently a supported installation method, and it's very far from having all of the necessary features to fully replace the old client. Also, the UX will probably change frequently and things may break, eat your data, etc. So don't rely on it just yet :)
That being said, I'm really excited to see where we can take this in the next few months. Hk is already a great starting point. Go is very fast and lightweight, and offers some nice advantages over Ruby on the distribution & installation fronts.
Hopefully we'll have something exciting to show in a couple months!
I use the two Heroku tools `foreman` and `heroku` regularly. I've recently switched to their Go alternatives, and for one thing, the speed has improved[1].
However, the Heroku client is mostly network bound (communicating with their API), and on an average connection this speedup hardly matters.
I wonder what the other benefits will be?
[1]
$ time heroku help
real 0m0.409s
user 0m0.146s
sys 0m0.036s
$ time hk help
real 0m0.008s
user 0m0.003s
sys 0m0.004s
$ time foreman run echo hello
real 0m2.062s
user 0m0.199s
sys 0m0.100s
$ time forego run echo hello
real 0m0.886s
user 0m0.205s
sys 0m0.097s
The benefit would be EASY cross platform support. From experience building Vagrant installers: it's a pain in the butt. Shipping a single binary client would probably simplify things greatly.
Using the heroku client every day, I noticed this new client does not namespace any of the commands. Subcommands of hk are:
hk create # create app
hk destroy # destroy app
hk apps # list apps
hk set # set config var
hk unset #unset config var
Compare to heroku's (preferable, imho) commands:
heroku apps:create # create app
heroku apps:destroy # destroy app
heroku apps # list apps
heroku config:set # set config var
heroku config:unset # unset config var
The command 'hk set' doesn't tell you any semantic information at all about what it's doing - I prefer the original syntax for its convention of being explicit.
Other than that minor complaint, seems like a really cool project, going to look through the source later.
The commands right now attempt to map directly to unix equivalents where it makes sense. set, unset, & env are the traditional unix commands for modifying the environment.
The main problem I have with the flat, non-namespaced commands is that there will be far too many of them once we've implemented the full command set.
Anyway, as I wrote in my other comment, this is very early software and it has a long way to go before I'll recommend that regular Heroku users rely on it.
Heroku is going to loose Solaris and a couple of other secondary target OSes if they go down that route. Golang can cross-compile to Linux, Darwin, Windows and a couple of BSDs.
EDIT: It really seems that they are going down that route. They are also working on a Go implementation of Foreman here: https://github.com/ddollar/forego
Gc, the reference implementation, only does the mentioned OSes. Gccgo should work where gcc is available, and is known to work on Solaris. See - http://blog.golang.org/gccgo-in-gcc-471
On a side note, I would like someone with experience here to tell me how you can actually create command line commands? In this case, they seem to use:
hk <insert command here>
I would like to do something like:
abc <some command>
Basically something like a Rails scaffold generator. How difficult/easy is this? Googling didn't help much..
Note: It doesn't have to be built with Golang..
Thanks
Edit: Thanks for the replies :)
Note: It doesn't have to be just Go, I'm just asking in general..
I would basically like to create a scaffold generator. So, when I do
abc generate test
I would like a file named test.html (or something) generated..
[+] [-] bgentry|12 years ago|reply
What is new is that I moved it to the Heroku org this week and will be spending a lot of my time turning it into a proper replacement for the Heroku Toolbelt & gem.
It's still very early stage software, though. There isn't currently a supported installation method, and it's very far from having all of the necessary features to fully replace the old client. Also, the UX will probably change frequently and things may break, eat your data, etc. So don't rely on it just yet :)
That being said, I'm really excited to see where we can take this in the next few months. Hk is already a great starting point. Go is very fast and lightweight, and offers some nice advantages over Ruby on the distribution & installation fronts.
Hopefully we'll have something exciting to show in a couple months!
[+] [-] pearkes|12 years ago|reply
However, the Heroku client is mostly network bound (communicating with their API), and on an average connection this speedup hardly matters.
I wonder what the other benefits will be?
[1]
[+] [-] mitchellh|12 years ago|reply
[+] [-] fderp|12 years ago|reply
Other than that minor complaint, seems like a really cool project, going to look through the source later.
[+] [-] bgentry|12 years ago|reply
The main problem I have with the flat, non-namespaced commands is that there will be far too many of them once we've implemented the full command set.
Anyway, as I wrote in my other comment, this is very early software and it has a long way to go before I'll recommend that regular Heroku users rely on it.
[+] [-] zimbatm|12 years ago|reply
EDIT: It really seems that they are going down that route. They are also working on a Go implementation of Foreman here: https://github.com/ddollar/forego
[+] [-] axaxs|12 years ago|reply
[+] [-] ithkuil|12 years ago|reply
[+] [-] enneff|12 years ago|reply
[+] [-] 4ad|12 years ago|reply
[+] [-] iand|12 years ago|reply
[+] [-] miloshadzic|12 years ago|reply
[+] [-] neya|12 years ago|reply
Note: It doesn't have to be built with Golang..
Thanks
Edit: Thanks for the replies :)
Note: It doesn't have to be just Go, I'm just asking in general..
I would basically like to create a scaffold generator. So, when I do
I would like a file named test.html (or something) generated..Thanks again..
[+] [-] dscrd|12 years ago|reply
[+] [-] iand|12 years ago|reply
Here's how the hk app does it: https://github.com/heroku/hk/blob/master/main.go#L120
Basically it reads the arguments to the executable and matches them against a built-in list of supported commands and dispatches appropriately.
[+] [-] walle_|12 years ago|reply
I use this route in one of my projects https://github.com/walle/gas/blob/development/bin/gas
Basically, all executables in your PATH that conforms to a naming convention is a plugin. If a match is found it's run.
So in my case you can call both ´$ gas list´ and ´$ gas-list´.
I don't know if this is the best way to do it, my inspiration was how git commands work.
[+] [-] pestaa|12 years ago|reply
2. Put it in your PATH.
3. Profit.
The long version is more complicated than that, but you need to tell more details first.
[+] [-] oblio|12 years ago|reply
If only it would be ported to more languages...
[+] [-] FLUX-YOU|12 years ago|reply
[+] [-] knocte|12 years ago|reply
So I'm wondering, is this alternative opensource now?
[+] [-] zimbatm|12 years ago|reply
[+] [-] _ak|12 years ago|reply