Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/check-ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ jobs:
- name: Test
id: tests
run: uv run --no-project python ci/test_cache_status.py -- soldr cargo test --workspace
- name: Test optional SDK library linkage with native GCC LTO
run: |
soldr cargo test -p fbuild-build-engine --lib optional_framework_archive_preserves_only_referenced_initializers -- --ignored
soldr cargo test -p fbuild-build-arm --lib optional_library_rescans_earlier_dependency_archive -- --ignored

python-facade-tests:
# FastLED/fbuild#1485 §5.2/§6: the embedded-CPython AT-P integration
Expand Down
49 changes: 49 additions & 0 deletions .github/workflows/check-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,52 @@ jobs:
throw "Warm check did not reuse the verified source launcher"
}
# The hosted runner discards RUNNER_TEMP after the job.

# Pioarduino 55.03.35 pins esptool 5.1.0, whose release has no
# Windows standalone binary. Verify the real source-package route.
- name: Install and recheck ESP32-C6 source tools
id: modern-esptool
shell: pwsh
run: |
$ErrorActionPreference = "Stop"
$probe = Join-Path $env:RUNNER_TEMP ("fbuild-modern-esptool-" + [guid]::NewGuid())
New-Item -ItemType Directory -Path $probe | Out-Null
$env:FBUILD_CACHE_DIR = Join-Path $probe "cache"
[Environment]::SetEnvironmentVariable("FBUILD_ESPTOOL_PATH", $null, "Process")
@"
[env:esp32c6-idf5]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.35/platform-espressif32.zip
board = esp32-c6-devkitc-1
framework = arduino
"@ | Set-Content -LiteralPath (Join-Path $probe "platformio.ini") -Encoding utf8

$coldJson = & soldr cargo run -p fbuild-cli --bin fbuild -- install "$probe" -e esp32c6-idf5 --json
if ($LASTEXITCODE -ne 0) { throw "Cold ESP32-C6 install failed ($LASTEXITCODE)" }
$coldJson | Write-Output
$cold = ($coldJson -join "`n") | ConvertFrom-Json
$coldTools = @($cold.environments.packages | Where-Object name -eq "tool-esptoolpy")
if ($coldTools.Count -ne 1) { throw "Expected exactly one esptool package" }
$coldTool = $coldTools[0]
if ($coldTool.version -ne "5.1.0" -or $coldTool.status -ne "fetched" -or
$coldTool.url -ne "https://github.com/pioarduino/esptool/releases/download/v5.1.0/esptool.zip") {
throw "Expected a cold install of the pinned esptool 5.1.0 source archive"
}
if (-not (Test-Path -LiteralPath $coldTool.install_path -PathType Leaf)) {
throw "Installed esptool launcher is missing"
}
if ($coldTool.install_path -notmatch '[\\/]\.fbuild-tools[\\/]esptool[\\/]Scripts[\\/]esptool\.exe$') {
throw "Expected the real uv-managed Windows esptool launcher"
}

$warmJson = & soldr cargo run -p fbuild-cli --bin fbuild -- install "$probe" -e esp32c6-idf5 --check --json
if ($LASTEXITCODE -ne 0) { throw "Warm ESP32-C6 check failed ($LASTEXITCODE)" }
$warmJson | Write-Output
$warm = ($warmJson -join "`n") | ConvertFrom-Json
$warmTools = @($warm.environments.packages | Where-Object name -eq "tool-esptoolpy")
if ($warmTools.Count -ne 1) { throw "Expected exactly one cached esptool package" }
$warmTool = $warmTools[0]
if ($warmTool.version -ne "5.1.0" -or $warmTool.status -ne "present" -or
$warmTool.url -ne $coldTool.url -or $warmTool.install_path -ne $coldTool.install_path) {
throw "Warm check did not reuse the verified source launcher"
}
# The hosted runner discards RUNNER_TEMP after the job.
42 changes: 21 additions & 21 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ targets = [
]

[workspace.package]
version = "2.5.40"
version = "2.5.41"
edition = "2021"
rust-version = "1.95.0"
license = "AGPL-3.0-only"
Expand Down
25 changes: 25 additions & 0 deletions ci/test_fractional_workflows.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,31 @@


class FractionalWorkflowTests(unittest.TestCase):
def test_windows_checks_real_modern_esptool_source_install(self):
job = self.load("check-windows.yml")["jobs"]["check"]
smoke = next(step for step in job["steps"] if step.get("id") == "modern-esptool")
self.assertEqual("windows-latest", job["runs-on"])
self.assertEqual("pwsh", smoke["shell"])
self.assertNotIn("if", smoke)
self.assertFalse(smoke.get("continue-on-error", False))
script = smoke["run"]
for contract in (
"$env:RUNNER_TEMP", "[guid]::NewGuid()", "$env:FBUILD_CACHE_DIR",
'SetEnvironmentVariable("FBUILD_ESPTOOL_PATH", $null, "Process")',
"https://github.com/pioarduino/platform-espressif32/releases/download/55.03.35/platform-espressif32.zip",
"board = esp32-c6-devkitc-1", "framework = arduino",
"soldr cargo run -p fbuild-cli --bin fbuild -- install",
"--check --json", "$LASTEXITCODE -ne 0", "ConvertFrom-Json",
'name -eq "tool-esptoolpy"', 'version -ne "5.1.0"',
'status -ne "fetched"', 'status -ne "present"',
"https://github.com/pioarduino/esptool/releases/download/v5.1.0/esptool.zip",
'Test-Path -LiteralPath $coldTool.install_path -PathType Leaf',
'$warmTool.install_path -ne $coldTool.install_path',
):
self.assertIn(contract, script)
self.assertEqual(2, script.count("soldr cargo run -p fbuild-cli --bin fbuild -- install"))
self.assertEqual(2, script.count("$LASTEXITCODE -ne 0"))

def test_macos_lipo_places_input_before_variadic_architectures(self):
job = self.load("release-auto.yml")["jobs"]["macos-release-smoke"]
script = next(step["run"] for step in job["steps"] if "lipo " in step.get("run", ""))
Expand Down
Loading
Loading