From 47d9a9300e1f8a5de6bd29960e86e2afdb8fbcdd Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Sat, 1 Mar 2025 09:44:11 +1100 Subject: [PATCH] docs, MQTT, GH Actions --- .github/workflows/docker_dev.yml | 20 ++++++-------------- .github/workflows/docker_prod.yml | 4 +++- docs/HELPER_SCRIPTS.md | 8 ++++---- docs/ICONS.md | 2 +- docs/REVERSE_DNS.md | 1 - docs/img/netalertx_docs.png | Bin 6026 -> 7716 bytes front/img/netalertx_docs.png | Bin 6026 -> 7716 bytes front/plugins/_publisher_mqtt/config.json | 2 +- front/plugins/_publisher_mqtt/mqtt.py | 4 +--- 9 files changed, 16 insertions(+), 25 deletions(-) diff --git a/.github/workflows/docker_dev.yml b/.github/workflows/docker_dev.yml index 40e74449..a9944e50 100755 --- a/.github/workflows/docker_dev.yml +++ b/.github/workflows/docker_dev.yml @@ -1,4 +1,3 @@ ---- name: docker on: @@ -37,7 +36,7 @@ jobs: - name: Get release version id: get_version - run: echo "::set-output name=version::${{ 'Dev' }}" + run: echo "version=Dev" >> $GITHUB_OUTPUT - name: Create .VERSION file run: echo "${{ steps.get_version.outputs.version }}" >> .VERSION @@ -46,13 +45,13 @@ jobs: id: meta uses: docker/metadata-action@v4 with: - # list of Docker images to use as base name for tags images: | + ghcr.io/jokob-sk/netalertx-dev + ghcr.io/jokob-sk/pi.alert-dev jokobsk/netalertx-dev - # generate Docker tags based on the following events/attributes + jokobsk/pi.alert-dev tags: | type=raw,value=latest - type=schedule type=ref,event=branch type=ref,event=pr type=semver,pattern={{version}} @@ -60,24 +59,20 @@ jobs: type=semver,pattern={{major}} type=sha - - name: Log in to Github Container registry + - name: Log in to Github Container Registry (GHCR) uses: docker/login-action@v3 with: registry: ghcr.io username: jokob-sk password: ${{ secrets.GITHUB_TOKEN }} - - name: Login to DockerHub + - name: Log in to DockerHub if: github.event_name != 'pull_request' uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - # # Disable this after use - # - name: Prune Docker Builder - # run: docker builder prune --force - - name: Build and push uses: docker/build-push-action@v3 with: @@ -86,6 +81,3 @@ jobs: push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - # # ⚠ disable cache if build is failing to download debian packages - # cache-from: type=registry,ref=ghcr.io/jokob-sk/netalertx:buildcache - # cache-to: type=registry,ref=ghcr.io/jokob-sk/netalertx:buildcache,mode=max diff --git a/.github/workflows/docker_prod.yml b/.github/workflows/docker_prod.yml index 3a45c9c4..5d133fd5 100755 --- a/.github/workflows/docker_prod.yml +++ b/.github/workflows/docker_prod.yml @@ -48,8 +48,10 @@ jobs: with: # list of Docker images to use as base name for tags images: | - jokobsk/pi.alert + ghcr.io/jokob-sk/netalertx + ghcr.io/jokob-sk/pi.alert jokobsk/netalertx + jokobsk/pi.alert # generate Docker tags based on the following events/attributes tags: | type=semver,pattern={{version}},value=${{ inputs.version }} diff --git a/docs/HELPER_SCRIPTS.md b/docs/HELPER_SCRIPTS.md index 035e8c87..628ea19b 100755 --- a/docs/HELPER_SCRIPTS.md +++ b/docs/HELPER_SCRIPTS.md @@ -1,6 +1,6 @@ # NetAlertX Community Helper Scripts Overview -This page provides an overview of community-contributed scripts for NetAlertX. These scripts are not maintained by the NetAlertX team and are provided as-is. +This page provides an overview of community-contributed scripts for NetAlertX. These scripts are not actively maintained and are provided as-is. ## Community Scripts @@ -8,14 +8,14 @@ You can find all scripts in this [scripts GitHub folder](https://github.com/joko | Script Name | Description | Author | Version | Release Date | |------------|-------------|--------|---------|--------------| -| **NetAlertX-New-Devices-Checkmk-Script** | Checks for new devices in NetAlertX and reports status to Checkmk. | N/A | 1.0 | 08-Jan-2025 | +| **New Devices Checkmk Script** | Checks for new devices in NetAlertX and reports status to Checkmk. | N/A | 1.0 | 08-Jan-2025 | | **DB Cleanup Script** | Queries and removes old device-related entries from the database. | [laxduke](https://github.com/laxduke) | 1.0 | 23-Dec-2024 | -| **NetAlertX OPNsense DHCP Lease Converter** | Retrieves DHCP lease data from OPNsense and converts it to `dnsmasq` format. | [im-redactd](https://github.com/im-redactd) | 1.0 | 24-Feb-2025 | +| **OPNsense DHCP Lease Converter** | Retrieves DHCP lease data from OPNsense and converts it to `dnsmasq` format. | [im-redactd](https://github.com/im-redactd) | 1.0 | 24-Feb-2025 | ## Important Notes > [!NOTE] > These scripts are community-supplied and not actively maintained. Use at your own discretion. -For detailed usage instructions, refer to each script's documentation. +For detailed usage instructions, refer to each script's documentation in each [scripts GitHub folder](https://github.com/jokob-sk/NetAlertX/tree/main/scripts). diff --git a/docs/ICONS.md b/docs/ICONS.md index 3ac355bb..8db9a9f7 100755 --- a/docs/ICONS.md +++ b/docs/ICONS.md @@ -40,7 +40,7 @@ Copying the HTML code from [Font Awesome](https://fontawesome.com/search?o=r&m=f - The dropdown contains all icons already used in the app for device icons. You might need to navigate away or refresh the page once you add a new icon. -## 🌟 Pro Font Awesome icons +## Font Awesome Pro icons If you own the premium package of Font Awesome icons you can mount it in your Docker container the following way: diff --git a/docs/REVERSE_DNS.md b/docs/REVERSE_DNS.md index 78b02f80..5cd05db8 100755 --- a/docs/REVERSE_DNS.md +++ b/docs/REVERSE_DNS.md @@ -8,7 +8,6 @@ If you are running a DNS server, such as **AdGuard**, set up **Private reverse D > ``` > jokob@Synology-NAS:/$ nslookup 192.168.1.58 > ** server can't find 58.1.168.192.in-addr.arpa: NXDOMAIN -> > ``` > Example 2: Reverse DNS `enabled` diff --git a/docs/img/netalertx_docs.png b/docs/img/netalertx_docs.png index c731346c9babaed27ebebfc70f0bf1699db8dcf4..516e5210defcf38371b2c787ddc51fe91a4a9209 100755 GIT binary patch literal 7716 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