Build and publish

Currently, we build NEST Desktop for multiple targets and publish them on various platforms.

Note

Please be aware that a lot of steps are already covered by our GitLab CI process. Therefore, we recommend to inspect the .gitlab-ci.yml file together with this chapter. It might also be helpful to have a look at the commands defined in package.json.

Docker

Docker

After building the app to the output folder with the command yarn build, build a docker image

docker build -t nest/nest-desktop:latest -f docker/nest-desktop-build/Dockerfile .

Then tag image with other version

docker tag nest/nest-desktop:latest nest/nest-desktop:4.0
docker tag nest/nest-desktop:latest nest/nest-desktop:4.0.0

Finally push all docker images

docker push nest/desktop:latest nest/desktop:4.0 nest/desktop:4.0.0

Python

Python

Building and pushing NEST Desktop on PyPI is a required step for the production. After that, Docker Hub can upgrade NEST Desktop in the provided Docker image.

Requirements
  • build, twine

The Python Package Index nest-desktop includes an executive command nest-desktop and a Python library nest_desktop.

Build

The current working directory is nest-desktop.

The building phase contains two steps:

The first step is to build a package of NEST Desktop using vite.

Initially, you have to upgrade the version of NEST Desktop in:

  • packages.json

  • nest_desktop/__init__.py

Then generate the app package using yarn. It builds output into the folder nest_desktop/app:

yarn build

Clean output files before you perform the second step:

yarn clean

The second step is to build the Python packages of nest-desktop for PyPI:

python3 -m build -o pydist

Upload

Finally, the package is ready for the the publication. You can upload the pip-package of nest-desktop to PyPI:

python3 -m twine upload pydist/*

Do not forget to commit the changes you made and set a new version tag in git.

git tag v4.0 -m 'v4.0.x'
git push --tags

Conda

Conda

We have a conda-smithy repository for nest-desktop. When a new Python package is released, we can change the version in meta.yaml ( the meta content online):

{% set version = "4.x.y" %}

Note

It is also important to change the sha256 checksum of the source of tar.gz file.

conda smithy rerender -c auto

Then make a pull request on the upstream repository. The CI will build package for conda-forge.

AppImage

In package.json, there are also yarn commands configured to build an Electron app.

yarn app:build --linux AppImage

Then upload the .appImage file to the release on https://github.com/nest-desktop/nest-desktop-AppImage.

See also

If you want to build other Electron packages, please have a look into electron-builder.yml file.

Flatpak

First install flatpak

sudo apt install flatpak
flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo
sudo apt install gnome-software-plugin-flatpak gnome-software
sudo apt install flatpak-builder

Change files and version in the io.github.nest_desktop.nest-desktop.yml file from https://github.com/nest-desktop/nest-desktop-flathub.

Build and install flatpak in user folder:

flatpak-builder --force-clean --user --install-deps-from=flathub --install builddir io.github.nest_desktop.nest-desktop.yml

If it worked locally, then make a pull request on the upstream repository. The CI will build flatpak for flathub.

See also

For more information, please read the guide https://docs.flatpak.org/en/latest/index.html

Snap

First, install snapcraft

sudo snap install snapcraft --classic

Note

Running LXD and Docker on the same host can cause connectivity issues. To fix it, please read this: https://documentation.ubuntu.com/lxd/en/latest/howto/network_bridge_firewalld/#prevent-connectivity-issues-with-lxd-and-docker

To build and pack NEST Desktop with snapcraft:

snapcraft

Then install the snap file locally:

sudo snap install <snap-file> --dangerous

Finally, upload the snap file:

snapcraft upload <snap-file>

See also

For Snap packages, you can find more information in the Snap repository for nest-desktop.