- На хосте теперь происходит установка just с помощью uv, который и так устанавливается до этого
This commit is contained in:
Dmitry Akimov 2026-03-15 14:01:45 +03:00
parent d459459524
commit 33aabbcce1
4 changed files with 49 additions and 134 deletions

38
.vscode/launch.json vendored
View file

@ -1,38 +0,0 @@
{
"version": "0.2.0",
"configurations": [
{
"preLaunchTask": "CopyExecutableDebug",
"type": "probe-rs-debug",
"request": "launch",
"name": "Local STM32F4 via probe-rs",
"cwd": "${workspaceFolder}",
"connectUnderReset": false,
"server": "127.0.0.1:50000",
"chip": "STM32F407VE",
"speed": 4000,
"wireProtocol": "Swd",
"flashingConfig": {
"flashingEnabled": true,
"haltAfterReset": true,
"formatOptions": {}
},
"coreConfigs": [
{
"coreIndex": 0,
"programBinary": "/tmp/firmware.elf",
"svdFile": "${workspaceFolder}/STM32F407.svd",
"rttEnabled": true,
"rttChannelFormats": [
{
"channelNumber": 0,
"dataFormat": "String",
"showTimestamps": true
}
]
}
],
"consoleLogLevel": "Console"
}
]
}

View file

@ -12,6 +12,8 @@
# === Глобальные настройки ===
# Все модули наследуют эти настройки
# Bash вместо sh; -e прерывает при ошибке, -u — при необъявленной переменной,
# -o pipefail — при ошибке в любом элементе пайпа
set shell := ["bash", "-euo", "pipefail", "-c"]
# экспортируем все just-переменные в окружение
set export

View file

