# 3.
- На хосте теперь происходит установка just с помощью uv, который и так устанавливается до этого
This commit is contained in:
parent
d459459524
commit
33aabbcce1
4 changed files with 49 additions and 134 deletions
38
.vscode/launch.json
vendored
38
.vscode/launch.json
vendored
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
2
Justfile
2
Justfile
|
|
@ -12,6 +12,8 @@
|
|||
# === Глобальные настройки ===
|
||||
# Все модули наследуют эти настройки
|
||||
|
||||
# Bash вместо sh; -e прерывает при ошибке, -u — при необъявленной переменной,
|
||||
# -o pipefail — при ошибке в любом элементе пайпа
|
||||
set shell := ["bash", "-euo", "pipefail", "-c"]
|
||||
# экспортируем все just-переменные в окружение
|
||||
set export
|
||||
|
|
|
|||
137
bootstrap.sh
137
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"
|
||||
|
|
|
|||
|
|
@ -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 ;;
|
||||
|
|
|
|||
Loading…
Reference in a new issue