mirror of
https://github.com/mag37/dockcheck.git
synced 2026-04-18 10:27:54 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
68c057e62d | ||
|
|
57650f1673 | ||
|
|
22871442db | ||
|
|
ec09612274 | ||
|
|
5e7d4f0b8a | ||
|
|
57f7580477 | ||
|
|
c63e2441fa | ||
|
|
e4b93d113c | ||
|
|
b2d80d036a | ||
|
|
d80fba750f | ||
|
|
7ce523c37d | ||
|
|
8e444a688f | ||
|
|
ba107a424f | ||
|
|
e4b5aaeb9d |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,5 +1,5 @@
|
|||||||
# ignore users custom notify.sh
|
# ignore users custom notify.sh
|
||||||
/notify.sh
|
/notify*.sh
|
||||||
/urls.list
|
/urls.list
|
||||||
# ignore user config
|
# ignore user config
|
||||||
/dockcheck.config
|
/dockcheck.config
|
||||||
|
|||||||
94
README.md
94
README.md
@@ -20,24 +20,30 @@
|
|||||||
___
|
___
|
||||||
## :bell: Changelog
|
## :bell: Changelog
|
||||||
|
|
||||||
|
- **v0.6.6**: Notify_v2 bugfixes
|
||||||
|
- Clearer readme and error messages
|
||||||
|
- Sourcing templates from either project root or subdirectory
|
||||||
|
- Consistent newline handling
|
||||||
|
- Added (when using `-d`) days old message to notification title
|
||||||
|
- Added ntfy.sh self hosted domain option to config
|
||||||
|
- jq fixes to templates (and properly using $jqbin)
|
||||||
|
- **v0.6.5**: Refactored notification logic. See notify_templates/notify_v2.sh for upgrade steps.
|
||||||
|
- Added helper functions to simplify sourcing files and executing functions if they exist.
|
||||||
|
- Created notify_v2.sh wrapper script.
|
||||||
|
- Simplified and consolidated notification logic within notify_v2.sh.
|
||||||
|
- Added support for notification management via environment variables.
|
||||||
|
- Moved notification secrets to **dockcheck.config**.
|
||||||
|
- Added retries to wget/curl to not get empty responses when github is slow.
|
||||||
|
- **v0.6.4**: Restructured the update process - first pulls all updates, then recreates all containers.
|
||||||
|
- Added logic to skip update check on non-compose containers (unless `-r` option).
|
||||||
|
- Added option `-F` to revert to `compose up -d <ContainerName>` targeting specific container and not the stack.
|
||||||
|
- Also added corresponding label and config-option.
|
||||||
|
- Added markdown formatting to `notify_ntfy-sh.sh` template.
|
||||||
- **v0.6.3**: Some fixes and changes:
|
- **v0.6.3**: Some fixes and changes:
|
||||||
- Stops when a container recreation (compose up -d) fails, also `up`s the whole stack now.
|
- Stops when a container recreation (compose up -d) fails, also `up`s the whole stack now.
|
||||||
- `-M`, Markdown format url-releasenotes in notification (requires template rework, look at gotify!)
|
- `-M`, Markdown format url-releasenotes in notification (requires template rework, look at gotify!)
|
||||||
- Added [addons/DSM/README.md](./addons/DSM/README.md) added for more info Synology DSM info.
|
- Added [addons/DSM/README.md](./addons/DSM/README.md) for more info Synology DSM info.
|
||||||
- Permission checks - graceful exit if no docker permissions + checking if root for pkg-manager.
|
- Permission checks - graceful exit if no docker permissions + checking if root for pkg-manager.
|
||||||
- **v0.6.2**: Style and colour changes, prometheus hotfix, new options:
|
|
||||||
- `-u`, Allow auto self update of dockcheck.sh
|
|
||||||
- `-I`, Print container release URLs in the CLI "choose update" list. (please contribute to `urls.list`)
|
|
||||||
- Extras: `-m`, Monochrome mode now hides the progress bar.
|
|
||||||
- **v0.6.1**: Hotfixes: (try removing set+shopt+shopt if debugging more errors)
|
|
||||||
- xargs/pipefail, removed `-set -e` bash option for now.
|
|
||||||
- unbound variables fixed (hopefully)
|
|
||||||
- dependency installer from pkgmanager rewritten
|
|
||||||
- **v0.6.0**: Refactored a lot of code, cleaner logic and syntax, safer variables.
|
|
||||||
- Safer bash options with `set -euo pipefail`, `shopt -s nullglob` and `failglob`.
|
|
||||||
- Added a `default.conf` for user settings - persistent through updates.
|
|
||||||
- Added `notify_slack.sh` template for slack curl api.
|
|
||||||
|
|
||||||
___
|
___
|
||||||
|
|
||||||
|
|
||||||
@@ -54,10 +60,11 @@ Options:
|
|||||||
-c D Exports metrics as prom file for the prometheus node_exporter. Provide the collector textfile directory.
|
-c D Exports metrics as prom file for the prometheus node_exporter. Provide the collector textfile directory.
|
||||||
-d N Only update to new images that are N+ days old. Lists too recent with +prefix and age. 2xSlower.
|
-d N Only update to new images that are N+ days old. Lists too recent with +prefix and age. 2xSlower.
|
||||||
-e X Exclude containers, separated by comma.
|
-e X Exclude containers, separated by comma.
|
||||||
-f Force stack restart after update. Caution: restarts once for every updated container within stack.
|
-f Force stop+start stack after update. Caution: restarts once for every updated container within stack.
|
||||||
|
-F Only compose up the specific container, not the whole compose stack (useful for master-compose structure).
|
||||||
-h Print this Help.
|
-h Print this Help.
|
||||||
-i Inform - send a preconfigured notification.
|
-i Inform - send a preconfigured notification.
|
||||||
-I Prints custom releasenote urls alongside each container with updates (requires urls.list).
|
-I Prints custom releasenote urls alongside each container with updates in CLI output (requires urls.list).
|
||||||
-l Only update if label is set. See readme.
|
-l Only update if label is set. See readme.
|
||||||
-m Monochrome mode, no printf colour codes and hides progress bar.
|
-m Monochrome mode, no printf colour codes and hides progress bar.
|
||||||
-M Prints custom releasenote urls as markdown (requires template support).
|
-M Prints custom releasenote urls as markdown (requires template support).
|
||||||
@@ -125,11 +132,44 @@ Alternatively create an alias where specific flags and values are set.
|
|||||||
Example `alias dc=dockcheck.sh -p -x 10 -t 3`.
|
Example `alias dc=dockcheck.sh -p -x 10 -t 3`.
|
||||||
|
|
||||||
## :loudspeaker: Notifications
|
## :loudspeaker: Notifications
|
||||||
Trigger with the `-i` flag if `notify.sh` is present and configured.
|
Trigger with the `-i` flag.
|
||||||
|
If `notify.sh` is present and configured, it will be used. Otherwise, `notify_v2.sh` will be enabled.
|
||||||
Will send a list of containers with updates available and a notification when `dockcheck.sh` itself has an update.
|
Will send a list of containers with updates available and a notification when `dockcheck.sh` itself has an update.
|
||||||
Run it scheduled with `-ni` to only get notified when there's updates available!
|
Run it scheduled with `-ni` to only get notified when there's updates available!
|
||||||
|
|
||||||
Use a `notify_X.sh` template file from the **notify_templates** directory, copy it to `notify.sh` alongside the script, modify it to your needs! (notify.sh is added to .gitignore)
|
V2 installation and configuration (tag v0.6.5 or later):
|
||||||
|
Remove or rename `notify.sh` if previously configured using the legacy method.
|
||||||
|
Make certain your project directory is laid out as below. You only need the notify_v2.sh file and any notification templates you wish to enable, but there is no harm in having all of them present.
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── notify_templates/
|
||||||
|
│ ├── notify_DSM.sh
|
||||||
|
│ ├── notify_apprise.sh
|
||||||
|
│ ├── notify_discord.sh
|
||||||
|
│ ├── notify_generic.sh
|
||||||
|
│ ├── notify_gotify.sh
|
||||||
|
│ ├── notify_matrix.sh
|
||||||
|
│ ├── notify_ntfy-sh.sh
|
||||||
|
│ ├── notify_pushbullet.sh
|
||||||
|
│ ├── notify_pushover.sh
|
||||||
|
│ ├── notify_slack.sh
|
||||||
|
│ ├── notify_smtp.sh
|
||||||
|
│ ├── notify_telegram.sh
|
||||||
|
│ └── notify_v2.sh
|
||||||
|
├── dockcheck.config
|
||||||
|
├── dockcheck.sh
|
||||||
|
└── urls.list # optional
|
||||||
|
```
|
||||||
|
If you wish to customize `notify_v2.sh` or the notify templates yourself, you may copy them to your project root directory alongside the main dockcheck.sh script (where they will also be ignored by git).
|
||||||
|
Uncomment and set the NOTIFY_CHANNELS environment variable in `dockcheck.config` to a space separated string of your desired notification channels to enable.
|
||||||
|
Uncomment and set the environment variables related to the enabled notification channels.
|
||||||
|
It is recommended not to make changes directly to the `notify_X.sh` template files within the `notify_templates` subdirectory and instead use only environment variables defined in `dockcheck.config` using this method.
|
||||||
|
|
||||||
|
Legacy installation and configuration:
|
||||||
|
Use a previous version of a `notify_X.sh` template file (tag v0.6.4 or earlier) from the **notify_templates** directory,
|
||||||
|
copy it to `notify.sh` alongside the script, modify it to your needs! (notify.sh is added to .gitignore)
|
||||||
|
|
||||||
|
|
||||||
**Current templates:**
|
**Current templates:**
|
||||||
- Synology [DSM](https://www.synology.com/en-global/dsm)
|
- Synology [DSM](https://www.synology.com/en-global/dsm)
|
||||||
- Email with [mSMTP](https://wiki.debian.org/msmtp) (or deprecated alternative [sSMTP](https://wiki.debian.org/sSMTP))
|
- Email with [mSMTP](https://wiki.debian.org/msmtp) (or deprecated alternative [sSMTP](https://wiki.debian.org/sSMTP))
|
||||||
@@ -204,11 +244,13 @@ See [discussion here](https://github.com/mag37/dockcheck/discussions/145).
|
|||||||
Optionally add labels to compose-files. Currently these are the usable labels:
|
Optionally add labels to compose-files. Currently these are the usable labels:
|
||||||
```
|
```
|
||||||
labels:
|
labels:
|
||||||
mag37.dockcheck.restart-stack: true
|
|
||||||
mag37.dockcheck.update: true
|
mag37.dockcheck.update: true
|
||||||
|
mag37.dockcheck.only-specific-container: true
|
||||||
|
mag37.dockcheck.restart-stack: true
|
||||||
```
|
```
|
||||||
- `mag37.dockcheck.restart-stack: true` works instead of the `-f` option, forcing stop+restart on the whole compose-stack (Caution: Will restart on every updated container within stack).
|
|
||||||
- `mag37.dockcheck.update: true` will when used with the `-l` option only update containers with this label and skip the rest. Will still list updates as usual.
|
- `mag37.dockcheck.update: true` will when used with the `-l` option only update containers with this label and skip the rest. Will still list updates as usual.
|
||||||
|
- `mag37.dockcheck.only-specific-container: true` works instead of the `-F` option, specifying the updated container when doing compose up, like `docker compose up -d homer`.
|
||||||
|
- `mag37.dockcheck.restart-stack: true` works instead of the `-f` option, forcing stop+restart on the whole compose-stack (Caution: Will restart on every updated container within stack).
|
||||||
|
|
||||||
## :roller_coaster: Workaround for non **amd64** / **arm64**
|
## :roller_coaster: Workaround for non **amd64** / **arm64**
|
||||||
`regctl` provides binaries for amd64/arm64, to use on other architecture you could try this workaround.
|
`regctl` provides binaries for amd64/arm64, to use on other architecture you could try this workaround.
|
||||||
@@ -247,17 +289,18 @@ function dchk {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## :warning: `-r flag` disclaimer and warning
|
||||||
|
**Wont auto-update the containers, only their images. (compose is recommended)**
|
||||||
|
`docker run` dont support using new images just by restarting a container.
|
||||||
|
Containers need to be manually stopped, removed and created again to run on the new image.
|
||||||
|
Using the `-r` option together with eg. `-i` and `-n` to just check for updates and send notifications and not update is safe though!
|
||||||
|
|
||||||
## :hammer: Known issues
|
## :hammer: Known issues
|
||||||
- No detailed error feedback (just skip + list what's skipped).
|
- No detailed error feedback (just skip + list what's skipped).
|
||||||
- Not respecting `--profile` options when re-creating the container.
|
- Not respecting `--profile` options when re-creating the container.
|
||||||
- Not working well with containers created by **Portainer**.
|
- Not working well with containers created by **Portainer**.
|
||||||
- **Watchtower** might cause issues due to retagging images when checking for updates (and thereby pulling new images).
|
- **Watchtower** might cause issues due to retagging images when checking for updates (and thereby pulling new images).
|
||||||
|
|
||||||
## :warning: `-r flag` disclaimer and warning
|
|
||||||
**Wont auto-update the containers, only their images. (compose is recommended)**
|
|
||||||
`docker run` dont support using new images just by restarting a container.
|
|
||||||
Containers need to be manually stopped, removed and created again to run on the new image.
|
|
||||||
|
|
||||||
## :wrench: Debugging
|
## :wrench: Debugging
|
||||||
If you hit issues, you could check the output of the `extras/errorCheck.sh` script for clues.
|
If you hit issues, you could check the output of the `extras/errorCheck.sh` script for clues.
|
||||||
Another option is to run the main script with debugging in a subshell `bash -x dockcheck.sh` - if there's a particular container/image that's causing issues you can filter for just that through `bash -x dockcheck.sh nginx`.
|
Another option is to run the main script with debugging in a subshell `bash -x dockcheck.sh` - if there's a particular container/image that's causing issues you can filter for just that through `bash -x dockcheck.sh nginx`.
|
||||||
@@ -269,6 +312,7 @@ dockcheck is created and released under the [GNU GPL v3.0](https://www.gnu.org/l
|
|||||||
|
|
||||||
- [avegy](https://github.com/avegy)
|
- [avegy](https://github.com/avegy)
|
||||||
- [eichhorn](https://github.com/eichhorn)
|
- [eichhorn](https://github.com/eichhorn)
|
||||||
|
- [stepdg](https://github.com/stepdg)
|
||||||
|
|
||||||
___
|
___
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
### Custom user variables
|
### Custom user variables
|
||||||
# Copy this file to "dockcheck.config" to make it active
|
## Copy this file to "dockcheck.config" to make it active
|
||||||
# Can be placed in ~/.config/ or alongside dockcheck.sh
|
## Can be placed in ~/.config/ or alongside dockcheck.sh
|
||||||
#
|
##
|
||||||
# Uncomment and set your preferred configuration variables here
|
## Uncomment and set your preferred configuration variables here
|
||||||
# This will not be replaced on updates
|
## This will not be replaced on updates
|
||||||
|
|
||||||
#Timeout=10 # Set a timeout (in seconds) per container for registry checkups.
|
#Timeout=10 # Set a timeout (in seconds) per container for registry checkups.
|
||||||
#MaxAsync=10 # Set max asynchronous subprocesses, 1 default, 0 to disable.
|
#MaxAsync=10 # Set max asynchronous subprocesses, 1 default, 0 to disable.
|
||||||
@@ -17,8 +17,61 @@
|
|||||||
#DaysOld="5" # Only update to new images that are N+ days old. Lists too recent with +prefix and age. 2xSlower.
|
#DaysOld="5" # Only update to new images that are N+ days old. Lists too recent with +prefix and age. 2xSlower.
|
||||||
#Stopped="-a" # Include stopped containers in the check. (Logic: docker ps -a).
|
#Stopped="-a" # Include stopped containers in the check. (Logic: docker ps -a).
|
||||||
#OnlyLabel=true # Only update if label is set. See readme.
|
#OnlyLabel=true # Only update if label is set. See readme.
|
||||||
#ForceRestartStacks=true # Force stack restart after update. Caution.
|
#ForceRestartStacks=true # Force stop+start stack after update. Caution: restarts once for every updated container within stack.
|
||||||
#DRunUp=true # Allow updating images for docker run, wont update the container.
|
#DRunUp=true # Allow updating images for docker run, wont update the container.
|
||||||
#MonoMode=true # Monochrome mode, no printf colour codes and hides progress bar.
|
#MonoMode=true # Monochrome mode, no printf colour codes and hides progress bar.
|
||||||
#PrintReleaseURL=true # Prints custom releasenote urls alongside each container with updates (requires urls.list)`
|
#PrintReleaseURL=true # Prints custom releasenote urls alongside each container with updates (requires urls.list)`
|
||||||
#PrintMarkdownURL=true # Prints custom releasenote urls as markdown
|
#PrintMarkdownURL=true # Prints custom releasenote urls as markdown
|
||||||
|
#OnlySpecific=true # Only compose up the specific container, not the whole compose. (useful for master-compose structure).
|
||||||
|
|
||||||
|
### Notify settings
|
||||||
|
## All commented values are examples only. Modify as needed.
|
||||||
|
##
|
||||||
|
## Uncomment the line below and specify the notification channels you wish to enable in a space separated string
|
||||||
|
# NOTIFY_CHANNELS="apprise discord DSM generic gotify matrix ntfy-sh pushbullet pushover slack smtp telegram"
|
||||||
|
#
|
||||||
|
## Uncomment to not send notifications when dockcheck itself has updates.
|
||||||
|
# DISABLE_DOCKCHECK_NOTIFICATION=false
|
||||||
|
## Uncomment to not send notifications when notify scripts themselves have updates.
|
||||||
|
# DISABLE_NOTIFY_NOTIFICATION=false
|
||||||
|
#
|
||||||
|
## Apprise configuration variables. Set APPRISE_PAYLOAD to make a CLI call or set APPRISE_URL to make an API request instead.
|
||||||
|
# APPRISE_PAYLOAD='mailto://myemail:mypass@gmail.com
|
||||||
|
# mastodons://{token}@{host}
|
||||||
|
# pbul://o.gn5kj6nfhv736I7jC3cj3QLRiyhgl98b
|
||||||
|
# tgram://{bot_token}/{chat_id}/'
|
||||||
|
# APPRISE_URL="http://apprise.mydomain.tld:1234/notify/apprise"
|
||||||
|
#
|
||||||
|
# DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/<token string>"
|
||||||
|
#
|
||||||
|
# DSM_SENDMAILTO="me@mydomain.com"
|
||||||
|
# DSM_SUBJECTTAG="Email Subject Prefix"
|
||||||
|
#
|
||||||
|
# GOTIFY_DOMAIN="https://gotify.domain.tld"
|
||||||
|
# GOTIFY_TOKEN="token-value"
|
||||||
|
#
|
||||||
|
# MATRIX_ACCESS_TOKEN="token-value"
|
||||||
|
# MATRIX_ROOM_ID="myroom"
|
||||||
|
# MATRIX_SERVER_URL="https://matrix.yourdomain.tld"
|
||||||
|
#
|
||||||
|
## ntfy.sh or your custom domain with no trailing /
|
||||||
|
# NTFY_DOMAIN="ntfy.sh"
|
||||||
|
# NTFY_TOPIC_NAME="YourUniqueTopicName"
|
||||||
|
#
|
||||||
|
# PUSHBULLET_URL="https://api.pushbullet.com/v2/pushes"
|
||||||
|
# PUSHBULLET_TOKEN="token-value"
|
||||||
|
#
|
||||||
|
# PUSHOVER_URL="https://api.pushover.net/1/messages.json"
|
||||||
|
# PUSHOVER_USER_KEY="userkey"
|
||||||
|
# PUSHOVER_TOKEN="token-value"
|
||||||
|
#
|
||||||
|
# SLACK_CHANNEL_ID=mychannel
|
||||||
|
# SLACK_ACCESS_TOKEN=xoxb-token-value
|
||||||
|
#
|
||||||
|
# SMTP_MAIL_FROM="me@mydomain.tld"
|
||||||
|
# SMTP_MAIL_TO="you@yourdomain.tld"
|
||||||
|
# SMTP_SUBJECT_TAG="dockcheck"
|
||||||
|
#
|
||||||
|
# TELEGRAM_CHAT_ID="mychatid"
|
||||||
|
# TELEGRAM_TOKEN="token-value"
|
||||||
|
# TELEGRAM_TOPIC_ID="0"
|
||||||
|
|||||||
158
dockcheck.sh
158
dockcheck.sh
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
VERSION="v0.6.3"
|
VERSION="v0.6.6"
|
||||||
### ChangeNotes: Permission checks, now compose up on whole stack, -M markdown option added.
|
# ChangeNotes: notify_v2 bugfixes - clarify readme and error messages, better sourcing templates, tweaks.
|
||||||
Github="https://github.com/mag37/dockcheck"
|
Github="https://github.com/mag37/dockcheck"
|
||||||
RawUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/dockcheck.sh"
|
RawUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/dockcheck.sh"
|
||||||
|
|
||||||
@@ -14,15 +14,20 @@ ScriptPath="$(readlink -f "$0")"
|
|||||||
ScriptWorkDir="$(dirname "$ScriptPath")"
|
ScriptWorkDir="$(dirname "$ScriptPath")"
|
||||||
|
|
||||||
# Check if there's a new release of the script
|
# Check if there's a new release of the script
|
||||||
LatestRelease="$(curl -s -r 0-50 "$RawUrl" | sed -n "/VERSION/s/VERSION=//p" | tr -d '"')"
|
LatestRelease="$(curl --retry 3 --retry-delay 1 --retry-max-time 10 -s -r 0-50 "$RawUrl" | sed -n "/VERSION/s/VERSION=//p" | tr -d '"')"
|
||||||
LatestChanges="$(curl -s -r 0-200 "$RawUrl" | sed -n "/ChangeNotes/s/# ChangeNotes: //p")"
|
LatestChanges="$(curl --retry 3 --retry-delay 1 --retry-max-time 10 -s -r 0-200 "$RawUrl" | sed -n "/ChangeNotes/s/# ChangeNotes: //p")"
|
||||||
|
|
||||||
|
# Source helper functions
|
||||||
|
source_if_exists() {
|
||||||
|
if [[ -s "$1" ]]; then source "$1"; fi
|
||||||
|
}
|
||||||
|
|
||||||
|
source_if_exists_or_fail() {
|
||||||
|
[[ -s "$1" ]] && source "$1"
|
||||||
|
}
|
||||||
|
|
||||||
# User customizable defaults
|
# User customizable defaults
|
||||||
if [[ -s "${HOME}/.config/dockcheck.config" ]]; then
|
source_if_exists_or_fail "${HOME}/.config/dockcheck.config" || source_if_exists "${ScriptWorkDir}/dockcheck.config"
|
||||||
source "${HOME}/.config/dockcheck.config"
|
|
||||||
elif [[ -s "${ScriptWorkDir}/dockcheck.config" ]]; then
|
|
||||||
source "${ScriptWorkDir}/dockcheck.config"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Help Function
|
# Help Function
|
||||||
Help() {
|
Help() {
|
||||||
@@ -34,10 +39,11 @@ Help() {
|
|||||||
echo "-c Exports metrics as prom file for the prometheus node_exporter. Provide the collector textfile directory."
|
echo "-c Exports metrics as prom file for the prometheus node_exporter. Provide the collector textfile directory."
|
||||||
echo "-d N Only update to new images that are N+ days old. Lists too recent with +prefix and age. 2xSlower."
|
echo "-d N Only update to new images that are N+ days old. Lists too recent with +prefix and age. 2xSlower."
|
||||||
echo "-e X Exclude containers, separated by comma."
|
echo "-e X Exclude containers, separated by comma."
|
||||||
echo "-f Force stack restart after update. Caution: restarts once for every updated container within stack."
|
echo "-f Force stop+start stack after update. Caution: restarts once for every updated container within stack."
|
||||||
|
echo "-F Only compose up the specific container, not the whole compose stack (useful for master-compose structure)."
|
||||||
echo "-h Print this Help."
|
echo "-h Print this Help."
|
||||||
echo "-i Inform - send a preconfigured notification."
|
echo "-i Inform - send a preconfigured notification."
|
||||||
echo "-I Prints custom releasenote urls alongside each container with updates (requires urls.list)."
|
echo "-I Prints custom releasenote urls alongside each container with updates in CLI output (requires urls.list)."
|
||||||
echo "-l Only update if label is set. See readme."
|
echo "-l Only update if label is set. See readme."
|
||||||
echo "-m Monochrome mode, no printf colour codes and hides progress bar."
|
echo "-m Monochrome mode, no printf colour codes and hides progress bar."
|
||||||
echo "-M Prints custom releasenote urls as markdown (requires template support)."
|
echo "-M Prints custom releasenote urls as markdown (requires template support)."
|
||||||
@@ -72,6 +78,8 @@ Stopped=${Stopped:=""}
|
|||||||
CollectorTextFileDirectory=${CollectorTextFileDirectory:-}
|
CollectorTextFileDirectory=${CollectorTextFileDirectory:-}
|
||||||
Exclude=${Exclude:-}
|
Exclude=${Exclude:-}
|
||||||
DaysOld=${DaysOld:-}
|
DaysOld=${DaysOld:-}
|
||||||
|
OnlySpecific=${OnlySpecific:=false}
|
||||||
|
SpecificContainer=${SpecificContainer:=""}
|
||||||
Excludes=()
|
Excludes=()
|
||||||
GotUpdates=()
|
GotUpdates=()
|
||||||
NoUpdates=()
|
NoUpdates=()
|
||||||
@@ -88,13 +96,14 @@ c_blue="\033[0;34m"
|
|||||||
c_teal="\033[0;36m"
|
c_teal="\033[0;36m"
|
||||||
c_reset="\033[0m"
|
c_reset="\033[0m"
|
||||||
|
|
||||||
while getopts "ayfhiIlmMnprsuvc:e:d:t:x:" options; do
|
while getopts "ayfFhiIlmMnprsuvc:e:d:t:x:" options; do
|
||||||
case "${options}" in
|
case "${options}" in
|
||||||
a|y) AutoMode=true ;;
|
a|y) AutoMode=true ;;
|
||||||
c) CollectorTextFileDirectory="${OPTARG}" ;;
|
c) CollectorTextFileDirectory="${OPTARG}" ;;
|
||||||
d) DaysOld=${OPTARG} ;;
|
d) DaysOld=${OPTARG} ;;
|
||||||
e) Exclude=${OPTARG} ;;
|
e) Exclude=${OPTARG} ;;
|
||||||
f) ForceRestartStacks=true ;;
|
f) ForceRestartStacks=true ;;
|
||||||
|
F) OnlySpecific=true ;;
|
||||||
i) Notify=true ;;
|
i) Notify=true ;;
|
||||||
I) PrintReleaseURL=true ;;
|
I) PrintReleaseURL=true ;;
|
||||||
l) OnlyLabel=true ;;
|
l) OnlyLabel=true ;;
|
||||||
@@ -116,14 +125,16 @@ shift "$((OPTIND-1))"
|
|||||||
# Set $1 to a variable for name filtering later
|
# Set $1 to a variable for name filtering later
|
||||||
SearchName="${1:-}"
|
SearchName="${1:-}"
|
||||||
|
|
||||||
|
# Basic notify configuration check
|
||||||
|
if [[ "${Notify}" == true ]] && [[ ! -s "${ScriptWorkDir}/notify.sh" ]] && [[ -z "${NOTIFY_CHANNELS:-}" ]]; then
|
||||||
|
printf "Using v2 notifications with -i flag passed but no notify channels configured in dockcheck.config. This will result in no notifications being sent.\n"
|
||||||
|
fi
|
||||||
|
|
||||||
# Setting up options and sourcing functions
|
# Setting up options and sourcing functions
|
||||||
if [[ "$DontUpdate" == true ]]; then AutoMode=true; fi
|
if [[ "$DontUpdate" == true ]]; then AutoMode=true; fi
|
||||||
if [[ "$MonoMode" == true ]]; then declare c_{red,green,yellow,blue,teal,reset}=""; fi
|
if [[ "$MonoMode" == true ]]; then declare c_{red,green,yellow,blue,teal,reset}=""; fi
|
||||||
if [[ "$Notify" == true ]]; then
|
if [[ "$Notify" == true ]]; then
|
||||||
if [[ -s "${ScriptWorkDir}/notify.sh" ]]; then
|
source_if_exists_or_fail "${ScriptWorkDir}/notify.sh" || source_if_exists_or_fail "${ScriptWorkDir}/notify_templates/notify_v2.sh" || Notify=false
|
||||||
source "${ScriptWorkDir}/notify.sh"
|
|
||||||
else Notify=false
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
if [[ -n "$Exclude" ]]; then
|
if [[ -n "$Exclude" ]]; then
|
||||||
IFS=',' read -ra Excludes <<< "$Exclude"
|
IFS=',' read -ra Excludes <<< "$Exclude"
|
||||||
@@ -144,15 +155,23 @@ if [[ -n "$CollectorTextFileDirectory" ]]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
exec_if_exists() {
|
||||||
|
if [[ $(type -t $1) == function ]]; then "$@"; fi
|
||||||
|
}
|
||||||
|
|
||||||
|
exec_if_exists_or_fail() {
|
||||||
|
[[ $(type -t $1) == function ]] && "$@"
|
||||||
|
}
|
||||||
|
|
||||||
self_update_curl() {
|
self_update_curl() {
|
||||||
cp "$ScriptPath" "$ScriptPath".bak
|
cp "$ScriptPath" "$ScriptPath".bak
|
||||||
if command -v curl &>/dev/null; then
|
if command -v curl &>/dev/null; then
|
||||||
curl -L $RawUrl > "$ScriptPath"; chmod +x "$ScriptPath"
|
curl --retry 3 --retry-delay 1 --retry-max-time 10 -L $RawUrl > "$ScriptPath"; chmod +x "$ScriptPath"
|
||||||
printf "\n%b---%b starting over with the updated version %b---%b\n" "$c_yellow" "$c_teal" "$c_yellow" "$c_reset"
|
printf "\n%b---%b starting over with the updated version %b---%b\n" "$c_yellow" "$c_teal" "$c_yellow" "$c_reset"
|
||||||
exec "$ScriptPath" "${ScriptArgs[@]}" # run the new script with old arguments
|
exec "$ScriptPath" "${ScriptArgs[@]}" # run the new script with old arguments
|
||||||
exit 1 # Exit the old instance
|
exit 1 # Exit the old instance
|
||||||
elif command -v wget &>/dev/null; then
|
elif command -v wget &>/dev/null; then
|
||||||
wget $RawUrl -O "$ScriptPath"; chmod +x "$ScriptPath"
|
wget --waitretry=1 --timeout=15 -t 10 $RawUrl -O "$ScriptPath"; chmod +x "$ScriptPath"
|
||||||
printf "\n%b---%b starting over with the updated version %b---%b\n" "$c_yellow" "$c_teal" "$c_yellow" "$c_reset"
|
printf "\n%b---%b starting over with the updated version %b---%b\n" "$c_yellow" "$c_teal" "$c_yellow" "$c_reset"
|
||||||
exec "$ScriptPath" "${ScriptArgs[@]}" # run the new script with old arguments
|
exec "$ScriptPath" "${ScriptArgs[@]}" # run the new script with old arguments
|
||||||
exit 0 # exit the old instance
|
exit 0 # exit the old instance
|
||||||
@@ -195,9 +214,6 @@ choosecontainers() {
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
printf "\n%bUpdating container(s):%b\n" "$c_blue" "$c_reset"
|
|
||||||
printf "%s\n" "${SelectedUpdates[@]}"
|
|
||||||
printf "\n"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
datecheck() {
|
datecheck() {
|
||||||
@@ -254,9 +270,9 @@ binary_downloader() {
|
|||||||
*) printf "\n%bArchitecture not supported, exiting.%b\n" "$c_red" "$c_reset"; exit 1;;
|
*) printf "\n%bArchitecture not supported, exiting.%b\n" "$c_red" "$c_reset"; exit 1;;
|
||||||
esac
|
esac
|
||||||
GetUrl="${BinaryUrl/TEMP/"$architecture"}"
|
GetUrl="${BinaryUrl/TEMP/"$architecture"}"
|
||||||
if command -v curl &>/dev/null; then curl -L "$GetUrl" > "$ScriptWorkDir/$BinaryName";
|
if command -v curl &>/dev/null; then curl --retry 3 --retry-delay 1 --retry-max-time 10 -L "$GetUrl" > "$ScriptWorkDir/$BinaryName";
|
||||||
elif command -v wget &>/dev/null; then wget "$GetUrl" -O "$ScriptWorkDir/$BinaryName";
|
elif command -v wget &>/dev/null; then wget --waitretry=1 --timeout=15 -t 10 "$GetUrl" -O "$ScriptWorkDir/$BinaryName";
|
||||||
else printf "%s\n" "curl/wget not available - get $BinaryName manually from the repo link, exiting."; exit 1;
|
else printf "\n%bcurl/wget not available - get %s manually from the repo link, exiting.%b" "$c_red" "$BinaryName" "$c_reset"; exit 1;
|
||||||
fi
|
fi
|
||||||
[[ -f "$ScriptWorkDir/$BinaryName" ]] && chmod +x "$ScriptWorkDir/$BinaryName"
|
[[ -f "$ScriptWorkDir/$BinaryName" ]] && chmod +x "$ScriptWorkDir/$BinaryName"
|
||||||
}
|
}
|
||||||
@@ -269,7 +285,7 @@ distro_checker() {
|
|||||||
elif [[ -f /etc/arch-release ]]; then
|
elif [[ -f /etc/arch-release ]]; then
|
||||||
[[ "$isRoot" == true ]] && PkgInstaller="pacman -S" || PkgInstaller="sudo pacman -S"
|
[[ "$isRoot" == true ]] && PkgInstaller="pacman -S" || PkgInstaller="sudo pacman -S"
|
||||||
elif [[ -f /etc/debian_version ]]; then
|
elif [[ -f /etc/debian_version ]]; then
|
||||||
[[ "" == true ]] && PkgInstaller="apt-get install" || PkgInstaller="sudo apt-get install"
|
[[ "$isRoot" == true ]] && PkgInstaller="apt-get install" || PkgInstaller="sudo apt-get install"
|
||||||
elif [[ -f /etc/redhat-release ]]; then
|
elif [[ -f /etc/redhat-release ]]; then
|
||||||
[[ "$isRoot" == true ]] && PkgInstaller="dnf install" || PkgInstaller="sudo dnf install"
|
[[ "$isRoot" == true ]] && PkgInstaller="dnf install" || PkgInstaller="sudo dnf install"
|
||||||
elif [[ -f /etc/SuSE-release ]]; then
|
elif [[ -f /etc/SuSE-release ]]; then
|
||||||
@@ -287,7 +303,7 @@ dependency_check() {
|
|||||||
if command -v "$AppName" &>/dev/null; then export "$AppVar"="$AppName";
|
if command -v "$AppName" &>/dev/null; then export "$AppVar"="$AppName";
|
||||||
elif [[ -f "$ScriptWorkDir/$AppName" ]]; then export "$AppVar"="$ScriptWorkDir/$AppName";
|
elif [[ -f "$ScriptWorkDir/$AppName" ]]; then export "$AppVar"="$ScriptWorkDir/$AppName";
|
||||||
else
|
else
|
||||||
printf "%s\n" "Required dependency %b'%s'%b missing, do you want to install it?\n" "$c_teal" "$AppName" "$c_reset"
|
printf "\nRequired dependency %b'%s'%b missing, do you want to install it?\n" "$c_teal" "$AppName" "$c_reset"
|
||||||
read -r -p "y: With packagemanager (sudo). / s: Download static binary. y/s/[n] " GetBin
|
read -r -p "y: With packagemanager (sudo). / s: Download static binary. y/s/[n] " GetBin
|
||||||
GetBin=${GetBin:-no} # set default to no if nothing is given
|
GetBin=${GetBin:-no} # set default to no if nothing is given
|
||||||
if [[ "$GetBin" =~ [yYsS] ]]; then
|
if [[ "$GetBin" =~ [yYsS] ]]; then
|
||||||
@@ -316,6 +332,9 @@ dependency_check() {
|
|||||||
${!AppVar} "$VerFlag" &> /dev/null || { printf "%s\n" "$AppName is not working - try to remove it and re-download it, exiting."; exit 1; }
|
${!AppVar} "$VerFlag" &> /dev/null || { printf "%s\n" "$AppName is not working - try to remove it and re-download it, exiting."; exit 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependency_check "regctl" "regbin" "https://github.com/regclient/regclient/releases/latest/download/regctl-linux-TEMP"
|
||||||
|
dependency_check "jq" "jqbin" "https://github.com/jqlang/jq/releases/latest/download/jq-linux-TEMP"
|
||||||
|
|
||||||
# Numbered List function
|
# Numbered List function
|
||||||
# if urls.list exists add release note url per line
|
# if urls.list exists add release note url per line
|
||||||
list_options() {
|
list_options() {
|
||||||
@@ -334,12 +353,12 @@ if [[ "$VERSION" != "$LatestRelease" ]]; then
|
|||||||
[[ "$SelfUpdate" =~ [yY] ]] && self_update
|
[[ "$SelfUpdate" =~ [yY] ]] && self_update
|
||||||
elif [[ "$AutoMode" == true ]] && [[ "$AutoSelfUpdate" == true ]]; then self_update;
|
elif [[ "$AutoMode" == true ]] && [[ "$AutoSelfUpdate" == true ]]; then self_update;
|
||||||
else
|
else
|
||||||
[[ "$Notify" == true ]] && { [[ $(type -t dockcheck_notification) == function ]] && dockcheck_notification "$VERSION" "$LatestRelease" "$LatestChanges" || printf "Could not source notification function.\n"; }
|
[[ "$Notify" == true ]] && { exec_if_exists_or_fail dockcheck_notification "$VERSION" "$LatestRelease" "$LatestChanges" || printf "Could not source notification function.\n"; }
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dependency_check "regctl" "regbin" "https://github.com/regclient/regclient/releases/latest/download/regctl-linux-TEMP"
|
# Version check for notify templates
|
||||||
dependency_check "jq" "jqbin" "https://github.com/jqlang/jq/releases/latest/download/jq-linux-TEMP"
|
[[ "$Notify" == true ]] && [[ ! -s "${ScriptWorkDir}/notify.sh" ]] && { exec_if_exists_or_fail notify_update_notification || printf "Could not source notify notification function.\n"; }
|
||||||
|
|
||||||
# Check docker compose binary
|
# Check docker compose binary
|
||||||
docker info &>/dev/null || { printf "\n%bYour current user does not have permissions to the docker socket - may require root / docker group. Exiting.%b\n" "$c_red" "$c_reset"; exit 1; }
|
docker info &>/dev/null || { printf "\n%bYour current user does not have permissions to the docker socket - may require root / docker group. Exiting.%b\n" "$c_red" "$c_reset"; exit 1; }
|
||||||
@@ -385,6 +404,15 @@ check_image() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Skipping non-compose containers unless option is set
|
||||||
|
ContLabels=$(docker inspect "$i" --format '{{json .Config.Labels}}')
|
||||||
|
ContPath=$($jqbin -r '."com.docker.compose.project.working_dir"' <<< "$ContLabels")
|
||||||
|
[[ "$ContPath" == "null" ]] && ContPath=""
|
||||||
|
if [[ -z "$ContPath" ]] && [[ "$DRunUp" == false ]]; then
|
||||||
|
printf "%s\n" "NoUpdates !$i - not checked, no compose file"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
local NoUpdates GotUpdates GotErrors
|
local NoUpdates GotUpdates GotErrors
|
||||||
ImageId=$(docker inspect "$i" --format='{{.Image}}')
|
ImageId=$(docker inspect "$i" --format='{{.Image}}')
|
||||||
RepoUrl=$(docker inspect "$i" --format='{{.Config.Image}}')
|
RepoUrl=$(docker inspect "$i" --format='{{.Config.Image}}')
|
||||||
@@ -409,7 +437,7 @@ check_image() {
|
|||||||
# Make required functions and variables available to subprocesses
|
# Make required functions and variables available to subprocesses
|
||||||
export -f check_image datecheck
|
export -f check_image datecheck
|
||||||
export Excludes_string="${Excludes[*]:-}" # Can only export scalar variables
|
export Excludes_string="${Excludes[*]:-}" # Can only export scalar variables
|
||||||
export t_out regbin RepoUrl DaysOld
|
export t_out regbin RepoUrl DaysOld DRunUp jqbin
|
||||||
|
|
||||||
# Check for POSIX xargs with -P option, fallback without async
|
# Check for POSIX xargs with -P option, fallback without async
|
||||||
if (echo "test" | xargs -P 2 >/dev/null 2>&1) && [[ "$MaxAsync" != 0 ]]; then
|
if (echo "test" | xargs -P 2 >/dev/null 2>&1) && [[ "$MaxAsync" != 0 ]]; then
|
||||||
@@ -447,11 +475,7 @@ unset IFS
|
|||||||
|
|
||||||
# Run the prometheus exporter function
|
# Run the prometheus exporter function
|
||||||
if [[ -n "${CollectorTextFileDirectory:-}" ]]; then
|
if [[ -n "${CollectorTextFileDirectory:-}" ]]; then
|
||||||
if type -t prometheus_exporter &>/dev/null; then
|
exec_if_exists_or_fail prometheus_exporter ${#NoUpdates[@]} ${#GotUpdates[@]} ${#GotErrors[@]} || printf "%s\n" "Could not source prometheus exporter function."
|
||||||
prometheus_exporter ${#NoUpdates[@]} ${#GotUpdates[@]} ${#GotErrors[@]}
|
|
||||||
else
|
|
||||||
printf "%s\n" "Could not source prometheus exporter function."
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Define how many updates are available
|
# Define how many updates are available
|
||||||
@@ -471,7 +495,7 @@ if [[ -n ${GotUpdates[*]:-} ]]; then
|
|||||||
printf "\n%bContainers with updates available:%b\n" "$c_yellow" "$c_reset"
|
printf "\n%bContainers with updates available:%b\n" "$c_yellow" "$c_reset"
|
||||||
if [[ -s "$ScriptWorkDir/urls.list" ]] && [[ "$PrintReleaseURL" == true ]]; then releasenotes; else Updates=("${GotUpdates[@]}"); fi
|
if [[ -s "$ScriptWorkDir/urls.list" ]] && [[ "$PrintReleaseURL" == true ]]; then releasenotes; else Updates=("${GotUpdates[@]}"); fi
|
||||||
[[ "$AutoMode" == false ]] && list_options || printf "%s\n" "${Updates[@]}"
|
[[ "$AutoMode" == false ]] && list_options || printf "%s\n" "${Updates[@]}"
|
||||||
[[ "$Notify" == true ]] && { type -t send_notification &>/dev/null && send_notification "${GotUpdates[@]}" || printf "Could not source notification function.\n"; }
|
[[ "$Notify" == true ]] && { exec_if_exists_or_fail send_notification "${GotUpdates[@]}" || printf "\nCould not source notification function.\n"; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Optionally get updates if there's any
|
# Optionally get updates if there's any
|
||||||
@@ -483,10 +507,41 @@ if [[ -n "${GotUpdates:-}" ]]; then
|
|||||||
SelectedUpdates=( "${GotUpdates[@]}" )
|
SelectedUpdates=( "${GotUpdates[@]}" )
|
||||||
fi
|
fi
|
||||||
if [[ "$DontUpdate" == false ]]; then
|
if [[ "$DontUpdate" == false ]]; then
|
||||||
|
printf "\n%bUpdating container(s):%b\n" "$c_blue" "$c_reset"
|
||||||
|
printf "%s\n" "${SelectedUpdates[@]}"
|
||||||
|
|
||||||
NumberofUpdates="${#SelectedUpdates[@]}"
|
NumberofUpdates="${#SelectedUpdates[@]}"
|
||||||
|
|
||||||
CurrentQue=0
|
CurrentQue=0
|
||||||
for i in "${SelectedUpdates[@]}"
|
for i in "${SelectedUpdates[@]}"; do
|
||||||
do
|
((CurrentQue+=1))
|
||||||
|
printf "\n%bNow updating (%s/%s): %b%s%b\n" "$c_teal" "$CurrentQue" "$NumberofUpdates" "$c_blue" "$i" "$c_reset"
|
||||||
|
ContLabels=$(docker inspect "$i" --format '{{json .Config.Labels}}')
|
||||||
|
ContImage=$(docker inspect "$i" --format='{{.Config.Image}}')
|
||||||
|
ContPath=$($jqbin -r '."com.docker.compose.project.working_dir"' <<< "$ContLabels")
|
||||||
|
[[ "$ContPath" == "null" ]] && ContPath=""
|
||||||
|
ContUpdateLabel=$($jqbin -r '."mag37.dockcheck.update"' <<< "$ContLabels")
|
||||||
|
[[ "$ContUpdateLabel" == "null" ]] && ContUpdateLabel=""
|
||||||
|
# Checking if Label Only -option is set, and if container got the label
|
||||||
|
[[ "$OnlyLabel" == true ]] && { [[ "$ContUpdateLabel" != true ]] && { echo "No update label, skipping."; continue; } }
|
||||||
|
|
||||||
|
# Checking if compose-values are empty - hence started with docker run
|
||||||
|
if [[ -z "$ContPath" ]]; then
|
||||||
|
if [[ "$DRunUp" == true ]]; then
|
||||||
|
docker pull "$ContImage"
|
||||||
|
printf "%s\n" "$i got a new image downloaded, rebuild manually with preferred 'docker run'-parameters"
|
||||||
|
else
|
||||||
|
printf "\n%b%s%b has no compose labels, probably started with docker run - %bskipping%b\n\n" "$c_yellow" "$i" "$c_reset" "$c_yellow" "$c_reset"
|
||||||
|
fi
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
docker pull "$ContImage" || { printf "\n%bDocker error, exiting!%b\n" "$c_red" "$c_reset" ; exit 1; }
|
||||||
|
done
|
||||||
|
printf "\n%bDone pulling updates. %bRecreating updated containers.%b\n" "$c_green" "$c_blue" "$c_reset"
|
||||||
|
|
||||||
|
CurrentQue=0
|
||||||
|
for i in "${SelectedUpdates[@]}"; do
|
||||||
((CurrentQue+=1))
|
((CurrentQue+=1))
|
||||||
unset CompleteConfs
|
unset CompleteConfs
|
||||||
# Extract labels and metadata
|
# Extract labels and metadata
|
||||||
@@ -504,17 +559,12 @@ if [[ -n "${GotUpdates:-}" ]]; then
|
|||||||
[[ "$ContUpdateLabel" == "null" ]] && ContUpdateLabel=""
|
[[ "$ContUpdateLabel" == "null" ]] && ContUpdateLabel=""
|
||||||
ContRestartStack=$($jqbin -r '."mag37.dockcheck.restart-stack"' <<< "$ContLabels")
|
ContRestartStack=$($jqbin -r '."mag37.dockcheck.restart-stack"' <<< "$ContLabels")
|
||||||
[[ "$ContRestartStack" == "null" ]] && ContRestartStack=""
|
[[ "$ContRestartStack" == "null" ]] && ContRestartStack=""
|
||||||
|
ContOnlySpecific=$($jqbin -r '."mag37.dockcheck.only-specific-container"' <<< "$ContLabels")
|
||||||
|
[[ "$ContOnlySpecific" == "null" ]] && ContRestartStack=""
|
||||||
|
|
||||||
# Checking if compose-values are empty - hence started with docker run
|
# Checking if compose-values are empty - hence started with docker run
|
||||||
if [[ -z "$ContPath" ]]; then
|
[[ -z "$ContPath" ]] && continue
|
||||||
if [[ "$DRunUp" == true ]]; then
|
|
||||||
docker pull "$ContImage"
|
|
||||||
printf "%s\n" "$i got a new image downloaded, rebuild manually with preferred 'docker run'-parameters"
|
|
||||||
else
|
|
||||||
printf "\n%b%s%b has no compose labels, probably started with docker run - %bskipping%b\n\n" "$c_yellow" "$i" "$c_reset" "$c_yellow" "$c_reset"
|
|
||||||
fi
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
# cd to the compose-file directory to account for people who use relative volumes
|
# cd to the compose-file directory to account for people who use relative volumes
|
||||||
cd "$ContPath" || { printf "\n%bPath error - skipping%b %s" "$c_red" "$c_reset" "$i"; continue; }
|
cd "$ContPath" || { printf "\n%bPath error - skipping%b %s" "$c_red" "$c_reset" "$i"; continue; }
|
||||||
## Reformatting path + multi compose
|
## Reformatting path + multi compose
|
||||||
@@ -523,22 +573,22 @@ if [[ -n "${GotUpdates:-}" ]]; then
|
|||||||
else
|
else
|
||||||
CompleteConfs=$(for conf in ${ContConfigFile//,/ }; do printf -- "-f %s/%s " "$ContPath" "$conf"; done)
|
CompleteConfs=$(for conf in ${ContConfigFile//,/ }; do printf -- "-f %s/%s " "$ContPath" "$conf"; done)
|
||||||
fi
|
fi
|
||||||
printf "\n%bNow updating (%s/%s): %b%s%b\n" "$c_teal" "$CurrentQue" "$NumberofUpdates" "$c_blue" "$i" "$c_reset"
|
|
||||||
# Checking if Label Only -option is set, and if container got the label
|
|
||||||
[[ "$OnlyLabel" == true ]] && { [[ "$ContUpdateLabel" != true ]] && { echo "No update label, skipping."; continue; } }
|
|
||||||
docker pull "$ContImage" || { printf "\n%bDocker error, exiting!%b\n" "$c_red" "$c_reset" ; exit 1; }
|
|
||||||
# Check if the container got an environment file set and reformat it
|
# Check if the container got an environment file set and reformat it
|
||||||
ContEnvs=""
|
ContEnvs=""
|
||||||
if [[ -n "$ContEnv" ]]; then ContEnvs=$(for env in ${ContEnv//,/ }; do printf -- "--env-file %s " "$env"; done); fi
|
if [[ -n "$ContEnv" ]]; then ContEnvs=$(for env in ${ContEnv//,/ }; do printf -- "--env-file %s " "$env"; done); fi
|
||||||
|
# Set variable when compose up should only target the specific container, not the stack
|
||||||
|
if [[ $OnlySpecific == true ]] || [[ $ContOnlySpecific == true ]]; then SpecificContainer="$ContName"; fi
|
||||||
|
|
||||||
|
printf "\n%bNow recreating (%s/%s): %b%s%b\n" "$c_teal" "$CurrentQue" "$NumberofUpdates" "$c_blue" "$i" "$c_reset"
|
||||||
# Check if the whole stack should be restarted
|
# Check if the whole stack should be restarted
|
||||||
if [[ "$ContRestartStack" == true ]] || [[ "$ForceRestartStacks" == true ]]; then
|
if [[ "$ContRestartStack" == true ]] || [[ "$ForceRestartStacks" == true ]]; then
|
||||||
${DockerBin} ${CompleteConfs} stop; ${DockerBin} ${CompleteConfs} ${ContEnvs} up -d
|
${DockerBin} ${CompleteConfs} stop; ${DockerBin} ${CompleteConfs} ${ContEnvs} up -d || { printf "\n%bDocker error, exiting!%b\n" "$c_red" "$c_reset" ; exit 1; }
|
||||||
else
|
else
|
||||||
${DockerBin} ${CompleteConfs} ${ContEnvs} up -d || { printf "\n%bDocker error, exiting!%b\n" "$c_red" "$c_reset" ; exit 1; }
|
${DockerBin} ${CompleteConfs} ${ContEnvs} up -d ${SpecificContainer} || { printf "\n%bDocker error, exiting!%b\n" "$c_red" "$c_reset" ; exit 1; }
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if [[ "$AutoPrune" == false ]] && [[ "$AutoMode" == false ]]; then printf "\n"; read -rep "Would you like to prune dangling images? y/[n]: " AutoPrune; fi
|
if [[ "$AutoPrune" == false ]] && [[ "$AutoMode" == false ]]; then printf "\n"; read -rep "Would you like to prune dangling images? y/[n]: " AutoPrune; fi
|
||||||
if [[ "$AutoPrune" == true ]] || [[ "$AutoPrune" =~ [yY] ]]; then docker image prune -f; fi
|
if [[ "$AutoPrune" == true ]] || [[ "$AutoPrune" =~ [yY] ]]; then printf "\n Auto pruning.."; docker image prune -f; fi
|
||||||
printf "\n%bAll done!%b\n" "$c_green" "$c_reset"
|
printf "\n%bAll done!%b\n" "$c_green" "$c_reset"
|
||||||
else
|
else
|
||||||
printf "\nNo updates installed, exiting.\n"
|
printf "\nNo updates installed, exiting.\n"
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_DSM_VERSION="v0.1"
|
NOTIFY_DSM_VERSION="v0.2"
|
||||||
# INFO: ssmtp is deprecated - consider to use msmtp instead.
|
# INFO: ssmtp is deprecated - consider to use msmtp instead.
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snipppet.
|
|
||||||
# mSMTP/sSMTP has to be installed and configured manually.
|
# mSMTP/sSMTP has to be installed and configured manually.
|
||||||
# The existing DSM Notification Email configuration will be used automatically.
|
# The existing DSM Notification Email configuration will be used automatically.
|
||||||
# Modify to your liking - changing SendMailTo and Subject and content.
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set DSM_SENDMAILTO and DSM_SUBJECTTAG in your dockcheck.config file.
|
||||||
|
|
||||||
MSMTP=$(which msmtp)
|
MSMTP=$(which msmtp)
|
||||||
SSMTP=$(which ssmtp)
|
SSMTP=$(which ssmtp)
|
||||||
@@ -18,18 +19,17 @@ else
|
|||||||
echo "No msmtp or ssmtp binary found in PATH: $PATH" ; exit 1
|
echo "No msmtp or ssmtp binary found in PATH: $PATH" ; exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
FromHost=$(hostname)
|
trigger_DSM_notification() {
|
||||||
|
|
||||||
trigger_notification() {
|
|
||||||
CfgFile="/usr/syno/etc/synosmtp.conf"
|
CfgFile="/usr/syno/etc/synosmtp.conf"
|
||||||
|
|
||||||
# User variables:
|
# User variables:
|
||||||
# Automatically sends to your usual destination for synology DSM notification emails.
|
# Automatically sends to your usual destination for synology DSM notification emails.
|
||||||
# You can also manually override by assigning something else to SendMailTo below.
|
# You can also manually override by assigning something else to DSM_SENDMAILTO in dockcheck.config.
|
||||||
SendMailTo=$(grep 'eventmail1' $CfgFile | sed -n 's/.*"\([^"]*\)".*/\1/p')
|
SendMailTo=${DSM_SENDMAILTO:-$(grep 'eventmail1' $CfgFile | sed -n 's/.*"\([^"]*\)".*/\1/p')}
|
||||||
#SendMailTo="me@mydomain.com"
|
# e.g. DSM_SENDMAILTO="me@mydomain.com"
|
||||||
|
|
||||||
SubjectTag=$(grep 'eventsubjectprefix' $CfgFile | sed -n 's/.*"\([^"]*\)".*/\1/p')
|
SubjectTag=${DSM_SUBJECTTAG:-$(grep 'eventsubjectprefix' $CfgFile | sed -n 's/.*"\([^"]*\)".*/\1/p')}
|
||||||
|
# e.g. DSM_SUBJECTTAG="Email Subject Prefix"
|
||||||
SenderName=$(grep 'smtp_from_name' $CfgFile | sed -n 's/.*"\([^"]*\)".*/\1/p')
|
SenderName=$(grep 'smtp_from_name' $CfgFile | sed -n 's/.*"\([^"]*\)".*/\1/p')
|
||||||
SenderMail=$(grep 'smtp_from_mail' $CfgFile | sed -n 's/.*"\([^"]*\)".*/\1/p')
|
SenderMail=$(grep 'smtp_from_mail' $CfgFile | sed -n 's/.*"\([^"]*\)".*/\1/p')
|
||||||
SenderMail=${SenderMail:-$(grep 'eventmail1' $CfgFile | sed -n 's/.*"\([^"]*\)".*/\1/p')}
|
SenderMail=${SenderMail:-$(grep 'eventmail1' $CfgFile | sed -n 's/.*"\([^"]*\)".*/\1/p')}
|
||||||
@@ -38,7 +38,7 @@ $MailPkg $SendMailTo << __EOF
|
|||||||
From: "$SenderName" <$SenderMail>
|
From: "$SenderName" <$SenderMail>
|
||||||
date:$(date -R)
|
date:$(date -R)
|
||||||
To: <$SendMailTo>
|
To: <$SendMailTo>
|
||||||
Subject: $SubjectTag $MessageTitle $FromHost
|
Subject: $SubjectTag $MessageTitle
|
||||||
Content-Type: text/plain; charset=UTF-8; format=flowed
|
Content-Type: text/plain; charset=UTF-8; format=flowed
|
||||||
Content-Transfer-Encoding: 7bit
|
Content-Transfer-Encoding: 7bit
|
||||||
|
|
||||||
@@ -48,35 +48,3 @@ __EOF
|
|||||||
# This ensures DSM's container manager will also see the update
|
# This ensures DSM's container manager will also see the update
|
||||||
/var/packages/ContainerManager/target/tool/image_upgradable_checker
|
/var/packages/ContainerManager/target/tool/image_upgradable_checker
|
||||||
}
|
}
|
||||||
|
|
||||||
send_notification() {
|
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
|
||||||
|
|
||||||
printf "\nSending email notification.\n"
|
|
||||||
|
|
||||||
MessageTitle="Updates available on"
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "🐋 Containers on $FromHost with updates available:\n\n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending email dockcheck notification.\n"
|
|
||||||
|
|
||||||
MessageTitle="New version of dockcheck available on"
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "Installed version: $1\nLatest version: $2\n\nChangenotes: $3\n"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_DSM.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_DSM_VERSION/s/NOTIFY_DSM_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_DSM_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_DSM.sh update avialable:\n $NOTIFY_DSM_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,55 +1,32 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_APPRISE_VERSION="v0.1"
|
NOTIFY_APPRISE_VERSION="v0.2"
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snippet.
|
|
||||||
# Required receiving services must already be set up.
|
# Required receiving services must already be set up.
|
||||||
# Modify to fit your setup - if API, set AppriseURL to your Apprise ip/domain.
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set APPRISE_PAYLOAD in your dockcheck.config file.
|
||||||
|
# If API, set APPRISE_URL instead.
|
||||||
|
|
||||||
FromHost=$(hostname)
|
if [[ -z "${APPRISE_PAYLOAD:-}" ]] && [[ -z "${APPRISE_URL:-}" ]]; then
|
||||||
|
printf "Apprise notification channel enabled, but required configuration variables are missing. Apprise notifications will not be sent.\n"
|
||||||
|
|
||||||
trigger_notification() {
|
remove_channel apprise
|
||||||
|
fi
|
||||||
|
|
||||||
### Modify to fit your setup:
|
trigger_apprise_notification() {
|
||||||
|
|
||||||
|
if [[ -n "${APPRISE_PAYLOAD:-}" ]]; then
|
||||||
apprise -vv -t "$MessageTitle" -b "$MessageBody" \
|
apprise -vv -t "$MessageTitle" -b "$MessageBody" \
|
||||||
mailto://myemail:mypass@gmail.com \
|
${APPRISE_PAYLOAD}
|
||||||
mastodons://{token}@{host} \
|
|
||||||
pbul://o.gn5kj6nfhv736I7jC3cj3QLRiyhgl98b \
|
|
||||||
tgram://{bot_token}/{chat_id}/
|
|
||||||
|
|
||||||
### If you use the Apprise-API - Comment out the apprise command above.
|
|
||||||
### Uncomment the AppriseURL and the curl-line below:
|
|
||||||
# AppriseURL="http://apprise.mydomain.tld:1234/notify/apprise"
|
|
||||||
# curl -X POST -F "title=$MessageTitle" -F "body=$MessageBody" -F "tags=all" $AppriseURL
|
|
||||||
}
|
|
||||||
|
|
||||||
send_notification() {
|
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
|
||||||
|
|
||||||
printf "\nSending Apprise notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - updates available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "🐋 Containers on $FromHost with updates available:\n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending Apprise dockcheck notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - New version of dockcheck available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "Installed version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_apprise.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_APPRISE_VERSION/s/NOTIFY_APPRISE_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_APPRISE_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_apprise.sh update avialable:\n $NOTIFY_APPRISE_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
trigger_notification
|
# e.g. APPRISE_PAYLOAD='mailto://myemail:mypass@gmail.com
|
||||||
|
# mastodons://{token}@{host}
|
||||||
|
# pbul://o.gn5kj6nfhv736I7jC3cj3QLRiyhgl98b
|
||||||
|
# tgram://{bot_token}/{chat_id}/'
|
||||||
|
|
||||||
|
if [[ -n "${APPRISE_URL:-}" ]]; then
|
||||||
|
AppriseURL="${APPRISE_URL}"
|
||||||
|
curl -X POST -F "title=$MessageTitle" -F "body=$MessageBody" -F "tags=all" $AppriseURL # e.g. APPRISE_URL=http://apprise.mydomain.tld:1234/notify/apprise
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
@@ -1,43 +1,24 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_DISCORD_VERSION="v0.1"
|
NOTIFY_DISCORD_VERSION="v0.3"
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snippet.
|
|
||||||
# Required receiving services must already be set up.
|
# Required receiving services must already be set up.
|
||||||
# Modify to fit your setup - set DiscordWebhookUrl
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set DISCORD_WEBHOOK_URL in your dockcheck.config file.
|
||||||
|
|
||||||
FromHost=$(hostname)
|
if [[ -z "${DISCORD_WEBHOOK_URL:-}" ]]; then
|
||||||
|
printf "Discord notification channel enabled, but required configuration variables are missing. Discord notifications will not be sent.\n"
|
||||||
|
|
||||||
trigger_notification() {
|
remove_channel discord
|
||||||
# Modify to fit your setup:
|
fi
|
||||||
DiscordWebhookUrl="PasteYourFullDiscordWebhookURL"
|
|
||||||
|
|
||||||
MsgBody="{\"username\":\"$FromHost\",\"content\":\"$MessageBody\"}"
|
trigger_discord_notification() {
|
||||||
curl -sS -o /dev/null --fail -X POST -H "Content-Type: application/json" -d "$MsgBody" "$DiscordWebhookUrl"
|
DiscordWebhookUrl="${DISCORD_WEBHOOK_URL}" # e.g. DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/<token string>
|
||||||
}
|
|
||||||
|
JsonData=$( "$jqbin" -n \
|
||||||
send_notification() {
|
--arg username "$FromHost" \
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
--arg body "$MessageBody" \
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
'{"username": $username, "content": $body}' )
|
||||||
|
|
||||||
printf "\nSending Discord notification\n"
|
curl -sS -o /dev/null --fail -X POST -H "Content-Type: application/json" -d "$JsonData" "$DiscordWebhookUrl"
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
MessageBody="🐋 Containers on $FromHost with updates available: \n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending Discord dockcheck notification\n"
|
|
||||||
MessageBody="$FromHost - New version of dockcheck available: \n Installed version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_discord.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_DISCORD_VERSION/s/NOTIFY_DISCORD_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_DISCORD_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_discord.sh update avialable:\n $NOTIFY_DISCORD_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,44 +1,9 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_GENERIC_VERSION="v0.1"
|
NOTIFY_GENERIC_VERSION="v0.2"
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snippet.
|
|
||||||
# generic sample, the "Hello World" of notification addons
|
# generic sample, the "Hello World" of notification addons
|
||||||
|
|
||||||
FromHost=$(hostname)
|
trigger_generic_notification() {
|
||||||
|
|
||||||
trigger_notification() {
|
|
||||||
# Modify to fit your setup:
|
|
||||||
printf "\n$MessageTitle\n"
|
printf "\n$MessageTitle\n"
|
||||||
printf "\n$MessageBody\n"
|
printf "\n$MessageBody\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
send_notification() {
|
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
|
||||||
|
|
||||||
# platform specific notification code would go here
|
|
||||||
printf "\n%bGeneric notification addon:%b" "$c_green" "$c_reset"
|
|
||||||
MessageTitle="$FromHost - updates available."
|
|
||||||
printf -v MessageBody "🐋 Containers on $FromHost with updates available:\n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nGeneric dockcheck notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - New version of dockcheck available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "Installed version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_generic.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_GENERIC_VERSION/s/NOTIFY_GENERIC_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_GENERIC_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_generic.sh update avialable:\n $NOTIFY_GENERIC_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,16 +1,20 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_GOTIFY_VERSION="v0.2"
|
NOTIFY_GOTIFY_VERSION="v0.3"
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snippet.
|
|
||||||
# Required receiving services must already be set up.
|
# Required receiving services must already be set up.
|
||||||
# Modify to fit your setup - set GotifyUrl and GotifyToken.
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set GOTIFY_TOKEN and GOTIFY_DOMAIN in your dockcheck.config file.
|
||||||
|
|
||||||
FromHost=$(hostname)
|
if [[ -z "${GOTIFY_TOKEN:-}" ]] || [[ -z "${GOTIFY_DOMAIN:-}" ]]; then
|
||||||
|
printf "Gotify notification channel enabled, but required configuration variables are missing. Gotify notifications will not be sent.\n"
|
||||||
|
|
||||||
trigger_notification() {
|
remove_channel gotify
|
||||||
# Modify to fit your setup:
|
fi
|
||||||
GotifyToken="Your Gotify token here"
|
|
||||||
GotifyUrl="https://api.gotify/message?token=${GotifyToken}"
|
trigger_gotify_notification() {
|
||||||
|
GotifyToken="${GOTIFY_TOKEN}" # e.g. GOTIFY_TOKEN=token-value
|
||||||
|
GotifyUrl="${GOTIFY_DOMAIN}/message?token=${GotifyToken}" # e.g. GOTIFY_URL=https://gotify.domain.tld
|
||||||
|
|
||||||
if [[ "$PrintMarkdownURL" == true ]]; then
|
if [[ "$PrintMarkdownURL" == true ]]; then
|
||||||
ContentType="text/markdown"
|
ContentType="text/markdown"
|
||||||
@@ -18,7 +22,7 @@ trigger_notification() {
|
|||||||
ContentType="text/plain"
|
ContentType="text/plain"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
JsonData=$( jq -n \
|
JsonData=$( "$jqbin" -n \
|
||||||
--arg body "$MessageBody" \
|
--arg body "$MessageBody" \
|
||||||
--arg title "$MessageTitle" \
|
--arg title "$MessageTitle" \
|
||||||
--arg type "$ContentType" \
|
--arg type "$ContentType" \
|
||||||
@@ -26,36 +30,3 @@ trigger_notification() {
|
|||||||
|
|
||||||
curl -s -S --data "${JsonData}" -H 'Content-Type: application/json' -X POST "${GotifyUrl}" 1> /dev/null
|
curl -s -S --data "${JsonData}" -H 'Content-Type: application/json' -X POST "${GotifyUrl}" 1> /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
send_notification() {
|
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
|
||||||
|
|
||||||
# platform specific notification code would go here
|
|
||||||
printf "\nSending Gotify notification\n"
|
|
||||||
|
|
||||||
# Setting the MessageTitle and MessageBody variable here.
|
|
||||||
MessageTitle="${FromHost} - updates available."
|
|
||||||
printf -v MessageBody "Containers on $FromHost with updates available:\n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending Gotify dockcheck notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - New version of dockcheck available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "Installed version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_gotify.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_GOTIFY_VERSION/s/NOTIFY_GOTIFY_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_GOTIFY_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_gotify.sh update avialable:\n $NOTIFY_GOTIFY_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,51 +1,23 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_MATRIX_VERSION="v0.1"
|
NOTIFY_MATRIX_VERSION="v0.2"
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snippet.
|
|
||||||
# Required receiving services must already be set up.
|
# Required receiving services must already be set up.
|
||||||
# Modify to fit your setup - set MatrixServer, Room_id and AccessToken
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set MATRIX_ACCESS_TOKEN, MATRIX_ROOM_ID, and MATRIX_SERVER_URL in your dockcheck.config file.
|
||||||
|
|
||||||
FromHost=$(hostname)
|
if [[ -z "${MATRIX_ACCESS_TOKEN:-}" ]] || [[ -z "${MATRIX_ROOM_ID}:-" ]] || [[ -z "${MATRIX_SERVER_URL}:-" ]]; then
|
||||||
|
printf "Matrix notification channel enabled, but required configuration variables are missing. Matrix notifications will not be sent.\n"
|
||||||
|
|
||||||
trigger_notification() {
|
remove_channel matrix
|
||||||
# Modify to fit your setup:
|
fi
|
||||||
AccessToken="Your Matrix token here"
|
|
||||||
Room_id="Enter Room_id here"
|
trigger_matrix_notification() {
|
||||||
MatrixServer="Enter Your HomeServer URL"
|
AccessToken="${MATRIX_ACCESS_TOKEN}" # e.g. MATRIX_ACCESS_TOKEN=token-value
|
||||||
|
Room_id="${MATRIX_ROOM_ID}" # e.g. MATRIX_ROOM_ID=myroom
|
||||||
|
MatrixServer="${MATRIX_SERVER_URL}" # e.g. MATRIX_SERVER_URL=http://matrix.yourdomain.tld
|
||||||
MsgBody="{\"msgtype\":\"m.text\",\"body\":\"$MessageBody\"}"
|
MsgBody="{\"msgtype\":\"m.text\",\"body\":\"$MessageBody\"}"
|
||||||
|
|
||||||
# URL Example: https://matrix.org/_matrix/client/r0/rooms/!xxxxxx:example.com/send/m.room.message?access_token=xxxxxxxx
|
# URL Example: https://matrix.org/_matrix/client/r0/rooms/!xxxxxx:example.com/send/m.room.message?access_token=xxxxxxxx
|
||||||
curl -sS -o /dev/null --fail -X POST "$MatrixServer/_matrix/client/r0/rooms/$Room_id/send/m.room.message?access_token=$AccessToken" -H 'Content-Type: application/json' -d "$MsgBody"
|
curl -sS -o /dev/null --fail -X POST "$MatrixServer/_matrix/client/r0/rooms/$Room_id/send/m.room.message?access_token=$AccessToken" -H 'Content-Type: application/json' -d "$MsgBody"
|
||||||
}
|
}
|
||||||
|
|
||||||
send_notification() {
|
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
|
||||||
|
|
||||||
# platform specific notification code would go here
|
|
||||||
printf "\nSending Matrix notification\n"
|
|
||||||
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
MessageBody="🐋 Containers on $FromHost with updates available: \n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending Matrix dockcheck notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - New version of dockcheck available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "Installed version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_matrix.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_MATRIX_VERSION/s/NOTIFY_MATRIX_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_MATRIX_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_matrix.sh update avialable:\n $NOTIFY_MATRIX_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,50 +1,32 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_NTFYSH_VERSION="v0.1"
|
NOTIFY_NTFYSH_VERSION="v0.4"
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snippet.
|
|
||||||
# Setup app and subscription at https://ntfy.sh
|
# Setup app and subscription at https://ntfy.sh
|
||||||
# Use your unique Topic Name in the URL below.
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set NTFY_DOMAIN and NTFY_TOPIC_NAME in your dockcheck.config file.
|
||||||
|
|
||||||
FromHost=$(hostname)
|
if [[ -z "${NTFY_DOMAIN:-}" ]] || [[ -z "${NTFY_TOPIC_NAME:-}" ]]; then
|
||||||
|
printf "Ntfy.sh notification channel enabled, but required configuration variables are missing. Ntfy.sh notifications will not be sent.\n"
|
||||||
|
|
||||||
trigger_notification() {
|
remove_channel ntfy-sh
|
||||||
# Modify to fit your setup:
|
fi
|
||||||
NtfyUrl="ntfy.sh/YourUniqueTopicName"
|
|
||||||
|
trigger_ntfy-sh_notification() {
|
||||||
|
NtfyUrl="${NTFY_DOMAIN}/${NTFY_TOPIC_NAME}"
|
||||||
|
# e.g.
|
||||||
|
# NTFY_DOMAIN=ntfy.sh
|
||||||
|
# NTFY_TOPIC_NAME=YourUniqueTopicName
|
||||||
|
|
||||||
|
if [[ "$PrintMarkdownURL" == true ]]; then
|
||||||
|
ContentType="Markdown: yes"
|
||||||
|
else
|
||||||
|
ContentType="Markdown: no" #text/plain
|
||||||
|
fi
|
||||||
|
|
||||||
curl -sS -o /dev/null --show-error --fail \
|
curl -sS -o /dev/null --show-error --fail \
|
||||||
-H "Title: $MessageTitle" \
|
-H "Title: $MessageTitle" \
|
||||||
|
-H "$ContentType" \
|
||||||
-d "$MessageBody" \
|
-d "$MessageBody" \
|
||||||
$NtfyUrl
|
"$NtfyUrl"
|
||||||
}
|
|
||||||
|
|
||||||
send_notification() {
|
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
|
||||||
|
|
||||||
printf "\nSending ntfy.sh notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - updates available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "🐋 Containers on $FromHost with updates available:\n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending ntfy.sh dockcheck notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - New version of dockcheck available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "Installed version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_ntfy-sh.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_NTFYSH_VERSION/s/NOTIFY_NTFYSH_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_NTFYSH_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_ntfy-sh.sh update avialable:\n $NOTIFY_NTFYSH_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,51 +1,22 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_PUSHBULLET_VERSION="v0.1"
|
NOTIFY_PUSHBULLET_VERSION="v0.2"
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snippet.
|
|
||||||
# Required receiving services must already be set up.
|
# Required receiving services must already be set up.
|
||||||
# Requires jq installed and in PATH.
|
# Requires jq installed and in PATH.
|
||||||
# Modify to fit your setup - set Url and Token.
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set PUSHBULLET_TOKEN and PUSHBULLET_URL in your dockcheck.config file.
|
||||||
|
|
||||||
FromHost=$(hostname)
|
if [[ -z "${PUSHBULLET_URL:-}" ]] || [[ -z "${PUSHBULLET_TOKEN:-}" ]]; then
|
||||||
|
printf "Pushbullet notification channel enabled, but required configuration variables are missing. Pushbullet notifications will not be sent.\n"
|
||||||
|
|
||||||
trigger_notification() {
|
remove_channel pushbullet
|
||||||
# Modify to fit your setup:
|
fi
|
||||||
PushUrl="https://api.pushbullet.com/v2/pushes"
|
|
||||||
PushToken="Your Pushbullet token here"
|
trigger_pushbullet_notification() {
|
||||||
|
PushUrl="${PUSHBULLET_URL}" # e.g. PUSHBULLET_URL=https://api.pushbullet.com/v2/pushes
|
||||||
|
PushToken="${PUSHBULLET_TOKEN}" # e.g. PUSHBULLET_TOKEN=token-value
|
||||||
|
|
||||||
# Requires jq to process json data
|
# Requires jq to process json data
|
||||||
jq -n --arg title "$MessageTitle" --arg body "$MessageBody" '{body: $body, title: $title, type: "note"}' | curl -sS -o /dev/null --show-error --fail -X POST -H "Access-Token: $PushToken" -H "Content-type: application/json" $PushUrl -d @-
|
"$jqbin" -n --arg title "$MessageTitle" --arg body "$MessageBody" '{body: $body, title: $title, type: "note"}' | curl -sS -o /dev/null --show-error --fail -X POST -H "Access-Token: $PushToken" -H "Content-type: application/json" $PushUrl -d @-
|
||||||
}
|
|
||||||
|
|
||||||
send_notification() {
|
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
|
||||||
|
|
||||||
# platform specific notification code would go here
|
|
||||||
printf "\nSending pushbullet notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - updates available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "🐋 Containers on $FromHost with updates available:\n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending pushbullet dockcheck notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - New version of dockcheck available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "Installed version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_pushbullet.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_PUSHBULLET_VERSION/s/NOTIFY_PUSHBULLET_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_PUSHBULLET_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_pushbullet.sh update avialable:\n $NOTIFY_PUSHBULLET_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,22 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_PUSHOVER_VERSION="v0.1"
|
NOTIFY_PUSHOVER_VERSION="v0.2"
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snippet.
|
|
||||||
# Required receiving services must already be set up.
|
# Required receiving services must already be set up.
|
||||||
# Requires jq installed and in PATH.
|
# Requires jq installed and in PATH.
|
||||||
# Modify to fit your setup - set Url and Token.
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set PUSHOVER_USER_KEY, PUSHOVER_TOKEN, and PUSHOVER_URL in your dockcheck.config file.
|
||||||
|
|
||||||
FromHost=$(hostname)
|
if [[ -z "${PUSHOVER_URL:-}" ]] || [[ -z "${PUSHOVER_USER_KEY:-}" ]] || [[ -z "${PUSHOVER_TOKEN:-}" ]]; then
|
||||||
|
printf "Pushover notification channel enabled, but required configuration variables are missing. Pushover notifications will not be sent.\n"
|
||||||
|
|
||||||
trigger_notification() {
|
remove_channel pushover
|
||||||
# Modify to fit your setup:
|
fi
|
||||||
PushoverUrl="https://api.pushover.net/1/messages.json"
|
|
||||||
PushoverUserKey="Your Pushover User Key Here"
|
trigger_pushover_notification() {
|
||||||
PushoverToken="Your Pushover API Token Here"
|
PushoverUrl="${PUSHOVER_URL}" # e.g. PUSHOVER_URL=https://api.pushover.net/1/messages.json
|
||||||
|
PushoverUserKey="${PUSHOVER_USER_KEY}" # e.g. PUSHOVER_USER_KEY=userkey
|
||||||
|
PushoverToken="${PUSHOVER_TOKEN}" # e.g. PUSHOVER_TOKEN=token-value
|
||||||
|
|
||||||
# Sending the notification via Pushover
|
# Sending the notification via Pushover
|
||||||
curl -sS -o /dev/null --show-error --fail -X POST \
|
curl -sS -o /dev/null --show-error --fail -X POST \
|
||||||
@@ -22,36 +26,3 @@ trigger_notification() {
|
|||||||
-F "message=$MessageBody" \
|
-F "message=$MessageBody" \
|
||||||
$PushoverUrl
|
$PushoverUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
send_notification() {
|
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
|
||||||
|
|
||||||
# platform specific notification code would go here
|
|
||||||
printf "\nSending pushover notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - updates available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "🐋 Containers on $FromHost with updates available:\n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending pushover dockcheck notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - New version of dockcheck available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "Installed version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_pushover.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_PUSHOVER_VERSION/s/NOTIFY_PUSHOVER_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_PUSHOVER_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_pushover.sh update avialable:\n $NOTIFY_PUSHOVER_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,16 +1,20 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_SLACK_VERSION="v0.1"
|
NOTIFY_SLACK_VERSION="v0.2"
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh in the same directory as dockcheck.sh to enable the notification snippet.
|
# Setup app and token at https://api.slack.com/tutorials/tracks/posting-messages-with-curl
|
||||||
# Setu app and token at https://api.slack.com/tutorials/tracks/posting-messages-with-curl
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
# Add your AccessToken and ChannelID below
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set SLACK_ACCESS_TOKEN, and SLACK_CHANNEL_ID in your dockcheck.config file.
|
||||||
|
|
||||||
FromHost=$(hostname)
|
if [[ -z "${SLACK_ACCESS_TOKEN:-}" ]] || [[ -z "${SLACK_CHANNEL_ID:-}" ]]; then
|
||||||
|
printf "Slack notification channel enabled, but required configuration variables are missing. Slack notifications will not be sent.\n"
|
||||||
|
|
||||||
trigger_notification() {
|
remove_channel slack
|
||||||
# Modify to fit your setup:
|
fi
|
||||||
AccessToken="xoxb-not-a-real-token-this-will-not-work"
|
|
||||||
ChannelID="C123456"
|
trigger_slack_notification() {
|
||||||
|
AccessToken="${SLACK_ACCESS_TOKEN}" # e.g. SLACK_ACCESS_TOKEN=some-token
|
||||||
|
ChannelID="${SLACK_CHANNEL_ID}" # e.g. CHANNEL_ID=mychannel
|
||||||
SlackUrl="https://slack.com/api/chat.postMessage"
|
SlackUrl="https://slack.com/api/chat.postMessage"
|
||||||
|
|
||||||
curl -sS -o /dev/null --show-error --fail \
|
curl -sS -o /dev/null --show-error --fail \
|
||||||
@@ -18,35 +22,3 @@ trigger_notification() {
|
|||||||
-H "Authorization: Bearer $AccessToken" \
|
-H "Authorization: Bearer $AccessToken" \
|
||||||
-X POST $SlackUrl
|
-X POST $SlackUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
send_notification() {
|
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
|
||||||
|
|
||||||
printf "\nSending Slack notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - updates available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "🐋 Containers on $FromHost with updates available:\n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending Slack dockcheck notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - New version of dockcheck available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "Installed version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_slack.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_SLACK_VERSION/s/NOTIFY_SLACK_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_SLACK_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_slack.sh update avialable:\n $NOTIFY_SLACK_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,10 +1,17 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_SMTP_VERSION="v0.1"
|
NOTIFY_SMTP_VERSION="v0.2"
|
||||||
# INFO: ssmtp is depcerated - consider to use msmtp instead.
|
# INFO: ssmtp is depcerated - consider to use msmtp instead.
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snipppet.
|
|
||||||
# mSMTP/sSMTP has to be installed and configured manually.
|
# mSMTP/sSMTP has to be installed and configured manually.
|
||||||
# Modify to fit your setup - changing SendMailFrom, SendMailTo, SubjectTag
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set SMTP_MAIL_FROM, SMTP_MAIL_TO, and SMTP_SUBJECT_TAG in your dockcheck.config file.
|
||||||
|
|
||||||
|
if [[ -z "${SMTP_MAIL_FROM:-}" ]] || [[ -z "${SMTP_MAIL_TO:-}" ]] || [[ -z "${SMTP_SUBJECT_TAG:-}" ]]; then
|
||||||
|
printf "SMTP notification channel enabled, but required configuration variables are missing. SMTP notifications will not be sent.\n"
|
||||||
|
|
||||||
|
remove_channel smtp
|
||||||
|
fi
|
||||||
|
|
||||||
MSMTP=$(which msmtp)
|
MSMTP=$(which msmtp)
|
||||||
SSMTP=$(which ssmtp)
|
SSMTP=$(which ssmtp)
|
||||||
@@ -17,13 +24,10 @@ else
|
|||||||
echo "No msmtp or ssmtp binary found in PATH: $PATH" ; exit 1
|
echo "No msmtp or ssmtp binary found in PATH: $PATH" ; exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
FromHost=$(hostname)
|
trigger_smtp_notification() {
|
||||||
|
SendMailFrom="${SMTP_MAIL_FROM}" # e.g. MAIL_FROM=me@mydomain.tld
|
||||||
trigger_notification() {
|
SendMailTo="${SMTP_MAIL_TO}" # e.g. MAIL_TO=me@mydomain.tld
|
||||||
# User variables:
|
SubjectTag="${SMTP_SUBJECT_TAG}" # e.g. SUBJECT_TAG=dockcheck
|
||||||
SendMailFrom="me@mydomain.tld"
|
|
||||||
SendMailTo="me@mydomain.tld"
|
|
||||||
SubjectTag="dockcheck"
|
|
||||||
|
|
||||||
$MailPkg $SendMailTo << __EOF
|
$MailPkg $SendMailTo << __EOF
|
||||||
From: "$FromHost" <$SendMailFrom>
|
From: "$FromHost" <$SendMailFrom>
|
||||||
@@ -37,35 +41,3 @@ $MessageBody
|
|||||||
|
|
||||||
__EOF
|
__EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
send_notification() {
|
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
|
||||||
|
|
||||||
printf "\nSending email notification.\n"
|
|
||||||
|
|
||||||
MessageTitle="Updates available on"
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "🐋 Containers on $FromHost with updates available:\n\n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending email dockcheck notification.\n"
|
|
||||||
|
|
||||||
MessageTitle="New version of dockcheck available on"
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "Installed version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_smtp.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_SMTP_VERSION/s/NOTIFY_SMTP_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_SMTP_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_smtp.sh update avialable:\n $NOTIFY_SMTP_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,58 +1,35 @@
|
|||||||
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
NOTIFY_TELEGRAM_VERSION="v0.1"
|
NOTIFY_TELEGRAM_VERSION="v0.3"
|
||||||
#
|
#
|
||||||
# Copy/rename this file to notify.sh to enable the notification snippet.
|
|
||||||
# Required receiving services must already be set up.
|
# Required receiving services must already be set up.
|
||||||
# Modify to fit your setup - set TelegramChatId and TelegramToken.
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Do not modify this file directly within the "notify_templates" subdirectory. Set TELEGRAM_CHAT_ID and TELEGRAM_TOKEN in your dockcheck.config file.
|
||||||
|
|
||||||
FromHost=$(hostname)
|
if [[ -z "${TELEGRAM_CHAT_ID:-}" ]] || [[ -z "${TELEGRAM_TOKEN:-}" ]]; then
|
||||||
|
printf "Telegram notification channel enabled, but required configuration variables are missing. Telegram notifications will not be sent.\n"
|
||||||
|
|
||||||
trigger_notification() {
|
remove_channel telegram
|
||||||
|
fi
|
||||||
|
|
||||||
|
trigger_telegram_notification() {
|
||||||
if [[ "$PrintMarkdownURL" == true ]]; then
|
if [[ "$PrintMarkdownURL" == true ]]; then
|
||||||
ParseMode="Markdown"
|
ParseMode="Markdown"
|
||||||
else
|
else
|
||||||
ParseMode="HTML"
|
ParseMode="HTML"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Modify to fit your setup:
|
TelegramToken="${TELEGRAM_TOKEN}" # e.g. TELEGRAM_TOKEN=token-value
|
||||||
TelegramToken="Your Telegram token here"
|
TelegramChatId="${TELEGRAM_CHAT_ID}" # e.g. TELEGRAM_CHAT_ID=mychatid
|
||||||
TelegramChatId="Your Telegram ChatId here"
|
|
||||||
TelegramUrl="https://api.telegram.org/bot$TelegramToken"
|
TelegramUrl="https://api.telegram.org/bot$TelegramToken"
|
||||||
TelegramTopicID=12345678 ## Set to 0 if not using specific topic within chat
|
TelegramTopicID=${TELEGRAM_TOPIC_ID:="0"}
|
||||||
TelegramData="{\"chat_id\":\"$TelegramChatId\",\"text\":\"$MessageBody\",\"message_thread_id\":\"$TelegramTopicID\",\"disable_notification\": false}"
|
|
||||||
|
|
||||||
curl -sS -o /dev/null --fail -X POST "$TelegramUrl/sendMessage" -H 'Content-Type: application/json' -d "$TelegramData"
|
JsonData=$( "$jqbin" -n \
|
||||||
}
|
--arg chatid "$TelegramChatId" \
|
||||||
|
--arg text "$MessageBody" \
|
||||||
send_notification() {
|
--arg thread "$TelegramTopicID" \
|
||||||
[ -s "$ScriptWorkDir"/urls.list ] && releasenotes || Updates=("$@")
|
--arg parse_mode "$ParseMode" \
|
||||||
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
'{"chat_id": $chatid, "text": $text, "message_thread_id": $thread, "disable_notification": false, "parse_mode": $parse_mode, "disable_web_page_preview": true}' )
|
||||||
|
|
||||||
# platform specific notification code would go here
|
curl -sS -o /dev/null --fail -X POST "$TelegramUrl/sendMessage" -H 'Content-Type: application/json' -d "$JsonData"
|
||||||
printf "\nSending Telegram notification\n"
|
|
||||||
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
MessageBody="🐋 Containers on $FromHost with updates available: \n$UpdToString"
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rename (eg. disabled_dockcheck_notification), remove or comment out the following function
|
|
||||||
### to not send notifications when dockcheck itself has updates.
|
|
||||||
dockcheck_notification() {
|
|
||||||
printf "\nSending Telegram dockcheck notification\n"
|
|
||||||
|
|
||||||
MessageTitle="$FromHost - New version of dockcheck available."
|
|
||||||
# Setting the MessageBody variable here.
|
|
||||||
printf -v MessageBody "$FromHost - New version of dockcheck available.\n\nInstalled version: $1 \nLatest version: $2 \n\nChangenotes: $3"
|
|
||||||
|
|
||||||
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_telegram.sh"
|
|
||||||
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_TELEGRAM_VERSION/s/NOTIFY_TELEGRAM_VERSION=//p" | tr -d '"')"
|
|
||||||
if [[ "$NOTIFY_TELEGRAM_VERSION" != "$LatestNotifyRelease" ]] ; then
|
|
||||||
printf -v NotifyUpdate "\n\nnotify_telegram.sh update avialable:\n $NOTIFY_TELEGRAM_VERSION -> $LatestNotifyRelease\n"
|
|
||||||
MessageBody="${MessageBody}${NotifyUpdate}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trigger_notification
|
|
||||||
}
|
}
|
||||||
|
|||||||
96
notify_templates/notify_v2.sh
Normal file
96
notify_templates/notify_v2.sh
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
NOTIFY_V2_VERSION="v0.2"
|
||||||
|
#
|
||||||
|
# If migrating from an older notify template, remove your existing notify.sh file.
|
||||||
|
# Leave (or place) this file in the "notify_templates" subdirectory within the same directory as the main dockcheck.sh script.
|
||||||
|
# If you instead wish make your own modifications, make a copy in the same directory as the main dockcheck.sh script.
|
||||||
|
# Enable and configure all required notification variables in your dockcheck.config file, e.g.:
|
||||||
|
# NOTIFY_CHANNELS=apprise gotify slack
|
||||||
|
# SLACK_TOKEN=xoxb-some-token-value
|
||||||
|
# GOTIFY_TOKEN=some.token
|
||||||
|
|
||||||
|
enabled_notify_channels=( ${NOTIFY_CHANNELS:-} )
|
||||||
|
|
||||||
|
FromHost=$(cat /etc/hostname)
|
||||||
|
|
||||||
|
remove_channel() {
|
||||||
|
local temp_array=()
|
||||||
|
for channel in "${enabled_notify_channels[@]}"; do
|
||||||
|
[[ "${channel}" != "$1" ]] && temp_array+=("${channel}")
|
||||||
|
done
|
||||||
|
enabled_notify_channels=( "${temp_array[@]}" )
|
||||||
|
}
|
||||||
|
|
||||||
|
for channel in "${enabled_notify_channels[@]}"; do
|
||||||
|
source_if_exists_or_fail "${ScriptWorkDir}/notify_${channel}.sh" || \
|
||||||
|
source_if_exists_or_fail "${ScriptWorkDir}/notify_templates/notify_${channel}.sh" || \
|
||||||
|
printf "The notification channel ${channel} is enabled, but notify_${channel}.sh was not found. Check the ${ScriptWorkDir} directory or the notify_templates subdirectory.\n"
|
||||||
|
done
|
||||||
|
|
||||||
|
send_notification() {
|
||||||
|
[[ -s "$ScriptWorkDir"/urls.list ]] && releasenotes || Updates=("$@")
|
||||||
|
UpdToString=$( printf '%s\\n' "${Updates[@]}" )
|
||||||
|
UpdToString=${UpdToString%\\n}
|
||||||
|
|
||||||
|
for channel in "${enabled_notify_channels[@]}"; do
|
||||||
|
printf "\nSending ${channel} notification\n"
|
||||||
|
|
||||||
|
# To be added in the MessageBody if "-d X" was used
|
||||||
|
# leading space is left intentionally for clean output
|
||||||
|
[[ -n "$DaysOld" ]] && msgdaysold="with images ${DaysOld}+ days old " || msgdaysold=""
|
||||||
|
|
||||||
|
MessageTitle="$FromHost - updates ${msgdaysold}available."
|
||||||
|
# Setting the MessageBody variable here.
|
||||||
|
printf -v MessageBody "🐋 Containers on $FromHost with updates available:\n${UpdToString}\n"
|
||||||
|
|
||||||
|
exec_if_exists_or_fail trigger_${channel}_notification || \
|
||||||
|
printf "Attempted to send notification to channel ${channel}, but the function was not found. Make sure notify_${channel}.sh is available in the ${ScriptWorkDir} directory or notify_templates subdirectory.\n"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
### Set DISABLE_DOCKCHECK_NOTIFICATION=false in dockcheck.config
|
||||||
|
### to not send notifications when dockcheck itself has updates.
|
||||||
|
dockcheck_notification() {
|
||||||
|
if [[ ! "${DISABLE_DOCKCHECK_NOTIFICATION:-}" = "true" ]]; then
|
||||||
|
MessageTitle="$FromHost - New version of dockcheck available."
|
||||||
|
# Setting the MessageBody variable here.
|
||||||
|
printf -v MessageBody "Installed version: $1\nLatest version: $2\n\nChangenotes: $3\n"
|
||||||
|
|
||||||
|
if [[ ${#enabled_notify_channels[@]} -gt 0 ]]; then printf "\n"; fi
|
||||||
|
for channel in "${enabled_notify_channels[@]}"; do
|
||||||
|
printf "Sending dockcheck update notification - ${channel}\n"
|
||||||
|
exec_if_exists_or_fail trigger_${channel}_notification || \
|
||||||
|
printf "Attempted to send notification to channel ${channel}, but the function was not found. Make sure notify_${channel}.sh is available in the ${ScriptWorkDir} directory or notify_templates subdirectory.\n"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
### Set DISABLE_NOTIFY_UPDATE_NOTIFICATION=false in dockcheck.config
|
||||||
|
### to not send notifications when notify scripts themselves have updates.
|
||||||
|
notify_update_notification() {
|
||||||
|
if [[ ! "${DISABLE_NOTIFY_UPDATE_NOTIFICATION:-}" = "true" ]]; then
|
||||||
|
update_channels=( "${enabled_notify_channels[@]}" "v2" )
|
||||||
|
|
||||||
|
for notify_script in "${update_channels[@]}"; do
|
||||||
|
upper_channel=$(tr '[:lower:]' '[:upper:]' <<< "$notify_script")
|
||||||
|
VersionVar="NOTIFY_${upper_channel}_VERSION"
|
||||||
|
if [[ -n "${!VersionVar:-}" ]]; then
|
||||||
|
RawNotifyUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_${notify_script}.sh"
|
||||||
|
LatestNotifyRelease="$(curl -s -r 0-150 $RawNotifyUrl | sed -n "/NOTIFY_${upper_channel}_VERSION/s/NOTIFY_${upper_channel}_VERSION=//p" | tr -d '"')"
|
||||||
|
LatestNotifyRelease=${LatestNotifyRelease:-undefined}
|
||||||
|
if [[ ! "${LatestNotifyRelease}" = "undefined" ]]; then
|
||||||
|
if [[ "${!VersionVar}" != "$LatestNotifyRelease" ]] ; then
|
||||||
|
MessageTitle="$FromHost - New version of notify_${notify_script}.sh available."
|
||||||
|
|
||||||
|
printf -v MessageBody "notify_${notify_script}.sh update available:\n ${!VersionVar} -> $LatestNotifyRelease\n"
|
||||||
|
|
||||||
|
for channel in "${enabled_notify_channels[@]}"; do
|
||||||
|
printf "Sending notify_${notify_script}.sh update notification - ${channel}\n"
|
||||||
|
exec_if_exists_or_fail trigger_${channel}_notification || \
|
||||||
|
printf "Attempted to send notification to channel ${channel}, but the function was not found. Make sure notify_${channel}.sh is available in the ${ScriptWorkDir} directory or notify_templates subdirectory.\n"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
@@ -1,49 +1,75 @@
|
|||||||
# This is a list of container names and releasenote urls, separated by space.
|
|
||||||
# Modify, add and (if necessary) remove to fit your needs.
|
|
||||||
# Additions are welcome! Append your list to the git-repo, use generic names and sensible urls.
|
# Additions are welcome! Append your list to the git-repo, use generic names and sensible urls.
|
||||||
|
# Modify, add and (if necessary) remove to fit your needs.
|
||||||
|
# This is a list of container names and releasenote urls, separated by space.
|
||||||
|
|
||||||
apprise-api https://github.com/linuxserver/docker-apprise-api/releases
|
|
||||||
homer https://github.com/bastienwirtz/homer/releases
|
|
||||||
nginx https://github.com/docker-library/official-images/blob/master/library/nginx
|
|
||||||
vaultwarden-server https://github.com/dani-garcia/vaultwarden/releases
|
|
||||||
bruceforce-vaultwarden-backup https://github.com/Bruceforce/vaultwarden-backup/blob/main/CHANGELOG.md
|
|
||||||
actual_server https://actualbudget.org/blog
|
actual_server https://actualbudget.org/blog
|
||||||
gotify https://github.com/gotify/server/releases
|
apprise-api https://github.com/linuxserver/docker-apprise-api/releases
|
||||||
traefik https://github.com/traefik/traefik/releases
|
|
||||||
caddy https://github.com/caddyserver/caddy/releases
|
|
||||||
homarr https://github.com/homarr-labs/homarr/releases
|
|
||||||
dozzle https://github.com/amir20/dozzle/releases
|
|
||||||
beszel https://github.com/henrygd/beszel/releases
|
|
||||||
forgejo https://codeberg.org/forgejo/forgejo/releases
|
|
||||||
dockge https://github.com/louislam/dockge/releases
|
|
||||||
cup https://github.com/sergi0g/cup/releases
|
|
||||||
|
|
||||||
calibre https://github.com/linuxserver/docker-calibre/releases
|
|
||||||
calibre-web https://github.com/linuxserver/docker-calibre-web/releases
|
|
||||||
readarr https://github.com/Readarr/Readarr/releases
|
|
||||||
audiobookshelf https://github.com/advplyr/audiobookshelf/releases
|
audiobookshelf https://github.com/advplyr/audiobookshelf/releases
|
||||||
|
|
||||||
gluetun https://github.com/qdm12/gluetun/releases
|
|
||||||
bazarr https://github.com/morpheus65535/bazarr/releases
|
bazarr https://github.com/morpheus65535/bazarr/releases
|
||||||
bazarr-ls https://github.com/linuxserver/docker-bazarr/releases
|
bazarr-ls https://github.com/linuxserver/docker-bazarr/releases
|
||||||
|
beszel https://github.com/henrygd/beszel/releases
|
||||||
|
bookstack https://github.com/BookStackApp/BookStack/releases
|
||||||
|
bruceforce-vaultwarden-backup https://github.com/Bruceforce/vaultwarden-backup/blob/main/CHANGELOG.md
|
||||||
|
caddy https://github.com/caddyserver/caddy/releases
|
||||||
|
calibre https://github.com/linuxserver/docker-calibre/releases
|
||||||
|
calibre-web https://github.com/linuxserver/docker-calibre-web/releases
|
||||||
|
cleanuperr https://github.com/flmorg/cleanuperr/releases
|
||||||
|
cross-seed https://github.com/cross-seed/cross-seed/releases
|
||||||
|
cup https://github.com/sergi0g/cup/releases
|
||||||
|
dockge https://github.com/louislam/dockge/releases
|
||||||
|
dozzle https://github.com/amir20/dozzle/releases
|
||||||
|
flatnotes https://github.com/dullage/flatnotes/releases
|
||||||
|
forgejo https://codeberg.org/forgejo/forgejo/releases
|
||||||
|
fressrss https://github.com/FreshRSS/FreshRSS/releases
|
||||||
|
gluetun https://github.com/qdm12/gluetun/releases
|
||||||
|
go2rtc https://github.com/AlexxIT/go2rtc/releases
|
||||||
|
gotify https://github.com/gotify/server/releases
|
||||||
|
hbbr https://github.com/rustdesk/rustdesk-server/releases
|
||||||
|
hbbs https://github.com/rustdesk/rustdesk-server/releases
|
||||||
|
homarr https://github.com/homarr-labs/homarr/releases
|
||||||
|
home-assistant https://github.com/home-assistant/core/releases/
|
||||||
|
homer https://github.com/bastienwirtz/homer/releases
|
||||||
|
immich_machine_learning https://github.com/immich-app/immich/releases
|
||||||
|
immich_postgres https://github.com/tensorchord/VectorChord/releases
|
||||||
|
immich_redis https://github.com/valkey-io/valkey/releases
|
||||||
|
immich_server https://github.com/immich-app/immich/releases
|
||||||
|
jellyfin https://github.com/jellyfin/jellyfin/releases
|
||||||
|
jellyseerr https://github.com/Fallenbagel/jellyseerr/releases
|
||||||
|
jellystat https://github.com/CyferShepard/Jellystat/releases
|
||||||
|
librespeed https://github.com/librespeed/speedtest/releases
|
||||||
|
lidarr https://github.com/Lidarr/Lidarr/releases/
|
||||||
|
lidarr-ls https://github.com/linuxserver/docker-lidarr/releases
|
||||||
|
lubelogger https://github.com/hargata/lubelog/releases
|
||||||
|
mattermost https://github.com/mattermost/mattermost/releases
|
||||||
|
mealie https://github.com/mealie-recipes/mealie/releases
|
||||||
|
meilisearch https://github.com/meilisearch/meilisearch/releases
|
||||||
|
monica https://github.com/monicahq/monica/releases
|
||||||
|
mqtt https://github.com/eclipse/mosquitto/tags
|
||||||
|
nextcloud-aio-mastercontainer https://github.com/nextcloud/all-in-one/releases
|
||||||
|
nginx https://github.com/docker-library/official-images/blob/master/library/nginx
|
||||||
|
owncast https://github.com/owncast/owncast/releases
|
||||||
prowlarr https://github.com/Prowlarr/Prowlarr/releases
|
prowlarr https://github.com/Prowlarr/Prowlarr/releases
|
||||||
prowlarr-ls https://github.com/linuxserver/docker-prowlarr/releases
|
prowlarr-ls https://github.com/linuxserver/docker-prowlarr/releases
|
||||||
|
qbittorrent https://www.qbittorrent.org/news
|
||||||
|
qbittorrent-nox https://www.qbittorrent.org/news
|
||||||
|
radarr https://github.com/Radarr/Radarr/releases/
|
||||||
|
radarr-ls https://github.com/linuxserver/docker-radarr/releases
|
||||||
|
readarr https://github.com/Readarr/Readarr/releases
|
||||||
|
readeck https://codeberg.org/readeck/readeck/releases
|
||||||
recyclarr https://github.com/recyclarr/recyclarr/releases
|
recyclarr https://github.com/recyclarr/recyclarr/releases
|
||||||
|
roundcubemail https://github.com/roundcube/roundcubemail/releases
|
||||||
sabnzbd https://github.com/linuxserver/docker-sabnzbd/releases
|
sabnzbd https://github.com/linuxserver/docker-sabnzbd/releases
|
||||||
sonarr https://github.com/linuxserver/docker-sonarr/releases
|
scrutiny https://github.com/AnalogJ/scrutiny/releases
|
||||||
radarr https://github.com/linuxserver/docker-radarr/releases
|
sftpgo https://github.com/drakkan/sftpgo/releases
|
||||||
lidarr https://github.com/linuxserver/docker-lidarr/releases
|
|
||||||
jellyseerr https://github.com/Fallenbagel/jellyseerr/releases
|
|
||||||
jellyfin https://github.com/jellyfin/jellyfin/releases
|
|
||||||
tautulli https://github.com/Tautulli/Tautulli/releases
|
|
||||||
cleanuperr https://github.com/flmorg/cleanuperr/releases
|
|
||||||
slskd https://github.com/slskd/slskd/releases
|
slskd https://github.com/slskd/slskd/releases
|
||||||
|
snappymail https://github.com/the-djmaze/snappymail/releases
|
||||||
home-assistant https://github.com/home-assistant/docker/releases
|
sonarr https://github.com/Sonarr/Sonarr/releases/
|
||||||
|
sonarr-ls https://github.com/linuxserver/docker-sonarr/releases
|
||||||
|
syncthing https://github.com/syncthing/syncthing/releases
|
||||||
|
tautulli https://github.com/Tautulli/Tautulli/releases
|
||||||
|
thelounge https://github.com/thelounge/thelounge/releases
|
||||||
|
traefik https://github.com/traefik/traefik/releases
|
||||||
|
vaultwarden-server https://github.com/dani-garcia/vaultwarden/releases
|
||||||
|
watchtower https://github.com/beatkind/watchtower/releases
|
||||||
|
wud https://github.com/getwud/wud/releases
|
||||||
zigbee2mqtt https://github.com/Koenkk/zigbee2mqtt/releases
|
zigbee2mqtt https://github.com/Koenkk/zigbee2mqtt/releases
|
||||||
mqtt https://github.com/eclipse/mosquitto/tags
|
|
||||||
|
|
||||||
bookstack https://github.com/BookStackApp/BookStack/releases
|
|
||||||
lubelogger https://github.com/hargata/lubelog/releases
|
|
||||||
mealie https://github.com/mealie-recipes/mealie/releases
|
|
||||||
flatnotes https://github.com/dullage/flatnotes/releases
|
|
||||||
|
|||||||
Reference in New Issue
Block a user