Skip to content

Conversation

@adamoutler
Copy link
Collaborator

@adamoutler adamoutler commented Nov 1, 2025

🎯 Pull Request: Enhanced Error Visibility and Comprehensive Testing

Overview

This PR significantly improves NetAlertX's error reporting and diagnostic capabilities by introducing a visual status grid, comprehensive documentation links, and extensive unit testing. The primary feature is an intuitive ✅/❌/➖ status table that makes configuration issues immediately visible to users.

Key Features

🏗️ Visual Status Grid

  • New diagnostic table showing mount configuration status with clear visual indicators:
    • Good: Configuration meets requirements
    • Issue: Problem detected that needs attention
    • N/A: Not applicable for this path type
  • Columns: Writeable | Mount | RAMDisk | Performance | DataLoss
  • Rows: All critical NetAlertX paths (DB, Config, API, Log, Services)

📚 Comprehensive Documentation

  • 12 new troubleshooting guides with specific solutions for each error type
  • Direct links from error messages to relevant documentation
  • Security-focused explanations for why each issue matters
  • Actionable remediation steps for each problem type

🧪 Extensive Test Suite

  • 53 Docker integration tests covering all error scenarios
  • 25 mount diagnostic tests validating the status grid
  • Automated test infrastructure using docker-compose configurations
  • Container lifecycle testing for startup checks and runtime diagnostics

Technical Changes

Script Reorganization

  • Consolidated 11 separate check scripts into organized /entrypoint.d/ directory
  • Improved startup sequence and error handling
  • Enhanced permission and capability validation

Enhanced Diagnostics

  • Created comprehensive mount diagnostic script (10-mounts.py)
  • Implemented visual status grid with emoji indicators
  • Added documentation links to all error messages

Testing Infrastructure

  • Migrated from manual docker run to docker-compose based testing
  • Added 24 docker-compose test configurations
  • Improved test reliability and speed
  • Fixed test expectations for root user warnings vs failures

Example Output

+---------------+-----------+-------+---------+-------------+----------+
| Path          | Writeable | Mount | RAMDisk | Performance | DataLoss |
+---------------+-----------+-------+---------+-------------+----------+
| /app/db       | ✅        | ✅    | ➖      | ➖          | ✅       |
| /app/config   | ✅        | ✅    | ➖      | ➖          | ✅       |
| /app/api      | ✅        | ❌    | ❌      | ❌          | ✅       |
| /app/log      | ✅        | ❌    | ❌      | ❌          | ✅       |
| /services/run | ✅        | ❌    | ❌      | ❌          | ✅       |

══════════════════════════════════════════════════════════════════════════════
⚠️ ATTENTION: Configuration issues detected (marked with ❌).

Your configuration has write permission, dataloss, or performance issues
as shown in the table above.

