diff --git a/.github/workflows/build-windows-x86-64.yaml b/.github/workflows/build-windows-x86-64.yaml index 2a9485a..5a9f96c 100644 --- a/.github/workflows/build-windows-x86-64.yaml +++ b/.github/workflows/build-windows-x86-64.yaml @@ -45,25 +45,6 @@ jobs: ref: ${{ env.REPO_COMMIT }} path: _repo - # CI only, until openXC7 fixes apio#1194 - # (https://github.com/FPGAwars/apio/issues/1194): its Windows - # fasm2frames.cmd runs `python`, which a plain Windows, and so the - # engine's tool PATH, doesn't have. A python.cmd in the Windows folder, - # which is on that PATH, forwards to Python 3.12, the version its - # packages are for. So the rest of the Xilinx flow stays tested. Remove - # both steps with the fix (the website repo's CLAUDE.md, Strict CI). - - name: Set up Python 3.12 for fasm2frames (apio#1194, CI only) - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Put python on the tools' PATH (apio#1194, CI only) - shell: pwsh - run: | - $py = (Get-Command python).Source - Set-Content -Path "$env:SystemRoot\python.cmd" -Value "@`"$py`" %*" -Encoding ascii - & "$env:SystemRoot\python.cmd" --version - # Installs the Rust version pinned in rust-toolchain.toml. - name: Set up Rust working-directory: _repo diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 0dc465d..3872cf8 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -96,27 +96,6 @@ jobs: - name: Check out the code uses: actions/checkout@v7 - # CI only, until openXC7 fixes apio#1194 - # (https://github.com/FPGAwars/apio/issues/1194): its Windows - # fasm2frames.cmd runs `python`, which a plain Windows, and so the - # engine's tool PATH, doesn't have. A python.cmd in the Windows folder, - # which is on that PATH, forwards to Python 3.12, the version its - # packages are for. So the rest of the Xilinx flow stays tested. Remove - # both steps with the fix (the website repo's CLAUDE.md, Strict CI). - - name: Set up Python 3.12 for fasm2frames (apio#1194, CI only) - if: runner.os == 'Windows' - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Put python on the tools' PATH (apio#1194, CI only) - if: runner.os == 'Windows' - shell: pwsh - run: | - $py = (Get-Command python).Source - Set-Content -Path "$env:SystemRoot\python.cmd" -Value "@`"$py`" %*" -Encoding ascii - & "$env:SystemRoot\python.cmd" --version - # Installs the Rust version pinned in rust-toolchain.toml, with # rustfmt and clippy. - name: Set up Rust diff --git a/CLAUDE.md b/CLAUDE.md index 8f5872f..566a10a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -53,7 +53,7 @@ Milestone 1 (iCE40, seven tools, tested on an Alhambra II) is done. Milestone 2 Same conventions as logix-ide, using the shared actions from `openlogix/.github` (`openlogix/.github/actions/@main`; that repo documents and tests them). -- **`test.yaml`**: a `remote-config` job (Ubuntu) runs the shared `check-remote-config` action on `remote-config/` (platforms `darwin-arm64` and `windows-x86-64`; add Linux with Milestone 4); a `channels` job (Ubuntu) lists the channels with the shared `list-config-channels` action, one per config file in the newest version folder (so `prod` alone in normal maintenance, and `dev` too while `dev.jsonc` exists); then the tests, one job per OS version and channel (`test (macos-15, prod)`): matrix `os` macos-15, macos-26 and windows-2025 (named explicitly, a new one added when GitHub ships it; not macos-latest, which is one of them) × `channel` from that list, `fail-fast: false`, 30 min, bash on every OS (Git's bash on Windows). Strict (the website repo's `CLAUDE.md`, Strict CI): every job is required. Windows isn't tested on the prod channel until its first promotion (a commented matrix `exclude`: prod names a logix-core from before the port, without `VERILATOR_ROOT` on Windows); remove the exclusion then. On Windows, two CI-only steps work around apio#1194 (openXC7's `fasm2frames.cmd` runs `python`, which a plain Windows doesn't have): Python 3.12 from `actions/setup-python`, and a `python.cmd` forwarder in the Windows folder, on the engine's tool PATH; remove both when openXC7 is fixed. The same steps are in `build-windows-x86-64.yaml`. On every push and pull request, manually, and daily at 00:00 UTC; a newer run for the same ref cancels the older one. Installs the pinned Rust, then runs `scripts/test.sh` with `LOGIX_ENGINE_CHANNEL` set to the job's channel. Tests that serve their own config (`tests/packages.rs`) use that channel's file, so they pass on any channel. +- **`test.yaml`**: a `remote-config` job (Ubuntu) runs the shared `check-remote-config` action on `remote-config/` (platforms `darwin-arm64` and `windows-x86-64`; add Linux with Milestone 4); a `channels` job (Ubuntu) lists the channels with the shared `list-config-channels` action, one per config file in the newest version folder (so `prod` alone in normal maintenance, and `dev` too while `dev.jsonc` exists); then the tests, one job per OS version and channel (`test (macos-15, prod)`): matrix `os` macos-15, macos-26 and windows-2025 (named explicitly, a new one added when GitHub ships it; not macos-latest, which is one of them) × `channel` from that list, `fail-fast: false`, 30 min, bash on every OS (Git's bash on Windows). Strict (the website repo's `CLAUDE.md`, Strict CI): every job is required. Windows isn't tested on the prod channel until its first promotion (a commented matrix `exclude`: prod names a logix-core from before the port, without `VERILATOR_ROOT` on Windows); remove the exclusion then. On every push and pull request, manually, and daily at 00:00 UTC; a newer run for the same ref cancels the older one. Installs the pinned Rust, then runs `scripts/test.sh` with `LOGIX_ENGINE_CHANNEL` set to the job's channel. Tests that serve their own config (`tests/packages.rs`) use that channel's file, so they pass on any channel. - **`build-pre-release.yaml`** (on every push to `main`, daily at 00:00 UTC, and manually; a newer run cancels a running one), three jobs: - `prepare` (Ubuntu): the shared `start-pre-release` action (today's tags, the stable-release check, `BUILD-INFO.json` as the `build-info` artifact, with `config-version`, read from `remote_config::CONFIG_VERSION`, as an extra field: `repos-janitor` finds the releases a Latest engine uses by it). The release tag is the engine version. - `build-darwin-arm64` (reusable `build-darwin-arm64.yaml`, macos-latest): `read-build-info` with the platform, checks out exactly `repo-commit` into `_repo/`, runs `scripts/test.sh`, builds with `LOGIX_ENGINE_BUILD_VERSION` = the release tag, packs `logix-engine-darwin-arm64-.tgz` (one `logix-engine/` folder with the binary, `LICENSE-MIT` and `LICENSE-APACHE`), and checks that the packed binary reports the release tag and has an ad-hoc signature. diff --git a/remote-config/logix-engine/001/dev.jsonc b/remote-config/logix-engine/001/dev.jsonc index bbc8c5c..2f12bcc 100644 --- a/remote-config/logix-engine/001/dev.jsonc +++ b/remote-config/logix-engine/001/dev.jsonc @@ -15,9 +15,11 @@ // run.path and run.env). // 2026-11-14: the Windows package also has libwdi's wdi-simple, which // install_driver runs to install WinUSB (Milestone 3, drivers). + // 2026-11-15: openXC7 2026-11-15, which counts Xilinx resources right + // (apio#1192) and finds the suite's Python on Windows (apio#1194). "logix-core": { "repo": "openlogix/logix-core", - "release": "2026-11-14", + "release": "2026-11-15", "file": "logix-core-${PLATFORM}-${YYYYMMDD}.tgz" }, diff --git a/tests/mcp.rs b/tests/mcp.rs index c457a88..1b22823 100644 --- a/tests/mcp.rs +++ b/tests/mcp.rs @@ -90,13 +90,24 @@ async fn get_engine_info_reports_the_launch_settings() { // The catalog folder from LOGIX_ENGINE_DEV_CATALOG_FOLDER. assert_eq!(out["catalog"], json!({"version": "local", "local": true})); // It's a developer setting: listed, and in the report's own section. - assert_eq!( - out["developer_settings"][0]["name"], - "LOGIX_ENGINE_DEV_CATALOG_FOLDER" + // (Others may be set too, such as CI's LOGIX_ENGINE_CHANNEL.) + let settings = out["developer_settings"].as_array().expect("listed"); + assert!( + settings + .iter() + .any(|s| s["name"] == "LOGIX_ENGINE_DEV_CATALOG_FOLDER"), + "{settings:?}" ); let report = out["report"].as_str().unwrap(); + let section = report + .split("\nDeveloper settings:\n") + .nth(1) + .and_then(|rest| rest.split("\n\n").next()) + .unwrap_or_else(|| panic!("no Developer settings section: {report}")); assert!( - report.contains("\nDeveloper settings:\n LOGIX_ENGINE_DEV_CATALOG_FOLDER = "), + section + .lines() + .any(|l| l.starts_with(" LOGIX_ENGINE_DEV_CATALOG_FOLDER = ")), "{report}" ); // The version tree: the engine alone, before its remote config is read.