diff --git a/README.md b/README.md index b9c4a72..41b7004 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,132 @@ # LNXBOX +### Get the code + +``` +$ git clone https://dev.leenkx.com/LeenkxTeam/LNXBOX.git +$ cd LNXBOX +$ npm install +``` + +### Run the app + +``` +$ npm start +``` + +### Watch the code + +Restart the app automatically every time code changes. Useful during development. + +``` +$ npm run watch +``` + +### Run linters + +``` +$ npm test +``` + +### Run integration tests + +``` +$ npm run test-integration +``` + +The integration tests use Spectron and Tape. They click through the app, taking screenshots and +comparing each one to a reference. Why screenshots? + +* Ad-hoc checking makes the tests a lot more work to write +* Even diffing the whole HTML is not as thorough as screenshot diffing. For example, it wouldn't + catch an bug where hitting ESC from a video doesn't correctly restore window size. +* Chrome's own integration tests use screenshot diffing iirc +* Small UI changes will break a few tests, but the fix is as easy as deleting the offending + screenshots and running the tests, which will recreate them with the new look. +* The resulting Github PR will then show, pixel by pixel, the exact UI changes that were made! See + https://github.com/blog/817-behold-image-view-modes + +For MacOS, you'll need a Retina screen for the integration tests to pass. Your screen should have +the same resolution as a 2018 MacBook Pro 13". + +For Windows, you'll need Windows 10 with a 1366x768 screen. + +When running integration tests, keep the mouse on the edge of the screen and don't touch the mouse +or keyboard while the tests are running. + +### Package the app + +Builds app binaries for Mac, Linux, and Windows. + +``` +$ npm run package +``` + +To build for one platform: + +``` +$ npm run package -- [platform] [options] +``` + +Where `[platform]` is `darwin`, `linux`, `win32`, or `all` (default). + +The following optional arguments are available: + +- `--sign` - Sign the application (Mac, Windows) +- `--package=[type]` - Package single output type. + - `deb` - Debian package + - `rpm` - RedHat package + - `zip` - Linux zip file + - `dmg` - Mac disk image + - `exe` - Windows installer + - `portable` - Windows portable app + - `all` - All platforms (default) + +Note: Even with the `--package` option, the auto-update files (.nupkg for Windows, +-darwin.zip for Mac) will always be produced. + +#### Windows build notes + +The Windows app can be packaged from **any** platform. + +Note: Windows code signing only works from **Windows**, for now. + +Note: To package the Windows app from non-Windows platforms, +[Wine](https://www.winehq.org/) and [Mono](https://www.mono-project.com/) need +to be installed. For example on Mac, first install +[XQuartz](http://www.xquartz.org/), then run: + +``` +$ brew install wine mono +``` + +(Requires the [Homebrew](http://brew.sh/) package manager.) + +#### Mac build notes + +The Mac app can only be packaged from **macOS**. + +#### Linux build notes + +The Linux app can be packaged from **any** platform. + +If packaging from Mac, install system dependencies with Homebrew by running: + +``` +npm run install-system-deps +``` +#### Recommended readings to start working in the app + +Electron (Framework to make native apps for Windows, OSX and Linux in Javascript): +https://electronjs.org/docs/tutorial/quick-start + +React.js (Framework to work with Frontend UI): +https://reactjs.org/docs/getting-started.html + +Material UI (React components that implement Google's Material Design.): +https://material-ui.com/getting-started/installation + + +## License + +MIT. Copyright (c) [Leenkx Team](https://leenkx.com).