@ -1,15 +1,15 @@
#!/usr/bin/env bash
# =============================================================================
# bootstrap.sh
# Уровень 0: устанавливает just и uv (если отсутствуют / устарели),
# затем передаёт управление just host::bootstrap для полной инициализации.
# Уровень 0: устанавливает uv (если отсутствует / устарел),
# затем ставит just через uv tool и передаёт управление just host::bootstrap.
#
# Поддерживаемые платформы:
# Linux — bash (native)
# macOS — bash (native)
# Windows — Git Bash (поставляется вместе с git)
#
# Требования: bash >= 4, curl (Linux/macOS) или winget/powershell (Windows)
# Требования: bash >= 4, curl (Linux/macOS) или powershell (Windows)
# Запуск: ./bootstrap.sh
# =============================================================================
set -euo pipefail
@ -70,13 +70,12 @@ semver_ge() {
}
# -----------------------------------------------------------------------------
# 3. Платформо-зависимая установка just
# 3. Платформо-зависимая установка uv
# -----------------------------------------------------------------------------
install_just_linux() {
info "Installing just ${JUST_VERSION} -> ${LINUX_INSTALL_DIR}"
install_uv_linux() {
info "Installing uv -> ${LINUX_INSTALL_DIR}"
mkdir -p "${LINUX_INSTALL_DIR}"
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh \
| bash -s -- --tag "${JUST_VERSION}" --to "${LINUX_INSTALL_DIR}"
curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="${LINUX_INSTALL_DIR}" sh
if ! echo "${PATH}" | grep -q "${LINUX_INSTALL_DIR}"; then
warn "${LINUX_INSTALL_DIR} not in PATH -- adding for this session"
@ -86,55 +85,6 @@ install_just_linux() {
fi
}
install_just_macos() {
if command -v brew &>/dev/null; then
info "Installing just via Homebrew..."
brew install just
else
install_just_linux
fi
}
install_just_windows() {
if command -v winget &>/dev/null; then
info "Installing just via winget..."
winget install --id Casey.Just \
--accept-package-agreements --accept-source-agreements || {
error "winget install failed."
echo " Run manually in PowerShell: winget install --id Casey.Just"
echo " Then restart Git Bash and re-run: ./bootstrap.sh"
exit 1
}
warn "Restart Git Bash so the new PATH from winget takes effect,"
warn "then re-run: ./bootstrap.sh"
exit 0
else
error "winget not found."
echo ""
echo " Options to install just on Windows:"
echo " 1. Install 'App Installer' from Microsoft Store (brings winget)"
echo " 2. Download just.exe manually: https://github.com/casey/just/releases"
echo " Place it in a directory that is in your Git Bash PATH"
exit 1
fi
}
# -----------------------------------------------------------------------------
# 4. Платформо-зависимая установка uv
# -----------------------------------------------------------------------------
install_uv_linux() {
info "Installing uv -> ${LINUX_INSTALL_DIR}"
mkdir -p "${LINUX_INSTALL_DIR}"
# Официальный установщик astral.sh кладёт uv в ~/.local/bin по умолчанию
curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="${LINUX_INSTALL_DIR}" sh
if ! echo "${PATH}" | grep -q "${LINUX_INSTALL_DIR}"; then
warn "${LINUX_INSTALL_DIR} not in PATH -- adding for this session"
export PATH="${LINUX_INSTALL_DIR}:${PATH}"
fi
}
install_uv_macos() {
if command -v brew &>/dev/null; then
info "Installing uv via Homebrew..."
@ -145,7 +95,6 @@ install_uv_macos() {
}
install_uv_windows() {
# В Git Bash можно вызвать PowerShell напрямую
if command -v powershell.exe &>/dev/null; then
info "Installing uv via PowerShell..."
powershell.exe -ExecutionPolicy ByPass \
@ -156,8 +105,6 @@ install_uv_windows() {
echo " Then restart Git Bash and re-run: ./bootstrap.sh"
exit 1
}
# После winget-стиля установки нужно добавить путь в PATH для текущей сессии Git Bash
# uv на Windows кладёт себя в %USERPROFILE%\.local\bin
UV_WIN_DIR="${USERPROFILE}/.local/bin"
if [[ -d "${UV_WIN_DIR}" ]] && ! echo "${PATH}" | grep -q "${UV_WIN_DIR}"; then
export PATH="${UV_WIN_DIR}:${PATH}"
@ -173,37 +120,8 @@ install_uv_windows() {
}
# -----------------------------------------------------------------------------
# 5. Проверить / установить just
# 4. Проверить / установить uv
# -----------------------------------------------------------------------------
info "--- Checking just ---"
JUST_OK=false
if command -v just &>/dev/null; then
JUST_CURRENT="$(just --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
if semver_ge "${JUST_CURRENT}" "${JUST_VERSION}"; then
success "just ${JUST_CURRENT} (>= ${JUST_VERSION} required)"
JUST_OK=true
else
warn "just ${JUST_CURRENT} is outdated (need >= ${JUST_VERSION}), reinstalling..."
fi
fi
if [[ "${JUST_OK}" == "false" ]]; then
case "${PLATFORM}" in
linux) install_just_linux ;;
macos) install_just_macos ;;
windows) install_just_windows ;;
esac
JUST_CURRENT="$(just --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
success "just ${JUST_CURRENT} installed"
echo ""
fi
# -----------------------------------------------------------------------------
# 6. Проверить / установить uv
# -----------------------------------------------------------------------------
echo ""
info "--- Checking uv ---"
UV_OK=false
@ -224,7 +142,6 @@ if [[ "${UV_OK}" == "false" ]]; then
windows) install_uv_windows ;;
esac
# Верифицировать установку
if command -v uv &>/dev/null; then
UV_CURRENT="$(uv --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
success "uv ${UV_CURRENT} installed"
@ -233,11 +150,45 @@ if [[ "${UV_OK}" == "false" ]]; then
warn "Open a new terminal session and re-run: ./bootstrap.sh"
exit 1
fi
echo ""
fi
# -----------------------------------------------------------------------------
# 7. Передать управление just host::bootstrap для дальнейшей настройки
# 5. Установить / обновить just через uv tool
# -----------------------------------------------------------------------------
echo ""
info "--- Checking just ---"
JUST_OK=false
if command -v just &>/dev/null; then
JUST_CURRENT="$(just --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
if semver_ge "${JUST_CURRENT}" "${JUST_VERSION}"; then
success "just ${JUST_CURRENT} (>= ${JUST_VERSION} required)"
JUST_OK=true
else
warn "just ${JUST_CURRENT} is outdated (need >= ${JUST_VERSION}), reinstalling via uv..."
fi
fi
if [[ "${JUST_OK}" == "false" ]]; then
info "Installing just ${JUST_VERSION} via uv tool..."
uv tool install "rust-just==${JUST_VERSION}"
# uv tool кладёт бинарники в ~/.local/bin (Linux/macOS) или %USERPROFILE%\.local\bin (Windows)
# Убедимся, что путь в PATH текущей сессии
UV_TOOL_BIN="$(uv tool dir --bin 2>/dev/null || echo "${LINUX_INSTALL_DIR}")"
if ! echo "${PATH}" | grep -q "${UV_TOOL_BIN}"; then
warn "${UV_TOOL_BIN} not in PATH -- adding for this session"
warn "Add to your shell rc to make permanent:"
warn " export PATH=\"${UV_TOOL_BIN}:\$PATH\""
export PATH="${UV_TOOL_BIN}:${PATH}"
fi
JUST_CURRENT="$(just --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
success "just ${JUST_CURRENT} installed"
fi
# -----------------------------------------------------------------------------
# 6. Передать управление just host::bootstrap для дальнейшей настройки
# -----------------------------------------------------------------------------
echo ""
info "Delegating to: just host::bootstrap"

View file

@ -69,19 +69,19 @@ check-deps:
case "${PLATFORM}" in
linux)
case "$tool" in
just) echo "curl -sSf https://just.systems/install.sh | bash -s -- --to ~/.local/bin" ;;
just) echo "uv tool install 'rust-just=={{JUST_MIN}}'" ;;
uv) echo "curl -LsSf https://astral.sh/uv/install.sh | sh" ;;
docker) echo "https://docs.docker.com/engine/install/ubuntu/" ;;
esac ;;
macos)
case "$tool" in
just) echo "brew install just" ;;
just) echo "uv tool install 'rust-just=={{JUST_MIN}}'" ;;
uv) echo "brew install uv" ;;
docker) echo "brew install --cask docker" ;;
esac ;;
windows)
case "$tool" in
just) echo "winget install --id Casey.Just (в PowerShell)" ;;
just) echo "uv tool install 'rust-just=={{JUST_MIN}}'" ;;
uv) echo 'powershell -c "irm https://astral.sh/uv/install.ps1 | iex"' ;;
docker) echo "winget install --id Docker.DockerDesktop (в PowerShell)" ;;
esac ;;