From 33aabbcce1753e514bf6236c664621851896338e Mon Sep 17 00:00:00 2001 From: Dmitry Akimov Date: Sun, 15 Mar 2026 14:01:45 +0300 Subject: [PATCH] # 3. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - На хосте теперь происходит установка just с помощью uv, который и так устанавливается до этого --- .vscode/launch.json | 38 ------------ Justfile | 2 + bootstrap.sh | 137 ++++++++++++++------------------------------ just/host.just | 6 +- 4 files changed, 49 insertions(+), 134 deletions(-) delete mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 46dd49a..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -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" - } - ] -} \ No newline at end of file diff --git a/Justfile b/Justfile index b69de58..0d193d3 100644 --- a/Justfile +++ b/Justfile @@ -12,6 +12,8 @@ # === Глобальные настройки === # Все модули наследуют эти настройки +# Bash вместо sh; -e прерывает при ошибке, -u — при необъявленной переменной, +# -o pipefail — при ошибке в любом элементе пайпа set shell := ["bash", "-euo", "pipefail", "-c"] # экспортируем все just-переменные в окружение set export diff --git a/bootstrap.sh b/bootstrap.sh index 4cd4767..89cb9ce 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -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" diff --git a/just/host.just b/just/host.just index bb8f994..f8c9289 100644 --- a/just/host.just +++ b/just/host.just @@ -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 ;;