We recommend starting with the default [docker-compose.yml](http://_vscodecontentref_/1) as the
configuration can be quite complex.

Review the documentation for a correct setup:
https://github.com/jokob-sk/NetAlertX/blob/main/docs/DOCKER_COMPOSE.md
https://github.com/jokob-sk/NetAlertX/blob/main/docs/docker-troubleshooting/mount-configuration-issues.md
══════════════════════════════════════════════════════════════════════════════

Impact

  • User Experience: Errors are now immediately understandable with visual indicators
  • Troubleshooting: Direct links to specific solutions reduce support burden
  • Reliability: Comprehensive testing ensures configuration issues are caught early
  • Security: Clear warnings about data loss and permission risks

Testing

  • ✅ All 53 Docker tests passing
  • ✅ Mount diagnostics working correctly
  • ✅ Error messages include documentation links
  • ✅ Visual grid displays properly in all scenarios

This PR transforms NetAlertX's error handling from cryptic messages to actionable, visually clear diagnostics that guide users to correct configurations quickly and confidently.

I will check back tomorrow on CodeRabbit analysis.

Summary by CodeRabbit

  • New Features

    • New startup checks and diagnostics: human-readable mount/permission/capability/port table, integrity and port-availability warnings, and a configurable checks directory; startup now continues to allow inspection.
  • Documentation

    • Added comprehensive Docker troubleshooting guides covering mounts, permissions, users/capabilities, ports, read-only root, and related remediation.
  • Tests

    • Large expansion of Docker Compose and mount/permission integration tests across many scenarios.
  • Bug Fixes

    • Clearer startup messages and improved handling of file-permission and capability warnings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 1, 2025

Walkthrough

Adds an entrypoint checks directory, many new entrypoint.d health/permission/mount-check scripts (including a Python mount analyzer), updates entrypoint orchestration to run those checks and continue on failures, removes several legacy service scripts, updates Dockerfiles to include the checks path and adjust permissions, and adds extensive Docker troubleshooting docs and compose test fixtures.

Changes

Cohort / File(s) Summary
Dockerfiles
\.devcontainer/Dockerfile, Dockerfile
Introduce ENTRYPOINT_CHECKS=/entrypoint.d and SYSTEM_SERVICES_ACTIVE_CONFIG; include ${ENTRYPOINT_CHECKS} in READ_ONLY_FOLDERS; extend final chmod to cover ${SYSTEM_SERVICES_SCRIPTS}/* and ${ENTRYPOINT_CHECKS}/*.
New entrypoint checks
install/production-filesystem/entrypoint.d/*
Add many scripts: 0-storage-permission.sh, 10-mounts.py (mount analyzer), 15-first-run-config.sh, 20-first-run-db.sh, 30-writable-config.sh, 35-nginx-config.sh (PORT gating, uses SYSTEM_SERVICES_ACTIVE_CONFIG), 60-user-netalertx.sh, 80-host-mode-network.sh, 85-layer-2-capabilities.sh, 90-excessive-capabilities.sh, 95-appliance-integrity.sh, 99-ports-available.sh.
Entrypoint orchestration
install/production-filesystem/entrypoint.sh
Discover and execute ${ENTRYPOINT_CHECKS}/* directly (strip numeric prefixes for display); run scripts as executables; log failures but continue startup (no immediate exit); banner rendered via color variables.
Removed legacy checks
install/production-filesystem/services/scripts/*
Delete legacy scripts: check-app-permissions.sh, check-nonpersistent-storage.sh, check-persistent-storage.sh, check-ramdisk.sh, check-root.sh (functionality migrated into new entrypoint.d set).
Mount analyzer (Python)
install/production-filesystem/entrypoint.d/10-mounts.py
New MountCheckResult dataclass and full mount analysis: parse /proc/mounts, evaluate writeability, mount point, fstype/ramdisk, set performance/dataloss/write-error flags, print table, warn and exit 1 on write errors (unless NETALERTX_DEBUG=1).
Writability & PORT gating
install/production-filesystem/entrypoint.d/35-nginx-config.sh
Switch to SYSTEM_SERVICES_ACTIVE_CONFIG, add early exit when PORT=20211 (skip checks), and append doc links to messages.
Formatting & docs tweaks
install/production-filesystem/entrypoint.d/15-first-run-config.sh, 20-first-run-db.sh, 60-user-netalertx.sh, 80-host-mode-network.sh, 85-layer-2-capabilities.sh
Use printf for ANSI escapes, adjust header text and troubleshooting links; behavioral logic unchanged.
Capability & integrity checks
install/production-filesystem/entrypoint.d/90-excessive-capabilities.sh, 95-appliance-integrity.sh
New scripts: detect excessive bounding capabilities and warn; detect root FS not mounted read-only and warn.
Port availability check
install/production-filesystem/entrypoint.d/99-ports-available.sh
New non-fatal checks for port conflicts (uses netstat where available), warns if app/GraphQL ports collide or are in use.
Permission remediation relocated
install/production-filesystem/entrypoint.d/0-storage-permission.sh
New root-run remediation/ownership adjustments (replaces prior check-app-permissions.sh behavior) and then sleeps to draw attention when run as root.
Docs: troubleshooting
docs/docker-troubleshooting/*
Add many docs: excessive-capabilities.md, file-permissions.md, incorrect-user.md, missing-capabilities.md, mount-configuration-issues.md, network-mode.md, nginx-configuration-mount.md, port-conflicts.md, read-only-filesystem.md, running-as-root.md.
Tests: docker-compose fixtures
test/docker_tests/configurations/*, .../mount-tests/*
Add ~27 docker-compose fixtures (readonly/writable + mount-tests matrix) covering mount, capability, port and permission scenarios.
Tests: suites & runners
test/docker_tests/test_*.py, test/docker_tests/configurations/test_all_docker_composes.sh
Add/modify tests and helpers: test_container_environment.py, test_docker_compose_scenarios.py, test_mount_diagnostics_pytest.py, test_ports_available.py, and test_all_docker_composes.sh to exercise new checks and compose fixtures.

Sequence Diagram(s)

sequenceDiagram
    participant C as Container Init
    participant E as entrypoint.sh
    participant EC as ${ENTRYPOINT_CHECKS}/*
    participant M as 10-mounts.py
    participant A as Application

    C->>E: start
    E->>E: render banner
    loop each script in ${ENTRYPOINT_CHECKS}
        E->>EC: exec script (executable)
        EC-->>E: output + exit code
        E->>E: log result (continue even on failure)
    end
    alt 10-mounts.py reports write errors and NETALERTX_DEBUG != "1"
        EC->>E: prints table & warnings
        E->>C: propagate non-zero exit (entrypoint behavior may stop)
    else
        E->>A: proceed to start application
    end
Loading
sequenceDiagram
    participant P as 10-mounts.py
    participant V as Env vars
    participant F as /proc/mounts
    participant O as stderr/table

    P->>V: read PATHS_TO_CHECK and flags
    P->>F: parse mounted filesystems
    loop per path
        P->>V: resolve path value
        P->>F: match mount point & fstype
        P->>P: evaluate writeable/mounted/ramdisk & risk flags
    end
    P->>O: print diagnostic table
    alt write errors and NETALERTX_DEBUG != "1"
        P->>O: print warnings
        P->>P: exit(1)
    else
        P->>P: exit(0)
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Focus areas for review:

  • install/production-filesystem/entrypoint.d/10-mounts.py — mount matching, RAM-disk classification, risk logic, table formatting, and exit semantics.
  • install/production-filesystem/entrypoint.sh — discovery/exec model, name-stripping logic, and changed failure handling (now continues).
  • Dockerfile & .devcontainer — ensure ${ENTRYPOINT_CHECKS} inclusion and final chmod targets are correct.
  • Verification that removed legacy scripts’ checks are fully covered by new entrypoint.d scripts to avoid regressions.
  • Test fixtures and pytest assertions — confirm expected outputs align with new startup behavior.

Possibly related PRs

Poem

🐰 I hopped in at boot to guard each mount and port,
I sniffed the caps and perms and gave a tiny snort.
A table I drew, I warn and I cheer,
With carrot-powered scripts I keep the startup clear.
🥕 Soft paws, loud warnings — I watch this container fort.

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The PR title "Feat: make errors more helpful" is directly related to a primary objective of the changeset. The raw summary and PR objectives confirm that a core goal is to improve error reporting and diagnostics through the addition of 12 new troubleshooting documentation files, enhanced error messages with direct documentation links, a new comprehensive mount diagnostic script with visual status grids using emoji indicators, and actionable remediation guidance. While the PR also includes significant refactoring of entrypoint scripts and extensive test infrastructure changes, the title accurately captures the user-facing intent of making error information more helpful and actionable. A developer scanning git history would clearly understand this PR is about improving error visibility and guidance.
Docstring Coverage ✅ Passed Docstring coverage is 91.67% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 23a0fac and dde542c.

📒 Files selected for processing (2)
  • .devcontainer/Dockerfile (3 hunks)
  • Dockerfile (3 hunks)
🧰 Additional context used
🧠 Learnings (9)
📓 Common learnings
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1263
File: install/production-filesystem/entrypoint.sh:60-86
Timestamp: 2025-11-01T19:02:10.609Z
Learning: In the NetAlertX project (install/production-filesystem/entrypoint.sh), when fail-fast behavior is adopted for entrypoint checks in the future, be lenient during review because tests will be removed or changed to accommodate that behavior. The current continue-on-failure approach exists to support the existing test suite, but this is expected to change along with corresponding test adjustments.
📚 Learning: 2025-09-20T03:01:19.912Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:18-19
Timestamp: 2025-09-20T03:01:19.912Z
Learning: In the NetAlertX repository, .devcontainer/Dockerfile is auto-generated and should not be reviewed directly. Review comments about dependencies and build steps should be directed at the root Dockerfile where the actual source commands are located.

Applied to files:

  • .devcontainer/Dockerfile
📚 Learning: 2025-10-19T15:29:49.532Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1230
File: install/production-filesystem/build/init-nginx.sh:3-3
Timestamp: 2025-10-19T15:29:49.532Z
Learning: In Docker build-time initialization scripts (like those in install/production-filesystem/build/), environment variables set in the Dockerfile do not need explicit validation within the scripts. The Docker build process will fail if required environment variables are undefined, providing implicit validation.

Applied to files:

  • .devcontainer/Dockerfile
  • Dockerfile
📚 Learning: 2025-09-20T02:56:24.501Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/devcontainer.json:5-8
Timestamp: 2025-09-20T02:56:24.501Z
Learning: In the NetAlertX devcontainer setup, the final .devcontainer/Dockerfile is generated by combining the root Dockerfile with .devcontainer/resources/devcontainer-Dockerfile using the generate-dockerfile.sh script. The devcontainer.json should reference the generated file, not the root Dockerfile.

Applied to files:

  • .devcontainer/Dockerfile
📚 Learning: 2025-10-19T01:40:57.095Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1230
File: .devcontainer/resources/devcontainer-overlay/services/config/nginx/netalertx.conf.template:1-2
Timestamp: 2025-10-19T01:40:57.095Z
Learning: In the NetAlertX repository, .devcontainer/resources/devcontainer-overlay/services/config/nginx/netalertx.conf.template is an auto-generated file that is intentionally committed to source control. It cannot be regenerated automatically outside the devcontainer environment and is required for the devcontainer to start, creating a bootstrap dependency.

Applied to files:

  • .devcontainer/Dockerfile
  • Dockerfile
📚 Learning: 2025-09-20T14:08:44.152Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:82-92
Timestamp: 2025-09-20T14:08:44.152Z
Learning: In devcontainer builds, source repository files are not available during the Docker build phase. The source code gets mounted into the container after it's built and started, so COPY commands referencing source files will fail. Configuration files need to be handled at runtime (e.g., in setup scripts) rather than during the build stage.

Applied to files:

  • .devcontainer/Dockerfile
📚 Learning: 2025-10-26T17:09:18.621Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: .devcontainer/scripts/setup.sh:146-148
Timestamp: 2025-10-26T17:09:18.621Z
Learning: In `.devcontainer/scripts/setup.sh` and other devcontainer setup scripts for NetAlertX, chmod 666 on /var/run/docker.sock is acceptable because devcontainer environments are single-user development contexts where convenience can take priority over strict permission hardening.

Applied to files:

  • .devcontainer/Dockerfile
  • Dockerfile
📚 Learning: 2025-09-20T14:09:29.159Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/scripts/setup.sh:103-116
Timestamp: 2025-09-20T14:09:29.159Z
Learning: In NetAlertX devcontainer setup, the netalertx user has write permissions to /var/log/nginx/ directory as it's explicitly chowned to netalertx:www-data in the Dockerfile, so setup.sh can write to nginx log files without sudo.

Applied to files:

  • .devcontainer/Dockerfile
  • Dockerfile
📚 Learning: 2025-10-26T17:12:30.237Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: install/production-filesystem/services/start-php-fpm.sh:25-26
Timestamp: 2025-10-26T17:12:30.237Z
Learning: In NetAlertX's start-php-fpm.sh, PHP-FPM error logging is handled through the PHP-FPM configuration file (PHP_FPM_CONFIG_FILE) rather than through shell redirection. The current redirection pattern (stdout to LOG_APP_PHP_ERRORS, stderr to /dev/stderr) is intentional.

Applied to files:

  • .devcontainer/Dockerfile
  • Dockerfile
🔇 Additional comments (4)
Dockerfile (3)

72-72: Environment variables correctly defined for entrypoint checks and nginx active config.

Line 72 introduces ENTRYPOINT_CHECKS=/entrypoint.d for the consolidated check scripts, and line 78 adds SYSTEM_SERVICES_ACTIVE_CONFIG to reference the nginx active configuration. Both variables follow project naming conventions and support the entrypoint diagnostic workflow described in the PR.

Also applies to: 78-78


87-87: READ_ONLY_FOLDERS correctly includes entrypoint checks directory.

Adding ${ENTRYPOINT_CHECKS} to READ_ONLY_FOLDERS ensures check scripts remain immutable at runtime, which aligns with the security-hardened stage design and prevents accidental or malicious modification of diagnostics.


186-186: All entrypoint check scripts have proper shebangs and chmod 005 permissions are correctly applied.

Verification confirms:

  • All 13 scripts in /entrypoint.d/ have valid shebangs (10× #!/bin/sh, 2× #!/bin/bash, 1× #!/usr/bin/env python3)
  • entrypoint.sh executes scripts directly via "$script" (line 59), requiring both execute permission and shebangs
  • chmod 005 permissions on ${ENTRYPOINT_CHECKS}/* correctly grants read-execute to the netalertx user
  • The hardened security model is sound and functional
.devcontainer/Dockerfile (1)

75-75: Auto-generated file: changes consistent with main Dockerfile.

This file is auto-generated by .devcontainer/scripts/generate-configs.sh (per line 1). The changes to lines 75, 81, 90, and 189 mirror the main Dockerfile updates and require no separate review. Any issues flagged for the main Dockerfile apply here as well.

Also applies to: 81-81, 90-90, 189-189


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 17

🧹 Nitpick comments (3)
test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_mounted.yml (1)

44-52: Unused volume declarations reduce clarity.

Lines 44-52 declare 8 named volumes, but only 3 are actually referenced in the service (netalertx_db, netalertx_config, test_system_services_active_config). The others (test_netalertx_db, test_netalertx_config, test_netalertx_api, test_netalertx_log, test_system_services_run) appear unused.

Consider removing unused declarations or adding comments explaining their purpose. If they're shared across multiple test configurations, consolidating them into a separate compose file or clarifying their intent would improve maintainability.

test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_ramdisk.yml (1)

41-49: Duplicate unused volume declarations.

This file repeats the same unused volume declarations from the previous mount-test configuration (8 declared, only 3 referenced in netalertx_db, netalertx_config, and test_system_services_run).

Consider consolidating these common volume declarations into a shared base or compose fragment to reduce duplication across test configurations.

test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_no-mount.yml (1)

40-48: Unused volume declarations reduce clarity (consistent pattern).

This file repeats the same 8 unused volume declarations from previous test configurations. Only 3 are actually referenced (netalertx_db, netalertx_config, test_netalertx_api).

Consolidate these common declarations across all mount-test configurations into a shared compose fragment or base file to improve maintainability.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ff96d38 and 79887f0.

⛔ Files ignored due to path filters (1)
  • test/docker_tests/configurations/test_results.log is excluded by !**/*.log
📒 Files selected for processing (64)
  • .devcontainer/Dockerfile (3 hunks)
  • Dockerfile (3 hunks)
  • docs/docker-troubleshooting/excessive-capabilities.md (1 hunks)
  • docs/docker-troubleshooting/file-permissions.md (1 hunks)
  • docs/docker-troubleshooting/incorrect-user.md (1 hunks)
  • docs/docker-troubleshooting/missing-capabilities.md (1 hunks)
  • docs/docker-troubleshooting/mount-configuration-issues.md (1 hunks)
  • docs/docker-troubleshooting/network-mode.md (1 hunks)
  • docs/docker-troubleshooting/nginx-configuration-mount.md (1 hunks)
  • docs/docker-troubleshooting/port-conflicts.md (1 hunks)
  • docs/docker-troubleshooting/read-only-filesystem.md (1 hunks)
  • docs/docker-troubleshooting/running-as-root.md (1 hunks)
  • install/production-filesystem/entrypoint.d/0-storage-permission.sh (1 hunks)
  • install/production-filesystem/entrypoint.d/10-mounts.py (1 hunks)
  • install/production-filesystem/entrypoint.d/15-first-run-config.sh (1 hunks)
  • install/production-filesystem/entrypoint.d/20-first-run-db.sh (2 hunks)
  • install/production-filesystem/entrypoint.d/30-writable-config.sh (1 hunks)
  • install/production-filesystem/entrypoint.d/35-nginx-config.sh (3 hunks)
  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh (1 hunks)
  • install/production-filesystem/entrypoint.d/80-host-mode-network.sh (3 hunks)
  • install/production-filesystem/entrypoint.d/85-layer-2-capabilities.sh (2 hunks)
  • install/production-filesystem/entrypoint.d/90-excessive-capabilities.sh (1 hunks)
  • install/production-filesystem/entrypoint.d/95-appliance-integrity.sh (1 hunks)
  • install/production-filesystem/entrypoint.d/99-ports-available.sh (1 hunks)
  • install/production-filesystem/entrypoint.sh (1 hunks)
  • install/production-filesystem/services/scripts/check-app-permissions.sh (0 hunks)
  • install/production-filesystem/services/scripts/check-nonpersistent-storage.sh (0 hunks)
  • install/production-filesystem/services/scripts/check-persistent-storage.sh (0 hunks)
  • install/production-filesystem/services/scripts/check-ramdisk.sh (0 hunks)
  • install/production-filesystem/services/scripts/check-root.sh (0 hunks)
  • test/docker_tests/configurations/README.md (1 hunks)
  • test/docker_tests/configurations/docker-compose.missing-caps.yml (1 hunks)
  • test/docker_tests/configurations/docker-compose.readonly.yml (1 hunks)
  • test/docker_tests/configurations/docker-compose.writable.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/README.md (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_mounted.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_no-mount.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_ramdisk.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_unwritable.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_mounted.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_no-mount.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_ramdisk.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_unwritable.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_mounted.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_no-mount.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_ramdisk.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_unwritable.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_mounted.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_no-mount.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_ramdisk.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_unwritable.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_mounted.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_no-mount.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_ramdisk.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_unwritable.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_mounted.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_no-mount.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_ramdisk.yml (1 hunks)
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_unwritable.yml (1 hunks)
  • test/docker_tests/configurations/test_all_docker_composes.sh (1 hunks)
  • test/docker_tests/test_container_environment.py (10 hunks)
  • test/docker_tests/test_docker_compose_scenarios.py (1 hunks)
  • test/docker_tests/test_mount_diagnostics_pytest.py (1 hunks)
  • test/docker_tests/test_ports_available.py (1 hunks)
💤 Files with no reviewable changes (5)
  • install/production-filesystem/services/scripts/check-app-permissions.sh
  • install/production-filesystem/services/scripts/check-ramdisk.sh
  • install/production-filesystem/services/scripts/check-root.sh
  • install/production-filesystem/services/scripts/check-persistent-storage.sh
  • install/production-filesystem/services/scripts/check-nonpersistent-storage.sh
🧰 Additional context used
📓 Path-based instructions (2)
**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Use 'logger.mylog' for logging at levels: none, minimal, verbose, debug, or trace.

Files:

  • test/docker_tests/test_container_environment.py
  • install/production-filesystem/entrypoint.d/10-mounts.py
  • test/docker_tests/test_mount_diagnostics_pytest.py
  • test/docker_tests/test_docker_compose_scenarios.py
  • test/docker_tests/test_ports_available.py
test/**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Tests must reside under 'test/' and use pytest.

Files:

  • test/docker_tests/test_container_environment.py
  • test/docker_tests/test_mount_diagnostics_pytest.py
  • test/docker_tests/test_docker_compose_scenarios.py
  • test/docker_tests/test_ports_available.py
🧠 Learnings (18)
📓 Common learnings
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:18-19
Timestamp: 2025-09-20T03:01:19.912Z
Learning: In the NetAlertX repository, .devcontainer/Dockerfile is auto-generated and should not be reviewed directly. Review comments about dependencies and build steps should be directed at the root Dockerfile where the actual source commands are located.
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: .devcontainer/scripts/setup.sh:146-148
Timestamp: 2025-10-26T17:09:18.621Z
Learning: In `.devcontainer/scripts/setup.sh` and other devcontainer setup scripts for NetAlertX, chmod 666 on /var/run/docker.sock is acceptable because devcontainer environments are single-user development contexts where convenience can take priority over strict permission hardening.
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/scripts/setup.sh:103-116
Timestamp: 2025-09-20T14:09:29.159Z
Learning: In NetAlertX devcontainer setup, the netalertx user has write permissions to /var/log/nginx/ directory as it's explicitly chowned to netalertx:www-data in the Dockerfile, so setup.sh can write to nginx log files without sudo.
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/devcontainer.json:5-8
Timestamp: 2025-09-20T02:56:24.501Z
Learning: In the NetAlertX devcontainer setup, the final .devcontainer/Dockerfile is generated by combining the root Dockerfile with .devcontainer/resources/devcontainer-Dockerfile using the generate-dockerfile.sh script. The devcontainer.json should reference the generated file, not the root Dockerfile.
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/scripts/stream-logs.sh:5-6
Timestamp: 2025-09-20T14:08:44.292Z
Learning: The .devcontainer/scripts/stream-logs.sh script in NetAlertX is designed as a diagnostic tool for troubleshooting devcontainer startup issues. When log files don't exist, this indicates that the executable/services didn't start properly, which is valuable diagnostic information. Pre-creating missing files would mask this diagnostic behavior.
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/scripts/setup.sh:90-96
Timestamp: 2025-09-20T14:08:48.256Z
Learning: In the NetAlertX devcontainer setup, the setup.sh script intentionally removes user_notifications.json from the API directory during development environment initialization to prevent notification clutter that accumulates during container launches and development work.
📚 Learning: 2025-10-26T17:09:18.621Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: .devcontainer/scripts/setup.sh:146-148
Timestamp: 2025-10-26T17:09:18.621Z
Learning: In `.devcontainer/scripts/setup.sh` and other devcontainer setup scripts for NetAlertX, chmod 666 on /var/run/docker.sock is acceptable because devcontainer environments are single-user development contexts where convenience can take priority over strict permission hardening.

Applied to files:

  • docs/docker-troubleshooting/running-as-root.md
  • docs/docker-troubleshooting/file-permissions.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_mounted.yml
  • install/production-filesystem/entrypoint.d/90-excessive-capabilities.sh
  • install/production-filesystem/entrypoint.d/30-writable-config.sh
  • docs/docker-troubleshooting/incorrect-user.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_ramdisk.yml
  • .devcontainer/Dockerfile
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_unwritable.yml
  • install/production-filesystem/entrypoint.d/35-nginx-config.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_mounted.yml
  • docs/docker-troubleshooting/mount-configuration-issues.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_unwritable.yml
  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh
  • test/docker_tests/configurations/docker-compose.writable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_unwritable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_unwritable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_mounted.yml
  • install/production-filesystem/entrypoint.d/0-storage-permission.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_mounted.yml
  • Dockerfile
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_unwritable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_unwritable.yml
📚 Learning: 2025-09-20T03:01:19.912Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:18-19
Timestamp: 2025-09-20T03:01:19.912Z
Learning: In the NetAlertX repository, .devcontainer/Dockerfile is auto-generated and should not be reviewed directly. Review comments about dependencies and build steps should be directed at the root Dockerfile where the actual source commands are located.

Applied to files:

  • docs/docker-troubleshooting/running-as-root.md
  • docs/docker-troubleshooting/file-permissions.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_mounted.yml
  • docs/docker-troubleshooting/port-conflicts.md
  • docs/docker-troubleshooting/incorrect-user.md
  • .devcontainer/Dockerfile
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_unwritable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_mounted.yml
  • docs/docker-troubleshooting/mount-configuration-issues.md
  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh
  • test/docker_tests/configurations/docker-compose.writable.yml
  • test/docker_tests/configurations/README.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_ramdisk.yml
  • test/docker_tests/configurations/docker-compose.missing-caps.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_no-mount.yml
  • test/docker_tests/configurations/docker-compose.readonly.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_mounted.yml
  • Dockerfile
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_unwritable.yml
📚 Learning: 2025-09-20T14:09:29.159Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/scripts/setup.sh:103-116
Timestamp: 2025-09-20T14:09:29.159Z
Learning: In NetAlertX devcontainer setup, the netalertx user has write permissions to /var/log/nginx/ directory as it's explicitly chowned to netalertx:www-data in the Dockerfile, so setup.sh can write to nginx log files without sudo.

Applied to files:

  • docs/docker-troubleshooting/running-as-root.md
  • docs/docker-troubleshooting/nginx-configuration-mount.md
  • docs/docker-troubleshooting/file-permissions.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_mounted.yml
  • install/production-filesystem/entrypoint.d/30-writable-config.sh
  • docs/docker-troubleshooting/incorrect-user.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_ramdisk.yml
  • .devcontainer/Dockerfile
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_unwritable.yml
  • install/production-filesystem/entrypoint.d/35-nginx-config.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_mounted.yml
  • docs/docker-troubleshooting/mount-configuration-issues.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_unwritable.yml
  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh
  • test/docker_tests/configurations/docker-compose.writable.yml
  • test/docker_tests/configurations/README.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_unwritable.yml
  • test/docker_tests/configurations/docker-compose.missing-caps.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_unwritable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_no-mount.yml
  • test/docker_tests/configurations/docker-compose.readonly.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_mounted.yml
  • install/production-filesystem/entrypoint.d/0-storage-permission.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_mounted.yml
  • Dockerfile
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_unwritable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_unwritable.yml
📚 Learning: 2025-10-19T15:29:46.423Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1230
File: front/plugins/dhcp_servers/script.py:44-44
Timestamp: 2025-10-19T15:29:46.423Z
Learning: In the NetAlertX dhcp_servers plugin (front/plugins/dhcp_servers/script.py), the nmap command uses both 'sudo' and '--privileged' flag to maintain cross-platform compatibility. While the hardened Docker image stubs sudo and uses capabilities, hardware installations (Debian 12, Ubuntu 24) and the Debian Dockerfile require sudo for raw socket access. This approach ensures the plugin works across all deployment targets.

Applied to files:

  • docs/docker-troubleshooting/running-as-root.md
  • docs/docker-troubleshooting/missing-capabilities.md
  • docs/docker-troubleshooting/network-mode.md
  • install/production-filesystem/entrypoint.d/85-layer-2-capabilities.sh
  • docs/docker-troubleshooting/excessive-capabilities.md
📚 Learning: 2025-10-19T01:40:57.095Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1230
File: .devcontainer/resources/devcontainer-overlay/services/config/nginx/netalertx.conf.template:1-2
Timestamp: 2025-10-19T01:40:57.095Z
Learning: In the NetAlertX repository, .devcontainer/resources/devcontainer-overlay/services/config/nginx/netalertx.conf.template is an auto-generated file that is intentionally committed to source control. It cannot be regenerated automatically outside the devcontainer environment and is required for the devcontainer to start, creating a bootstrap dependency.

Applied to files:

  • docs/docker-troubleshooting/nginx-configuration-mount.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_mounted.yml
  • docs/docker-troubleshooting/port-conflicts.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_ramdisk.yml
  • .devcontainer/Dockerfile
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_no-mount.yml
  • install/production-filesystem/entrypoint.d/35-nginx-config.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_mounted.yml
  • docs/docker-troubleshooting/mount-configuration-issues.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_unwritable.yml
  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh
  • test/docker_tests/configurations/docker-compose.writable.yml
  • test/docker_tests/configurations/README.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_unwritable.yml
  • test/docker_tests/configurations/docker-compose.missing-caps.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_unwritable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_no-mount.yml
  • test/docker_tests/configurations/docker-compose.readonly.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_mounted.yml
  • Dockerfile
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_unwritable.yml
📚 Learning: 2025-10-26T16:45:41.247Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: install/production-filesystem/services/scripts/check-ramdisk.sh:0-0
Timestamp: 2025-10-26T16:45:41.247Z
Learning: In NetAlertX check scripts (install/production-filesystem/services/scripts/check-*.sh), not all checks should exit with non-zero status. Some checks, like check-ramdisk.sh, are warning-only and exit 0 even when issues are detected, allowing the application to start despite suboptimal configuration.

Applied to files:

  • install/production-filesystem/entrypoint.d/95-appliance-integrity.sh
  • install/production-filesystem/entrypoint.d/30-writable-config.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_ramdisk.yml
  • test/docker_tests/test_container_environment.py
  • install/production-filesystem/entrypoint.d/35-nginx-config.sh
  • install/production-filesystem/entrypoint.sh
  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_ramdisk.yml
  • install/production-filesystem/entrypoint.d/0-storage-permission.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_no-mount.yml
📚 Learning: 2025-09-20T14:13:33.635Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:11-16
Timestamp: 2025-09-20T14:13:33.635Z
Learning: In the NetAlertX devcontainer setup, the `python -m venv /opt/venv` command works successfully on Alpine 3.22 despite the typical Alpine behavior of not providing a /usr/bin/python symlink by default. The build completes successfully and pytest runs without issues.

Applied to files:

  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_mounted.yml
📚 Learning: 2025-10-26T15:39:36.707Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: install/production-filesystem/services/scripts/check-first-run-config.sh:0-0
Timestamp: 2025-10-26T15:39:36.707Z
Learning: In NetAlertX startup scripts, critical initialization failures (e.g., unable to create config directory or copy default config files) should exit with non-zero status to fail fast and provide clear error messages, rather than continuing in a broken state.

Applied to files:

  • install/production-filesystem/entrypoint.d/30-writable-config.sh
  • test/docker_tests/test_container_environment.py
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_unwritable.yml
  • install/production-filesystem/entrypoint.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_unwritable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_unwritable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_unwritable.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_unwritable.yml
📚 Learning: 2025-09-20T14:08:44.292Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/scripts/stream-logs.sh:5-6
Timestamp: 2025-09-20T14:08:44.292Z
Learning: The .devcontainer/scripts/stream-logs.sh script in NetAlertX is designed as a diagnostic tool for troubleshooting devcontainer startup issues. When log files don't exist, this indicates that the executable/services didn't start properly, which is valuable diagnostic information. Pre-creating missing files would mask this diagnostic behavior.

Applied to files:

  • install/production-filesystem/entrypoint.d/30-writable-config.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_unwritable.yml
  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.log_unwritable.yml
📚 Learning: 2025-09-20T14:08:48.256Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/scripts/setup.sh:90-96
Timestamp: 2025-09-20T14:08:48.256Z
Learning: In the NetAlertX devcontainer setup, the setup.sh script intentionally removes user_notifications.json from the API directory during development environment initialization to prevent notification clutter that accumulates during container launches and development work.

Applied to files:

  • docs/docker-troubleshooting/incorrect-user.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_no-mount.yml
  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh
  • test/docker_tests/configurations/docker-compose.writable.yml
  • test/docker_tests/configurations/README.md
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_ramdisk.yml
  • test/docker_tests/configurations/docker-compose.readonly.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_mounted.yml
📚 Learning: 2025-10-19T15:29:49.532Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1230
File: install/production-filesystem/build/init-nginx.sh:3-3
Timestamp: 2025-10-19T15:29:49.532Z
Learning: In Docker build-time initialization scripts (like those in install/production-filesystem/build/), environment variables set in the Dockerfile do not need explicit validation within the scripts. The Docker build process will fail if required environment variables are undefined, providing implicit validation.

Applied to files:

  • .devcontainer/Dockerfile
  • Dockerfile
📚 Learning: 2025-09-20T02:56:24.501Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/devcontainer.json:5-8
Timestamp: 2025-09-20T02:56:24.501Z
Learning: In the NetAlertX devcontainer setup, the final .devcontainer/Dockerfile is generated by combining the root Dockerfile with .devcontainer/resources/devcontainer-Dockerfile using the generate-dockerfile.sh script. The devcontainer.json should reference the generated file, not the root Dockerfile.

Applied to files:

  • .devcontainer/Dockerfile
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.db_mounted.yml
  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh
  • test/docker_tests/configurations/docker-compose.writable.yml
  • test/docker_tests/configurations/README.md
  • test/docker_tests/configurations/docker-compose.missing-caps.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.run_no-mount.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_no-mount.yml
  • test/docker_tests/configurations/docker-compose.readonly.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.config_mounted.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.active_config_ramdisk.yml
  • test/docker_tests/configurations/mount-tests/docker-compose.mount-test.api_mounted.yml
📚 Learning: 2025-09-20T14:08:44.152Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:82-92
Timestamp: 2025-09-20T14:08:44.152Z
Learning: In devcontainer builds, source repository files are not available during the Docker build phase. The source code gets mounted into the container after it's built and started, so COPY commands referencing source files will fail. Configuration files need to be handled at runtime (e.g., in setup scripts) rather than during the build stage.

Applied to files:

  • .devcontainer/Dockerfile
📚 Learning: 2025-10-26T17:12:30.237Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: install/production-filesystem/services/start-php-fpm.sh:25-26
Timestamp: 2025-10-26T17:12:30.237Z
Learning: In NetAlertX's start-php-fpm.sh, PHP-FPM error logging is handled through the PHP-FPM configuration file (PHP_FPM_CONFIG_FILE) rather than through shell redirection. The current redirection pattern (stdout to LOG_APP_PHP_ERRORS, stderr to /dev/stderr) is intentional.

Applied to files:

  • .devcontainer/Dockerfile
  • Dockerfile
📚 Learning: 2025-10-26T17:11:17.499Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: install/production-filesystem/services/scripts/update_vendors.sh:22-22
Timestamp: 2025-10-26T17:11:17.499Z
Learning: In install/production-filesystem/services/scripts/update_vendors.sh, suppressing wget stderr with 2>/dev/null is intentional; the script's own error handling (line 27: "ERROR: Failed to download or process OUI data") provides adequate feedback when downloads fail in offline environments.

Applied to files:

  • install/production-filesystem/entrypoint.d/80-host-mode-network.sh
📚 Learning: 2025-10-10T22:16:02.770Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1214
File: install/ubuntu24/uninstall.sh:129-141
Timestamp: 2025-10-10T22:16:02.770Z
Learning: NetAlertX uninstall procedures should only remove files from the repository (specifically /app files) and should not touch system packages like PHP, nginx, avahi, or other shared system components to avoid damaging user systems.

Applied to files:

  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh
📚 Learning: 2025-10-10T22:16:02.770Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1214
File: install/ubuntu24/uninstall.sh:129-141
Timestamp: 2025-10-10T22:16:02.770Z
Learning: In the NetAlertX project, hardware installs are not officially supported. Hardware installation methods will be moved from source code to documentation.

Applied to files:

  • install/production-filesystem/entrypoint.d/60-user-netalertx.sh
🧬 Code graph analysis (2)
test/docker_tests/test_container_environment.py (1)
test/docker_tests/test_ports_available.py (4)
  • _assert_contains (153-161)
  • _build_volume_args (80-85)
  • _run_container (88-150)
  • _setup_mount_tree (59-77)
test/docker_tests/test_ports_available.py (1)
test/docker_tests/test_container_environment.py (4)
  • _setup_mount_tree (94-149)
  • _build_volume_args (166-176)
  • _run_container (187-279)
  • _assert_contains (283-293)
🪛 LanguageTool
docs/docker-troubleshooting/read-only-filesystem.md

[style] ~15-~15: Consider using a different verb for a more formal wording.
Context: ...nt filesystem modifications. ## How to Correct the Issue Enable read-only mode: - In...

(FIX_RESOLVE)

docs/docker-troubleshooting/running-as-root.md

[style] ~15-~15: Consider using a different verb for a more formal wording.
Context: ...ervice account for security. ## How to Correct the Issue Switch to the dedicated 'net...

(FIX_RESOLVE)

docs/docker-troubleshooting/nginx-configuration-mount.md

[style] ~15-~15: Consider using a different verb for a more formal wording.
Context: ...n running in read-only mode. ## How to Correct the Issue If you want to use a custom ...

(FIX_RESOLVE)

docs/docker-troubleshooting/file-permissions.md

[style] ~15-~15: Consider using a different verb for a more formal wording.
Context: ...nt, not root or other users. ## How to Correct the Issue Fix permissions on the host ...

(FIX_RESOLVE)

docs/docker-troubleshooting/port-conflicts.md

[style] ~19-~19: Consider using a different verb for a more formal wording.
Context: ...es are set to the same value ## How to Correct the Issue ### Check for Existing NetAl...

(FIX_RESOLVE)

docs/docker-troubleshooting/incorrect-user.md

[style] ~15-~15: Consider using a different verb for a more formal wording.
Context: ...r proper security isolation. ## How to Correct the Issue Restore the container to the...

(FIX_RESOLVE)

docs/docker-troubleshooting/missing-capabilities.md

[style] ~15-~15: Consider using a different verb for a more formal wording.
Context: ...elevated network privileges. ## How to Correct the Issue Add the required capabilitie...

(FIX_RESOLVE)

docs/docker-troubleshooting/network-mode.md

[style] ~15-~15: Consider using a different verb for a more formal wording.
Context: ...scovery and active scanning. ## How to Correct the Issue Enable host networking mode:...

(FIX_RESOLVE)

docs/docker-troubleshooting/mount-configuration-issues.md

[style] ~15-~15: Consider using a different verb for a more formal wording.
Context: ... others should be temporary. ## How to Correct the Issue Review and correct your volu...

(FIX_RESOLVE)

docs/docker-troubleshooting/excessive-capabilities.md

[style] ~15-~15: Consider using a different verb for a more formal wording.
Context: ...ilities for proper function. ## How to Correct the Issue Limit capabilities to only t...

(FIX_RESOLVE)

🪛 Ruff (0.14.2)
test/docker_tests/test_container_environment.py

202-202: subprocess call: check for execution of untrusted input

(S603)


203-203: Starting a process with a partial executable path

(S607)


283-283: PEP 484 prohibits implicit Optional

Convert to T | None

(RUF013)


665-665: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)


666-666: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)


694-694: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)


695-695: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)

install/production-filesystem/entrypoint.d/10-mounts.py

173-173: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)


175-175: Do not assign a lambda expression, use a def

Rewrite bool_to_check as a def

(E731)

test/docker_tests/test_mount_diagnostics_pytest.py

1-1: Shebang is present but file is not executable

(EXE001)


12-12: Docstring contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF002)


12-12: Docstring contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF002)


13-13: Docstring contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF002)


13-13: Docstring contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF002)


21-21: Docstring contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF002)


43-43: Comment contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF003)


44-44: Comment contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF003)


86-86: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)


160-160: subprocess call: check for execution of untrusted input

(S603)


161-161: Starting a process with a partial executable path

(S607)


232-232: Unused function argument: netalertx_test_image

(ARG001)


247-247: subprocess call: check for execution of untrusted input

(S603)


254-254: subprocess call: check for execution of untrusted input

(S603)


268-268: subprocess call: check for execution of untrusted input

(S603)


269-269: Starting a process with a partial executable path

(S607)


275-275: subprocess call: check for execution of untrusted input

(S603)


276-276: Starting a process with a partial executable path

(S607)


287-287: subprocess call: check for execution of untrusted input

(S603)


288-288: Starting a process with a partial executable path

(S607)


374-374: subprocess call: check for execution of untrusted input

(S603)


393-393: subprocess call: check for execution of untrusted input

(S603)


401-401: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)


401-401: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)

test/docker_tests/test_docker_compose_scenarios.py

22-22: PEP 484 prohibits implicit Optional

Convert to T | None

(RUF013)


38-38: subprocess call: check for execution of untrusted input

(S603)


50-50: subprocess call: check for execution of untrusted input

(S603)


50-50: Starting a process with a partial executable path

(S607)


55-55: subprocess call: check for execution of untrusted input

(S603)


55-55: Starting a process with a partial executable path

(S607)


66-66: Redefinition of unused time from line 11

Remove definition: time

(F811)


81-81: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


103-103: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


126-126: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


168-168: Unused function argument: env_vars

(ARG001)


168-168: PEP 484 prohibits implicit Optional

Convert to T | None

(RUF013)


180-180: subprocess call: check for execution of untrusted input

(S603)


191-191: subprocess call: check for execution of untrusted input

(S603)


191-191: Starting a process with a partial executable path

(S607)


196-196: subprocess call: check for execution of untrusted input

(S603)


196-196: Starting a process with a partial executable path

(S607)


244-244: Redefinition of unused test_host_network_compose from line 218

(F811)


273-273: Redefinition of unused test_host_network_compose from line 244

(F811)


359-359: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


364-364: f-string without any placeholders

Remove extraneous f prefix

(F541)


365-365: f-string without any placeholders

Remove extraneous f prefix

(F541)


366-366: f-string without any placeholders

Remove extraneous f prefix

(F541)


367-367: f-string without any placeholders

Remove extraneous f prefix

(F541)


412-412: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


417-417: f-string without any placeholders

Remove extraneous f prefix

(F541)


418-418: f-string without any placeholders

Remove extraneous f prefix

(F541)


419-419: f-string without any placeholders

Remove extraneous f prefix

(F541)


420-420: f-string without any placeholders

Remove extraneous f prefix

(F541)

test/docker_tests/test_ports_available.py

43-43: subprocess call: check for execution of untrusted input

(S603)


44-44: Starting a process with a partial executable path

(S607)


56-56: subprocess call: check for execution of untrusted input

(S603)


56-56: Starting a process with a partial executable path

(S607)


70-70: Loop control variable target not used within loop body

Rename unused target to _target

(B007)


107-107: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


131-131: subprocess call: check for execution of untrusted input

(S603)


153-153: PEP 484 prohibits implicit Optional

Convert to T | None

(RUF013)


157-161: Avoid specifying long messages outside the exception class

(TRY003)


164-164: PEP 484 prohibits implicit Optional

Convert to T | None

(RUF013)


168-172: Avoid specifying long messages outside the exception class

(TRY003)


220-220: Unused function argument: dummy_container

(ARG001)

🪛 Shellcheck (0.11.0)
test/docker_tests/configurations/test_all_docker_composes.sh

[warning] 39-39: Declare and assign separately to avoid masking return values.

(SC2155)


[warning] 40-40: Declare and assign separately to avoid masking return values.

(SC2155)


[warning] 47-47: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.

(SC2164)


[warning] 51-51: To redirect stdout+stderr, 2>&1 must be last (or use '{ cmd > file; } 2>&1' to clarify).

(SC2069)

install/production-filesystem/entrypoint.sh

[warning] 42-42: RESET appears unused. Verify use (or export if used externally).

(SC2034)

@jokob-sk
Copy link
Collaborator

jokob-sk commented Nov 1, 2025

This is a big PR - let me know once ready and I'll merge. The table is amazing - easy to recognize what's wrong

@adamoutler adamoutler marked this pull request as draft November 1, 2025 11:06
@adamoutler adamoutler marked this pull request as ready for review November 1, 2025 18:19
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (3)
install/production-filesystem/entrypoint.d/0-storage-permission.sh (1)

57-58: Fix find command syntax errors.

Lines 57–58 are missing the terminator for -exec; each must end with + (or ; if preferred). Currently, these commands are malformed and will fail to execute.

-    find ${READ_WRITE_PATHS} -type d -exec chmod u+rwx {}
-    find ${READ_WRITE_PATHS} -type f -exec chmod u+rw {}
+    find "${READ_WRITE_PATHS}" -type d -exec chmod u+rwx {} + 2>/dev/null || true
+    find "${READ_WRITE_PATHS}" -type f -exec chmod u+rw {} + 2>/dev/null || true

The diff also quotes the variable to prevent word-splitting on paths with spaces, adds error suppression for consistency with line 54, and uses + (parallel execution) for efficiency.

test/docker_tests/configurations/test_all_docker_composes.sh (1)

49-55: Remove duplicate cd and docker-compose up commands.

Lines 49 and 51 contain duplicate cd commands (the second lacks error handling). Lines 53 and 55 contain duplicate docker-compose up invocations with different redirect orders. Line 55's redirect order is incorrect (2>&1 must come after >>).

Apply this diff:

     cd "$dirname" || exit 1
-    # Change to the directory containing the docker-compose file
-    cd "$dirname"
 
+    echo "Running docker-compose up..." >> "$LOG_FILE"
     timeout 10s docker-compose -f "$basename" up >> "$LOG_FILE" 2>&1
-    echo "Running docker-compose up..." >> "$LOG_FILE"
-    timeout 10s docker-compose -f "$basename" up 2>&1 >> "$LOG_FILE"
test/docker_tests/test_ports_available.py (1)

122-124: Resolve script path relative to repo root.

The hard-coded relative path "install/production-filesystem/entrypoint.d/99-ports-available.sh" assumes execution from the repo root. In CI or non-standard environments, this open() will raise FileNotFoundError. Use dynamic repo root resolution similar to test_container_environment.py (lines 113-131 in relevant_code_snippets).

Apply this diff:

-    # Copy the script content and run it
-    script_path = "install/production-filesystem/entrypoint.d/99-ports-available.sh"
-    with open(script_path, 'r') as f:
+    # Determine repo root from env or by walking up from this file
+    repo_root_env = os.environ.get("NETALERTX_REPO_ROOT")
+    if repo_root_env:
+        repo_root = pathlib.Path(repo_root_env)
+    else:
+        repo_root = None
+        cur = pathlib.Path(__file__).resolve()
+        for parent in cur.parents:
+            if (parent / "pyproject.toml").exists() or (parent / ".git").exists():
+                repo_root = parent
+                break
+        if repo_root is None:
+            repo_root = cur.parents[2]
+    
+    script_path = repo_root / "install" / "production-filesystem" / "entrypoint.d" / "99-ports-available.sh"
+    with script_path.open('r', encoding='utf-8') as f:
         script_content = f.read()
🧹 Nitpick comments (2)
install/production-filesystem/entrypoint.d/0-storage-permission.sh (1)

54-54: Quote variable expansion in chown for robustness.

Unquoted variable expansion can cause word-splitting if any paths contain spaces or special characters. This is a lower-risk issue than lines 57–58 (syntax errors), but quoting is a defensive best practice:

-    chown -R netalertx ${READ_WRITE_PATHS} 2>/dev/null || true
+    chown -R netalertx "${READ_WRITE_PATHS}" 2>/dev/null || true
test/docker_tests/test_docker_compose_scenarios.py (1)

273-276: Remove extraneous f-string prefixes.

Lines 273-276 (and 326-329) use f-string prefixes without any placeholders. Remove the f prefix for clarity.

Apply this diff:

                 "volumes": [
-                    f"./test_data/app_log:/app/log",
-                    f"./test_data/app_api:/app/api",
-                    f"./test_data/nginx_conf:/services/config/nginx/conf.active",
-                    f"./test_data/services_run:/services/run"
+                    "./test_data/app_log:/app/log",
+                    "./test_data/app_api:/app/api",
+                    "./test_data/nginx_conf:/services/config/nginx/conf.active",
+                    "./test_data/services_run:/services/run"
                 ],

Apply the same fix to lines 326-329.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 79887f0 and 70373b1.

📒 Files selected for processing (8)
  • docs/docker-troubleshooting/nginx-configuration-mount.md (1 hunks)
  • install/production-filesystem/entrypoint.d/0-storage-permission.sh (1 hunks)
  • install/production-filesystem/entrypoint.d/80-host-mode-network.sh (2 hunks)
  • install/production-filesystem/entrypoint.d/90-excessive-capabilities.sh (1 hunks)
  • test/docker_tests/configurations/test_all_docker_composes.sh (1 hunks)
  • test/docker_tests/test_docker_compose_scenarios.py (1 hunks)
  • test/docker_tests/test_mount_diagnostics_pytest.py (1 hunks)
  • test/docker_tests/test_ports_available.py (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • install/production-filesystem/entrypoint.d/90-excessive-capabilities.sh
🧰 Additional context used
📓 Path-based instructions (2)
**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Use 'logger.mylog' for logging at levels: none, minimal, verbose, debug, or trace.

Files:

  • test/docker_tests/test_mount_diagnostics_pytest.py
  • test/docker_tests/test_ports_available.py
  • test/docker_tests/test_docker_compose_scenarios.py
test/**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Tests must reside under 'test/' and use pytest.

Files:

  • test/docker_tests/test_mount_diagnostics_pytest.py
  • test/docker_tests/test_ports_available.py
  • test/docker_tests/test_docker_compose_scenarios.py
🧠 Learnings (8)
📚 Learning: 2025-10-26T16:45:41.247Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: install/production-filesystem/services/scripts/check-ramdisk.sh:0-0
Timestamp: 2025-10-26T16:45:41.247Z
Learning: In NetAlertX check scripts (install/production-filesystem/services/scripts/check-*.sh), not all checks should exit with non-zero status. Some checks, like check-ramdisk.sh, are warning-only and exit 0 even when issues are detected, allowing the application to start despite suboptimal configuration.

Applied to files:

  • install/production-filesystem/entrypoint.d/80-host-mode-network.sh
  • install/production-filesystem/entrypoint.d/0-storage-permission.sh
📚 Learning: 2025-09-20T14:08:44.292Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/scripts/stream-logs.sh:5-6
Timestamp: 2025-09-20T14:08:44.292Z
Learning: The .devcontainer/scripts/stream-logs.sh script in NetAlertX is designed as a diagnostic tool for troubleshooting devcontainer startup issues. When log files don't exist, this indicates that the executable/services didn't start properly, which is valuable diagnostic information. Pre-creating missing files would mask this diagnostic behavior.

Applied to files:

  • install/production-filesystem/entrypoint.d/80-host-mode-network.sh
  • test/docker_tests/test_ports_available.py
📚 Learning: 2025-09-20T03:01:19.912Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:18-19
Timestamp: 2025-09-20T03:01:19.912Z
Learning: In the NetAlertX repository, .devcontainer/Dockerfile is auto-generated and should not be reviewed directly. Review comments about dependencies and build steps should be directed at the root Dockerfile where the actual source commands are located.

Applied to files:

  • test/docker_tests/test_ports_available.py
  • test/docker_tests/test_docker_compose_scenarios.py
  • docs/docker-troubleshooting/nginx-configuration-mount.md
📚 Learning: 2025-10-26T17:09:18.621Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: .devcontainer/scripts/setup.sh:146-148
Timestamp: 2025-10-26T17:09:18.621Z
Learning: In `.devcontainer/scripts/setup.sh` and other devcontainer setup scripts for NetAlertX, chmod 666 on /var/run/docker.sock is acceptable because devcontainer environments are single-user development contexts where convenience can take priority over strict permission hardening.

Applied to files:

  • test/docker_tests/test_ports_available.py
  • install/production-filesystem/entrypoint.d/0-storage-permission.sh
📚 Learning: 2025-09-20T14:13:33.635Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:11-16
Timestamp: 2025-09-20T14:13:33.635Z
Learning: In the NetAlertX repository with Alpine 3.22 base image, the `python -m venv` command works correctly in the devcontainer setup, likely due to symlink creation in the root Dockerfile that makes `python` available as an alias to `python3`.

Applied to files:

  • test/docker_tests/test_ports_available.py
📚 Learning: 2025-09-20T02:56:24.501Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/devcontainer.json:5-8
Timestamp: 2025-09-20T02:56:24.501Z
Learning: In the NetAlertX devcontainer setup, the final .devcontainer/Dockerfile is generated by combining the root Dockerfile with .devcontainer/resources/devcontainer-Dockerfile using the generate-dockerfile.sh script. The devcontainer.json should reference the generated file, not the root Dockerfile.

Applied to files:

  • test/docker_tests/test_ports_available.py
📚 Learning: 2025-10-19T01:40:57.095Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1230
File: .devcontainer/resources/devcontainer-overlay/services/config/nginx/netalertx.conf.template:1-2
Timestamp: 2025-10-19T01:40:57.095Z
Learning: In the NetAlertX repository, .devcontainer/resources/devcontainer-overlay/services/config/nginx/netalertx.conf.template is an auto-generated file that is intentionally committed to source control. It cannot be regenerated automatically outside the devcontainer environment and is required for the devcontainer to start, creating a bootstrap dependency.

Applied to files:

  • docs/docker-troubleshooting/nginx-configuration-mount.md
📚 Learning: 2025-09-20T14:09:29.159Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/scripts/setup.sh:103-116
Timestamp: 2025-09-20T14:09:29.159Z
Learning: In NetAlertX devcontainer setup, the netalertx user has write permissions to /var/log/nginx/ directory as it's explicitly chowned to netalertx:www-data in the Dockerfile, so setup.sh can write to nginx log files without sudo.

Applied to files:

  • docs/docker-troubleshooting/nginx-configuration-mount.md
  • install/production-filesystem/entrypoint.d/0-storage-permission.sh
🧬 Code graph analysis (1)
test/docker_tests/test_ports_available.py (1)
test/docker_tests/test_container_environment.py (4)
  • _setup_mount_tree (94-149)
  • _build_volume_args (166-176)
  • _run_container (187-279)
  • _assert_contains (283-293)
🪛 LanguageTool
docs/docker-troubleshooting/nginx-configuration-mount.md

[style] ~15-~15: Consider using a different verb for a more formal wording.
Context: ...n running in read-only mode. ## How to Correct the Issue If you want to use a custom ...

(FIX_RESOLVE)

🪛 Ruff (0.14.2)
test/docker_tests/test_mount_diagnostics_pytest.py

1-1: Shebang is present but file is not executable

(EXE001)


12-12: Docstring contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF002)


12-12: Docstring contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF002)


13-13: Docstring contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF002)


13-13: Docstring contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF002)


21-21: Docstring contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF002)


43-43: Comment contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF003)


44-44: Comment contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF003)


86-86: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)


160-160: subprocess call: check for execution of untrusted input

(S603)


161-161: Starting a process with a partial executable path

(S607)


309-309: Unused function argument: netalertx_test_image

(ARG001)


324-324: subprocess call: check for execution of untrusted input

(S603)


331-331: subprocess call: check for execution of untrusted input

(S603)


345-345: subprocess call: check for execution of untrusted input

(S603)


346-346: Starting a process with a partial executable path

(S607)


352-352: subprocess call: check for execution of untrusted input

(S603)


353-353: Starting a process with a partial executable path

(S607)


364-364: subprocess call: check for execution of untrusted input

(S603)


365-365: Starting a process with a partial executable path

(S607)


381-381: subprocess call: check for execution of untrusted input

(S603)


415-415: subprocess call: check for execution of untrusted input

(S603)


423-423: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)


423-423: String contains ambiguous (HEAVY MINUS SIGN). Did you mean - (HYPHEN-MINUS)?

(RUF001)

test/docker_tests/test_ports_available.py

43-43: subprocess call: check for execution of untrusted input

(S603)


44-44: Starting a process with a partial executable path

(S607)


56-56: subprocess call: check for execution of untrusted input

(S603)


56-56: Starting a process with a partial executable path

(S607)


70-70: Loop control variable target not used within loop body

Rename unused target to _target

(B007)


107-107: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


131-131: subprocess call: check for execution of untrusted input

(S603)


153-153: PEP 484 prohibits implicit Optional

Convert to T | None

(RUF013)


157-161: Avoid specifying long messages outside the exception class

(TRY003)


164-164: PEP 484 prohibits implicit Optional

Convert to T | None

(RUF013)


168-172: Avoid specifying long messages outside the exception class

(TRY003)


220-220: Unused function argument: dummy_container

(ARG001)

test/docker_tests/test_docker_compose_scenarios.py

30-30: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


52-52: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


75-75: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


117-117: Unused function argument: env_vars

(ARG001)


117-117: PEP 484 prohibits implicit Optional

Convert to T | None

(RUF013)


129-129: subprocess call: check for execution of untrusted input

(S603)


140-140: subprocess call: check for execution of untrusted input

(S603)


140-140: Starting a process with a partial executable path

(S607)


145-145: subprocess call: check for execution of untrusted input

(S603)


145-145: Starting a process with a partial executable path

(S607)


268-268: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


273-273: f-string without any placeholders

Remove extraneous f prefix

(F541)


274-274: f-string without any placeholders

Remove extraneous f prefix

(F541)


275-275: f-string without any placeholders

Remove extraneous f prefix

(F541)


276-276: f-string without any placeholders

Remove extraneous f prefix

(F541)


321-321: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


326-326: f-string without any placeholders

Remove extraneous f prefix

(F541)


327-327: f-string without any placeholders

Remove extraneous f prefix

(F541)


328-328: f-string without any placeholders

Remove extraneous f prefix

(F541)


329-329: f-string without any placeholders

Remove extraneous f prefix

(F541)

🪛 Shellcheck (0.11.0)
test/docker_tests/configurations/test_all_docker_composes.sh

[warning] 51-51: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.

(SC2164)


[warning] 55-55: To redirect stdout+stderr, 2>&1 must be last (or use '{ cmd > file; } 2>&1' to clarify).

(SC2069)


[error] 70-70: Parsing stopped here. Is this keyword correctly matched up?

(SC1089)

install/production-filesystem/entrypoint.d/0-storage-permission.sh

[error] 57-57: Missing ';' or + terminating -exec. You can't use |/||/&&, and ';' has to be a separate, quoted argument.

(SC2067)


[error] 58-58: Missing ';' or + terminating -exec. You can't use |/||/&&, and ';' has to be a separate, quoted argument.

(SC2067)

🔇 Additional comments (9)
docs/docker-troubleshooting/nginx-configuration-mount.md (1)

1-36: Comprehensive troubleshooting guide with clear remediation steps.

The documentation clearly explains the issue, security implications, root cause, and provides actionable remediation with specific commands and configuration snippets. Content aligns well with the PR's goal of making errors more helpful with direct remediation guidance.

The remediation steps reference correct mount paths (/app/system/services/active/config), user ID (20211), and permissions, which align with the mount-configuration status system introduced in this PR.

Note: The past review flagged a duplicate "Additional Resources" section at lines 37–38, but that's not visible in the current code, suggesting it's already been addressed. If the duplicate remains beyond the visible range, remove the redundant block to avoid repetition.

install/production-filesystem/entrypoint.d/80-host-mode-network.sh (3)

47-66: Stdout/stderr redirection correctly restored.

The diagnostic warning messages on lines 49, 50, and 65 now correctly use >&2 redirection to send output to stderr. This aligns with Unix conventions and is consistent with other diagnostic scripts in the entrypoint.d directory, addressing the issue flagged in the previous review.


2-2: Documentation link aligns with PR objectives.

The updated comment on Line 2 and the new documentation link on Line 62 are well-positioned to help users troubleshoot network configuration issues. This supports the PR's goal of providing actionable remediation steps via direct documentation links.

Also applies to: 62-62


43-66: Warning-only behavior is appropriate.

The script correctly exits with status 0, allowing the container to start despite non-optimal networking configuration. This follows the pattern of diagnostic-only checks (per the learnings from check-ramdisk.sh) and gives users the option to reconfigure while still running the application.

install/production-filesystem/entrypoint.d/0-storage-permission.sh (1)

1-51: Security alert and initialization look good. The comprehensive warning with direct documentation link and clear remediation guidance aligns well with the PR's goal of making error messages more helpful. The POSIX shell constructs and environment variable setup are sound.

test/docker_tests/test_ports_available.py (1)

220-240: Fixture parameter dummy_container is required for test execution.

While Ruff flags dummy_container as unused (ARG001), this fixture parameter is essential—it ensures the dummy container is started before the test runs. Removing it would break the test's port-conflict verification. The static analysis hint is a false positive.

test/docker_tests/test_mount_diagnostics_pytest.py (3)

293-303: LGTM: active_config_ scenarios now execute correctly.

The active_config_ block is properly structured as a peer elif alongside other path handlers (db_, config_, api_, log_, run_), ensuring these test scenarios execute as intended.


376-407: LGTM: Live-container diagnostics path is now reachable.

The diagnostic execution and assertions for running containers are correctly unindented and will execute when containers remain up, properly validating the mount diagnostic table output.


86-86: Unicode characters are intentional for table parsing.

The ➖ (HEAVY MINUS SIGN) characters flagged by Ruff (RUF001-003) are intentional—they match the emoji output format of the mount diagnostic table from 10-mounts.py. These should not be changed to ASCII hyphens.

Comment on lines 39 to 40
local dirname=$(dirname "$file")
local basename=$(basename "$file")
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Comment on lines 63 to 66
find "$SCRIPT_DIR" -name "docker-compose*.yml" -type f | sort | while read -r file; do
extract_comments "$file"
run_test "$file"
done
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
test/docker_tests/configurations/test_all_docker_composes.sh (1)

48-48: Fix stderr/stdout redirection order.

The redirect 2>&1 >> "$LOG_FILE" sends stderr to the original stdout before redirecting stdout to the file, causing stderr to be lost. Move 2>&1 to come after the file redirect.

-    timeout 10s docker-compose -f "$basename" up 2>&1 >> "$LOG_FILE"
+    timeout 10s docker-compose -f "$basename" up >> "$LOG_FILE" 2>&1
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 70373b1 and 51aa3d4.

📒 Files selected for processing (1)
  • test/docker_tests/configurations/test_all_docker_composes.sh (1 hunks)
🧰 Additional context used
🪛 Shellcheck (0.11.0)
test/docker_tests/configurations/test_all_docker_composes.sh

[error] 37-37: Couldn't parse this brace group. Fix to allow more checks.

(SC1073)


[error] 61-61: Expected a '}'. If you have one, try a ; or \n in front of it.

(SC1056)


[error] 61-61: Missing '}'. Fix any mentioned problems and try again.

(SC1072)

adamoutler and others added 2 commits November 1, 2025 14:57
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
test/docker_tests/test_docker_compose_scenarios.py (2)

279-282: Remove unnecessary f-string prefixes.

These strings contain no placeholders; the f prefix is unnecessary.

Apply this diff:

                 "volumes": [
-                    f"./test_data/app_log:/app/log",
-                    f"./test_data/app_api:/app/api",
-                    f"./test_data/nginx_conf:/services/config/nginx/conf.active",
-                    f"./test_data/services_run:/services/run"
+                    "./test_data/app_log:/app/log",
+                    "./test_data/app_api:/app/api",
+                    "./test_data/nginx_conf:/services/config/nginx/conf.active",
+                    "./test_data/services_run:/services/run"
                 ],

332-335: Remove unnecessary f-string prefixes.

These strings contain no placeholders; the f prefix is unnecessary.

Apply this diff:

                 "volumes": [
-                    f"./test_data/app_log:/app/log",
-                    f"./test_data/app_api:/app/api",
-                    f"./test_data/nginx_conf:/services/config/nginx/conf.active",
-                    f"./test_data/services_run:/services/run"
+                    "./test_data/app_log:/app/log",
+                    "./test_data/app_api:/app/api",
+                    "./test_data/nginx_conf:/services/config/nginx/conf.active",
+                    "./test_data/services_run:/services/run"
                 ],
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2a9d352 and f1fbc47.

📒 Files selected for processing (1)
  • test/docker_tests/test_docker_compose_scenarios.py (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Use 'logger.mylog' for logging at levels: none, minimal, verbose, debug, or trace.

Files:

  • test/docker_tests/test_docker_compose_scenarios.py
test/**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Tests must reside under 'test/' and use pytest.

Files:

  • test/docker_tests/test_docker_compose_scenarios.py
🧠 Learnings (1)
📚 Learning: 2025-09-20T03:01:19.912Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:18-19
Timestamp: 2025-09-20T03:01:19.912Z
Learning: In the NetAlertX repository, .devcontainer/Dockerfile is auto-generated and should not be reviewed directly. Review comments about dependencies and build steps should be directed at the root Dockerfile where the actual source commands are located.

Applied to files:

  • test/docker_tests/test_docker_compose_scenarios.py
🪛 Ruff (0.14.2)
test/docker_tests/test_docker_compose_scenarios.py

30-30: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


52-52: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


75-75: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


134-134: subprocess call: check for execution of untrusted input

(S603)


146-146: subprocess call: check for execution of untrusted input

(S603)


146-146: Starting a process with a partial executable path

(S607)


151-151: subprocess call: check for execution of untrusted input

(S603)


151-151: Starting a process with a partial executable path

(S607)


274-274: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


279-279: f-string without any placeholders

Remove extraneous f prefix

(F541)


280-280: f-string without any placeholders

Remove extraneous f prefix

(F541)


281-281: f-string without any placeholders

Remove extraneous f prefix

(F541)


282-282: f-string without any placeholders

Remove extraneous f prefix

(F541)


327-327: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


332-332: f-string without any placeholders

Remove extraneous f prefix

(F541)


333-333: f-string without any placeholders

Remove extraneous f prefix

(F541)


334-334: f-string without any placeholders

Remove extraneous f prefix

(F541)


335-335: f-string without any placeholders

Remove extraneous f prefix

(F541)

🔇 Additional comments (1)
test/docker_tests/test_docker_compose_scenarios.py (1)

117-156: LGTM! Environment variable handling is now correct.

The env_vars parameter is properly merged with the current environment and passed to all subprocess.run calls. This addresses the previous review concern.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@adamoutler adamoutler marked this pull request as draft November 1, 2025 20:39
@adamoutler adamoutler marked this pull request as ready for review November 1, 2025 23:56
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (6)
test/docker_tests/test_ports_available.py (4)

42-42: Remove redundant import.

subprocess is already imported at line 8. This duplicate import is unnecessary.

Apply this diff:

-    import subprocess

70-75: Rename unused loop variable.

The target variable from VOLUME_MAP.items() is not used within the loop body. Rename it to _target to signal it's intentionally unused.

Apply this diff:

     paths = {}
-    for key, target in VOLUME_MAP.items():
+    for key, _target in VOLUME_MAP.items():
         folder_name = f"{label}_{key.upper()}_INTENTIONAL_NETALERTX_TEST"

121-128: Consider safer script injection method.

The current shell escaping pattern using chr(39)+chr(92)+chr(39)+chr(39) is fragile and difficult to maintain. For injecting multi-line shell scripts, consider using base64 encoding or mounting the script as a volume instead.

Here's a safer alternative using base64:

     # Copy the script content and run it
     script_path = pathlib.Path("install/production-filesystem/entrypoint.d/99-ports-available.sh")
     with script_path.open('r', encoding='utf-8') as f:
         script_content = f.read()
 
-    # Use printf to avoid shell interpretation issues
-    script = f"printf '%s\\n' '{script_content.replace(chr(39), chr(39)+chr(92)+chr(39)+chr(39))}' > /tmp/ports-check.sh && chmod +x /tmp/ports-check.sh && sh /tmp/ports-check.sh"
+    # Use base64 to safely inject the script
+    import base64
+    encoded = base64.b64encode(script_content.encode('utf-8')).decode('ascii')
+    script = f"echo '{encoded}' | base64 -d > /tmp/ports-check.sh && chmod +x /tmp/ports-check.sh && sh /tmp/ports-check.sh"
     cmd.extend(["--entrypoint", "/bin/sh", IMAGE, "-c", script])

153-153: Fix implicit Optional type hints.

PEP 484 prohibits implicit Optional. Use explicit union syntax for optional parameters.

Apply this diff:

-def _assert_contains(result, snippet: str, cmd: list[str] = None) -> None:
+def _assert_contains(result, snippet: str, cmd: list[str] | None = None) -> None:
     """Assert that the result output contains the given snippet."""
     if snippet not in result.output:
         cmd_str = " ".join(cmd) if cmd else ""
         raise AssertionError(
             f"Expected to find '{snippet}' in container output.\n"
             f"Got:\n{result.output}\n"
             f"Container command:\n{cmd_str}"
         )


-def _assert_not_contains(result, snippet: str, cmd: list[str] = None) -> None:
+def _assert_not_contains(result, snippet: str, cmd: list[str] | None = None) -> None:
     """Assert that the result output does not contain the given snippet."""

Also applies to: 164-164

test/docker_tests/test_docker_compose_scenarios.py (2)

152-152: Consider using list unpacking for concatenation.

For consistency with modern Python style, consider using unpacking syntax instead of + concatenation.

Apply this diff:

-    up_cmd = cmd + ["up"]
+    up_cmd = [*cmd, "up"]
     if detached:
         up_cmd.append("-d")
     else:
         up_cmd.extend([
             "--abort-on-container-exit",
             "--timeout", str(timeout)
         ])
 
     # ... later in the function ...
 
-            logs_cmd = cmd + ["logs"]
+            logs_cmd = [*cmd, "logs"]
             logs_result = subprocess.run(
 
     # ... and at the end ...
 
     if detached:
-        logs_cmd_display = cmd + ["logs"]
+        logs_cmd_display = [*cmd, "logs"]
         print("[compose logs command]", " ".join(logs_cmd_display))

Also applies to: 179-179, 230-230


371-374: Remove extraneous f-string prefixes.

These strings don't contain any interpolation placeholders, so the f prefix is unnecessary.

Apply this diff:

                 "volumes": [
-                    f"./test_data/app_log:/app/log",
-                    f"./test_data/app_api:/app/api",
-                    f"./test_data/nginx_conf:/services/config/nginx/conf.active",
-                    f"./test_data/services_run:/services/run"
+                    "./test_data/app_log:/app/log",
+                    "./test_data/app_api:/app/api",
+                    "./test_data/nginx_conf:/services/config/nginx/conf.active",
+                    "./test_data/services_run:/services/run"
                 ],

And similarly at lines 424-427:

                 "volumes": [
-                    f"./test_data/app_log:/app/log",
-                    f"./test_data/app_api:/app/api",
-                    f"./test_data/nginx_conf:/services/config/nginx/conf.active",
-                    f"./test_data/services_run:/services/run"
+                    "./test_data/app_log:/app/log",
+                    "./test_data/app_api:/app/api",
+                    "./test_data/nginx_conf:/services/config/nginx/conf.active",
+                    "./test_data/services_run:/services/run"
                 ],

Also applies to: 424-427

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f1fbc47 and 23a0fac.

📒 Files selected for processing (2)
  • test/docker_tests/test_docker_compose_scenarios.py (1 hunks)
  • test/docker_tests/test_ports_available.py (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Use 'logger.mylog' for logging at levels: none, minimal, verbose, debug, or trace.

Files:

  • test/docker_tests/test_docker_compose_scenarios.py
  • test/docker_tests/test_ports_available.py
test/**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Tests must reside under 'test/' and use pytest.

Files:

  • test/docker_tests/test_docker_compose_scenarios.py
  • test/docker_tests/test_ports_available.py
🧠 Learnings (7)
📚 Learning: 2025-09-20T03:01:19.912Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:18-19
Timestamp: 2025-09-20T03:01:19.912Z
Learning: In the NetAlertX repository, .devcontainer/Dockerfile is auto-generated and should not be reviewed directly. Review comments about dependencies and build steps should be directed at the root Dockerfile where the actual source commands are located.

Applied to files:

  • test/docker_tests/test_docker_compose_scenarios.py
  • test/docker_tests/test_ports_available.py
📚 Learning: 2025-10-26T17:09:18.621Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1235
File: .devcontainer/scripts/setup.sh:146-148
Timestamp: 2025-10-26T17:09:18.621Z
Learning: In `.devcontainer/scripts/setup.sh` and other devcontainer setup scripts for NetAlertX, chmod 666 on /var/run/docker.sock is acceptable because devcontainer environments are single-user development contexts where convenience can take priority over strict permission hardening.

Applied to files:

  • test/docker_tests/test_docker_compose_scenarios.py
  • test/docker_tests/test_ports_available.py
📚 Learning: 2025-11-01T19:02:10.609Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1263
File: install/production-filesystem/entrypoint.sh:60-86
Timestamp: 2025-11-01T19:02:10.609Z
Learning: In the NetAlertX project (install/production-filesystem/entrypoint.sh), when fail-fast behavior is adopted for entrypoint checks in the future, be lenient during review because tests will be removed or changed to accommodate that behavior. The current continue-on-failure approach exists to support the existing test suite, but this is expected to change along with corresponding test adjustments.

Applied to files:

  • test/docker_tests/test_docker_compose_scenarios.py
  • test/docker_tests/test_ports_available.py
📚 Learning: 2025-09-20T14:08:44.292Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/scripts/stream-logs.sh:5-6
Timestamp: 2025-09-20T14:08:44.292Z
Learning: The .devcontainer/scripts/stream-logs.sh script in NetAlertX is designed as a diagnostic tool for troubleshooting devcontainer startup issues. When log files don't exist, this indicates that the executable/services didn't start properly, which is valuable diagnostic information. Pre-creating missing files would mask this diagnostic behavior.

Applied to files:

  • test/docker_tests/test_docker_compose_scenarios.py
  • test/docker_tests/test_ports_available.py
📚 Learning: 2025-09-20T14:13:33.635Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:11-16
Timestamp: 2025-09-20T14:13:33.635Z
Learning: In the NetAlertX repository with Alpine 3.22 base image, the `python -m venv` command works correctly in the devcontainer setup, likely due to symlink creation in the root Dockerfile that makes `python` available as an alias to `python3`.

Applied to files:

  • test/docker_tests/test_ports_available.py
📚 Learning: 2025-09-20T02:56:24.501Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/devcontainer.json:5-8
Timestamp: 2025-09-20T02:56:24.501Z
Learning: In the NetAlertX devcontainer setup, the final .devcontainer/Dockerfile is generated by combining the root Dockerfile with .devcontainer/resources/devcontainer-Dockerfile using the generate-dockerfile.sh script. The devcontainer.json should reference the generated file, not the root Dockerfile.

Applied to files:

  • test/docker_tests/test_ports_available.py
📚 Learning: 2025-09-20T14:13:33.635Z
Learnt from: adamoutler
Repo: jokob-sk/NetAlertX PR: 1184
File: .devcontainer/Dockerfile:11-16
Timestamp: 2025-09-20T14:13:33.635Z
Learning: In the NetAlertX devcontainer setup, the `python -m venv /opt/venv` command works successfully on Alpine 3.22 despite the typical Alpine behavior of not providing a /usr/bin/python symlink by default. The build completes successfully and pytest runs without issues.

Applied to files:

  • test/docker_tests/test_ports_available.py
🧬 Code graph analysis (1)
test/docker_tests/test_ports_available.py (1)
test/docker_tests/test_container_environment.py (4)
  • _setup_mount_tree (94-149)
  • _build_volume_args (166-176)
  • _run_container (187-279)
  • _assert_contains (283-293)
🪛 Ruff (0.14.2)
test/docker_tests/test_docker_compose_scenarios.py

33-33: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


55-55: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


85-85: Probable insecure usage of temporary file or directory: "/tmp:uid=20211,gid=20211,mode=1700,rw,noexec,nosuid,nodev,async,noatime,nodiratime"

(S108)


152-152: Consider [*cmd, "up"] instead of concatenation

Replace with [*cmd, "up"]

(RUF005)


168-168: subprocess call: check for execution of untrusted input

(S603)


179-179: Consider [*cmd, "logs"] instead of concatenation

Replace with [*cmd, "logs"]

(RUF005)


180-180: subprocess call: check for execution of untrusted input

(S603)


198-198: subprocess call: check for execution of untrusted input

(S603)


210-210: subprocess call: check for execution of untrusted input

(S603)


210-210: Starting a process with a partial executable path

(S607)


215-215: subprocess call: check for execution of untrusted input

(S603)


215-215: Starting a process with a partial executable path

(S607)


230-230: Consider [*cmd, "logs"] instead of concatenation

Replace with [*cmd, "logs"]

(RUF005)


366-366: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


371-371: f-string without any placeholders

Remove extraneous f prefix

(F541)


372-372: f-string without any placeholders

Remove extraneous f prefix

(F541)


373-373: f-string without any placeholders

Remove extraneous f prefix

(F541)


374-374: f-string without any placeholders

Remove extraneous f prefix

(F541)


419-419: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


424-424: f-string without any placeholders

Remove extraneous f prefix

(F541)


425-425: f-string without any placeholders

Remove extraneous f prefix

(F541)


426-426: f-string without any placeholders

Remove extraneous f prefix

(F541)


427-427: f-string without any placeholders

Remove extraneous f prefix

(F541)

test/docker_tests/test_ports_available.py

43-43: subprocess call: check for execution of untrusted input

(S603)


44-44: Starting a process with a partial executable path

(S607)


56-56: subprocess call: check for execution of untrusted input

(S603)


56-56: Starting a process with a partial executable path

(S607)


70-70: Loop control variable target not used within loop body

Rename unused target to _target

(B007)


107-107: Probable insecure usage of temporary file or directory: "/tmp:mode=777"

(S108)


131-131: subprocess call: check for execution of untrusted input

(S603)


153-153: PEP 484 prohibits implicit Optional

Convert to T | None

(RUF013)


157-161: Avoid specifying long messages outside the exception class

(TRY003)


164-164: PEP 484 prohibits implicit Optional

Convert to T | None

(RUF013)


168-172: Avoid specifying long messages outside the exception class

(TRY003)


220-220: Unused function argument: dummy_container

(ARG001)

🔇 Additional comments (2)
test/docker_tests/test_ports_available.py (1)

220-240: LGTM: Fixture usage is correct.

The dummy_container parameter appears unused in the function body, but this is the correct pytest pattern—the fixture's side effect (occupying ports 20211 and 20212) is what the test relies on. The static analysis warning can be safely ignored.

test/docker_tests/test_docker_compose_scenarios.py (1)

291-342: LGTM: Test assertions are now consistent.

The test correctly verifies that a properly configured startup shows success indicators in the mounts table without critical errors or permission issues. The assertions align with the expected behavior.

@adamoutler
Copy link
Collaborator Author

I think CodeRabbit is done @jokob-sk . I'm fine with this if you are.

It does not include fail-fast. Errors will continue until they cause the system to attempt to start, fail to start, and then reboot instead of failing immediately and rebooting. I will rework the tests for a fail fast soon. That would be a separate reworking required.

@adamoutler
Copy link
Collaborator Author

@jokob-sk I realized there were changes to the /Dockerfile already in this so I addressed that request from earlier with making the scripts executable instead of needing to run bash script.sh

@jokob-sk jokob-sk merged commit 71646e1 into netalertx:main Nov 2, 2025
3 checks passed
ingoratsdorf added a commit to ingoratsdorf/NetAlertX that referenced this pull request Nov 2, 2025
commit 90a07c6
Merge: 13341e3 031d810
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Mon Nov 3 08:14:26 2025 +1100

    Merge branch 'main' of https://github.com/jokob-sk/NetAlertX

commit 13341e3
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Mon Nov 3 08:14:15 2025 +1100

    PLG: ARPSCAN prevent duplicates across subnets

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 031d810
Merge: cb69990 b806f84
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Sun Nov 2 22:20:13 2025 +1100

    Merge branch `next_release` into main

commit b806f84
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sun Nov 2 22:16:28 2025 +1100

    BE: invlaid return netalertx#1251

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 7c90c2e
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sun Nov 2 22:12:30 2025 +1100

    BE: spinner + timestamp work netalertx#1251

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit cb69990
Merge: 71646e1 7037cf1
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Sun Nov 2 21:48:27 2025 +1100

    Merge pull request netalertx#1268 from adamoutler/synology-fix

    Fix permissions on Synology

commit 7037cf1
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Nov 2 10:26:21 2025 +0000

    fxi permissions on synology inherited

commit a27ee5c
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sun Nov 2 13:55:51 2025 +1100

    BE: changes  netalertx#1251

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit c3c570e
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sun Nov 2 13:51:17 2025 +1100

    BE: added stateUpdated netalertx#1251

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 71646e1
Merge: e7ed9e0 dde542c
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Sun Nov 2 13:49:39 2025 +1100

    Merge pull request netalertx#1263 from adamoutler/FEAT--Make-Errors-More-Helpful

    Feat: make errors more helpful

commit 2215272
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sun Nov 2 11:57:08 2025 +1100

    BE: short-circuit of name resolution netalertx#1251

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit dde542c
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Nov 2 00:12:50 2025 +0000

    make /services/scripts executable by default

commit 23a0fac
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Nov 1 23:54:54 2025 +0000

    Address Coderabbit issue

commit 2fdecce
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sun Nov 2 09:07:59 2025 +1100

    PLG: NMAPDEV stripping --vlan netalertx#1264

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit db5381d
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Nov 1 15:12:54 2025 -0400

    Update test/docker_tests/test_docker_compose_scenarios.py

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit f1fbc47
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Nov 1 19:04:31 2025 +0000

     coderabbit required fix

commit 2a9d352
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Nov 1 14:57:57 2025 -0400

    Update test/docker_tests/configurations/test_all_docker_composes.sh

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit 51aa3d4
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Nov 1 18:53:07 2025 +0000

    coderabbit

commit 70373b1
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Nov 1 18:18:32 2025 +0000

    Address coderabbit-discoverd issues

commit e7ed9e0
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sat Nov 1 17:58:22 2025 +1100

    BE: logging fix and comments why eve_PendingAlertEmail not cleared

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 79887f0
Merge: a6bc96d ff96d38
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Oct 31 23:59:45 2025 -0400

    Merge branch 'jokob-sk:main' into FEAT--Make-Errors-More-Helpful

commit a6bc96d
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Oct 31 22:47:35 2025 +0000

    Corrections on testing and behaviors

commit 8edef9e
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Oct 31 22:24:31 2025 +0000

    All errors have documentation links

commit 1e63cec
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Oct 31 22:24:08 2025 +0000

    Revise tests. Use docker-compose.yml where possible

commit ff96d38
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 22:09:43 2025 +1100

    DOCS:old docker installation guide

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 537be0f
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 22:01:16 2025 +1100

    BE: typos

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit b89917c
Merge: daea3a2 f42186b
Author: Hosted Weblate <hosted@weblate.org>
Date:   Fri Oct 31 11:55:36 2025 +0100

    Merge branch 'origin/main' into Weblate.

commit daea3a2
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 21:55:15 2025 +1100

    DOCS: WARNING use dockerhub docs

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit b86f636
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 21:46:59 2025 +1100

    Revert "DOCS: clearer local_path instructions"

    This reverts commit dfc64fd.

commit 0b08995
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 21:46:25 2025 +1100

    Revert "DOCS: install refactor work"

    This reverts commit fe69972.

commit f42186b
Merge: 88f889f bc9fb6b
Author: Hosted Weblate <hosted@weblate.org>
Date:   Fri Oct 31 11:10:55 2025 +0100

    Merge branch 'origin/main' into Weblate.

commit bc9fb6b
Author: jeet moh <jeetdevpc@gmail.com>
Date:   Thu Oct 30 13:07:48 2025 +0100

    Translated using Weblate (Persian (fa_FA))

    Currently translated at 0.1% (1 of 762 strings)

    Translation: NetAlertX/core
    Translate-URL: https://hosted.weblate.org/projects/pialert/core/fa_FA/

commit 88f889f
Merge: 533c99e afa257f
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 20:56:36 2025 +1100

    Merge branch 'next_release' of https://github.com/jokob-sk/NetAlertX into next_release

commit 533c99e
Merge: 78ab0fb 64e4586
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 20:45:31 2025 +1100

    LNG: Swedish (sv_sv)

commit afa257f
Merge: 78ab0fb 64e4586
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 20:45:31 2025 +1100

    Merge branch 'next_release' of https://github.com/jokob-sk/NetAlertX into next_release

commit 78ab0fb
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 20:24:13 2025 +1100

    PLG: SNMPDSC typo

commit 64e4586
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 20:24:13 2025 +1100

    PLG: Encode SMTP_PASS using base64 netalertx#1253

commit 2f7d9a0
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 15:02:51 2025 +1100

    PLG: snmpwalk -OXsq clarification netalertx#1231

commit d29700a
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Oct 31 00:07:34 2025 +0000

    New mount test structure.

commit 75072da
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 08:16:54 2025 +1100

    GIT: build dev container from next_release branch

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 19b1fc9
Merge: 63d6410 929eb16
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Fri Oct 31 08:15:12 2025 +1100

    Merge pull request netalertx#1260 from jokob-sk/main

    BE: Devices Tiles SQL syntax error  netalertx#1238

commit 63d6410
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 08:12:38 2025 +1100

    BE: handle missing buildtimestamp.txt

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit b89a44d
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 30 21:05:24 2025 +0000

    Improve startup checks

commit 929eb16
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Thu Oct 30 20:48:38 2025 +0000

    BE: Devices Tiles SQL syntax error  netalertx#1238

commit 8cb1836
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 29 23:49:37 2025 +0000

    Move all check- scripts to /entrypoint.d/ for better organization

commit 512dedf
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 31 06:39:55 2025 +1100

    FE: increase filter debounce to 750ms netalertx#1254

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 2a2782b
Merge: 869f28b b726518
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Thu Oct 30 14:52:34 2025 +1100

    Merge branch 'next_release' of https://github.com/jokob-sk/NetAlertX into next_release

commit b726518
Merge: f81a1b9 274beca
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Thu Oct 30 14:52:19 2025 +1100

    Merge pull request netalertx#1258 from jokob-sk/main

    BE: fix GRAPHQL_PORT

commit 274beca
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Thu Oct 30 14:51:24 2025 +1100

    BE: fix GRAPHQL_PORT

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 869f28b
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Thu Oct 30 14:50:13 2025 +1100

    DOCS: typos

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit f81a1b9
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Thu Oct 30 14:31:22 2025 +1100

    DOCS: Docker guides

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 58fe531
Merge: 50f9277 8da136f
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Thu Oct 30 13:56:17 2025 +1100

    Merge pull request netalertx#1257 from jokob-sk/main

    BE: Remove GraphQL check from healthcheck

commit 8da136f
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Thu Oct 30 13:55:05 2025 +1100

    BE: Remove GraphQL check from healthcheck

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 50f9277
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Thu Oct 30 13:30:23 2025 +1100

    DOCS: Docker guides (GRAPHQL_PORT fix)

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 7ca9d2a
Merge: b76272b 55171e0
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Thu Oct 30 13:16:05 2025 +1100

    Merge pull request netalertx#1256 from adamoutler/next_release

    update docker compose

commit b76272b
Merge: fba5359 22aa995
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Thu Oct 30 13:14:12 2025 +1100

    Merge branch 'next_release' of https://github.com/jokob-sk/NetAlertX into next_release

commit fba5359
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Thu Oct 30 13:14:06 2025 +1100

    DOCS: Docker guides

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 55171e0
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 29 23:29:32 2025 +0000

    update compose

commit 22aa995
Merge: 647defb af80cff
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Thu Oct 30 08:33:06 2025 +1100

    Merge pull request netalertx#1255 from Tweebloesem/patch-2

    Fix typo in PiHole integration guide

commit af80cff
Author: Tweebloesem <139498987+Tweebloesem@users.noreply.github.com>
Date:   Wed Oct 29 22:18:42 2025 +0100

    Fix typo in PiHole integration guide

commit 647defb
Merge: 2148a7f ea5e236
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Wed Oct 29 20:33:42 2025 +1100

    Merge branch 'next_release' of https://github.com/jokob-sk/NetAlertX into next_release

commit 2148a7f
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Wed Oct 29 20:33:32 2025 +1100

    DOCS: Docker guides

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit ea5e236
Merge: 61de637 0079ece
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Wed Oct 29 19:26:36 2025 +1100

    Merge pull request netalertx#1249 from jokob-sk/main

    Sync

commit 0079ece
Merge: 5962312 8d4c7ea
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Wed Oct 29 19:25:32 2025 +1100

    Merge pull request netalertx#1248 from adamoutler/Easy-Permissions

    Easy permissions

commit 61de637
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Wed Oct 29 15:51:31 2025 +1100

    DOCS: Docker guides

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 57f3d6f
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Wed Oct 29 13:26:10 2025 +1100

    DOCS: Security features - fix hierarchy

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 2e76ff1
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Wed Oct 29 13:21:12 2025 +1100

    DOCS: Migration and Security features navigation link

commit 8d4c7ea
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 29 00:32:08 2025 +0000

    less invasive permission changes

commit b4027b6
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 29 00:08:32 2025 +0000

    docker-compose needed for fast container rebuilds

commit b36b3be
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 29 00:08:09 2025 +0000

    Fix permissions messages and test parms

commit 7ddb7d2
Author: Adam Outler <adamoutler@gmail.com>
Date:   Tue Oct 28 23:58:02 2025 +0000

    new method of fixing permissions

commit 40341a8
Merge: 304d4d0 6afa52e
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Wed Oct 29 07:37:55 2025 +1100

    Merge pull request netalertx#1247 from adamoutler/next_release

    Security features overview

commit 304d4d0
Merge: a353acf 4d148f3
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Wed Oct 29 07:33:59 2025 +1100

    Merge branch 'next_release' of https://github.com/jokob-sk/NetAlertX into next_release

commit a353acf
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Wed Oct 29 07:32:56 2025 +1100

    DOCS: builds

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 6afa52e
Author: Adam Outler <adamoutler@gmail.com>
Date:   Tue Oct 28 00:15:12 2025 +0000

    Security features overview

commit 5962312
Merge: 84183f0 3ba4100
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Tue Oct 28 08:31:30 2025 +1100

    Merge pull request netalertx#1235 from adamoutler/hardening-fixes

    Hardening fixes

commit 3ba4100
Author: Adam Outler <adamoutler@gmail.com>
Date:   Mon Oct 27 16:51:17 2025 -0400

    Update install/production-filesystem/entrypoint.sh

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit a6ac492
Author: Adam Outler <adamoutler@gmail.com>
Date:   Mon Oct 27 20:19:17 2025 +0000

    Add APP_CONF_OVERRIDE support

commit 4d148f3
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Mon Oct 27 03:33:50 2025 +0000

    DOCS: wording

commit 9b0f45b
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Mon Oct 27 14:21:17 2025 +1100

    DOCS: migration prep

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 84183f0
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Mon Oct 27 12:58:48 2025 +1100

    LANG: ru_ru updates

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 5dba0f1
Merge: 76419db 816b907
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Mon Oct 27 08:14:16 2025 +1100

    Merge pull request netalertx#1244 from jokob-sk/main

    sync

commit 095372a
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 16:49:28 2025 -0400

    Rename GRAPHQL_PORT to APP_CONF_OVERRIDE

commit d8c2dc0
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 19:58:57 2025 +0000

    Apply coderabit's latest hare-brained idea

commit cfffaf4
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 19:40:17 2025 +0000

    Strengthen tests

commit 01b64cc
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 19:34:28 2025 +0000

    Changes requested by coderabbit.

commit 63c4b0d
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 14:15:12 2025 -0400

    Update .devcontainer/devcontainer.json

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit 5ec35aa
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 18:12:02 2025 +0000

    Build the netalertx-test image on start so tests don't fail

commit ededd39
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 17:53:46 2025 +0000

    Coderabbit fixes

commit 15bc163
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 12:45:42 2025 -0400

    Update install/production-filesystem/services/scripts/check-root.sh

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit 74a67e3
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 16:10:17 2025 +0000

    Added clarifying examples to dockerfile

commit 52b747b
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 15:54:01 2025 +0000

    Remove warnings in devcontainer

commit d2c28f6
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 15:30:03 2025 +0000

    Changes for tests identified by CodeRabbit

commit 816b907
Author: Almaz <almazgamer228@gmail.com>
Date:   Sat Oct 25 09:56:34 2025 +0200

    Translated using Weblate (Russian)

    Currently translated at 100.0% (762 of 762 strings)

    Translation: NetAlertX/core
    Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/

commit fb02774
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 26 00:14:03 2025 +0000

    Fix errors for tests

commit 2663227
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sun Oct 26 11:07:34 2025 +1100

    PLUG: SNMPDSC timeout multiplier netalertx#1231

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit dfc64fd
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sun Oct 26 10:59:42 2025 +1100

    DOCS: clearer local_path instructions

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit b44369a
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sun Oct 26 10:59:05 2025 +1100

    PLUG: 0 in device tiles netalertx#1238

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 8ada2c3
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sun Oct 26 10:58:34 2025 +1100

    BE: 0 in device tiles netalertx#1238

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit c4a041e
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Oct 25 17:58:21 2025 +0000

    Coderabit changes

commit 170aeb0
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sat Oct 25 13:48:56 2025 +1100

    PLUG: SNMPDSC timeout not respected netalertx#1231

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit fe69972
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Sat Oct 25 09:28:03 2025 +1100

    DOCS: install refactor work

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 32f9111
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Oct 24 20:32:50 2025 +0000

    Restore test_safe_builder_unit.py to upstream version (remove local changes)

commit bb35417
Merge: fe69bc4 05890b3
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Sat Oct 25 07:07:12 2025 +1100

    Merge pull request netalertx#1237 from JVKeller/patch-3

    Change branch back to main.

commit fe69bc4
Merge: 6a20128 c278865
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Sat Oct 25 07:06:41 2025 +1100

    Merge pull request netalertx#1236 from AlmazzikDev/patch-1

    Rename CONTRIBUTING to CONTRIBUTING.md

commit 05890b3
Author: rell3k <keller.jeff@gmail.com>
Date:   Fri Oct 24 09:24:01 2025 -0400

    Change branch back to main.

    Forgot to change git clone branch back to main.

commit c278865
Author: Almaz <almaz@weissx.net>
Date:   Fri Oct 24 15:35:18 2025 +0300

    Rename CONTRIBUTING to CONTRIBUTING.md

commit 7f74c2d
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 21:37:11 2025 -0400

    docker compose changes

commit 5a63b72
Merge: 0897c05 6a20128
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 21:19:30 2025 -0400

    Merge main into hardening-fixes

commit 0897c05
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 21:16:15 2025 -0400

    Tidy up output

commit 7a3bf67
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 20:46:39 2025 -0400

    Remove code coverage from repository

commit edd5bd2
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 23:33:04 2025 +0000

    Devcontainer setup

commit 3b7830b
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 21:15:15 2025 +0000

    Add unit tests and updated messages

commit 356caca
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 21:15:02 2025 +0000

    Don't increment sqlite sequence

commit d12ffb3
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 21:04:15 2025 +0000

    Update readme with simple build instructions

commit f70d3f3
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 20:36:04 2025 +0000

    Limiter fix for older kernels

commit 2789946
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 08:36:42 2025 +0000

    use system speedtest, not un-updated & removed script

commit 59c7d7b
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 23 00:27:16 2025 +0000

    Add test dependencies

commit 0851680
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 22 23:51:36 2025 +0000

    Add additional startup checks

commit 1af19fe
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 22 23:51:15 2025 +0000

    Only nginx/python errors in docker logs. no stdout from backend.

commit ce8bb53
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 22 19:48:58 2025 -0400

    Refine devcontainer setup and docker tests

commit 5636a15
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 22 00:02:03 2025 +0000

    Add check permissions script

commit 6a20128
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Wed Oct 22 07:48:50 2025 +1100

    BE: install refactor work

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 05f0837
Author: Adam Outler <adamoutler@gmail.com>
Date:   Tue Oct 21 19:18:59 2025 +0000

    Fix missing storage check

commit 3441f77
Author: Adam Outler <adamoutler@gmail.com>
Date:   Tue Oct 21 19:10:48 2025 +0000

    Fix always fresh install env

commit d6bcb27
Author: Adam Outler <adamoutler@gmail.com>
Date:   Tue Oct 21 19:05:47 2025 +0000

    Missing devcontainer build timestamp

commit 5d7af88
Merge: b916542 6f2e556
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Tue Oct 21 12:35:08 2025 +1100

    Merge pull request netalertx#1230 from adamoutler/hardening

    Feat: Enterprise-Grade Security Hardening and Build Overhaul

commit 6f2e556
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 12:18:16 2025 -0400

    Remove duplicate file replacement logic in update_vendors.sh

    Dang it coderabbit. We expect more of your diffs.

commit ea4c70e
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 12:15:55 2025 -0400

    Update install/production-filesystem/services/scripts/check-first-run-config.sh

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit 5ed46da
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 15:55:28 2025 +0000

    Set caps on actual python3.12

commit 628f35c
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 15:41:57 2025 +0000

    Remove unused pythonpathpath variable

commit 066fecf
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 15:39:54 2025 +0000

    add caps to python instead of scapy.

commit 660f0c2
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 11:37:04 2025 -0400

    Update install/production-filesystem/services/scripts/update_vendors.sh

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit 999feb2
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 11:36:09 2025 -0400

    Update install/production-filesystem/services/scripts/update_vendors.sh

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit 86bf0a3
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 11:35:27 2025 -0400

    Update install/production-filesystem/services/scripts/check-first-run-config.sh

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit 8eab7ee
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 11:33:07 2025 -0400

    Update .devcontainer/scripts/setup.sh

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit 84f1283
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 15:27:55 2025 +0000

    Add novel coderabit no-write database creation

commit dcf250d
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 15:12:27 2025 +0000

    Coderabbit nitpicks.

commit 131c0c0
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 14:28:09 2025 +0000

    Fix fish terminal.  Smarter code completion and other nicities.

commit a58b3e3
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 14:18:07 2025 +0000

    Coderabbit suggestions

commit 14be7a2
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 02:45:19 2025 +0000

    Missing Slash

commit 9b3ddda
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 02:35:57 2025 +0000

    Fix persistent environment issues

commit 1f46f20
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 01:06:42 2025 +0000

    Generate devcontainer configs

commit 80c1459
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 19 00:39:26 2025 +0000

    Final touches on devcontainer

commit 62536e4
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Oct 18 14:07:27 2025 -0400

    Coderabit suggestions

commit 028335c
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Oct 18 13:45:48 2025 -0400

    Coderabit suggestions

commit 7483e46
Merge: c1b573f b916542
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Oct 18 13:23:57 2025 -0400

    Merge remote-tracking branch 'origin/main' into hardening

commit c1b573f
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Oct 18 13:16:35 2025 -0400

    Add some todos

commit d11c9d7
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Oct 17 16:36:48 2025 -0400

    Improve warnings.

commit b916542
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 17 21:33:43 2025 +1100

    BE: DB generate=ing script

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 6da3cfd
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 17 21:33:22 2025 +1100

    FE: docs mikrotik

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit d38e77f
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 17 21:32:53 2025 +1100

    docs

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 18eaee4
Author: jokob-sk <jokob.sk@gmail.com>
Date:   Fri Oct 17 21:32:22 2025 +1100

    FE: lang

    Signed-off-by: jokob-sk <jokob.sk@gmail.com>

commit 59e7463
Author: Safeguard <yo-safeguard@yandex.ru>
Date:   Thu Oct 16 10:55:31 2025 +0200

    Translated using Weblate (Russian)

    Currently translated at 100.0% (762 of 762 strings)

    Translation: NetAlertX/core
    Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/

commit dc44411
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 16 21:49:54 2025 -0400

    Improve mount permissions

commit a3dae08
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 16 19:51:57 2025 -0400

    Fix debian docker start

commit e733f8a
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 16 16:17:37 2025 -0400

    Relay failed status to docker.

commit ad0ddda
Merge: 3686a4a 28e0e4a
Author: Jokob @netalertx <96159884+jokob-sk@users.noreply.github.com>
Date:   Thu Oct 16 12:50:08 2025 +1100

    Merge pull request netalertx#1229 from adamoutler/patch-5

    Add script to regenerate the database from schema

commit 28e0e4a
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 15 20:53:03 2025 -0400

    Fix database regeneration script to use correct file

commit 324cde9
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 15 20:50:42 2025 -0400

    Add script to regenerate the database from schema

    This script recreates the database from schema code and imports the schema into the new database file.

commit f57ec74
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 16 00:09:07 2025 +0000

    Minor alterations to ddevcontainer.

commit de92c95
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 15 18:18:30 2025 -0400

    break apart services, fix startup

commit 3686a4a
Author: anton garcias <isaga.percompartir@gmail.com>
Date:   Mon Oct 13 22:37:42 2025 +0200

    Translated using Weblate (Catalan)

    Currently translated at 100.0% (762 of 762 strings)

    Translation: NetAlertX/core
    Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/

commit 44ba945
Author: Ettore Atalan <atalanttore@googlemail.com>
Date:   Sun Oct 12 22:12:37 2025 +0200

    Translated using Weblate (German)

    Currently translated at 81.3% (620 of 762 strings)

    Translation: NetAlertX/core
    Translate-URL: https://hosted.weblate.org/projects/pialert/core/de/

commit 5109a08
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 12 21:00:27 2025 -0400

    Additional hardening

commit 1be9155
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Oct 12 15:05:20 2025 -0400

    Set container parameters

commit 3bf6ce6
Author: R <15691591183@163.com>
Date:   Sun Oct 12 15:49:48 2025 +0200

    Translated using Weblate (Chinese (Simplified Han script))

    Currently translated at 100.0% (762 of 762 strings)

    Translation: NetAlertX/core
    Translate-URL: https://hosted.weblate.org/projects/pialert/core/zh_Hans/

commit 1532256
Author: Massimo Pissarello <mapi68@gmail.com>
Date:   Sat Oct 11 01:39:43 2025 +0200

    Translated using Weblate (Italian)

    Currently translated at 100.0% (762 of 762 strings)

    Translation: NetAlertX/core
    Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/

commit be73e3a
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 9 20:30:25 2025 -0400

    debian dockerfile completed properly.

commit 016a6ad
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Oct 8 19:55:16 2025 -0400

    Dockerfile.debian building and running

commit 558ab44
Author: Adam Outler <adamoutler@gmail.com>
Date:   Mon Oct 6 23:31:20 2025 +0000

    Minimize differences between devcontainer and production

commit 290b6c6
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Oct 4 18:51:10 2025 +0000

    Remove nohup.out

commit ada9271
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Oct 3 22:12:42 2025 +0000

     all debugging online.

commit 1e04e9f
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Oct 3 00:33:20 2025 +0000

    Remove .git-placeholder, add dockerignore

commit c81a054
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Oct 3 00:08:26 2025 +0000

    Coderabit

commit 33aa849
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Oct 2 21:19:29 2025 +0000

    Debugging operational in vscode

commit 0cd1dc8
Author: Adam Outler <adamoutler@gmail.com>
Date:   Tue Sep 30 22:01:03 2025 -0400

    Scanning Operational with monitoring

commit 044035e
Author: Adam Outler <adamoutler@gmail.com>
Date:   Tue Sep 30 01:55:26 2025 +0000

    Devcontainer overlay

commit dc4848a
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Sep 28 21:59:06 2025 -0400

    Information on default config and entrypoints for debug

commit c6efe5a
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sun Sep 28 17:10:15 2025 -0400

    All services moved to deployed filesystem

commit d182a55
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Sep 27 21:58:00 2025 -0400

    Move filesystem to more generic name & add perms

commit b47df7b
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Sep 27 19:48:36 2025 -0400

    capcheck

commit 46097bb
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Sep 27 19:15:07 2025 -0400

    solid hardened config

commit c5d7480
Merge: 2def3f1 d9feddd
Author: Adam Outler <adamoutler@gmail.com>
Date:   Sat Sep 27 09:00:46 2025 -0400

    Merge branch 'jokob-sk:main' into hardening

commit 2def3f1
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Sep 26 21:01:58 2025 -0400

    Validated  launch on  runner & hardend

commit 2419a26
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Sep 26 17:52:17 2025 +0000

    updated devcontainer dockerfile

commit bad67b2
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Sep 26 17:52:11 2025 +0000

    fix dockerfile error

commit 178fb54
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Sep 26 17:32:58 2025 +0000

    Python up and debuggable

commit b0a6f88
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Sep 26 17:14:20 2025 +0000

    Update gitignore

commit 798d246
Author: Adam Outler <adamoutler@gmail.com>
Date:   Fri Sep 26 11:56:27 2025 +0000

    expand initial filesystem

commit c228d45
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Sep 25 23:03:55 2025 +0000

    Devcontainer operational, services all down

commit dfcc375
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Sep 25 14:10:06 2025 -0400

    Non-root launch

commit 8ed21a8
Author: Adam Outler <adamoutler@gmail.com>
Date:   Thu Sep 25 07:43:42 2025 -0400

    monolithic alpine container

commit 2e694a7
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Sep 24 19:46:11 2025 -0400

    using 4 startup scripts instead of  RC6

commit 29aa884
Author: Adam Outler <adamoutler@gmail.com>
Date:   Wed Sep 24 16:29:15 2025 -0400

    architectural change 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants