tauri-plugin-android-update 0.3.0

GitHub-releases based updater for Tauri apps on platforms without tauri-plugin-updater support
Documentation
# Copyright 2026 hrzlgnm
# SPDX-License-Identifier: MIT

name: "CI"

on:
  pull_request:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  check-release:
    name: "🏷️ Check release tag"
    runs-on: ubuntu-slim
    outputs:
      is_release: ${{ steps.check.outputs.is_release }}
    steps:
      - name: 🔄 Checkout
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
        with:
          fetch-depth: 1
          fetch-tags: true
          persist-credentials: false

      - name: 🏷️ Check for release
        id: check
        shell: bash
        env:
          EVENT_NAME: ${{ github.event_name }}
        run: |
          is_release=false
          if [ "$EVENT_NAME" = "push" ]; then
            # The tag does not exist yet when CI starts: release-please
            # creates it after this same push, so fall back to matching
            # the release-please commit message.
            if git tag --points-at HEAD | grep -q -- '-v[0-9]'; then
              is_release=true
            elif git log -1 --pretty=%B | grep -qE '^chore(\(main\))?: release '; then
              is_release=true
            fi
          fi
          echo "is_release=$is_release" >> "$GITHUB_OUTPUT"

  typos:
    name: "📝 Check typos"
    needs:
      - check-release
    if: always() && needs.check-release.outputs.is_release != 'true'
    uses: hrzlgnm/actions/.github/workflows/typos-reusable.yml@c4634c8090f9c2941bbad01a692e2dd4fc91416c # v2.14.10

  fmt:
    name: "📐 fmt"
    needs:
      - check-release
    if: needs.check-release.outputs.is_release != 'true'
    runs-on: ubuntu-latest
    steps:
      - name: 🔄 Checkout
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
        with:
          fetch-depth: 1
          persist-credentials: false

      - name: 🦀 Setup Rust
        uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87 # stable
        with:
          components: rustfmt

      - name: 📐 Run rustfmt and fail if any warnings
        shell: bash
        run: cargo fmt -- --check

  clippy:
    name: "📎 clippy"
    needs:
      - check-release
    if: needs.check-release.outputs.is_release != 'true'
    runs-on: ubuntu-latest
    steps:
      - name: 🔄 Checkout
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
        with:
          fetch-depth: 1
          persist-credentials: false

      - name: 🦀 Setup Rust
        uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87 # stable
        with:
          components: clippy

      - name: 🧰 Install Tauri system dependencies
        shell: bash
        run: sudo apt-get update && sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf

      - name: 📎 Run clippy and fail if any warnings
        shell: bash
        run: cargo clippy --all-targets -- -D warnings

  test:
    name: "✅ test"
    needs:
      - check-release
    if: needs.check-release.outputs.is_release != 'true'
    runs-on: ubuntu-latest
    steps:
      - name: 🔄 Checkout
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
        with:
          fetch-depth: 1
          persist-credentials: false

      - name: 🦀 Setup Rust
        uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87 # stable

      - name: 🧰 Install Tauri system dependencies
        shell: bash
        run: sudo apt-get update && sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf

      - name: 🛠️🚀
        uses: ./.github/actions/setup-sccache

      - name: ✅ Run tests
        shell: bash
        run: cargo test

  js:
    name: "🟢 js"
    needs:
      - check-release
    if: needs.check-release.outputs.is_release != 'true'
    permissions:
      contents: read
    runs-on: ubuntu-latest
    steps:
      - name: 🔄 Checkout
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
        with:
          fetch-depth: 1
          persist-credentials: false

      - name: 🟢 Setup Node.js
        uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
        with:
          node-version: 24
          cache: npm
          cache-dependency-path: package-lock.json

      - name: 📥 Install dependencies
        shell: bash
        run: npm ci

      - name: 🏗️ Build bindings
        shell: bash
        run: npm run build

  all-required-green: # This job does nothing and is only used for the branch protection
    name: CI Status
    runs-on: ubuntu-latest
    needs:
      - check-release
      - fmt
      - clippy
      - test
      - js
      - typos
    if: always()
    steps:
      - name: Check whether the needed jobs succeeded or failed
        uses: re-actors/alls-green@a638d6464689bbb24c325bb3fe9404d63a913030
        with:
          allowed-skips: >-
            typos,
            fmt,
            clippy,
            test,
            js
          jobs: ${{ toJSON(needs) }}