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
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file removed .cache/clangd/index/main.cpp.275B3AF5620C1D72.idx
Binary file not shown.
Binary file removed .cache/clangd/index/main.cpp.46AC95A6BB078CE7.idx
Binary file not shown.
Binary file removed .cache/clangd/index/main.cpp.7B75EA6F27DB89B9.idx
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
76 changes: 68 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ name: CI
on:
push:
branches: [master]
tags: ["v*.*.*"]
pull_request:
branches: [master]

Expand All @@ -19,7 +20,10 @@ jobs:
sudo apt-get install -y \
build-essential cmake libopencv-dev libpam0g-dev \
libjsoncpp-dev nlohmann-json3-dev v4l-utils \
libgtest-dev
libgtest-dev devscripts debhelper dh-cmake

- name: Download models
run: ./scripts/download_models.sh

- name: Configure
run: cmake -B build -DCMAKE_BUILD_TYPE=Release
Expand All @@ -30,6 +34,17 @@ jobs:
- name: Test
run: ctest --test-dir build --output-on-failure

- name: Build package
run: |
dpkg-buildpackage -b -uc -us
mv ../linuxcampam_*.deb .

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: linuxcampam-deb
path: linuxcampam_*.deb

build-clang:
name: Build (Clang)
runs-on: ubuntu-24.04
Expand All @@ -49,8 +64,8 @@ jobs:
- name: Build
run: cmake --build build -j$(nproc)

build-arm64:
name: Build (arm64)
build-aarch64:
name: Build (aarch64)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
Expand All @@ -61,11 +76,26 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build arm64
run: docker buildx build --platform linux/arm64 -f docker/Dockerfile.arm64 --load -t linuxcampam:arm64 .
- name: Download models
run: ./scripts/download_models.sh

- name: Build aarch64
run: docker buildx build --platform linux/aarch64 -f docker/Dockerfile.aarch64 --load -t linuxcampam:aarch64 .

- name: Extract artifacts
run: |
docker create --name temp_container linuxcampam:aarch64
docker cp temp_container:/ - | tar -tf - | grep '\.deb$' | head -1 | xargs -I{} docker cp temp_container:/{} ./linuxcampam_aarch64.deb
docker rm temp_container

- name: Verify
run: docker run --rm --platform linux/arm64 linuxcampam:arm64 ./linuxcampam help
run: docker run --rm --platform linux/aarch64 --entrypoint /usr/bin/linuxcampam linuxcampam:aarch64 help

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: linuxcampam-aarch64-deb
path: linuxcampam_*.deb

build-i386:
name: Build (i386)
Expand All @@ -79,11 +109,26 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Download models
run: ./scripts/download_models.sh

- name: Build i386
run: docker buildx build --platform linux/386 -f docker/Dockerfile.i386 --load -t linuxcampam:i386 .

- name: Extract artifacts
run: |
docker create --name temp_container linuxcampam:i386
docker cp temp_container:/ - | tar -tf - | grep '\.deb$' | head -1 | xargs -I{} docker cp temp_container:/{} ./linuxcampam_i386.deb
docker rm temp_container

- name: Verify
run: docker run --rm --platform linux/386 linuxcampam:i386 ./linuxcampam help
run: docker run --rm --platform linux/386 --entrypoint /usr/bin/linuxcampam linuxcampam:i386 help

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: linuxcampam-i386-deb
path: linuxcampam_*.deb

build-riscv64:
name: Build (riscv64)
Expand All @@ -97,8 +142,23 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Download models
run: ./scripts/download_models.sh

- name: Build riscv64
run: docker buildx build --platform linux/riscv64 -f docker/Dockerfile.riscv64 --load -t linuxcampam:riscv64 .

- name: Extract artifacts
run: |
docker create --name temp_container linuxcampam:riscv64
docker cp temp_container:/ - | tar -tf - | grep '\.deb$' | head -1 | xargs -I{} docker cp temp_container:/{} ./linuxcampam_riscv64.deb
docker rm temp_container

- name: Verify
run: docker run --rm --platform linux/riscv64 linuxcampam:riscv64 ./linuxcampam help
run: docker run --rm --platform linux/riscv64 --entrypoint /usr/bin/linuxcampam linuxcampam:riscv64 help

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: linuxcampam-riscv64-deb
path: linuxcampam_*.deb
45 changes: 10 additions & 35 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,56 +1,31 @@
name: Release

on:
push:
tags:
- "v*.*.*"
workflow_run:
workflows: ["CI"]
types: [completed]
workflow_dispatch:

jobs:
build-deb:
name: Build Debian Package
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential cmake libopencv-dev libpam0g-dev \
libjsoncpp-dev nlohmann-json3-dev v4l-utils \
devscripts debhelper dh-cmake

- name: Download models
run: ./scripts/download_models.sh

- name: Build package
run: dpkg-buildpackage -b -uc -us

- name: Move artifacts
run: mv ../linuxcampam_*.deb .

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: deb-package
path: linuxcampam_*.deb

