Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
7bba120
feat(desktop): implement dual-stack PAM routing, virtual fprintd brid…
Lolle2000la Sep 1, 2026
e512386
fix(ci): fix rustfmt formatting and test-e2e PAM_TESTABLE check
Lolle2000la Sep 1, 2026
45d804a
feat: make fprintd bridge configurable in GUI/IPC and add optional ta…
Lolle2000la Sep 1, 2026
efd80e8
docs: document tapauth-fprintd package and desktop lock screen setup …
Lolle2000la Sep 1, 2026
b906656
fix: resolve review findings for cancellation draining, CancelGuard, …
Lolle2000la Sep 1, 2026
074e2bc
fix(daemon): arm CancelGuard at start of handle_authenticate across a…
Lolle2000la Sep 1, 2026
c2e8378
fix(desktop): address review feedback for dual-stack PAM, fprintd bri…
Lolle2000la Sep 1, 2026
97a7023
fix(packaging): address cross-distro packaging, config seeding and db…
Lolle2000la Sep 1, 2026
c157d99
feat(packaging): fold tapauth-git packaging into repo and add AUR git…
Lolle2000la Sep 1, 2026
eaafab5
feat(arch): split Arch packages into base and fprintd for release and…
Lolle2000la Sep 1, 2026
2686c2b
fix(packaging): address packaging review blockers, yaml syntax, prese…
Lolle2000la Sep 1, 2026
308a61c
fix(packaging): fix blockers — backup_pam_file scope, dir/config perm…
Lolle2000la Sep 1, 2026
f32aafd
fix(packaging): priority fixes from 3rd review pass
Lolle2000la Sep 1, 2026
e1bcc71
chore: remove scratch fix scripts left by subagents
Lolle2000la Sep 1, 2026
1edb42b
feat(ci): add distro package smoke test matrix (Fedora, Arch, Ubuntu)…
Lolle2000la Sep 2, 2026
945ffcb
feat(ci): build, install, and run E2E against concrete distro packages
Lolle2000la Sep 2, 2026
c5900b6
fix(e2e): fix CLI_BIN path resolution in test-e2e.sh and authselect s…
Lolle2000la Sep 2, 2026
c08e38e
feat(ci): run real Android E2E suite against Ubuntu, Fedora, and Arch…
Lolle2000la Sep 2, 2026
4c8c30c
fix(ci): encapsulate multi-distro E2E in run-all-e2e.sh and fix dev m…
Lolle2000la Sep 2, 2026
8b4eba8
perf(ci): parallelize package builds and optimize multi-distro Androi…
Lolle2000la Sep 2, 2026
5ae608a
perf(ci): enable compilation artifact caching and robust artifact dis…
Lolle2000la Sep 2, 2026
71cf8e3
fix(ci): preserve default target directory for rpmbuild and makepkg w…
Lolle2000la Sep 2, 2026
c58c282
perf(ci): enable in-place target caching across all distros and defla…
Lolle2000la Sep 2, 2026
f5d890d
ci: remove redundant packaging smoke tests from CI - Rust
Lolle2000la Sep 2, 2026
e299c60
fix(ci): fix JNI test runner detection, Ubuntu debian target symlink,…
Lolle2000la Sep 2, 2026
8edfa61
fix(ci): add --pid=host to E2E container runs to share host PID names…
Lolle2000la Sep 2, 2026
70fe465
fix(ci): fix cp -al directory seeding for Fedora/Arch target caches
Lolle2000la Sep 2, 2026
e907695
fix(ci): enable caching for Arch, bump cache keys to v2, and fix cont…
Lolle2000la Sep 3, 2026
9bdaebe
fix(e2e): hoist USE_INSTALLED_PACKAGE before dev-mode state path setu…
Lolle2000la Sep 3, 2026
f22cec3
fix(tapauthd): handle firewall port opening gracefully during pairing
Lolle2000la Sep 3, 2026
ca0faa2
fix(e2e): do not set TAPAUTH_STATE_DIR when testing installed packages
Lolle2000la Sep 3, 2026
28d52b2
fix(ci): ensure bluetoothd and virtual adapter stay active across con…
Lolle2000la Sep 3, 2026
76a9c41
fix(tapauthd): retain root credentials when TAPAUTH_DEV_MODE=1 in dev…
Lolle2000la Sep 3, 2026
702c1a3
fix(e2e): guard BLE against inaccessible container D-Bus and prevent …
Lolle2000la Sep 3, 2026
380557e
fix(e2e): explicitly identify container environments to skip BLE
Lolle2000la Sep 3, 2026
efd16d5
fix(e2e): harden PAM password fallback in Phase 6b for RPM/container …
Lolle2000la Sep 3, 2026
c984054
fix(ci): use rpm -e for Fedora package removal verification
Lolle2000la Sep 3, 2026
8a0c337
fix(packaging): address packaging review findings and PAM bridge wiring
Lolle2000la Sep 3, 2026
cad42ff
fix(packaging): fix Fedora authselect profiles, upgrade/purge edge ca…
Lolle2000la Sep 3, 2026
7d854d4
fix(packaging): address packaging review findings across distros and CI
Lolle2000la Sep 3, 2026
dfa4df2
fix(ci): use PKG_DIR in test-arch-pkg.sh step 10
Lolle2000la Sep 3, 2026
5f991d2
fix(ci): synchronize pacman databases in test-arch-pkg.sh in skip-bui…
Lolle2000la Sep 4, 2026
26fc2d6
fix(e2e): harden Phase 5 denial timing and pass emulator auth token t…
Lolle2000la Sep 4, 2026
10cd393
fix(packaging): address packaging review findings and harden desktop …
Lolle2000la Sep 4, 2026
db2187f
fix(packaging): fix PAM restoration logic on package removal across d…
Lolle2000la Sep 4, 2026
25a80d3
fix(packaging): address distro review findings across Debian, Fedora,…
Lolle2000la Sep 4, 2026
148caa1
ci: enable sccache and package cache for Fedora and Arch builds
Lolle2000la Sep 4, 2026
8b67a54
fix(packaging): address packaging review findings across distros and …
Lolle2000la Sep 5, 2026
fb1e531
fix(packaging): ensure config.toml ownership in Arch and pass cargo/s…
Lolle2000la Sep 5, 2026
134f739
chore(packaging): harden distribution packages, CI guards, and upgrad…
Lolle2000la Sep 5, 2026
da52f0d
fix(ci): avoid unbound variable in test-ubuntu-deb.sh
Lolle2000la Sep 5, 2026
de9e44d
fix(packaging): address distro test findings across deb/rpm/arch pack…
Lolle2000la Sep 6, 2026
fa5c85d
fix(ci): make arch/fedora package build caches actually persist
Lolle2000la Sep 6, 2026
280b3d5
fix(ci): validate SELinux policy with semodule, not bare secilc
Lolle2000la Sep 6, 2026
04e9030
feat(tapauthd): dedupe concurrent same-user auths across PAM and fprintd
Lolle2000la Sep 7, 2026
5ecd9a9
test(e2e): cover concurrent same-user auth dedup (Ignore fall-through)
Lolle2000la Sep 7, 2026
46673fa
fix(e2e): clear auth-flight completion cooldown between sequential sa…
Lolle2000la Sep 7, 2026
5c694c1
fix(e2e): authorize dedup phase via TEST_USER and restore shadow hash…
Lolle2000la Sep 7, 2026
03a0b9e
fix(e2e): make dedup phase independent of emulator biometric auto-app…
Lolle2000la Sep 7, 2026
88ffda0
fix(e2e): tolerate fast password-module rejection in dedup phase
Lolle2000la Sep 7, 2026
1581727
fix(ci): make emulator-bio-helper work on API-36 (or fail loudly)
Lolle2000la Sep 7, 2026
4a74aa2
feat(tapauthd): fprintd-priority auth flights (preempt in-flight PAM,…
Lolle2000la Sep 7, 2026
522237a
feat(e2e): explicit grant + auto-approve suppression in the e2e app b…
Lolle2000la Sep 7, 2026
db26710
fix(e2e): qualify autoApproveSuppressed with the manager instance
Lolle2000la Sep 7, 2026
d76d8ea
style(e2e): satisfy ktfmt in the new grant-control code
Lolle2000la Sep 7, 2026
57597b0
fix(e2e): relaunch the app after Phase 2i's explicit grant
Lolle2000la Sep 7, 2026
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
414 changes: 338 additions & 76 deletions .github/workflows/ci-android.yml

Large diffs are not rendered by default.

83 changes: 60 additions & 23 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: CI - Rust
name: CI - Rust & Packages

on:
push:
Expand All @@ -8,8 +8,13 @@ on:
- 'tapauthd/**'
- 'client-pam/**'
- 'client-config-gui/**'
- 'server-android/**'
- 'proto/**'
- 'scripts/ci/check-production-build.sh'
- 'packaging/**'
- 'systemd/**'
- 'scripts/**'
- 'install.sh'
- 'uninstall.sh'
- 'Cargo.toml'
- 'Cargo.lock'
- '.github/workflows/ci.yml'
Expand All @@ -20,8 +25,13 @@ on:
- 'tapauthd/**'
- 'client-pam/**'
- 'client-config-gui/**'
- 'server-android/**'
- 'proto/**'
- 'scripts/ci/check-production-build.sh'
- 'packaging/**'
- 'systemd/**'
- 'scripts/**'
- 'install.sh'
- 'uninstall.sh'
- 'Cargo.toml'
- 'Cargo.lock'
- '.github/workflows/ci.yml'
Expand All @@ -31,8 +41,8 @@ env:
RUST_BACKTRACE: 1

jobs:
build-and-test:
name: Build and Test All Modules
lint-and-format:
name: Code Quality & Format Checks
runs-on: ubuntu-latest

steps:
Expand All @@ -47,6 +57,51 @@ jobs:
- name: Cache Rust build artifacts
uses: Swatinem/rust-cache@v2


- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libdbus-1-dev \
pkg-config \
libpam0g-dev \
protobuf-compiler \
libgtk-4-dev \
build-essential

- name: Check Rust formatting
run: cargo fmt --all -- --check

- name: Run clippy (default features)
run: cargo clippy --workspace --all-targets -- -D warnings

- name: "Run clippy (dev sandbox, fallback-socket)"
run: cargo clippy -p tapauthd --features fallback-socket --all-targets -- -D warnings

- name: "Run clippy (E2E build, UDP loopback + PolKit bypass)"
run: cargo clippy -p tapauthd --no-default-features --features ble,dev-udp-loopback,dev-polkit-bypass --all-targets -- -D warnings

- name: "Run clippy (state-dir override only)"
run: cargo clippy -p tapauthd --no-default-features --features dev-state-override --all-targets -- -D warnings

- name: Verify production binaries contain no dev/test overrides
run: ./scripts/ci/check-production-build.sh


build-and-test:
name: Build and Test Workspace Modules
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v7

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache Rust build artifacts
uses: Swatinem/rust-cache@v2

- name: Install system dependencies
run: |
sudo apt-get update
Expand Down Expand Up @@ -82,9 +137,6 @@ jobs:
- name: Build all workspace members
run: cargo build --workspace --verbose

- name: Verify production binaries contain no dev/test overrides
run: ./scripts/ci/check-production-build.sh

- name: Run tests for shared library
run: cargo test --manifest-path shared/Cargo.toml --verbose

Expand All @@ -99,18 +151,3 @@ jobs:

- name: Run all workspace tests
run: cargo test --workspace --verbose

- name: Check formatting
run: cargo fmt --all -- --check

- name: Run clippy (default features)
run: cargo clippy --workspace --all-targets -- -D warnings

- name: "Run clippy (dev sandbox, fallback-socket)"
run: cargo clippy -p tapauthd --features fallback-socket --all-targets -- -D warnings

- name: "Run clippy (E2E build, UDP loopback + PolKit bypass)"
run: cargo clippy -p tapauthd --no-default-features --features ble,dev-udp-loopback,dev-polkit-bypass --all-targets -- -D warnings

- name: "Run clippy (state-dir override only)"
run: cargo clippy -p tapauthd --no-default-features --features dev-state-override --all-targets -- -D warnings
70 changes: 70 additions & 0 deletions .github/workflows/release-arch-git.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: "Release: Arch AUR (Git)"

"on":
push:
branches: [main]
workflow_dispatch:

concurrency:
group: aur-git-push
cancel-in-progress: false

permissions:
contents: read

jobs:
release-arch-aur-git:
name: Arch User Repository (AUR) Git Sync
runs-on: ubuntu-latest
environment: release
steps:
- name: Checkout Source Context
uses: actions/checkout@v7
with:
fetch-depth: 0

- name: Synchronize and Push Metadata Changes to AUR (tapauth-git)
run: |
mkdir -p ~/.ssh
echo "${{ secrets.AUR_SSH_PRIVATE_KEY }}" > ~/.ssh/id_aur
chmod 600 ~/.ssh/id_aur
ssh-keyscan -t ed25519 aur.archlinux.org >> ~/.ssh/known_hosts

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_aur

git config --global user.name "AUR Deployment Pipeline"
git config --global user.email "lolle2000.la+tapauth@gmail.com"

git clone aur@aur.archlinux.org:tapauth-git.git aur-repo

# Synchronize from repository packaging/arch-git/
cp packaging/arch-git/PKGBUILD aur-repo/PKGBUILD
cp packaging/arch-git/tapauth-git.install aur-repo/tapauth-git.install
cp packaging/arch-git/tapauth-fprintd-git.install aur-repo/tapauth-fprintd-git.install

# Dynamically compute git pkgver matching PKGBUILD pkgver()
GIT_DESC=$(git describe --long --tags 2>/dev/null || echo "")
if [ -n "$GIT_DESC" ]; then
NEW_PKGVER=$(echo "$GIT_DESC" | sed -E 's/^v//;s/-([0-9]+)-g([0-9a-f]+)$/.r\1.g\2/;s/-/_/g')
else
BASE_TAG=$(git tag --sort=-version:refname 2>/dev/null | grep -E '^v[0-9]' | head -1 | sed 's/^v//' || echo "0.1.0")
NEW_PKGVER="${BASE_TAG:-0.1.0}.r$(git rev-list --count HEAD).g$(git rev-parse --short HEAD)"
fi
sed -i "s/^pkgver=.*/pkgver=${NEW_PKGVER}/" aur-repo/PKGBUILD

# Regenerate .SRCINFO via makepkg (must run as non-root)
docker run --rm -v "$(pwd)/aur-repo:/pkg" archlinux:base-devel \
bash -c "useradd -m builder && chown -R builder:builder /pkg && su builder -c 'cd /pkg && makepkg --printsrcinfo > .SRCINFO'"

cd aur-repo

git add -A

if git diff --cached --quiet; then
echo "No changes in tapauth-git packaging files. Skipping commit."
exit 0
fi

git commit -m "Automated sync from main (${GITHUB_SHA::8})"
git push origin master
116 changes: 25 additions & 91 deletions .github/workflows/release-arch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ name: "Release: Arch AUR"
types: [published]
workflow_dispatch:

concurrency:
group: aur-push
cancel-in-progress: false

permissions:
contents: write

Expand All @@ -22,7 +26,7 @@ jobs:
id: version_vars
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
RELEASE_JSON=$(gh api "repos/${{ github.repository }}/releases?per_page=1" --jq '.[0] | {tag_name, prerelease}')
RELEASE_JSON=$(gh api "repos/${{ github.repository }}/releases?per_page=10" --jq '[.[] | select(.prerelease == false)] | .[0] | {tag_name, prerelease}')
TAG_NAME=$(echo "$RELEASE_JSON" | jq -r '.tag_name')
else
TAG_NAME="${GITHUB_REF_NAME}"
Expand All @@ -37,7 +41,7 @@ jobs:
id: calc_sha
run: |
TARBALL_URL="https://github.com/lolle2000la/tapauth/archive/refs/tags/v${{ steps.version_vars.outputs.VERSION }}.tar.gz"
curl -sL "$TARBALL_URL" -o release.tar.gz
curl -sLf "$TARBALL_URL" -o release.tar.gz
SHA256_HASH=$(sha256sum release.tar.gz | cut -d' ' -f1)
echo "SHA256=${SHA256_HASH}" >> "$GITHUB_OUTPUT"
echo "Release archive verified hash: ${SHA256_HASH}"
Expand All @@ -56,99 +60,29 @@ jobs:
git config --global user.email "lolle2000.la+tapauth@gmail.com"

git clone aur@aur.archlinux.org:tapauth.git aur-repo
cd aur-repo

# Added aarch64 to arch layout matrix, removed self-conflicting references
cat > PKGBUILD <<EOF
pkgname=tapauth
pkgver=${{ steps.version_vars.outputs.VERSION }}
pkgrel=1
pkgdesc="Local smartphone-based authentication framework engine"
arch=('x86_64' 'aarch64')
url="https://github.com/lolle2000la/tapauth"
license=('AGPL-3.0')
depends=('dbus' 'pam')
makedepends=('cargo' 'rust' 'protobuf' 'clang')
backup=('etc/tapauth/config.toml')
install=tapauth.install
source=("\$pkgname-\$pkgver.tar.gz::https://github.com/lolle2000la/tapauth/archive/refs/tags/v\$pkgver.tar.gz")
sha256sums=('${{ steps.calc_sha.outputs.SHA256 }}')

prepare() {
cd "\$srcdir/\$pkgname-\$pkgver"
export CARGO_HOME="\${srcdir}/cargo-home"
cargo fetch --locked --target "\$CARCH-unknown-linux-gnu"
}

build() {
cd "\$srcdir/\$pkgname-\$pkgver"
export CARGO_HOME="\${srcdir}/cargo-home"
export CARGO_PROFILE_RELEASE_STRIP=true
cargo build --frozen --workspace --release
}

# Copy source packaging files
cp packaging/arch/tapauth.install aur-repo/tapauth.install
cp packaging/arch/tapauth-fprintd.install aur-repo/tapauth-fprintd.install
cp packaging/arch/PKGBUILD aur-repo/PKGBUILD
cp config.toml.example aur-repo/config.toml.example

package() {
cd "\$srcdir/\$pkgname-\$pkgver"
install -dm0755 "\$pkgdir/etc/tapauth"
install -Dm0755 target/release/tapauthd "\$pkgdir/usr/bin/tapauthd"
install -Dm0755 target/release/tapauth-config "\$pkgdir/usr/bin/tapauth-config"
install -Dm0755 target/release/libclient_pam.so "\$pkgdir/usr/lib/security/pam_tapauth.so"
install -Dm0644 systemd/tapauthd.service "\$pkgdir/usr/lib/systemd/system/tapauthd.service"
install -Dm0644 systemd/tapauthd.socket "\$pkgdir/usr/lib/systemd/system/tapauthd.socket"
install -Dm0644 systemd/polkit-agent-helper@.service.d/tapauth.conf "\$pkgdir/usr/lib/systemd/system/polkit-agent-helper@.service.d/tapauth.conf"
install -Dm0644 packaging/sysusers.conf "\$pkgdir/usr/lib/sysusers.d/tapauth.conf"
install -Dm0644 packaging/tmpfiles.conf "\$pkgdir/usr/lib/tmpfiles.d/tapauth.conf"
install -Dm0644 client-config-gui/tapauth-config.desktop "\$pkgdir/usr/share/applications/tapauth-config.desktop"
install -Dm0644 client-config-gui/assets/tapauth-config.svg "\$pkgdir/usr/share/icons/hicolor/scalable/apps/tapauth-config.svg"
install -Dm0644 tapauthd/dev.rourunisen.tapauth.config.admin.policy "\$pkgdir/usr/share/polkit-1/actions/dev.rourunisen.tapauth.config.admin.policy"
install -Dm0644 packaging/50-tapauthd.rules "\$pkgdir/usr/share/polkit-1/rules.d/50-tapauthd.rules"
install -Dm0644 LICENSE "\$pkgdir/usr/share/licenses/\$pkgname/LICENSE"
}
EOF

cat > tapauth.install <<EOF
post_install() {
systemd-sysusers /usr/lib/sysusers.d/tapauth.conf
systemd-tmpfiles --create /usr/lib/tmpfiles.d/tapauth.conf
systemctl daemon-reload
systemctl enable --now tapauthd.socket
}

post_upgrade() {
systemd-sysusers /usr/lib/sysusers.d/tapauth.conf
systemd-tmpfiles --create /usr/lib/tmpfiles.d/tapauth.conf
systemctl daemon-reload
systemctl reenable tapauthd.socket
systemctl restart tapauthd.socket
}
cd aur-repo
sed -i "s/^pkgver=.*/pkgver=${{ steps.version_vars.outputs.VERSION }}/" PKGBUILD
sed -i "s/^sha256sums=.*/sha256sums=('${{ steps.calc_sha.outputs.SHA256 }}')/" PKGBUILD

pre_remove() {
systemctl disable --now tapauthd.socket tapauthd.service 2>/dev/null || true
}
EOF
cd ..
# makepkg refuses to run as root — run as a non-root user inside the container
docker run --rm -v "$(pwd)/aur-repo:/pkg" archlinux:base-devel \
bash -c "useradd -m builder && chown -R builder:builder /pkg && su builder -c 'cd /pkg && makepkg --printsrcinfo > .SRCINFO'"
cd aur-repo

cat > .SRCINFO <<EOF
pkgbase = tapauth
pkgdesc = Local smartphone-based authentication framework engine
pkgver = ${{ steps.version_vars.outputs.VERSION }}
pkgrel = 1
url = https://github.com/lolle2000la/tapauth
arch = x86_64
arch = aarch64
license = AGPL-3.0
install = tapauth.install
makedepends = cargo
makedepends = rust
makedepends = protobuf
makedepends = clang
depends = dbus
depends = pam
source = tapauth-${{ steps.version_vars.outputs.VERSION }}.tar.gz::https://github.com/lolle2000la/tapauth/archive/refs/tags/v${{ steps.version_vars.outputs.VERSION }}.tar.gz
sha256sums = ${{ steps.calc_sha.outputs.SHA256 }}
git add -A

pkgname = tapauth
EOF
if git diff --cached --quiet; then
echo "No changes in packaging files. Skipping commit."
exit 0
fi

git add PKGBUILD .SRCINFO tapauth.install
git commit -m "Automated production sync target version: v${{ steps.version_vars.outputs.VERSION }}"
git push origin master
Loading