1
0
mirror of https://github.com/tw93/Mole.git synced 2026-03-22 23:40:09 +00:00

feat: show nightly channel in version output

Refs #517
This commit is contained in:
tw93
2026-03-02 10:54:44 +08:00
parent 0a8f92cf83
commit 27a2cc5927
3 changed files with 83 additions and 0 deletions

View File

@@ -266,6 +266,45 @@ get_installed_version() {
fi
}
resolve_install_channel() {
case "${MOLE_VERSION:-}" in
main | latest)
printf 'nightly\n'
return 0
;;
dev)
printf 'dev\n'
return 0
;;
esac
if [[ "${MOLE_EDGE_INSTALL:-}" == "true" ]]; then
printf 'nightly\n'
return 0
fi
printf 'stable\n'
}
write_install_channel_metadata() {
local channel="$1"
local metadata_file="$CONFIG_DIR/install_channel"
local tmp_file
tmp_file=$(mktemp "${CONFIG_DIR}/install_channel.XXXXXX") || return 1
{
printf 'CHANNEL=%s\n' "$channel"
} > "$tmp_file" || {
rm -f "$tmp_file" 2> /dev/null || true
return 1
}
mv -f "$tmp_file" "$metadata_file" || {
rm -f "$tmp_file" 2> /dev/null || true
return 1
}
}
# CLI parsing (supports main/latest and version tokens).
parse_args() {
local -a args=("$@")
@@ -712,6 +751,12 @@ perform_install() {
installed_version="$source_version"
fi
local install_channel
install_channel="$(resolve_install_channel)"
if ! write_install_channel_metadata "$install_channel"; then
log_warning "Could not write install channel metadata"
fi
# Edge installs get a suffix to make the version explicit.
if [[ "${MOLE_EDGE_INSTALL:-}" == "true" ]]; then
installed_version="${installed_version}-edge"
@@ -795,6 +840,12 @@ perform_update() {
updated_version="$target_version"
fi
local install_channel
install_channel="$(resolve_install_channel)"
if ! write_install_channel_metadata "$install_channel"; then
log_warning "Could not write install channel metadata"
fi
echo -e "${GREEN}${ICON_SUCCESS}${NC} Updated to latest version, $updated_version"
}

18
mole
View File

@@ -87,6 +87,18 @@ is_homebrew_install() {
return 1
}
get_install_channel() {
local channel_file="$SCRIPT_DIR/install_channel"
local channel="stable"
if [[ -f "$channel_file" ]]; then
channel=$(sed -n 's/^CHANNEL=\(.*\)$/\1/p' "$channel_file" | head -1)
fi
case "$channel" in
nightly | dev | stable) printf '%s\n' "$channel" ;;
*) printf 'stable\n' ;;
esac
}
# Background update notice
check_for_updates() {
local msg_cache="$HOME/.cache/mole/update_message"
@@ -205,7 +217,13 @@ show_version() {
install_method="Homebrew"
fi
local channel
channel=$(get_install_channel)
printf '\nMole version %s\n' "$VERSION"
if [[ "$channel" == "nightly" ]]; then
printf 'Channel: Nightly\n'
fi
printf 'macOS: %s\n' "$os_ver"
printf 'Architecture: %s\n' "$arch"
printf 'Kernel: %s\n' "$kernel"

View File

@@ -14,6 +14,7 @@ setup_file() {
}
teardown_file() {
rm -f "$PROJECT_ROOT/install_channel"
rm -rf "$HOME"
if [[ -n "${ORIGINAL_HOME:-}" ]]; then
export HOME="$ORIGINAL_HOME"
@@ -47,6 +48,7 @@ SCRIPT
setup() {
rm -rf "$HOME/.config"
mkdir -p "$HOME"
rm -f "$PROJECT_ROOT/install_channel"
}
@test "mole --help prints command overview" {
@@ -63,6 +65,18 @@ setup() {
[[ "$output" == *"$expected_version"* ]]
}
@test "mole --version shows nightly channel metadata" {
expected_version="$(grep '^VERSION=' "$PROJECT_ROOT/mole" | head -1 | sed 's/VERSION=\"\(.*\)\"/\1/')"
cat > "$PROJECT_ROOT/install_channel" <<'EOF'
CHANNEL=nightly
EOF
run env HOME="$HOME" "$PROJECT_ROOT/mole" --version
[ "$status" -eq 0 ]
[[ "$output" == *"Mole version $expected_version"* ]]
[[ "$output" == *"Channel: Nightly"* ]]
}
@test "mole unknown command returns error" {
run env HOME="$HOME" "$PROJECT_ROOT/mole" unknown-command
[ "$status" -ne 0 ]