2021-10-04 12:54:44 -07:00
# Desktop client UI
2020-06-29 18:11:11 -04:00
2021-10-04 12:54:44 -07:00
The desktop client UI for Boundary.
2020-06-30 11:37:40 -04:00
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
2023-01-09 08:48:49 -08:00
- [Prerequisites ](#prerequisites )
- [Installation ](#installation )
- [Yarn Commands ](#yarn-commands )
- [Running / Development ](#running--development )
- [Developing Using Non-Release Versions of Boundary ](#developing-using-non-release-versions-of-boundary )
- [Environment Variables ](#environment-variables )
- [Building for Production ](#building-for-production )
- [Environment Variables ](#environment-variables-1 )
- [Running Tests ](#running-tests )
- [Running end to end Tests ](#running-end-to-end-tests )
- [Deploying ](#deploying )
- [Debug desktop client ](#debug-desktop-client )
- [Debug `renderer` process ](#debug-renderer-process )
- [Debug `main` process ](#debug-main-process )
- [Further Reading / Useful Links ](#further-reading--useful-links )
2020-06-30 11:37:40 -04:00
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
2020-06-29 18:11:11 -04:00
## Prerequisites
You will need the following things properly installed on your computer.
* [Git ](https://git-scm.com/ )
* [Node.js ](https://nodejs.org/ )
* [Yarn ](https://yarnpkg.com/ )
2023-01-09 08:48:49 -08:00
* [Ember CLI ](https://cli.emberjs.com/release/ )
2020-06-29 18:11:11 -04:00
* [Google Chrome ](https://google.com/chrome/ )
## Installation
2021-10-04 12:54:44 -07:00
See [boundary-ui README ](https://github.com/hashicorp/boundary-ui#installation ) for installation instructions.
2020-06-30 11:37:40 -04:00
## Yarn Commands
List of available project commands. `yarn run <command-name>`
| Command | Description |
| ------- | ----------- |
| build | Builds the UI for production. |
2021-10-04 11:02:24 -07:00
| build:development | Builds the UI in development mode. |
2021-09-06 22:53:22 -04:00
| build:desktop:debianOnMacOS | Builds debian based linux artifacts on MacOS. |
2020-06-30 11:37:40 -04:00
| lint | Runs all lint commands. |
2021-10-04 11:02:24 -07:00
| lint:fix | Runs all automatic linting fixes. |
2020-06-30 11:37:40 -04:00
| lint:hbs | Lints `hbs` template files. |
2021-10-04 11:02:24 -07:00
| lint:hbs:fix | Runs the automatic linting fix for `hbs` template files. |
2020-06-30 11:37:40 -04:00
| lint:js | Lints `js` files. |
2021-10-04 11:02:24 -07:00
| lint:js:fix | Runs the automatic linting fix for `js` files. |
2020-06-30 11:37:40 -04:00
| lint:sass | Lints `scss` files. |
2021-10-04 11:02:24 -07:00
| lint:electron | Runs a linter tool to identify misconfigurations and security anti-patterns in Electron. |
2020-06-30 11:37:40 -04:00
| format | Runs all auto-formatters. |
2021-10-04 11:02:24 -07:00
| format:hbs | Auto-formats `hbs` files using Prettier. |
2020-06-30 11:37:40 -04:00
| format:js | Auto-formats `js` files using Prettier. |
| format:sass | Auto-formats `scss` files using Prettier. |
2021-10-04 12:54:44 -07:00
| start | Runs the dummy app local server as web app. |
2020-06-30 11:37:40 -04:00
| start:desktop | Runs the dummy app as an electron app. |
2021-10-04 12:54:44 -07:00
| clean:coverage | Cleans coverage reporting directory. |
2020-06-30 11:37:40 -04:00
| test | Runs all tests in random order, with coverage reporting. |
2021-10-04 12:54:44 -07:00
| test:ember | Runs ember tests in random order, with coverage reporting. |
2020-06-30 11:37:40 -04:00
| doc:toc | Automatically generates a table of contents for this README file. |
2020-06-29 18:11:11 -04:00
## Running / Development
2021-10-04 12:54:44 -07:00
To run as web app:
2020-06-30 11:37:40 -04:00
* `yarn start`
2020-06-29 18:11:11 -04:00
* Visit your app at [http://localhost:4200 ](http://localhost:4200 ).
* Visit your tests at [http://localhost:4200/tests ](http://localhost:4200/tests ).
2020-06-30 11:37:40 -04:00
To run as a desktop app:
* `yarn start:desktop`
2020-06-29 18:11:11 -04:00
2021-02-01 12:35:02 -05:00
The Boundary CLI is downloaded and extracted to `electron-app/cli/` folder as part of
build. CLI version is defined in `electron-app/config/cli.js` .
2021-09-08 13:56:01 -07:00
### Developing Using Non-Release Versions of Boundary
You can also develop using a non-release version of Boundary - bypassing the
above CLI download behavior - by manually placing the version of Boundary that
you want to develop with in the `electron-app/cli/` directly (you may need to
create the directory).
After doing this, run yarn with `BYPASS_CLI_SETUP=true` ; example:
`BYPASS_CLI_SETUP=true yarn start:desktop` .
### Environment Variables
2021-04-12 14:21:15 -04:00
These environment variables may be used to customized the build.
| Variable | Description |
| -------- | ----------- |
| `DEBUG_APP_UPDATER` | Enable to debug app updater feature. Must be enabled for all `APP_UPDATER_*` variables to be used. |
2021-04-12 14:52:58 -04:00
| `APP_UPDATER_CURRENT_VERSION` | Version of client. |
| `APP_UPDATER_LATEST_VERSION_TAG` | Next version for comparison with current version. |
2021-04-12 14:21:15 -04:00
| `APP_UPDATER_LATEST_VERSION_LOCATION` | Location of app release to use for updating client. Can be a filepath or url. |
2021-08-25 10:05:11 -04:00
| `BYPASS_CLI_SETUP` | Disable download and extraction of cli. For development use only. |
2021-09-16 10:56:51 -04:00
| `BYPASS_APP_UPDATER` | Disable app updater feature. For development use only. |
2021-09-16 10:33:56 -04:00
| `DISABLE_WINDOW_CHROME` | Disable window chrome. For internal use only. |
2021-10-04 12:54:44 -07:00
| `ENABLE_MIRAGE` | Enable (`true` ) or disable (`false` ) mirage. Default value is `true` . |
2021-04-12 14:21:15 -04:00
2020-06-30 11:37:40 -04:00
### Building for Production
2020-06-29 18:11:11 -04:00
2020-06-30 11:37:40 -04:00
Before executing a build, be sure to set any environment variables necessary
2021-10-04 12:54:44 -07:00
for your target [environment ](#environment-variables ). To build this UI for
2021-01-29 16:23:56 -05:00
production, run the following commands from this folder:
2020-06-29 18:11:11 -04:00
2020-06-30 11:37:40 -04:00
```bash
yarn install
yarn build
```
2021-01-29 16:23:56 -05:00
`BOUNDARY_DESKTOP_SIGNING_IDENTITY` environment variable must be provided
2021-09-02 10:42:45 -04:00
to codesign MacOS artifacts in production.
2020-06-30 11:37:40 -04:00
2021-01-29 16:23:56 -05:00
The static production assets are saved into the `dist/` folder.
2021-02-01 12:35:02 -05:00
The Boundary CLI is downloaded and extracted to `electron-app/cli/` folder as part of
packaging. CLI version is defined in `electron-app/config/cli.js` .
2020-06-30 11:37:40 -04:00
2021-09-08 13:56:01 -07:00
Similar to running in development, you can also use `BYPASS_CLI_SETUP=true` to
bypass the download of the CLI, which can be useful for pre-release testing. See
[Developing Using Non-Release Versions of
Boundary ](#developing-using-non-release-versions-of-boundary ) for more details.
2021-09-02 10:42:45 -04:00
To build debian based linux artifacts on MacOS, additional [MacOS tools ](https://www.electronforge.io/config/makers/deb ) need to be installed before running the following commands from this folder.
```
yarn install
yarn build:production # Build assets
2021-09-06 22:53:22 -04:00
yarn build:desktop:debianOnMacOS # Build app
2021-09-02 10:42:45 -04:00
```
2020-06-30 11:37:40 -04:00
#### Environment Variables
These environment variables may be used to customized the build.
| Variable | Default Value | Description |
| -------- | ------------- | ----------- |
| `APP_NAME` | Application Name | The user-facing name of the application, appearing in titles, etc. |
2021-01-29 16:23:56 -05:00
| `BOUNDARY_DESKTOP_SIGNING_IDENTITY` | | The name of the certificate to use when signing (e.g. Developer ID Application: * (* )). |
2021-09-08 13:56:01 -07:00
| `BYPASS_CLI_SETUP` | Set to `true` to launch without bootstrapping the CLI (see above). |
2020-06-30 11:37:40 -04:00
### Running Tests
2020-06-29 18:11:11 -04:00
2020-06-30 11:37:40 -04:00
* `yarn test` runs full tests in random order with coverage
2020-06-29 18:11:11 -04:00
2020-06-30 11:37:40 -04:00
Keep in mind that tests are executed in random order. This is intentional
and helps to prevent hard-to-debug order dependencies among tests.
2020-06-29 18:11:11 -04:00
2020-06-30 11:37:40 -04:00
Please also note that we report test coverage. We strive for "the right amount
of testing". Use test coverage as a guide to help you identify untested
high-value code.
2020-06-29 18:11:11 -04:00
2020-06-30 11:37:40 -04:00
We rely on `ember-a11y-testing` to validate accessibility in acceptance tests.
If you write acceptance tests, please ensure at least one validation per
route using `await a11yAudit();` .
2020-06-29 18:11:11 -04:00
2021-10-12 08:44:38 -07:00
### Running end to end Tests
2021-10-12 09:00:12 -07:00
**The end-to-end test suite is supported for Mac, x64 and arm64 (M1) chips.**
2021-10-12 08:44:38 -07:00
*Be aware this is a temporary process that can suffer changes and eventually will be automated.*
This process will explain how to run end to end test in your local environment. The process will assume next:
- You already run the Boundary UI [installation process ](https://github.com/hashicorp/boundary-ui#installation ).
- You have Boundary installed, see [the installation guide ](https://learn.hashicorp.com/tutorials/boundary/getting-started-install?in=boundary/getting-started ).
Steps:
- Open a terminal and run `$ boundary dev` .
- Open another terminal and navigate to `$ boundary-ui/ui/desktop` folder.
- Run `$ yarn run e2e` and tests will start run.
- You can check the screenshots the tests take: `desktop/tests/end2end/screenshots` .
2020-06-29 18:11:11 -04:00
### Deploying
2020-06-30 11:37:40 -04:00
TBD
2020-06-29 18:11:11 -04:00
2022-10-06 09:11:04 +02:00
## Debug desktop client
There are two processes we can debug, `renderer` process and `main` process.
When I do need to debug the `main` process?
To debug code that is just executed in the main process, i.e to debug the `ipcMain` handler.
### Debug `renderer` process
To debug the renderer process, once the electron app is running, open the Chrome DevTools.
You can open the Chrome DevTools programmatically by calling the API on the `webContents` instance:
```javascript
const browserWindow = new BrowserWindow ( browserWindowOptions );
browserWindow . webContents . openDevTools ()
```
`browserWindow` reference in our code, [here ](https://github.com/hashicorp/boundary-ui/blob/main/ui/desktop/electron-app/src/index.js#L84 ).
### Debug `main` process
To start the electron app with the inspector adding a breakpoint before code starts:
`$ yarn start:desktop --- --inspect-brk` .
To avoid the breakpoint:
`$ yarn start:desktop --- --inspect` .
You can use any of [these clients ](https://nodejs.org/en/docs/guides/debugging-getting-started/#inspector-clients ), but we will use the chrome inspector client. Open chrome and on the url bar: `$ chrome://inspect` and click inspect on the electron instance.
If you start the inspector with the `-brk` (breakpoint) code will not execute until you allow execution to continue (clicking the play button on the inspector).
More information on [debugging the main process ](https://www.electronjs.org/docs/latest/tutorial/debugging-main-process ).
More information on [Node debugging guide ](https://nodejs.org/en/docs/guides/debugging-getting-started/ ).
2020-06-29 18:11:11 -04:00
## Further Reading / Useful Links
* [ember.js ](https://emberjs.com/ )
2023-01-09 08:48:49 -08:00
* [ember-cli ](https://cli.emberjs.com/release/ )
2020-06-29 18:11:11 -04:00
* Development Browser Extensions
* [ember inspector for chrome ](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi )
* [ember inspector for firefox ](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/ )