Compare commits

..

2 Commits

Author SHA1 Message Date
MickLesk 9a597a5453 add dependabot for gh actions 2026-07-27 19:49:39 +02:00
MickLesk d1bb6b37ce Bump GitHub Actions across workflows
Update workflow dependencies to newer major versions in repository automation files. This upgrades `actions/checkout` to v7, `actions/github-script` to v9, `actions/create-github-app-token` to v3, and GitHub Pages actions (`upload-pages-artifact` and `deploy-pages`) to v5 to keep CI/CD and maintenance workflows current.
2026-07-27 19:48:57 +02:00
8 changed files with 19 additions and 343 deletions
-14
View File
@@ -508,20 +508,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-07-28
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- UmlautAdaptarr: use the Debian 13 Microsoft repo with its 2025 signing key [@angusmaul](https://github.com/angusmaul) ([#16077](https://github.com/community-scripts/ProxmoxVE/pull/16077))
- fix(bazarr): store data in /var/lib/bazarr instead of inside /opt/bazarr [@angusmaul](https://github.com/angusmaul) ([#16098](https://github.com/community-scripts/ProxmoxVE/pull/16098))
- Cloudflare-DDNS: store API token in a 600 env file and build the binary at install time [@angusmaul](https://github.com/angusmaul) ([#16100](https://github.com/community-scripts/ProxmoxVE/pull/16100))
### 📂 Github
- Bump GitHub Actions across workflows [@MickLesk](https://github.com/MickLesk) ([#16091](https://github.com/community-scripts/ProxmoxVE/pull/16091))
## 2026-07-27
### 🆕 New Scripts
-25
View File
@@ -28,31 +28,6 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if ! grep -qE -- "bazarr\.py.*[[:space:]](-c|--config)([[:space:]]|=)" /etc/systemd/system/bazarr.service 2>/dev/null; then
if [[ -d /opt/bazarr/data && ! -L /opt/bazarr/data && -n "$(ls -A /var/lib/bazarr/ 2>/dev/null)" ]]; then
msg_error "/opt/bazarr/data and /var/lib/bazarr both contain data - refusing to merge them. Keep the copy you want in /var/lib/bazarr, remove /opt/bazarr/data, then run the update again."
exit 1
fi
msg_info "Moving Bazarr data to /var/lib/bazarr"
systemctl stop bazarr
if [[ -L /opt/bazarr/data ]]; then
rm -f /opt/bazarr/data
elif [[ -d /opt/bazarr/data ]]; then
if ! cp -a /opt/bazarr/data/. /var/lib/bazarr/; then
systemctl start bazarr
msg_error "Could not copy /opt/bazarr/data to /var/lib/bazarr - nothing was removed."
exit 1
fi
rm -rf /opt/bazarr/data
fi
sed -i -E "s|^(ExecStart=.*bazarr\.py.*)$|\1 -c /var/lib/bazarr|" /etc/systemd/system/bazarr.service
systemctl daemon-reload
systemctl start bazarr
msg_ok "Moved Bazarr data to /var/lib/bazarr"
fi
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
msg_info "Stopping Service"
systemctl stop bazarr
+3 -27
View File
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-3}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
@@ -24,35 +24,11 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/local/bin/ddns ]]; then
if [[ ! -f /etc/systemd/system/cloudflare-ddns.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "cloudflare-ddns" "favonia/cloudflare-ddns"; then
msg_info "Stopping Service"
systemctl stop cloudflare-ddns
msg_ok "Stopped Service"
setup_go
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cloudflare-ddns" "favonia/cloudflare-ddns" "tarball"
msg_info "Updating ${APP}"
cd /opt/cloudflare-ddns
export CGO_ENABLED=0 GOOS=linux
$STD go build -trimpath -ldflags="-s -w" -o /usr/local/bin/ddns ./cmd/ddns
msg_ok "Updated ${APP}"
msg_info "Removing Build Dependencies"
rm -rf /usr/local/go /usr/local/bin/go /usr/local/bin/gofmt /root/go /root/.cache/go-build /opt/cloudflare-ddns
msg_ok "Removed Build Dependencies"
msg_info "Starting Service"
systemctl start cloudflare-ddns
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
msg_error "There is no update function for ${APP}."
exit
}
-12
View File
@@ -29,18 +29,6 @@ function update_script() {
exit
fi
if grep -qs "packages.microsoft.com/debian/12" /etc/apt/sources.list.d/microsoft*.sources; then
msg_info "Migrating Microsoft Repository to Debian 13"
setup_deb822_repo \
"microsoft" \
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
"https://packages.microsoft.com/debian/13/prod/" \
"trixie" \
"main"
rm -f /usr/share/keyrings/microsoft-prod.gpg
msg_ok "Migrated Microsoft Repository to Debian 13"
fi
if check_for_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr"; then
msg_info "Stopping Service"
systemctl stop umlautadaptarr
+1 -1
View File
@@ -36,7 +36,7 @@ UMask=0002
Restart=on-failure
RestartSec=5
Type=simple
ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py -c /var/lib/bazarr
ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py
KillSignal=SIGINT
TimeoutStopSec=20
SyslogIdentifier=bazarr
+12 -37
View File
@@ -13,6 +13,8 @@ setting_up_container
network_check
update_os
setup_go
var_cf_api_token="default"
read -rp "${TAB3}Enter the Cloudflare API token: " var_cf_api_token
@@ -51,50 +53,23 @@ while true; do
done
msg_ok "Configured Application"
setup_go
fetch_and_deploy_gh_release "cloudflare-ddns" "favonia/cloudflare-ddns" "tarball"
msg_info "Building ${APPLICATION}"
cd /opt/cloudflare-ddns
export CGO_ENABLED=0 GOOS=linux
$STD go build -trimpath -ldflags="-s -w" -o /usr/local/bin/ddns ./cmd/ddns
msg_ok "Built ${APPLICATION}"
# The binary is statically linked (CGO_ENABLED=0), so Go is only a build-time
# dependency. Removing it keeps the container small; update_script reinstalls it
# via setup_go when a rebuild is needed.
msg_info "Removing Build Dependencies"
rm -rf /usr/local/go /usr/local/bin/go /usr/local/bin/gofmt /root/go /root/.cache/go-build /opt/cloudflare-ddns
msg_ok "Removed Build Dependencies"
msg_info "Setting up service"
useradd --system --no-create-home --shell /usr/sbin/nologin cloudflare-ddns 2>/dev/null || true
cat <<EOF >/etc/cloudflare-ddns.env
CLOUDFLARE_API_TOKEN=${var_cf_api_token}
DOMAINS=${var_cf_domains}
PROXIED=${var_cf_proxied}
IP6_PROVIDER=${var_cf_ip6_provider}
EOF
chown root:root /etc/cloudflare-ddns.env
chmod 600 /etc/cloudflare-ddns.env
mkdir -p /root/go
cat <<EOF >/etc/systemd/system/cloudflare-ddns.service
[Unit]
Description=Cloudflare DDNS Service
After=network-online.target
Wants=network-online.target
Description=Cloudflare DDNS Service (Go run)
After=network.target
[Service]
Type=simple
User=cloudflare-ddns
Group=cloudflare-ddns
EnvironmentFile=/etc/cloudflare-ddns.env
ExecStart=/usr/local/bin/ddns
Environment="CLOUDFLARE_API_TOKEN=${var_cf_api_token}"
Environment="DOMAINS=${var_cf_domains}"
Environment="PROXIED=${var_cf_proxied}"
Environment="IP6_PROVIDER=${var_cf_ip6_provider}"
Environment="GOPATH=/root/go"
Environment="GOCACHE=/tmp/go-build"
ExecStart=/usr/local/bin/go run github.com/favonia/cloudflare-ddns/cmd/ddns@latest
Restart=always
RestartSec=300
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
+3 -3
View File
@@ -16,9 +16,9 @@ update_os
msg_info "Installing Dependencies"
setup_deb822_repo \
"microsoft" \
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
"https://packages.microsoft.com/debian/13/prod/" \
"trixie" \
"https://packages.microsoft.com/keys/microsoft.asc" \
"https://packages.microsoft.com/debian/12/prod/" \
"bookworm" \
"main"
$STD apt install -y \
dotnet-sdk-8.0 \
@@ -1,224 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/sakowicz/actual-budget-prometheus-exporter
if ! command -v curl &>/dev/null; then
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
apt-get update >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
fi
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true
declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "actual-budget-prometheus-exporter" "addon"
# Enable error handling
set -Eeuo pipefail
trap 'error_handler' ERR
load_functions
# ==============================================================================
# CONFIGURATION
# ==============================================================================
VERBOSE=${var_verbose:-no}
APP="actual-budget-prometheus-exporter"
APP_TYPE="tools"
INSTALL_PATH="/opt/actual-budget-prometheus-exporter"
CONFIG_PATH="/opt/actual-budget-prometheus-exporter.env"
SERVICE_PATH="/etc/systemd/system/actual-budget-prometheus-exporter.service"
# ==============================================================================
# OS DETECTION
# ==============================================================================
if ! grep -qE 'ID=debian|ID=ubuntu' /etc/os-release 2>/dev/null; then
echo -e "${CROSS} Unsupported OS detected. This script only supports Debian and Ubuntu."
exit 238
fi
# ==============================================================================
# UNINSTALL
# ==============================================================================
function uninstall() {
msg_info "Uninstalling Actual-Budget-Prometheus-Exporter"
systemctl disable -q --now actual-budget-prometheus-exporter
rm -f "$SERVICE_PATH"
rm -rf "$INSTALL_PATH"
rm -f "$CONFIG_PATH"
rm -f "/usr/local/bin/update_actual-budget-prometheus-exporter"
rm -f "$HOME/.actual-budget-prometheus-exporter"
msg_ok "Actual-Budget-Prometheus-Exporter has been uninstalled"
}
# ==============================================================================
# UPDATE
# ==============================================================================
function update() {
if check_for_gh_release "actual-budget-prometheus-exporter" "sakowicz/actual-budget-prometheus-exporter"; then
msg_info "Stopping service"
systemctl stop actual-budget-prometheus-exporter
msg_ok "Stopped service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "actual-budget-prometheus-exporter" "sakowicz/actual-budget-prometheus-exporter" "tarball" "latest"
NODE_VERSION="22" setup_nodejs
msg_info "Building Actual-Budget-Prometheus-Exporter"
cd "$INSTALL_PATH"
$STD npm ci
$STD npm run build
msg_ok "Built Actual-Budget-Prometheus-Exporter"
msg_info "Starting service"
systemctl start actual-budget-prometheus-exporter
msg_ok "Started service"
msg_ok "Updated successfully!"
exit
fi
}
# ==============================================================================
# INSTALL
# ==============================================================================
function install() {
read -erp "Enter URL of Actual Budget server, example: (http://127.0.0.1:5006): " ACTUAL_SERVER_URL
read -rsp "Enter Actual Budget server password: " ACTUAL_PASSWORD
printf "\n"
echo -e "${TAB}${INFO} Find the Sync ID in Actual under Settings > Advanced settings > Sync ID"
read -erp "Enter Budget Sync ID: " ACTUAL_BUDGET_ID_1
read -rsp "Enter E2E encryption password (leave empty if end-to-end encryption is disabled): " ACTUAL_E2E_PASSWORD_1
printf "\n"
read -erp "Enter metrics port (default: 3001): " PORT_INPUT
PORT="${PORT_INPUT:-3001}"
# build-essential and python3 are required to compile better-sqlite3
# (native dependency of @actual-app/api) when no prebuilt binary is available.
msg_info "Installing Dependencies"
$STD apt install -y build-essential python3
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "actual-budget-prometheus-exporter" "sakowicz/actual-budget-prometheus-exporter" "tarball" "latest"
NODE_VERSION="22" setup_nodejs
msg_info "Building Actual-Budget-Prometheus-Exporter"
cd "$INSTALL_PATH"
$STD npm ci
$STD npm run build
msg_ok "Built Actual-Budget-Prometheus-Exporter"
msg_info "Creating configuration"
cat <<EOF >"$CONFIG_PATH"
# https://github.com/sakowicz/actual-budget-prometheus-exporter
ACTUAL_SERVER_URL="${ACTUAL_SERVER_URL}"
ACTUAL_PASSWORD="${ACTUAL_PASSWORD}"
ACTUAL_BUDGET_ID_1="${ACTUAL_BUDGET_ID_1}"
ACTUAL_E2E_PASSWORD_1="${ACTUAL_E2E_PASSWORD_1}"
PORT="${PORT}"
# Optional: friendly label for the budget shown in the exported metrics
# ACTUAL_BUDGET_NAME_1=""
# Optional: monitor additional budgets by incrementing the numeric suffix
# ACTUAL_BUDGET_ID_2=""
# ACTUAL_E2E_PASSWORD_2=""
# ACTUAL_BUDGET_NAME_2=""
# Optional: set to 0 to accept a self-signed TLS certificate on the Actual server
# NODE_TLS_REJECT_UNAUTHORIZED="0"
EOF
msg_ok "Created configuration"
msg_info "Creating service"
cat <<EOF >"$SERVICE_PATH"
[Unit]
Description=Actual Budget Prometheus Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=root
WorkingDirectory=$INSTALL_PATH
EnvironmentFile=$CONFIG_PATH
ExecStart=/usr/bin/node $INSTALL_PATH/dist/app.js
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now actual-budget-prometheus-exporter
msg_ok "Created and started service"
# Create update script
msg_info "Creating update script"
ensure_usr_local_bin_persist
cat <<'UPDATEEOF' >/usr/local/bin/update_actual-budget-prometheus-exporter
#!/usr/bin/env bash
# actual-budget-prometheus-exporter Update Script
type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/actual-budget-prometheus-exporter.sh)"
UPDATEEOF
chmod +x /usr/local/bin/update_actual-budget-prometheus-exporter
msg_ok "Created update script (/usr/local/bin/update_actual-budget-prometheus-exporter)"
echo ""
msg_ok "Actual-Budget-Prometheus-Exporter installed successfully"
msg_ok "Metrics: ${BL}http://${LOCAL_IP}:${PORT}/metrics${CL}"
msg_ok "Config: ${BL}${CONFIG_PATH}${CL}"
}
# ==============================================================================
# MAIN
# ==============================================================================
header_info
ensure_usr_local_bin_persist
get_lxc_ip
# Handle type=update (called from update script)
if [[ "${type:-}" == "update" ]]; then
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/dist/app.js" ]]; then
update
else
msg_error "Actual-Budget-Prometheus-Exporter is not installed. Nothing to update."
exit 233
fi
exit 0
fi
# Check if already installed
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/dist/app.js" ]]; then
msg_warn "Actual-Budget-Prometheus-Exporter is already installed."
echo ""
echo -n "${TAB}Uninstall Actual-Budget-Prometheus-Exporter? (y/N): "
read -r uninstall_prompt
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
uninstall
exit 0
fi
echo -n "${TAB}Update Actual-Budget-Prometheus-Exporter? (y/N): "
read -r update_prompt
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
update
exit 0
fi
msg_warn "No action selected. Exiting."
exit 0
fi
# Fresh installation
msg_warn "Actual-Budget-Prometheus-Exporter is not installed."
echo ""
echo -e "${TAB}${INFO} This will install:"
echo -e "${TAB} - Actual Budget Prometheus Exporter (Node.js source build)"
echo -e "${TAB} - Systemd service"
echo ""
echo -n "${TAB}Install Actual-Budget-Prometheus-Exporter? (y/N): "
read -r install_prompt
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
install
else
msg_warn "Installation cancelled. Exiting."
exit 0
fi