# 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"]
|
set shell := ["bash", "-euo", "pipefail", "-c"]
|
||||||
# экспортируем все just-переменные в окружение
|
# экспортируем все just-переменные в окружение
|
||||||
set export
|
set export
|
||||||
|
|
|
||||||
137
bootstrap.sh
137
bootstrap.sh
|
|
@ -1,15 +1,15 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# bootstrap.sh
|
# bootstrap.sh
|
||||||
# Уровень 0: устанавливает just и uv (если отсутствуют / устарели),
|
# Уровень 0: устанавливает uv (если отсутствует / устарел),
|
||||||
# затем передаёт управление just host::bootstrap для полной инициализации.
|
# затем ставит just через uv tool и передаёт управление just host::bootstrap.
|
||||||
#
|
#
|
||||||
# Поддерживаемые платформы:
|
# Поддерживаемые платформы:
|
||||||
# Linux — bash (native)
|
# Linux — bash (native)
|
||||||
# macOS — bash (native)
|
# macOS — bash (native)
|
||||||
# Windows — Git Bash (поставляется вместе с git)
|
# Windows — Git Bash (поставляется вместе с git)
|
||||||
#
|
#
|
||||||
# Требования: bash >= 4, curl (Linux/macOS) или winget/powershell (Windows)
|
# Требования: bash >= 4, curl (Linux/macOS) или powershell (Windows)
|
||||||
# Запуск: ./bootstrap.sh
|
# Запуск: ./bootstrap.sh
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
@ -70,13 +70,12 @@ semver_ge() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# 3. Платформо-зависимая установка just
|
# 3. Платформо-зависимая установка uv
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
install_just_linux() {
|
install_uv_linux() {
|
||||||
info "Installing just ${JUST_VERSION} -> ${LINUX_INSTALL_DIR}"
|
info "Installing uv -> ${LINUX_INSTALL_DIR}"
|
||||||
mkdir -p "${LINUX_INSTALL_DIR}"
|
mkdir -p "${LINUX_INSTALL_DIR}"
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh \
|
curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="${LINUX_INSTALL_DIR}" sh
|
||||||
| bash -s -- --tag "${JUST_VERSION}" --to "${LINUX_INSTALL_DIR}"
|
|
||||||
|
|
||||||
if ! echo "${PATH}" | grep -q "${LINUX_INSTALL_DIR}"; then
|
if ! echo "${PATH}" | grep -q "${LINUX_INSTALL_DIR}"; then
|
||||||
warn "${LINUX_INSTALL_DIR} not in PATH -- adding for this session"
|
warn "${LINUX_INSTALL_DIR} not in PATH -- adding for this session"
|
||||||
|
|
@ -86,55 +85,6 @@ install_just_linux() {
|
||||||
fi
|
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() {
|
install_uv_macos() {
|
||||||
if command -v brew &>/dev/null; then
|
if command -v brew &>/dev/null; then
|
||||||
info "Installing uv via Homebrew..."
|
info "Installing uv via Homebrew..."
|
||||||
|
|
@ -145,7 +95,6 @@ install_uv_macos() {
|
||||||
}
|
}
|
||||||
|
|
||||||
install_uv_windows() {
|
install_uv_windows() {
|
||||||
# В Git Bash можно вызвать PowerShell напрямую
|
|
||||||
if command -v powershell.exe &>/dev/null; then
|
if command -v powershell.exe &>/dev/null; then
|
||||||
info "Installing uv via PowerShell..."
|
info "Installing uv via PowerShell..."
|
||||||
powershell.exe -ExecutionPolicy ByPass \
|
powershell.exe -ExecutionPolicy ByPass \
|
||||||
|
|
@ -156,8 +105,6 @@ install_uv_windows() {
|
||||||
echo " Then restart Git Bash and re-run: ./bootstrap.sh"
|
echo " Then restart Git Bash and re-run: ./bootstrap.sh"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
# После winget-стиля установки нужно добавить путь в PATH для текущей сессии Git Bash
|
|
||||||
# uv на Windows кладёт себя в %USERPROFILE%\.local\bin
|
|
||||||
UV_WIN_DIR="${USERPROFILE}/.local/bin"
|
UV_WIN_DIR="${USERPROFILE}/.local/bin"
|
||||||
if [[ -d "${UV_WIN_DIR}" ]] && ! echo "${PATH}" | grep -q "${UV_WIN_DIR}"; then
|
if [[ -d "${UV_WIN_DIR}" ]] && ! echo "${PATH}" | grep -q "${UV_WIN_DIR}"; then
|
||||||
export PATH="${UV_WIN_DIR}:${PATH}"
|
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 ---"
|
info "--- Checking uv ---"
|
||||||
UV_OK=false
|
UV_OK=false
|
||||||
|
|
||||||
|
|
@ -224,7 +142,6 @@ if [[ "${UV_OK}" == "false" ]]; then
|
||||||
windows) install_uv_windows ;;
|
windows) install_uv_windows ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Верифицировать установку
|
|
||||||
if command -v uv &>/dev/null; then
|
if command -v uv &>/dev/null; then
|
||||||
UV_CURRENT="$(uv --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
|
UV_CURRENT="$(uv --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')"
|
||||||
success "uv ${UV_CURRENT} installed"
|
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"
|
warn "Open a new terminal session and re-run: ./bootstrap.sh"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo ""
|
|
||||||
fi
|
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 ""
|
echo ""
|
||||||
info "Delegating to: just host::bootstrap"
|
info "Delegating to: just host::bootstrap"
|
||||||
|
|
|
||||||
|
|
@ -69,19 +69,19 @@ check-deps:
|
||||||
case "${PLATFORM}" in
|
case "${PLATFORM}" in
|
||||||
linux)
|
linux)
|
||||||
case "$tool" in
|
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" ;;
|
uv) echo "curl -LsSf https://astral.sh/uv/install.sh | sh" ;;
|
||||||
docker) echo "https://docs.docker.com/engine/install/ubuntu/" ;;
|
docker) echo "https://docs.docker.com/engine/install/ubuntu/" ;;
|
||||||
esac ;;
|
esac ;;
|
||||||
macos)
|
macos)
|
||||||
case "$tool" in
|
case "$tool" in
|
||||||
just) echo "brew install just" ;;
|
just) echo "uv tool install 'rust-just=={{JUST_MIN}}'" ;;
|
||||||
uv) echo "brew install uv" ;;
|
uv) echo "brew install uv" ;;
|
||||||
docker) echo "brew install --cask docker" ;;
|
docker) echo "brew install --cask docker" ;;
|
||||||
esac ;;
|
esac ;;
|
||||||
windows)
|
windows)
|
||||||
case "$tool" in
|
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"' ;;
|
uv) echo 'powershell -c "irm https://astral.sh/uv/install.ps1 | iex"' ;;
|
||||||
docker) echo "winget install --id Docker.DockerDesktop (в PowerShell)" ;;
|
docker) echo "winget install --id Docker.DockerDesktop (в PowerShell)" ;;
|
||||||
esac ;;
|
esac ;;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue