2023-08-22 10:46:48 +03:00
# Development
2023-02-03 18:23:13 +03:00
2023-08-22 10:46:48 +03:00
## Prerequisites
2023-01-31 17:55:57 +03:00
2023-01-31 18:01:58 +03:00
[see here ](https://tauri.app/v1/guides/getting-started/prerequisites )
2023-02-03 18:23:13 +03:00
for the list of software required to build / develope the app.
2023-09-06 10:33:27 +03:00
### Setup
2023-01-31 17:55:57 +03:00
2023-04-18 13:42:44 +03:00
Then, make sure to install app dependencies:
2023-01-31 17:55:57 +03:00
2023-01-31 18:01:58 +03:00
```bash
$ pnpm install
```
2023-01-31 17:55:57 +03:00
2023-09-06 10:33:27 +03:00
### Run the app
2023-02-03 18:23:13 +03:00
2023-04-18 13:42:44 +03:00
Now you should be able to run the app in development mode:
2023-01-31 18:01:58 +03:00
```bash
$ pnpm tauri dev
```
2023-02-03 12:36:51 +03:00
2023-11-20 11:29:45 +03:00
By default it will not print debug logs to console. If you want debug logs, set `LOG_LEVEL` environment variable:
2023-09-06 10:33:27 +03:00
```bash
2023-11-20 11:29:45 +03:00
$ LOG_LEVEL=debug pnpm tauri dev
2023-09-06 10:33:27 +03:00
```
2023-08-22 10:46:48 +03:00
### Lint & format
2023-04-18 13:54:38 +03:00
2023-09-06 10:33:27 +03:00
Javascript:
2023-04-18 13:54:38 +03:00
```bash
2023-08-22 10:46:48 +03:00
$ pnpm lint
2023-04-18 13:54:38 +03:00
$ pnpm format
```
2023-09-06 10:33:27 +03:00
Rust:
2023-08-22 10:46:48 +03:00
```bash
$ cargo clippy # see linting errors
$ cargo fmt # format code
```
## Debug
### Logs
App writes logs into:
1. stdout in development mode
2. [Logs ](https://tauri.app/v1/api/js/path/#platform-specific ) directory
### Tokio
We are also collecting tokio's runtime tracing information that could be viewed using [tokio-console ](https://github.com/tokio-rs/console#tokio-console-prototypes ):
- developlent:
```bash
$ tokio-console
```
- nightly:
```bash
$ tokio-console http://127.0.0.1:6668
```
- production:
```bash
2023-08-22 10:47:31 +03:00
$ tokio-console http://127.0.0.1:6667
2023-08-22 10:46:48 +03:00
```
## Build
2023-02-03 18:23:13 +03:00
2023-04-18 13:42:44 +03:00
To build the app in production mode, run:
2023-02-03 18:23:13 +03:00
```bash
2023-12-22 16:22:54 +03:00
$ pnpm tauri build --features devtools --config gitbutler-app/tauri.conf.nightly.json
2023-02-03 18:23:13 +03:00
```
2023-08-22 10:46:48 +03:00
This will make an asset similar to our nightly build.
2023-12-19 13:38:59 +03:00
### Building on Windows
Building on Windows is a bit of a tricky process. Here are some helpful tips.
#### File permissions
We use `pnpm` , which requires a relatively recent version of Node.js.
Make sure that the latest stable version of Node.js is installed and
on the PATH, and then `npm i -g pnpm` .
This often causes file permissions. First, the AppData folder may not
be present. Be sure to create it if it isn't.
```
mkdir %APPDATA%\npm
```
Secondly, typically folders within `Program Files` are not writable.
You'll need to fix the security permissions for the `nodejs` folder.
> **NOTE:** Under specific circumstances, depending on your usage of
> Node.js, this may pose a security concern. Be sure to understand
> the implications of this before proceeding.
1. Right click on the `nodejs` folder in `Program Files` .
2. Click on `Properties` .
3. Click on the `Security` tab.
4. Click on `Edit` next to "change permissions".
6. Click on `Add` .
7. Type in the name of your user account, or type `Everyone` (case-sensitive).
Click `Check Names` to verify (they will be underlined if correct).
8. Make sure that `Full Control` is checked under `Allow` .
8. Apply / click OK as needed to close the dialogs.
### Perl
A Perl interpreter is required to be installed in order to configure the `openssl-sys`
crate. We've used [Strawberry Perl ](https://strawberryperl.com/ ) without issue.
Make sure it's installed and `perl` is available on the `PATH` (it is by default
after installation, just make sure to restart the terminal after installing).
Note that it might appear that the build has hung or frozen on the `openssl-sys` crate.
It's not, it's just that Cargo can't report the status of a C/C++ build happening
under the hood, and openssl is _large_ . It'll take a while to compile.
2023-04-18 13:42:44 +03:00
## Icon generation
2023-04-13 14:39:03 +03:00
```bash
$ pnpm tauri icon path/to/icon.png
```
2023-08-22 10:46:48 +03:00
## Release
2023-02-03 12:36:51 +03:00
2023-02-17 16:21:41 +03:00
Building is done via [GitHub Action ](https://github.com/gitbutlerapp/gitbutler-client/actions/workflows/publish.yaml ).
2023-02-14 17:59:48 +03:00
Go to the link and select `Run workflow` from the desired branch.
2023-04-18 13:42:44 +03:00
### Versioning
2023-02-14 17:59:48 +03:00
2023-08-22 10:46:48 +03:00
When running the [release action ](https://github.com/gitbutlerapp/gitbutler-client/actions/workflows/publish.yaml ),
you will have to choose one of `major` , `minor` , or `patch` release type. Action will generate a new version based on your input and current
version found at `https://app.gitbutler.com/releases` .
2023-02-17 16:21:41 +03:00
2023-08-22 10:46:48 +03:00
### Publishing
2023-02-17 16:21:41 +03:00
To publish a version that you've just build, use [Release Manager ](https://gitbutler.retool.com/apps/cb9cbed6-ae0a-11ed-918c-736c4335d3af/Release%20Manager ).