CI: Add Many-Worlds build link to Commit Status So [Many-Worlds] is this thing I hacked together on Gomix that can fetch, build, and serve any branch, PR, or commit of MathQuill, on demand. For example, if you go to: http://many-worlds.gomix.me/mathquill/mathquill/branch/master/test/unit.html then it will fetch the latest `master` branch, run `make test`, then delegate to a static file server to serve `test/unit.html` and `build/mathquill.test.js` and all that good stuff. [Many-Worlds]: https://gomix.com/#!/project/many-worlds Currently, though, manually formatting that URL is the only way to use it. What would be nice is if an auto-generated URL were generated per branch or PR or commit or something and available on GitHub, so you could just click a link to try out a PR. We could automatically post a comment on new PRs, but that would spam PR authors with notifications. A better, quieter way is to use the GitHub Commit Status API: https://developer.github.com/v3/repos/statuses/ This lets us quietly attach a link to every commit built by CircleCI without spamming anyone with notifications, and lets you try out intermediate commits on a PR; not just the tip, every push. Authentication -------------- CircleCI doesn't provide us with the token they use for their status update, probably for good security reasons, but this is exactly what the MathQuillBot GitHub bot user is for. `$GITHUB_STATUS_API_KEY` is a [personal access token] for MathQuillBot limited to the [`repo:status`] authorization scope (so this token can't be used to write to anything other than commit statuses) that I've added to the build environment. [personal access token]: https://help.github.com/articles/creating-an-access-token-for-command-line-use/ [`repo:status`]: https://developer.github.com/v3/oauth/#scopes
diff --git a/circle.yml b/circle.yml index 331b639..2bc1988 100644 --- a/circle.yml +++ b/circle.yml
@@ -65,6 +65,17 @@ test: pre: + - |- + # Generate link to Many-Worlds build and add to GitHub Commit Status + curl -i -X POST https://api.github.com/repos/mathquill/mathquill/statuses/$CIRCLE_SHA1 \ + -u MathQuillBot:$GITHUB_STATUS_API_KEY \ + -d '{ + "context": "ci/many-worlds", + "state": "success", + "description": "Try the tests on the Many-Worlds build of this commit:", + "target_url": "http://many-worlds.gomix.me/mathquill/mathquill/commit/'$CIRCLE_SHA1'/test/" + }' + # Safari on Sauce can only connect to port 3000, 4000, 7000, or 8000. Edge needs port 7000 or 8000. # https://david263a.wordpress.com/2015/04/18/fixing-safari-cant-connect-to-localhost-issue-when-using-sauce-labs-connect-tunnel/ # https://support.saucelabs.com/customer/portal/questions/14368823-requests-to-localhost-on-microsoft-edge-are-failing-over-sauce-connect