Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,41 @@ concurrency:
cancel-in-progress: true

jobs:
# Decides whether the push or PR touches the app. Docs, the website and other non-build
# files are listed below; anything else counts as a project file.
changes:
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
pull-requests: read
outputs:
app: ${{ steps.filter.outputs.app }}
steps:
- uses: actions/checkout@v7

- uses: dorny/paths-filter@v4
id: filter
with:
predicate-quantifier: some-with-excludes
filters: |
app:
- '**'
- '!**/*.md'
- '!docs/**'
- '!site/**'
- '!LICENSE'
- '!.github/ISSUE_TEMPLATE/**'
- '!.github/DISCUSSION_TEMPLATE/**'
- '!.github/workflows/pages.yml'
- '!.github/workflows/claude.yml'
- '!.github/workflows/claude-code-review.yml'

# The ruleset on main requires this check. When nothing in the app changed it is skipped,
# and a skipped job still counts as passed.
build:
needs: changes
if: needs.changes.outputs.app == 'true'
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ adb logcat -s MeshAnd MeshAnd/SDK
- `v*` tags: only admins may create, move or delete them.
- The repo admin (the owner's account, which this agent pushes with) bypasses both, so direct pushes to `main` and release tags still work. GitHub notes the bypass.
- Never force-push `main`.
- **CI:** `.github/workflows/ci.yml` runs tests, lint and a debug build on pushes to `main` and on PRs.
- **CI:** `.github/workflows/ci.yml` runs tests, lint and a debug build on pushes to `main` and on PRs that change project files. A `changes` job (`dorny/paths-filter`) skips `build` when only Markdown, `docs/`, `site/`, `LICENSE`, issue/discussion templates or the Pages/Claude workflows changed; a skipped `build` still satisfies the ruleset's required check. Add new non-build paths to its exclude list.
- **Release notes:** `CHANGELOG.md`, one `## <version>` section per release, written for app users. The release workflow publishes that section (plus a download line and a compare link) as the GitHub Release text, and fails if it's missing. **Add the section before tagging.**
- **Releases:** `.github/workflows/release.yml` runs on a `v*` tag. It requires the tag to equal `versionName`, signs using the secrets `MESHAND_KEYSTORE_BASE64` and `MESHAND_KEYSTORE_PASSWORD`, and publishes `MeshAnd-<version>.apk` to GitHub Releases.
- **Website:** the project site at https://meshand.app/, published by `.github/workflows/pages.yml` on pushes to `main` that touch `site/`, `docs/` or `CHANGELOG.md`, or by hand (Run workflow). The repo's Settings → Pages → Source must be **GitHub Actions**.
Expand Down
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,8 +190,6 @@ connected, with a button to disconnect.
- **Staying up to date:** when you open MeshAnd, it checks GitHub for a newer version and shows a
**Download** button. Install the new APK over the old one; your radio and settings are kept. You
can turn the check off in **Settings → About**.
- **Automatic updates:** with [Obtainium](https://github.com/ImranR98/Obtainium), add
`https://github.com/mategogiberidze/MeshAnd` and it installs new releases for you.
- **Is the download genuine?** Every release is signed with the same key, and Android refuses an
update signed by anyone else. Each APK also comes with a `.sha256` file to check the download.
- **Build it yourself:** see [docs/development.md](docs/development.md). A build you make yourself
Expand Down
3 changes: 3 additions & 0 deletions docs/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ The app never logs channel keys or radio configuration.

Releases are built and signed by GitHub Actions:
- **`ci.yml`** runs tests, lint and a debug build on every push to `main` and on pull requests.
Changes that only touch Markdown, `docs/`, `site/` or similar files skip the build.
- **`pages.yml`** publishes the website at [meshand.app](https://meshand.app/) when `site/`,
`docs/` or `CHANGELOG.md` change.
- **`release.yml`** runs when you push a version tag. It builds the signed APK and attaches it
to a GitHub Release.

Expand Down
13 changes: 6 additions & 7 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -502,11 +502,11 @@ <h3>Use OsmAnd as usual</h3>
under <b>OsmAnd → Menu → Configure screen</b>.</p>
</div></li>
</ol>
<p class="after">From then on, MeshAnd reconnects to your radio by itself. When you open it,
it tells you about new versions; install the new APK over the old one and your radio and
settings are kept. Every release is signed with the same key and comes with a
<code>.sha256</code> file. Prefer automatic updates? Add the GitHub repository to
<a href="https://github.com/ImranR98/Obtainium">Obtainium</a>.</p>
<p class="after">From then on, MeshAnd reconnects to your radio by itself. It also keeps
itself up to date: when you open it and a new version is out, it shows a <b>Download</b>
button (you can switch this off in <b>Settings → About</b>). Install the new APK over the
old one and your radio and settings are kept. Every release is signed with the same key and
comes with a <code>.sha256</code> file.</p>
</div>
</section>

Expand Down Expand Up @@ -558,8 +558,7 @@ <h2>Learn more</h2>
Built on <a href="https://meshtastic.org">Meshtastic</a> and its
<a href="https://github.com/meshtastic/meshtastic-sdk">Kotlin SDK</a>, and
<a href="https://osmand.net">OsmAnd</a>.</p>
<p>MeshAnd is an independent project, not affiliated with or endorsed by Meshtastic or OsmAnd.
Meshtastic® is a registered trademark of Meshtastic LLC.</p>
<p>MeshAnd is an independent project, not affiliated with or endorsed by Meshtastic or OsmAnd.</p>
</div>
</footer>

Expand Down
Loading