Doogie is built in C++ using CEF and Qt. This section has information on issues, building, and contributing.
Any bugs or enhancement requests can be filed in via GitHub issues. When filing a bug, please try to be as descriptive as possible on the issue. Ideally, provide a page or set of pages that trigger the error.
If there is a crash, the crash file will be dumped on the user’s computer. This can be found at
C:\Users\USER_NAME\AppData\Local\Doogie\User Data\Crashpad\reports on Windows (TODO: where on Linux). Please upload
this file to the issue tracker for bugs about crashes.
If you are a developer, one of the easiest ways to do this is to add the pages to src/tests/integration/resources.
Then by running npm run resource-server from src/tests/integration the resources can be browsed via
http://127.0.0.1:1993 (e.g. http://127.0.0.1:1993/hello-world.html).
Building Doogie is straightforward. A Go script at src/build.go handles all building regardless
of platform.
All instructions below assume the user is in the src folder.
Before running the build script on Windows, you must have the prerequisites:
cmake.exe on the PATHpython.exe on the PATHgo.exe on the PATHPATH for MSVC 2015:
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64. Or the following executed for MSVC
2017: "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64.qmake.exe on the PATH corresponding to the chosen MSVC version (e.g. with
"C:\Qt\<version>\msvc2017_64\bin" on the PATH)PATH to speed up builds (e.g. with
"C:\Qt\Tools\QtCreator\bin" on the PATH)CEF_DIR environment variable set to the base CEF extracted dirsrc folderBefore running the build script on Linux, you must have the prerequisites:
qmake on the PATHcmake on the PATHpython on the PATHgo on the PATHgcc and g++ on the PATHmake on the PATHCEF_DIR environment variable set to the base CEF extracted dirsudo apt-get install libgtk2.0-dev)sudo apt-get install mesa-common-dev)libGL installed and on the library path (e.g. on Ubuntu sudo apt-get install libgl1-mesa-dev)chrpath utility on the PATHsrc folder(TODO)
All instructions below assume the user is in the src folder.
The application uses the CEF C++ wrapper, which can be built via:
go run build.go build-cef
This only needs to be built one time. Now the application can easily be run via:
go run build.go run
That will run the debug version. For the release version, run:
go run build.go run release
Internally, that just builds and runs the exe. To just build, call build instead. To package a deployment artifact
from a previously run build, package is used. For example, to package a release deployment artifact from a
previously run release build, run:
go run build.go package release
Once complete, the package(s) will in release/package (e.g. doogie.zip in Windows)
There are two types of tests, unit and integration tests at src/tests/unit and src/tests/integration respectively.
The integration tests are not yet integrated in build.go. The tests are written in node.js. Make sure you have the
latest LTS release of node installed and navigate to src/tests/integration. To setup the test infrastructure, run:
npm install
To run the tests, make sure a debug instance of Doogie is running then run
npm test
Assuming CEF is built (see the first “Running Build” step), unit tests can be run with the following in src/:
go run build.go unit-test
Like the run command, the unit-test command can be given a release target, otherwise it defaults to debug.
There are a couple of benchmarks in the application. To run them, do the following in src/:
go run build.go benchmark
Like the run command, the benchmark command can be given a release target, otherwise it defaults to debug.
Doogie follows the Chromium Style Guide for C++ code except for anything listed below.
To do a lint check of the code, have the
Chromium depot_tools cloned somewhere and set the
DEPOT_TOOLS_DIR env var to the dir. Then run the following in src/:
go run build.go lint
For JS code in src/tests/integration, follow Standard Style.
Lint checks automatically occur when npm test is run to do the integration tests.