Refresh screenshot galleries and repair portal upgrades
Use the September 30 hero on the website and README, add a shared screenshot gallery, and remove the old showcase images. Build image links locally and clean generated site output. Back up the known development portal override during installation and report custom overrides before building. Keep source selections clear while letting blur show through unselected rows.
This commit is contained in:
1 parent
3d950a0411
commit
891727ec7a
22 files changed
+142
-14
No files matched your search
@@ -13,6 +13,7 @@ OUTPUT = ROOT / 'build' / 'site'
|
||||
REPO = 'https://github.com/ferese-wm/ferese'
|
||||
PAGES = [
|
||||
('index', 'Introduction', ROOT / 'site/content/index.md'),
|
||||
('screenshots', 'Screenshots', ROOT / 'docs/screenshots.md'),
|
||||
('why-ferese', 'Why Ferese', ROOT / 'docs/why-ferese.md'),
|
||||
('installation', 'Installation', ROOT / 'docs/installation.md'),
|
||||
('configuration', 'Configuration', ROOT / 'docs/configuration.md'),
|
||||
@@ -27,7 +28,9 @@ PAGES = [
|
||||
('development', 'Development', ROOT / 'docs/development.md'),
|
||||
]
|
||||
md = MarkdownIt('commonmark', {'html': False}).enable('table')
|
||||
OUTPUT.mkdir(parents=True, exist_ok=True)
|
||||
if OUTPUT.exists():
|
||||
shutil.rmtree(OUTPUT)
|
||||
OUTPUT.mkdir(parents=True)
|
||||
for name in ('index.html', 'styles.css', 'app.js'):
|
||||
shutil.copy2(ROOT / 'site' / name, OUTPUT / name)
|
||||
(OUTPUT / 'assets').mkdir(exist_ok=True)
|
||||
@@ -46,7 +49,10 @@ def rewrite_link(href, source):
|
||||
basename = Path(url.path).stem
|
||||
if url.path.endswith('.md') and basename in {page[0] for page in PAGES}:
|
||||
return f'{basename}.html' + (f'#{url.fragment}' if url.fragment else '')
|
||||
destination = (source.parent / url.path).resolve().relative_to(ROOT)
|
||||
path = (source.parent / url.path).resolve()
|
||||
if path.is_relative_to(ROOT / 'docs/images'):
|
||||
return '../assets/' + path.relative_to(ROOT / 'docs/images').as_posix()
|
||||
destination = path.relative_to(ROOT)
|
||||
return f'{REPO}/blob/main/{destination}' + (f'#{url.fragment}' if url.fragment else '')
|
||||
|
||||
|
||||
|
||||
@@ -21,6 +21,27 @@ authentication is requested only after a successful build.
|
||||
EOF
|
||||
}
|
||||
|
||||
check_user_portal_override() {
|
||||
local override=$1 user_home=$2
|
||||
[[ -f $override ]] || return 0
|
||||
if ! cmp -s -- <(printf '%s\n' '[Service]' 'ExecStart=' \
|
||||
"ExecStart=$user_home/.local/libexec/ferese/xdg-desktop-portal-ferese") "$override"; then
|
||||
echo "Custom portal override takes precedence over the installation: $override" >&2
|
||||
echo 'Update its ExecStart to /usr/local/lib/ferese/current/xdg-desktop-portal-ferese before installing.' >&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
backup_user_portal_override() {
|
||||
local override=$1 user_home=$2 release=$3
|
||||
[[ -f $override ]] || return 0
|
||||
check_user_portal_override "$override" "$user_home" || return 1
|
||||
local backup="$override.before-$release"
|
||||
[[ ! -e $backup ]] || { echo "Portal override backup already exists: $backup" >&2; return 1; }
|
||||
mv -- "$override" "$backup"
|
||||
echo "Backed up old development portal override: $backup"
|
||||
}
|
||||
|
||||
fail() { echo "ferese installer: $*" >&2; exit 1; }
|
||||
repo_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
|
||||
release_id="$(date -u +%Y%m%d-%H%M%S)-$$"
|
||||
@@ -49,6 +70,10 @@ for tool in desktop-file-validate dbus-run-session; do
|
||||
command -v "$tool" >/dev/null || fail "required command not found: $tool"
|
||||
done
|
||||
desktop-file-validate "$repo_dir/packaging/ferese.desktop"
|
||||
user_portal_override="${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user/xdg-desktop-portal-ferese.service.d/override.conf"
|
||||
if ((EUID != 0)); then
|
||||
check_user_portal_override "$user_portal_override" "$HOME" || fail 'portal service override needs attention'
|
||||
fi
|
||||
|
||||
build=(cargo build --manifest-path "$repo_dir/Cargo.toml"
|
||||
--target-dir "$repo_dir/target" --release --locked
|
||||
@@ -83,4 +108,8 @@ for name in ferese ferese-shell ferese-settings feresectl ferese-lock ferese-pol
|
||||
[[ -x $repo_dir/target/release/$name ]] || fail "missing release binary: $name"
|
||||
done
|
||||
"${installer[@]}"
|
||||
if ((EUID != 0)) && [[ -f $user_portal_override ]]; then
|
||||
backup_user_portal_override "$user_portal_override" "$HOME" "$release_id" || fail 'could not update portal override'
|
||||
systemctl --user daemon-reload || fail 'could not reload the user portal service configuration'
|
||||
fi
|
||||
echo 'Installation complete. Log out and select Ferese at your login screen, or run ferese-session from a local TTY.'
|
||||
@@ -57,6 +57,41 @@ class PortalInstallTest(unittest.TestCase):
|
||||
'replace_portal_config': str(replace).lower()},
|
||||
capture_output=True, text=True)
|
||||
|
||||
def user_override(self, content, backup=False):
|
||||
script = (REPO / 'scripts/install.sh').read_text()
|
||||
helpers = script[script.index('check_user_portal_override()'):script.index('fail() {')]
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
root = Path(directory)
|
||||
override = root / 'override.conf'
|
||||
if content is not None:
|
||||
override.write_text(content.replace('USER_HOME', directory))
|
||||
command = 'backup_user_portal_override' if backup else 'check_user_portal_override'
|
||||
result = subprocess.run(['bash', '-eu', '-c', helpers +
|
||||
f'\n{command} "$TEST_ROOT/override.conf" "$TEST_ROOT" test-release'],
|
||||
env={'TEST_ROOT': directory}, capture_output=True, text=True)
|
||||
saved = root / 'override.conf.before-test-release'
|
||||
return result, override.exists(), saved.read_text() if saved.exists() else None
|
||||
|
||||
def test_user_development_override_is_backed_up(self):
|
||||
content = '[Service]\nExecStart=\nExecStart=USER_HOME/.local/libexec/ferese/xdg-desktop-portal-ferese\n'
|
||||
result, exists, saved = self.user_override(content, backup=True)
|
||||
self.assertEqual(result.returncode, 0, result.stderr)
|
||||
self.assertFalse(exists)
|
||||
self.assertIn('/.local/libexec/ferese/xdg-desktop-portal-ferese', saved)
|
||||
|
||||
def test_custom_user_override_is_preserved_and_reported(self):
|
||||
result, exists, saved = self.user_override('[Service]\nExecStart=/custom/portal\n', backup=True)
|
||||
self.assertNotEqual(result.returncode, 0)
|
||||
self.assertTrue(exists)
|
||||
self.assertIsNone(saved)
|
||||
self.assertIn('takes precedence', result.stderr)
|
||||
|
||||
def test_missing_user_override_needs_no_backup(self):
|
||||
result, exists, saved = self.user_override(None, backup=True)
|
||||
self.assertEqual(result.returncode, 0, result.stderr)
|
||||
self.assertFalse(exists)
|
||||
self.assertIsNone(saved)
|
||||
|
||||
def test_existing_development_install_requires_explicit_replacement(self):
|
||||
portal = ('[portal]\nDBusName=org.freedesktop.impl.portal.desktop.ferese\n'
|
||||
'Interfaces=org.freedesktop.impl.portal.ScreenCast;\nUseIn=Ferese;\n')
|
||||
|
||||
Reference in new issue
Block a user