---
id: publish
title: Publishing Meshtastic
sidebar_label: Publishing Meshtastic
---

This document is a WIP.

If you’d like to do ‘real’ releases with your changes, the procedure is:

## Device

- Update protobufs

```shell
cd proto
git checkout master && git pull
cd ..
git add proto
git commit -m "updating proto submodule to latest"
run bin/regen-protos.sh
```

- edit version.properties to set release version
- commit and push (or merge) to root of repo - this should cause GitHub to start a release build (see the CI actions)
- edit the draft release text and click publish

### Update Protobufs

## Android

### Pre-requisites

- Add repository secrets
- - KEYSTORE_FILENAME
- - - name of the .jks
- - KEYSTORE
- - - we will convert the .jks to base64
- - - openssl base64 < filename.jks | tr -d '\n' | tee filename.txt
- - KEYSTORE_PROPERTIES
- - - storePassword=nononononono
      keyPassword=nononononono
      keyAlias=upload
      storeFile=nononononono.jks

### Instructions - Automated

- Update protobufs
- Go to Actions / Make Release / Run Workflow
- Pick the Releases branch
- Enter the version found in app/gradle.build

## iOS

TBD

## Meshtastic-flasher

A `meshtastic-flasher` release consists of publishing the release to PyPi https://pypi.org/project/meshtastic-flasher/ as well as producing single-executable files that are downloadable from Github https://github.com/meshtastic/Meshtastic-gui-installer/releases.

### Instructions - automated

- Go to Actions / Make Release / Run Workflow https://github.com/meshtastic/Meshtastic-gui-installer/actions/workflows/release.yml
- Draft & Publish release https://github.com/meshtastic/Meshtastic-gui-installer/releases

## Python

A python release consists of publishing the release to PyPi https://pypi.org/project/meshtastic/ as well as producing single-executable files that are downloadable from Github https://github.com/meshtastic/Meshtastic-python/releases.

### Pre-requisites

No pre-requisites are needed locally to make a release. All builds are done via Github Actions currently.

To test/validate, you will need to run:

```
pip3 install -r requirements.txt
pip install .
```

### Instructions

- Update protobufs by running the "Update protobufs" workflow in Actions: https://github.com/meshtastic/Meshtastic-python/actions/workflows/update_protobufs.yml

- run the "smoke1" test (optional):

connect one device to the serial port and run:

```
pytest -m smoke1
```

- run unit tests: `pytest` (optional)

- run bin/test-release.sh (optional)

- Run the "Make Release" workflow in Actions: https://github.com/meshtastic/Meshtastic-python/actions/workflows/release.yml

- After the "Make Release" is done, go into Releases: https://github.com/meshtastic/Meshtastic-python/releases There should be a draft. Add the title, update the "What's Changed" (Tip: Click on the "Auto-generate release notes" button.). Uncheck the "This is a pre-release" (if applicable).

:::note
You need permissions in the GitHub project to make a build
:::

## Web

Releases are automatically generated for every commit as per out [CI](https://github.com/meshtastic/meshtastic-web/blob/master/.github/workflows/main.yml). This performs two actions:

1. Generates a perpetually updated [GitHub release](https://github.com/meshtastic/meshtastic-web/releases/tag/latest) with an accompanying `build.tar` that a automatically get's pulled by the firmware CI at build time.
2. A hosted version is deployed to [client.meshtastic.org](https://client.meshtastic.org).