I have been using open source projects for a while and been developing upon the open source applications and every so often I come across the words 'Nightly Build' and I have always been curious as to what it actually means. Does it literally mean the projects are done purely as side projects (usually at night after everyone has finished their day jobs) and there's no true contributor/dedicated development team or is it more complex than that?
Generally it means an automated build that is done once a day, typically after the end of the day for most of the developers. For projects with developers in multiple time zones it's generally a compromise time. The idea is that everyone who is going to check in code "today" has done so, and the automated build will make sure that everything compiles, and hopefully run the unit tests and any other automated tests etc that exist, then produce a final installer/executable etc.
It means a build that is performed at the end of each day of development. If you use a continuous integration server, it will generally be configured to build the code and run the unit tests on every check in. At the end of each day you may want to run more extensive tests, regression test and integration tests for example, which take too long to run on each check in and these would be triggered after the nightly build. If you have a full continuously delivery pipeline the nightly build may also be used to deploy the built code to environments for user testing.
The term is frequently used for large projects where a complete rebuild of the finished product from source takes too long for the individual developer to do this as a part of their normal development cycle.
Instead a complete rebuild is done automatically during the night so the build computer have 8-10-12 hours to do the build and have it ready for the developers coming in the next morning, so they can continue working on their individual tiny bit on top of the new version.
These days, it is frequent that the project includes a lot of tests ensuring the correct operation of the code, as well as generate and publish documentation from the source (like javadoc).
Nightly builds are good thing, they provide immediate feed back to developers if they broke the build. Having a nightly build means that the software is stable and likely to build for new users. Software that is not built regularly is difficult to release.