At work we recently switched from Cocoapods to punic. The reasons why are irrelevant for the purpose of this post. However, one of the traits of using punic is very long build times when you’re building all your dependencies. On the plus side, builds of our project tend to be pretty quick.
On the occasions that I do need to run a punic build
, I often want to start
working on something else while I wait. However, I also want to know the moment
that the build is done, so I can continue working on our app. Thanks to a
combination of a shell script, a web server, and Pushover, I can.
Pushover is a free service that will convert emails or API calls to push
notifications to their native app. They also have an API you can use to perform
a push. I have a URL that I can hit that will transform a HTTP GET
with a
couple parameters to a call to Pushover’s API. Here’s my code written for
Node, as an example.
function (response, query, request) {
new Promise(function (resolve, reject) {
var options = {
'url': 'https://api.pushover.net/1/messages.json',
form: {
token: "{pushover token}",
title: query.title,
message: query.message,
user: "{pushover user}"
}
};
Request.post(options, function(err,httpResponse,body) {
if (err || typeof(body["errors"]) !== "undefined") {
reject(body["errors"] || err);
} else {
resolve();
}
});
}).then(function() {
response.sendStatus(200);
}, function (error) {
response.status(201).send(error);
});
}
I can call this with a URL such as:
http://localhost/performAPush?title=Some+Title&message=Some+Message
This URL is extremely easy to tickle using cURL
. I can make it even
easier to call by automatically URL encoding the input using
php. This is written for fish but
wouldn’t be hard to do in any other shell:
#!/usr/local/bin/fish
set escaped (php -r "echo urlencode('$argv');")
curl -s "http://localhost/performAPush?title=Done&message=$escaped" > /dev/null
So I can call that script, which I’ve called done
, as follows:
> ~/done punic build is complete!
Which results in this hitting my watch:
Putting it all together, I can do something like this (again, fish shell syntax):
> punic build; ~/done punic build is complete!
Now I can walk away and take care of other things, but still know the moment my build is ready.