create-release:
name: Create GitHub Release
runs-on: ubuntu-24.04
needs: build-deb
if: ${{ github.event.workflow_run.conclusion == 'success' && startsWith(github.event.workflow_run.head_branch, 'v') }}
permissions:
contents: write
steps:
- name: Download artifact
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: deb-package
run-id: ${{ github.event.workflow_run.id }}
github-token: ${{ secrets.GITHUB_TOKEN }}
pattern: linuxcampam-*-deb
merge-multiple: true

- name: Create Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.workflow_run.head_branch }}
files: linuxcampam_*.deb
draft: false
generate_release_notes: true
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Smart OpenCL backend detection (uses Rusticl on AMD, prevents Mesa/Clover crashes)
- YuNet face detection and SFace face recognition (ONNX models)
- Debian packaging support (CPack)
- Cross-compilation support for ARM64 and RISC-V
- Cross-compilation support for AARCH64 and RISC-V
- Comprehensive security assessment documentation

### Security in 0.9.0
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.14)
project(LinuxCamPAM VERSION 0.9.3 LANGUAGES C CXX)
project(LinuxCamPAM VERSION 0.9.3.1 LANGUAGES C CXX)

add_compile_definitions(LINUXCAMPAM_VERSION="${PROJECT_VERSION}")

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ With the decision to open source this project, I have dedicated significant effo
| :--- | :--- | :--- | :--- |
| **x86_64** | GCC 11/12/13 | ✅ Verified | Target: Ubuntu 22.04+ / Debian 12+ |
| **x86_64** | Clang 16/17/18 | ✅ Verified | Target: Ubuntu 22.04+ / Debian 12+ |
| **ARM64** | GCC (Cross) | ✅ Verified | via Docker/QEMU |
| **AARCH64** | GCC (Cross) | ✅ Verified | via Docker/QEMU |
| **RISC-V** | GCC (Cross) | ✅ Verified | via Docker/QEMU |

### Option A: Direct System Install (Quickest)
Expand Down
8 changes: 8 additions & 0 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
linuxcampam (0.9.3.1-1) unstable; urgency=medium

* Multi-arch support (AARCH64, i386, RISC-V).
* Update Dockerfiles for packaging.
* Secure release workflow.

-- Vlad Orlinski <contact.github.submerge594@slmails.com> Sat, 03 Jan 2026 02:20:00 +0100

linuxcampam (0.9.2-1) unstable; urgency=medium

* Portable camera detection via V4L2 enumeration (no hardcoded paths).
Expand Down
13 changes: 9 additions & 4 deletions docker/Dockerfile.arm64 → docker/Dockerfile.aarch64
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ RUN apt-get update && apt-get install -y \
nlohmann-json3-dev \
v4l-utils \
git \
devscripts \
debhelper \
dh-cmake \
&& rm -rf /var/lib/apt/lists/*

# Set Working Directory
Expand All @@ -24,9 +27,11 @@ COPY . /app
# Ensure Clean Build
RUN rm -rf build && mkdir build

# Build
WORKDIR /app/build
RUN cmake .. && make VERBOSE=1 -j1
# Build and Package
# dpkg-buildpackage with cmake buildsystem will handle the build process
# We skip signing (-uc -us)
RUN dpkg-buildpackage -b -uc -us && \
dpkg -i ../*.deb || apt-get install -f -y

# Verification Command (to run manually)
CMD ["./linuxcampam", "help"]
CMD ["/usr/bin/linuxcampam", "help"]
11 changes: 7 additions & 4 deletions docker/Dockerfile.i386
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ RUN apt-get update && apt-get install -y \
nlohmann-json3-dev \
v4l-utils \
git \
devscripts \
debhelper \
dh-cmake \
&& rm -rf /var/lib/apt/lists/*

# Set Working Directory
Expand All @@ -24,9 +27,9 @@ COPY . /app
# Ensure Clean Build
RUN rm -rf build && mkdir build

# Build
WORKDIR /app/build
RUN cmake .. && make VERBOSE=1 -j$(nproc)
# Build and Package
RUN dpkg-buildpackage -b -uc -us && \
dpkg -i ../*.deb || apt-get install -f -y

# Verification
CMD ["./linuxcampam", "help"]
CMD ["/usr/bin/linuxcampam", "help"]
12 changes: 7 additions & 5 deletions docker/Dockerfile.riscv64
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ RUN apt-get update && apt-get install -y \
nlohmann-json3-dev \
v4l-utils \
git \
devscripts \
debhelper \
dh-cmake \
&& rm -rf /var/lib/apt/lists/*

# Set Working Directory
Expand All @@ -24,10 +27,9 @@ COPY . /app
# Ensure Clean Build
RUN rm -rf build && mkdir build

# Build
WORKDIR /app/build
# Use single job and verbose mode to help debug potential slow emulation issues
RUN cmake .. && make VERBOSE=1 -j1
# Build and Package
RUN dpkg-buildpackage -b -uc -us && \
dpkg -i ../*.deb || apt-get install -f -y

# Verification Command
CMD ["./linuxcampam", "help"]
CMD ["/usr/bin/linuxcampam", "help"]