From 188775d25d114448625bd82bf770fb0fdb0b2de2 Mon Sep 17 00:00:00 2001 From: Alexander Lanin Date: Thu, 5 Nov 2026 15:40:47 +0100 Subject: [PATCH 1/2] test(devcontainer): cover config volume parent ownership --- .../s-core-local/tests/test_default.sh | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/s-core-devcontainer/.devcontainer/s-core-local/tests/test_default.sh b/src/s-core-devcontainer/.devcontainer/s-core-local/tests/test_default.sh index ca88e87e..012f19bf 100755 --- a/src/s-core-devcontainer/.devcontainer/s-core-local/tests/test_default.sh +++ b/src/s-core-devcontainer/.devcontainer/s-core-local/tests/test_default.sh @@ -15,6 +15,26 @@ set -euo pipefail +check_config_volume_ownership() ( + test_home=$(mktemp -d) + trap 'sudo rm -rf "${test_home}"' EXIT + + # Reproduce Docker's root-owned volume parents, including private permissions. + sudo mkdir -p "${test_home}/.config/opencode" "${test_home}/.config/gh" "${test_home}/.local/share/opencode" + sudo chown root:root "${test_home}/.config" "${test_home}/.local" "${test_home}/.local/share" + sudo chmod 700 "${test_home}/.config" "${test_home}/.local" "${test_home}/.local/share" + + HOME="${test_home}" bash /devcontainer/features/s-core-local/fix_config_volume_ownership.sh + + for directory in .config .local .local/share; do + [ -O "${test_home}/${directory}" ] || return 1 + [ "$(stat -c %a "${test_home}/${directory}")" = 700 ] || return 1 + done + mkdir "${test_home}/.local/state" +) + +check "config volume parents belong to the user and retain private permissions" check_config_volume_ownership + ARCHITECTURE=$(dpkg --print-architecture) KERNEL=$(uname -s) From 7e5ab238615b83795b072e6d4c13c2cd707eb520 Mon Sep 17 00:00:00 2001 From: Alexander Lanin Date: Thu, 5 Nov 2026 15:44:44 +0100 Subject: [PATCH 2/2] test(devcontainer): propagate ownership repair failures --- .../.devcontainer/s-core-local/tests/test_default.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/s-core-devcontainer/.devcontainer/s-core-local/tests/test_default.sh b/src/s-core-devcontainer/.devcontainer/s-core-local/tests/test_default.sh index 012f19bf..5902b77b 100755 --- a/src/s-core-devcontainer/.devcontainer/s-core-local/tests/test_default.sh +++ b/src/s-core-devcontainer/.devcontainer/s-core-local/tests/test_default.sh @@ -24,7 +24,7 @@ check_config_volume_ownership() ( sudo chown root:root "${test_home}/.config" "${test_home}/.local" "${test_home}/.local/share" sudo chmod 700 "${test_home}/.config" "${test_home}/.local" "${test_home}/.local/share" - HOME="${test_home}" bash /devcontainer/features/s-core-local/fix_config_volume_ownership.sh + HOME="${test_home}" bash /devcontainer/features/s-core-local/fix_config_volume_ownership.sh || return 1 for directory in .config .local .local/share; do [ -O "${test_home}/${directory}" ] || return 1