From 19123d10e086cdda1f830efd2055ec92dbf69d82 Mon Sep 17 00:00:00 2001 From: pablomendezroyo Date: Tue, 24 Feb 2026 08:44:33 +0100 Subject: [PATCH 1/3] Add macOS compatibility for DAppNode profile and improve alias handling --- .dappnode_profile | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/.dappnode_profile b/.dappnode_profile index baefcef..538e868 100755 --- a/.dappnode_profile +++ b/.dappnode_profile @@ -18,31 +18,50 @@ export HTTPS_VERSION="${HTTPS:-0.2.2}" export DAPPNODE_DIR="/usr/src/dappnode" export DAPPNODE_CORE_DIR="${DAPPNODE_DIR}/DNCORE" +# macOS host-mode helpers (this file is often sourced in a shell) +if [ "$(uname -s 2>/dev/null)" = "Darwin" ]; then + export DISABLE_HOST_SCRIPTS="${DISABLE_HOST_SCRIPTS:-true}" + + for user_home in /Users/*; do + [ -d "$user_home" ] || continue + [ -d "$user_home/dappnode/DNCORE" ] || continue + export DAPPNODE_DIR="$user_home/dappnode" + export DAPPNODE_CORE_DIR="$user_home/dappnode/DNCORE" + break + done +fi + #!ISOBUILD Do not modify, variables above imported for ISO build -DNCORE_YMLS=$(find $DAPPNODE_CORE_DIR -name "docker-compose-*.yml" -printf "-f %p ") -# shellcheck disable=SC2207 -# shellcheck disable=SC2034 -DNCORE_YMLS_ARRAY=($(find /usr/src/dappnode/DNCORE -name "docker-compose-*.yml" | sort)) + +DNCORE_YMLS="" +if [ -d "$DAPPNODE_CORE_DIR" ]; then + DNCORE_YMLS=$(find "$DAPPNODE_CORE_DIR" -name "docker-compose-*.yml" -print | sort | sed 's|^|-f |' | tr '\n' ' ') +fi # Returns docker core containers status -alias dappnode_status='docker compose $DNCORE_YMLS ps' -# Stop docker core containers -alias dappnode_stop='docker compose $DNCORE_YMLS stop && docker stop $(docker container ls -a -q -f name=DAppNode*)' -# Start docker core containers -alias dappnode_start='docker compose $DNCORE_YMLS up -d && docker start $(docker container ls -a -q -f name=DAppNode*)' -# Remove docker core containers. This does not remove named volumes -alias dappnode_down='docker compose $DNCORE_YMLS down' +# NOTE: zsh does not word-split `$DNCORE_YMLS` by default, so use `${=DNCORE_YMLS}` there. +if [ -n "${ZSH_VERSION:-}" ]; then + alias dappnode_status='docker compose ${=DNCORE_YMLS} ps' + alias dappnode_stop='docker compose ${=DNCORE_YMLS} stop && docker stop $(docker container ls -a -q -f name=DAppNode*)' + alias dappnode_start='docker compose ${=DNCORE_YMLS} up -d && docker start $(docker container ls -a -q -f name=DAppNode*)' + alias dappnode_down='docker compose ${=DNCORE_YMLS} down' +else + alias dappnode_status='docker compose $DNCORE_YMLS ps' + alias dappnode_stop='docker compose $DNCORE_YMLS stop && docker stop $(docker container ls -a -q -f name=DAppNode*)' + alias dappnode_start='docker compose $DNCORE_YMLS up -d && docker start $(docker container ls -a -q -f name=DAppNode*)' + alias dappnode_down='docker compose $DNCORE_YMLS down' +fi # Return open-vpn credentials from a specific user. e.g: dappnode_get dappnode_admin alias dappnode_openvpn_get='docker exec -i DAppNodeCore-vpn.dnp.dappnode.eth vpncli get' # Return open-vpn admin credentials alias dappnode_openvpn='docker exec -i DAppNodeCore-vpn.dnp.dappnode.eth getAdminCredentials' # Return wifi credentials (ssid and password) -alias dappnode_wifi='cat /usr/src/dappnode/DNCORE/docker-compose-wifi.yml | grep "SSID\|WPA_PASSPHRASE"' +alias dappnode_wifi='cat "$DAPPNODE_CORE_DIR/docker-compose-wifi.yml" | grep "SSID\|WPA_PASSPHRASE"' # Return remote credentials in plain text. OPTIONS: # --qr (QR format). --local (local creds for NAT loopback issues) alias dappnode_wireguard='docker exec -i DAppNodeCore-api.wireguard.dnp.dappnode.eth getWireguardCredentials' # Execute access_credentials.sh script to check for connectivity methods -alias dappnode_connect='/usr/bin/bash /usr/src/dappnode/scripts/dappnode_access_credentials.sh' +alias dappnode_connect='/usr/bin/bash "$DAPPNODE_DIR/scripts/dappnode_access_credentials.sh"' # Return all available commands alias dappnode_help='echo -e "\n\tDAppNode commands available:\n\n\tdappnode_help\t\tprints out this message\n\n\tdappnode_wifi\t\tget wifi credentials (SSID and password)\n\n\tdappnode_openvpn\tget Open VPN credentials\n\n\tdappnode_wireguard\tget Wireguard VPN credentials (dappnode_wireguard --help for more info)\n\n\tdappnode_connect\tcheck connectivity methods available in DAppNode\n\n\tdappnode_status\t\tget status of dappnode containers\n\n\tdappnode_start\t\tstart dappnode containers\n\n\tdappnode_stop\t\tstop dappnode containers\n"' # Compose alias for backward compatibility From 591b5d60fc616e7499e3f2c900b8c6d133819b37 Mon Sep 17 00:00:00 2001 From: pablomendezroyo Date: Wed, 25 Feb 2026 07:44:46 +0100 Subject: [PATCH 2/3] Add shell compatibility checks for .dappnode_profile in CI workflow --- .github/workflows/linter.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 58b25b8..4c27796 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -33,3 +33,33 @@ jobs: FILTER_REGEX_EXCLUDE: .github/* DEFAULT_BRANCH: master GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + shell-compat: + name: Shell compatibility (.dappnode_profile) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Install zsh (Ubuntu) + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y zsh + + - name: Parse check (bash) + run: bash -n .dappnode_profile + + - name: Parse check (zsh) + run: zsh -n .dappnode_profile + + - name: Source check (bash) + run: bash -lc 'set -euo pipefail; source ./.dappnode_profile' + + - name: Source check (zsh) + run: zsh -lc 'set -e; source ./.dappnode_profile; alias dappnode_status >/dev/null' From 4eddbd5efb511f8ba648c99a884199a1f371aa49 Mon Sep 17 00:00:00 2001 From: pablomendezroyo Date: Wed, 25 Feb 2026 07:45:10 +0100 Subject: [PATCH 3/3] Update actions/checkout to v6 in linter workflow --- .github/workflows/linter.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 4c27796..0307d51 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: # Full git history is needed to get a proper list of changed files within `super-linter` fetch-depth: 0 @@ -44,7 +44,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Install zsh (Ubuntu) if: runner.os == 'Linux'