micro-build-server ================== Motivation ========== TeamCity forces us to separately configure every branch on TeamCity server, which introduces an unreasonable friction for our short-lived feature dev branches, and would also force us to purchase the most expensive subscription because the cheaper ones come with a very limited number of branch configurations. Since all our services are built more or less in a similar way, it is not very difficult to create our own build server, which is done in this repository. Development =========== Install Node.js v6. Run `npm install` in `BuildServer` directory. Create `app.ts` based on `app.ts.example`. To check code style or types, use `npm test`. Setting up the server ===================== Install Node.js v6. Copy to the server build artifacts (contents of the `bin\Release` folder) of `DotNetBuilder`. Add `Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed` (can be extracted out of 6.0.4 release on NuGet) and `Microsoft.VisualStudio.Setup.Configuration.Interop, PublicKeyToken=b03f5f7f11d50a3a` assemblies to GAC. Clone the repo (`git clone`). Run `npm install` in `BuildServer` directory. Create `app.ts` based on `app.ts.example` (in order to use it in IIS set the value `port: process.env["PORT"]`). Values of `gitpath`, `releasepath`, `tmpcodepath` should be as short as possible. Check that `app.ts` is correct by running `npm test`. Build by `npm build` or `npm run build`. Run by `npm start` or `node app`. In order to use in IIS, install `iisnode`, and create a new website in IIS, pointing to the `BuildServer` directory (the one with `Web.config`). Depending on the system, you might also have to install Microsoft .NET Targeting Pack and appropriate version of Windows SDK to the server. Updating the server =================== ``` git pull origin master npm test npm run build ``` Usage ===== In the settings of a target repository (and all its forks), add a webhook pointing to `https://micro-build-server/github/postreceive`. In target repository, create an `mbs.pos` file with contents of the following form: ``` { "type": "sequential", "params": { "tasks": [ { "type": "dotnetbuild", "params": { "solution": "Legacy.Processing.Common.sln", "forceCodeAnalysis": "true" } }, { "type": "dotnetnugetprocess", "params": { "masterRepoOwner": "Legacy", "nuspecName": "Legacy.Processing.Common", "major": "4" } } ] } } ``` All supported task types and their parameters are declared in [`BuildServer\lib\tasks`](BuildServer/lib/tasks). In order to implement a new task type, create a new `yourtaskname.ts` in that directory. This will automatically add build status comments to your PRs, and automatically close PRs when needed. In order to display a badge with the build status for the relevant branch, add the following line to `README.md` of the target repository: ``` ![Status](https://micro.build.server/status.svg) ``` Or alternatively, manually go to the page with the build report, by changing the URL in the address bar from `https://github.enterprise/what/ever` to `https://micro.build.server/github.enterprise/what/ever`. In both cases, it will display the build status of the relevant branch or commit.