diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bd8cc14..17d557c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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: diff --git a/AGENTS.md b/AGENTS.md index c4fadf4..e5b289c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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 `## ` 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-.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**. diff --git a/README.md b/README.md index 051f0ea..e281a3f 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/docs/development.md b/docs/development.md index 0ca1f66..77ffd78 100644 --- a/docs/development.md +++ b/docs/development.md @@ -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. diff --git a/site/index.html b/site/index.html index 08f417b..2effb6a 100644 --- a/site/index.html +++ b/site/index.html @@ -502,11 +502,11 @@

Use OsmAnd as usual

under OsmAnd → Menu → Configure screen.

-

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 - .sha256 file. Prefer automatic updates? Add the GitHub repository to - Obtainium.

+

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 Download + button (you can switch this off in Settings → About). 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 .sha256 file.

@@ -558,8 +558,7 @@

Learn more

Built on Meshtastic and its Kotlin SDK, and OsmAnd.

-

MeshAnd is an independent project, not affiliated with or endorsed by Meshtastic or OsmAnd. - Meshtastic® is a registered trademark of Meshtastic LLC.

+

MeshAnd is an independent project, not affiliated with or endorsed by Meshtastic or OsmAnd.