Files
MeshCore-Posadmesh/.github/actions/setup-build-environment/action.yml
T
Jared DohrmanandClaude Opus 4.8 24fdc70acc ci: bump Python to 3.13 across build and docs workflows
Adopts upstream's 3.13 bump. Also renames the uv cache key from py311
to py313 so a 3.11-built .venv is not restored under the 3.13
interpreter, and updates .python-version so local uv runs match CI.

pyproject requires-python stays >=3.11; 3.13 satisfies it and the
existing uv.lock resolves unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 17:10:04 +10:00

120 lines
4.8 KiB
YAML

name: Setup Build Environment
description: Setup Build Environment
runs:
using: "composite"
steps:
- name: Restore uv Cache
uses: actions/cache@v5
with:
path: |
~/.cache/uv
.venv
key: ${{ runner.os }}-py313-uv-${{ hashFiles('uv.lock', 'pyproject.toml') }}
restore-keys: |
${{ runner.os }}-py313-uv-
- name: Restore PlatformIO Cache
uses: actions/cache@v5
with:
path: |
~/.platformio/.cache
~/.platformio/packages
~/.platformio/platforms
~/.platformio/lib
key: ${{ runner.os }}-pio-${{ hashFiles('platformio.ini', 'variants/**/platformio.ini') }}
restore-keys: |
${{ runner.os }}-pio-
- name: Install Python
uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Install uv
uses: astral-sh/setup-uv@v8.0.0
- name: Sync Python Tooling
shell: bash
run: |
uv sync --locked --no-group docs
uv venv --allow-existing --seed
echo "$GITHUB_WORKSPACE/.venv/bin" >> "$GITHUB_PATH"
# Active release tag formats:
# companion-wifi-v1.15.0
# repeater-bridge-espnow-v1.15.0
# observer-eastmesh-bridge-espnow-v2026.5.1
# observer-eastmesh-bridge-mqtt-v2026.7.0
# observer-eastmesh-v2026.5.1
# with OFFICIAL_MESHCORE_VERSION=v1.15.0 configured as a GitHub variable.
#
# This exports:
# companion-wifi-v1.15.0 -> FIRMWARE_VERSION=v1.15.0, RELEASE_VERSION=v1.15.0
# repeater-bridge-espnow-v1.15.0 -> FIRMWARE_VERSION=v1.15.0, RELEASE_VERSION=v1.15.0
# observer-eastmesh-bridge-espnow-v2026.5.1 -> FIRMWARE_VERSION=v1.15.0, EASTMESH_VERSION=v2026.5.1,
# RELEASE_VERSION=v1.15.0-eastmesh-v2026.5.1
# observer-eastmesh-v2026.5.1 -> FIRMWARE_VERSION=v1.15.0, EASTMESH_VERSION=v2026.5.1,
# RELEASE_VERSION=v1.15.0-eastmesh-v2026.5.1
- name: Extract Version Info
shell: bash
run: |
STATIC_OFFICIAL_VERSION="${OFFICIAL_MESHCORE_VERSION:-}"
if [[ "$GITHUB_REF" != refs/tags/* ]]; then
echo "GIT_TAG_NAME=" >> "$GITHUB_ENV"
echo "GIT_TAG_VERSION=" >> "$GITHUB_ENV"
echo "OFFICIAL_MESHCORE_VERSION=$STATIC_OFFICIAL_VERSION" >> "$GITHUB_ENV"
echo "EASTMESH_VERSION=" >> "$GITHUB_ENV"
echo "FIRMWARE_VERSION=$STATIC_OFFICIAL_VERSION" >> "$GITHUB_ENV"
echo "RELEASE_VERSION=$STATIC_OFFICIAL_VERSION" >> "$GITHUB_ENV"
exit 0
fi
GIT_TAG_NAME="${GITHUB_REF#refs/tags/}"
EASTMESH_VERSION=""
FIRMWARE_VERSION="$STATIC_OFFICIAL_VERSION"
if [[ "$GIT_TAG_NAME" =~ ^observer-eastmesh-(v[[:alnum:]._-]+)$ ]]; then
if [[ -z "$STATIC_OFFICIAL_VERSION" ]]; then
echo "OFFICIAL_MESHCORE_VERSION must be set for EastMesh release tags" >&2
exit 1
fi
EASTMESH_VERSION="${BASH_REMATCH[1]}"
elif [[ "$GIT_TAG_NAME" =~ ^observer-eastmesh-bridge-espnow-(v[[:alnum:]._-]+)$ ]]; then
if [[ -z "$STATIC_OFFICIAL_VERSION" ]]; then
echo "OFFICIAL_MESHCORE_VERSION must be set for EastMesh release tags" >&2
exit 1
fi
EASTMESH_VERSION="${BASH_REMATCH[1]}"
elif [[ "$GIT_TAG_NAME" =~ ^observer-eastmesh-bridge-mqtt-(v[[:alnum:]._-]+)$ ]]; then
if [[ -z "$STATIC_OFFICIAL_VERSION" ]]; then
echo "OFFICIAL_MESHCORE_VERSION must be set for EastMesh release tags" >&2
exit 1
fi
EASTMESH_VERSION="${BASH_REMATCH[1]}"
elif [[ "$GIT_TAG_NAME" =~ ^companion-wifi-(v[[:alnum:]._-]+)$ ]]; then
FIRMWARE_VERSION="${BASH_REMATCH[1]}"
elif [[ "$GIT_TAG_NAME" =~ ^repeater-bridge-espnow-(v[[:alnum:]._-]+)$ ]]; then
FIRMWARE_VERSION="${BASH_REMATCH[1]}"
else
echo "Unsupported release tag format: $GIT_TAG_NAME" >&2
exit 1
fi
if [[ -n "$STATIC_OFFICIAL_VERSION" && "$FIRMWARE_VERSION" != "$STATIC_OFFICIAL_VERSION" ]]; then
echo "Tag official version '$FIRMWARE_VERSION' does not match OFFICIAL_MESHCORE_VERSION '$STATIC_OFFICIAL_VERSION'" >&2
exit 1
fi
RELEASE_VERSION="$FIRMWARE_VERSION"
if [[ -n "$EASTMESH_VERSION" ]]; then
RELEASE_VERSION="${RELEASE_VERSION}-eastmesh-${EASTMESH_VERSION}"
fi
echo "GIT_TAG_NAME=$GIT_TAG_NAME" >> "$GITHUB_ENV"
echo "GIT_TAG_VERSION=$RELEASE_VERSION" >> "$GITHUB_ENV"
echo "OFFICIAL_MESHCORE_VERSION=$FIRMWARE_VERSION" >> "$GITHUB_ENV"
echo "EASTMESH_VERSION=$EASTMESH_VERSION" >> "$GITHUB_ENV"
echo "FIRMWARE_VERSION=$FIRMWARE_VERSION" >> "$GITHUB_ENV"
echo "RELEASE_VERSION=$RELEASE_VERSION" >> "$GITHUB_ENV"