Skip to content

build: use pixi in ci#325

Merged
16bit-ykiko merged 13 commits intomainfrom
ci-pixi
Dec 17, 2025
Merged

build: use pixi in ci#325
16bit-ykiko merged 13 commits intomainfrom
ci-pixi

Conversation

@star-hengxing
Copy link
Copy Markdown
Contributor

@star-hengxing star-hengxing commented Dec 16, 2025

Summary by CodeRabbit

  • Chores

    • CI workflows migrated to a standardized Pixi-based process; Pixi version bumped and workflow steps simplified and unified across build systems.
    • New Pixi-driven CI tasks added for CMake and xmake builds, plus caching and environment activation configured.
  • Tests

    • Test orchestration centralized: unit and integration tests and pre-commit checks now run via unified Pixi tasks.
  • Compatibility

    • Minimum Python requirement raised to 3.13+.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Dec 16, 2025

Walkthrough

Replaces uv-based CI steps with prefix-dev/setup-pixi and pixi run commands across GitHub Actions; expands Pixi environments and test dependencies in pixi.toml; adds Pixi CI tasks for CMake and XMake; updates xmake.lua to use a new LLVM manifest, adjust build-type/mode logic, and guard LLVM artifact installs.

Changes

Cohort / File(s) Summary
GitHub Actions: check-format workflow
/.github/workflows/check-format.yml
Replaced "Install uv" and uv-based pre-commit commands with prefix-dev/setup-pixi@v0.9.3 (pixi-version v0.61.0, environments, activate-environment, cache, locked) and pixi run ci-check; preserved error handling and messages.
GitHub Actions: cmake workflow
/.github/workflows/cmake.yml
Bumped prefix-dev/setup-pixi to v0.61.0; swapped explicit CMake build/test steps for pixi run ci-cmake-build ${{ matrix.build_type }} and pixi run ci-cmake-test; removed manual CMake/toolchain/test-dir handling and standardized step names.
GitHub Actions: xmake workflow
/.github/workflows/xmake.yml
Switched PR target branch, removed per-OS uv setup, added prefix-dev/setup-pixi, updated cache key to include pixi suffix; replaced per-platform Build/Test with Pixi commands (pixi run ci-xmake-build, pixi run xmake-test) and replaced manual uninstall with Pixi-driven uninstall.
Pixi configuration
pixi.toml
Added python = ">=3.13"; replaced [feature.test.dependencies] with [feature.test.pypi-dependencies] (pytest, pytest-asyncio, pre-commit); expanded environments (develop now includes "develop", added "package"); added CI tasks and orchestration for CMake/XMake (ci-cmake-configure, cmake-build, ci-cmake-build, ci-cmake-test, ci-xmake-configure, xmake-build, ci-xmake-build) and feature.develop.tasks (unit-test, integration-test, ci-check, xmake-test).
Build script: xmake
xmake.lua
macOS: added linker flags and defines, propagated flags into cmake configs; Linux: enabled install-only package policy; integration tests run pytest directly; switched from prebuilt-llvm.json to llvm-manifest.json; added build_type→mode mapping and adjusted release/LTO logic; use guarded os.trycp when copying LLVM bin.
Minor workflow cleanup
/.github/workflows/build-llvm.yml
Removed three explanatory comments in matrix include; no behavioral change.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Inspect pixi.toml task args, templating, and depends-on wiring.
  • Verify GitHub Actions use correct prefix-dev/setup-pixi settings, environment activation, and cache keys.
  • Review xmake.lua LLVM manifest selection, build_type→mode mapping, release/LTO logic, and os.trycp usage.
  • Confirm integration-test executable templating and cross-platform behavior.

Possibly related PRs

Poem

🐰 I swapped my boots of uv for Pixi bright,
I hop through tasks that now run swift at night,
Manifests hum and build steps find their tune,
I copy with care beneath the moon,
✨🐇

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'build: use pixi in ci' accurately and concisely describes the main change: replacing traditional build tooling with Pixi across GitHub Actions workflows for CI/CD processes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch ci-pixi

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
.github/workflows/cmake.yml (1)

42-49: Pixi version inconsistency across workflows.

This workflow uses pixi-version: v0.59.0, while .github/workflows/check-format.yml uses pixi-version: v0.61.0. Consider using a consistent version across all workflows to avoid potential behavioral differences.

       - name: Setup Pixi
         uses: prefix-dev/setup-pixi@v0.9.3
         with:
-          pixi-version: v0.59.0
+          pixi-version: v0.61.0
           environments: develop
           activate-environment: true
           cache: true
           locked: true
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1da3457 and 1e7af28.

⛔ Files ignored due to path filters (1)
  • pixi.lock is excluded by !**/*.lock
📒 Files selected for processing (3)
  • .github/workflows/check-format.yml (1 hunks)
  • .github/workflows/cmake.yml (1 hunks)
  • pixi.toml (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build (ubuntu-24.04, Debug)
  • GitHub Check: build (macos-15, Debug)
  • GitHub Check: build (windows-2025, RelWithDebInfo)
🔇 Additional comments (4)
pixi.toml (3)

40-43: LGTM on pypi-dependencies setup.

The migration from [feature.test.dependencies] to [feature.test.pypi-dependencies] is appropriate for Python packages from PyPI. Version constraints look reasonable.


69-74: Verify task dependency order is correct.

The ci-cmake-build task depends on both ci-cmake-configure and cmake-build. Pixi executes depends-on tasks sequentially in the listed order, so this configuration correctly ensures ci-cmake-configure completes before cmake-build.


76-80: ci-cmake-test task dependency is correctly scoped to the develop environment.

The tasks unit-test and integration-test are defined under [feature.develop.tasks], and ci-cmake-test depends on them. This works correctly in CI because the workflow explicitly specifies environments: develop, making these tasks available. However, running pixi run ci-cmake-test locally without -e develop would fail—developers must use pixi run -e develop ci-cmake-test.

.github/workflows/cmake.yml (1)

51-57: LGTM on Pixi-based build and test steps.

The migration to Pixi tasks simplifies the workflow and removes shell-specific handling. The develop environment is correctly configured, enabling access to both build and test tasks.

Comment thread .github/workflows/check-format.yml
Comment thread .github/workflows/check-format.yml
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
pixi.toml (1)

50-50: Potentially confusing environment definition.

The line develop = ["test", "develop"] creates an environment named "develop" that includes both the "test" feature and a "develop" feature. While this is valid Pixi syntax (the environment and feature namespaces are separate), it may be confusing to readers. Consider renaming either the environment or the feature for clarity.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1e7af28 and 494dcc2.

📒 Files selected for processing (2)
  • .github/workflows/cmake.yml (1 hunks)
  • pixi.toml (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build (ubuntu-24.04, Debug)
  • GitHub Check: build (macos-15, Debug)
  • GitHub Check: build (windows-2025, RelWithDebInfo)
🔇 Additional comments (8)
pixi.toml (5)

40-43: Migration from conda to PyPI dependencies looks good.

The shift from [feature.test.dependencies] to [feature.test.pypi-dependencies] for Python packages (pytest, pytest-asyncio, pre-commit) is appropriate, as these are Python-specific tools better sourced from PyPI.


65-68: CI check task successfully addresses previous review comment.

The addition of the ci-check task resolves the issue raised in the previous review. The task correctly invokes pre-commit run --all-files, which will cause the check-format workflow to succeed.


53-60: Jinja2 templating syntax for Pixi tasks is correct. Pixi uses MiniJinja — a lightweight, Rust-native implementation of Jinja2—for task rendering, and placeholders {{ var }} inject the value of task arguments. The {{ build_type }} syntax in your task definition is the standard and fully supported approach.


20-20: No action required. Python 3.13 is fully supported on conda-forge across all specified platforms (win-64, linux-64, osx-arm64) with reliable builds available since September 2024. The requirement python = ">=3.13" is appropriate and well-supported.


77-81: No action required—this task dependency pattern is fully supported by Pixi.

Pixi's depends_on feature can be used cross-environment, and the current configuration correctly uses root-level tasks depending on feature-scoped tasks, which is a documented pattern where tasks in different environments can be run as part of a single pipeline. The ci-cmake-test task will properly resolve and execute unit-test and integration-test from the develop feature when needed.

Likely an incorrect or invalid review comment.

.github/workflows/cmake.yml (3)

51-53: Simplified build step improves maintainability.

The migration from manual CMake invocation to pixi run ci-cmake-build centralizes build configuration in pixi.toml, making the workflow more maintainable and consistent across environments.


55-57: Simplified test step improves maintainability.

The migration to pixi run ci-cmake-test encapsulates test execution logic in pixi.toml, improving consistency and reducing duplication between local development and CI environments.


45-45: Pixi v0.61.0 is a stable, verified release.

Pixi v0.61.0 is the latest release, published on December 9, 2025, and is suitable for CI/CD pipelines.

Comment thread pixi.toml
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
pixi.toml (1)

67-67: Use pixi.platform instead of non-existent pixi.is_win variable.

As flagged in the previous review, pixi.is_win is not a valid Pixi template variable. Use a check against pixi.platform instead.

Apply this diff:

-integration-test = 'pytest -s --log-cli-level=INFO tests/integration --executable=./build/bin/clice{% if pixi.is_win %}.exe{% endif %}'
+integration-test = 'pytest -s --log-cli-level=INFO tests/integration --executable=./build/bin/clice{% if "win" in pixi.platform %}.exe{% endif %}'
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 158461b and 9eed733.

📒 Files selected for processing (3)
  • .github/workflows/xmake.yml (2 hunks)
  • pixi.toml (2 hunks)
  • xmake.lua (3 hunks)
🔇 Additional comments (13)
pixi.toml (7)

40-43: LGTM: Test dependencies migrated to PyPI.

The migration to PyPI dependencies is appropriate, and the package choices (pytest, pytest-asyncio, pre-commit) are well-suited for the testing workflow.


48-51: LGTM: Environment configuration enhanced.

The environment structure correctly separates development and packaging concerns while ensuring both have access to testing capabilities.


53-60: LGTM: CMake configuration task correctly structured.

The task properly parameterizes build_type and configures CMake with appropriate flags for CI environments.


62-63: LGTM: Build task correctly defined.


71-82: LGTM: Task dependencies correctly structured.

The build and test tasks properly chain dependencies and pass arguments through the task graph.


84-96: LGTM: XMake tasks correctly mirror CMake structure.

The XMake task configuration properly aligns with the CMake workflow and correctly uses the --ci=y flag that corresponds to the CI configuration in xmake.lua.


20-20: Python 3.13 is available in conda-forge and fully supported on all target platforms (win-64, linux-64, osx-arm64). conda-forge now supports Python 3.13 on conda, and it's available on the main platforms including linux-64, osx-arm64, and win-64. No availability issues.

xmake.lua (2)

184-184: LGTM: Pytest execution simplified to align with Pixi environment.

The direct pytest invocation is appropriate given the Pixi-managed environment that ensures pytest availability through pypi-dependencies. This aligns with the broader migration to Pixi-based tooling.


297-311: Manifest schema changes are correctly implemented.

Verification confirms the implementation is correct:

  • config/llvm-manifest.json exists and contains entries with expected structure
  • Manifest entries have a lto field (boolean type), not is_lto
  • Manifest entries have build_type values (Debug, RelWithDebInfo) matching the mapping keys
  • The code properly maps build_type through the lookup table and handles lto field
.github/workflows/xmake.yml (4)

47-47: LGTM: Cache key updated for pixi migration.

Adding the -pixi suffix appropriately invalidates the old cache entries when migrating from the previous tooling setup.


60-66: LGTM: Build and test consolidated into pixi tasks.

The workflow now delegates to pixi run ci-xmake-build and pixi run xmake-test, consolidating build logic into pixi.toml. This improves maintainability by centralizing build/test configuration. The build type is correctly passed as an argument.


68-70: LGTM: LLVM package cleanup step.

The conditional uninstall of clice-llvm using xmake require --uninstall on Linux is appropriate for cleanup.


51-58: Pixi setup is correctly configured.

All verifications pass: setup-pixi@v0.9.3 is the current action version, pixi v0.61.0 is the latest stable version, the develop environment is properly defined in pixi.toml, and pixi.lock exists as required by locked: true.

Comment thread xmake.lua
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
xmake.lua (1)

360-360: Reconsider using trycp for the bin directory.

LLVM standard installations include tools in the bin directory. Using os.trycp() instead of os.vcp() could silently mask packaging issues if the bin directory is missing. If bin is expected in all pre-built LLVM packages, revert to os.vcp() to catch missing directories early.

Based on past review feedback.

🧹 Nitpick comments (1)
xmake.lua (1)

190-201: Consider adding pytest availability check.

The direct invocation of pytest assumes it's available in the PATH (managed by pixi). While this aligns with the pixi migration, consider adding a check using find_tool or wrapping the call in error handling to provide a clearer error message if pytest is not found.

Apply this diff to add a tool check:

 on_test(function(target, opt)
 	import("lib.detect.find_tool")
+	
+	local pytest = find_tool("pytest")
+	if not pytest then
+		raise("pytest not found. Ensure it's installed in the pixi environment.")
+	end
 
 	local argv = {
 		"--log-cli-level=INFO",
 		"-s",
 		"tests/integration",
 		"--executable=" .. target:dep("clice"):targetfile(),
 	}
 	local run_opt = { curdir = os.projectdir() }
-	os.vrunv("pytest", argv, run_opt)
+	os.vrunv(pytest.program, argv, run_opt)
 
 	return true
 end)
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9eed733 and e16a01f.

📒 Files selected for processing (1)
  • xmake.lua (4 hunks)
🧰 Additional context used
🪛 GitHub Actions: format
xmake.lua

[error] 1-1: Trailing whitespace check failed. Files were modified by the hook and the pre-commit run exited with code 1.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: build (ubuntu-24.04, Debug)
  • GitHub Check: build (macos-15, Debug)
  • GitHub Check: build (windows-2025, RelWithDebInfo)
  • GitHub Check: build (ubuntu-24.04, debug)
  • GitHub Check: build (ubuntu-24.04, releasedbg)
  • GitHub Check: build (windows-2025, releasedbg)
🔇 Additional comments (2)
xmake.lua (2)

314-327: Verify LLVM manifest schema and matching logic.

The build type mapping and mode matching logic are correct:

  1. The llvm-manifest.json schema includes a boolean lto field (confirmed across all entries), and the matching logic on line 327 correctly uses it with strict equality.
  2. The asymmetric mode matching (releasedbg manifest can match release mode, but not vice versa) allows a release mode build to use a releasedbg LLVM package as a fallback, which is intentional for optimization purposes.
  3. The LTO matching condition info.lto == has_config("release") enforces that packages with LTO enabled are only selected when the release config option is set, and non-LTO packages only when it is not set—this is correct given the manifest structure.

44-58: Verify macOS configuration won't cause runtime compatibility issues.

The _LIBCPP_DISABLE_AVAILABILITY=1 flag bypasses Apple's availability checks for C++ standard library features. While this enables newer C++ features with older SDKs, it may cause runtime crashes on older macOS versions if unavailable symbols are used. Ensure the minimum macOS version target supports all C++ features used in the codebase, or document the minimum supported macOS version clearly.

Additionally, verify that lld is consistently available in all build environments (CI, developer machines, and the pixi environment).

Run the following script to check if there are any macOS version requirements documented:

#!/bin/bash
# Check for macOS version requirements and lld availability documentation

echo "=== Searching for macOS version requirements ==="
rg -i "macos.*version|minimum.*macos|deployment.*target" --type md --type toml

echo ""
echo "=== Checking pixi.toml for lld or LLVM toolchain ==="
if [ -f "pixi.toml" ]; then
    grep -i "lld\|llvm" pixi.toml
fi

echo ""
echo "=== Checking CMakeLists.txt for macOS deployment target ==="
if [ -f "CMakeLists.txt" ]; then
    grep -i "CMAKE_OSX_DEPLOYMENT_TARGET\|MACOSX_DEPLOYMENT_TARGET" CMakeLists.txt
fi

Comment thread xmake.lua Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
xmake.lua (1)

362-362: Previous feedback still applies.

The concern about using os.trycp for the bin directory was raised in a prior review. The suggestion to either use os.vcp (to fail loudly if bin is expected) or add a comment explaining when bin is legitimately absent remains valid.

🧹 Nitpick comments (1)
xmake.lua (1)

192-203: Remove unused find_tool import.

The find_tool import at line 193 is no longer used after switching to direct pytest invocation. This is dead code that should be cleaned up.

 	on_test(function(target, opt)
-		import("lib.detect.find_tool")
-
 		local argv = {
 			"--log-cli-level=INFO",
 			"-s",
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 17c13d2 and 76da42d.

📒 Files selected for processing (1)
  • xmake.lua (5 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: build (macos-15, debug)
  • GitHub Check: build (ubuntu-24.04, debug)
  • GitHub Check: build (windows-2025, releasedbg)
  • GitHub Check: build (ubuntu-24.04, releasedbg)
  • GitHub Check: build (ubuntu-24.04, Debug)
  • GitHub Check: build (macos-15, Debug)
🔇 Additional comments (3)
xmake.lua (3)

44-60: LGTM! Platform-specific configurations for Pixi/conda-forge compatibility.

The macOS block correctly applies the _LIBCPP_DISABLE_AVAILABILITY workaround and enforces lld linker usage. The Linux install_only policy appropriately isolates CI from system packages.


250-252: LGTM! Force option ensures linker flags are applied.

The { force = true } is appropriate here since -fuse-ld=lld is already set globally for macOS (line 47), and this ensures the LTO-specific flags (-dead_strip, -object_path_lto) are properly applied without deduplication.


316-329: Verify the mode matching fallback logic.

The mode matching at lines 327-328 allows using RelWithDebInfo (releasedbg) LLVM builds when the user configures release mode. Is this intentional?

local mode_match = (info_mode == current_mode)
    or (info_mode == "releasedbg" and current_mode == "release")

This means a release build config will accept a releasedbg LLVM artifact but not vice versa. If this is intentional (e.g., no pure release LLVM artifacts exist), consider adding a comment explaining the fallback.

@star-hengxing star-hengxing changed the title build: add pixi for cmake and check ci build: use pixi in ci Dec 17, 2025
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
xmake.lua (1)

364-364: This concern was already flagged in a previous review.

The use of os.trycp() for the bin directory was previously identified as potentially masking packaging issues. Please refer to the earlier review comment about reconsidering whether os.vcp() would be more appropriate to fail loudly on missing directories.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 76da42d and 860494f.

📒 Files selected for processing (2)
  • .github/workflows/xmake.yml (2 hunks)
  • xmake.lua (5 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: build (macos-15, Debug)
  • GitHub Check: build (ubuntu-24.04, Debug)
  • GitHub Check: build (windows-2025, RelWithDebInfo)
  • GitHub Check: build (ubuntu-24.04, releasedbg)
  • GitHub Check: build (macos-15, releasedbg)
  • GitHub Check: build (windows-2025, releasedbg)
  • GitHub Check: build (ubuntu-24.04, debug)
  • GitHub Check: build (macos-15, debug)
🔇 Additional comments (9)
.github/workflows/xmake.yml (6)

14-14: LGTM: Branch target updated to main.

The branch target change aligns with the PR objectives and ensures the workflow triggers on the correct branch.


47-47: LGTM: Cache key suffix prevents mixing old and new dependencies.

Adding the -pixi suffix to the cache key is a good practice when migrating dependency management systems, ensuring that old uv-based caches don't interfere with the new pixi-based workflow.


68-71: LGTM: Improved LLVM package cleanup using xmake's package management.

The change to use xmake require --uninstall clice-llvm is cleaner than direct file removal and properly leverages xmake's package management. The added comment also clarifies the purpose of this cleanup step.


43-43: xmake version 3.0.5 is a valid, stable release.

The v3.0.5 release includes support for Solaris platform, additional BSD systems, GCC 15 toolchain, Swift interop, CUDA SDK version specification, and includes multi-row progress output, XML module, and async OS APIs.


60-62: No action needed: ci-xmake-build task is properly configured.

All verification points confirmed:

  • The ci-xmake-build task exists at line 91 in pixi.toml
  • Task correctly declares args = ["build_type"] and passes it to ci-xmake-configure with {{ build_type }} substitution
  • The parameter is used in the xmake config command: --mode={{ build_type }}
  • Task chain is complete: ci-xmake-configurexmake-build
  • All tasks are in the base [tasks] section and available in the develop environment

51-58: Verify the develop environment exists in pixi.toml.

The environments parameter is supported by setup-pixi, but confirm the environment name matches what's defined in your pixi configuration.

xmake.lua (3)

44-60: LGTM! Platform-specific configurations align with Pixi/conda-forge requirements.

The macOS configuration correctly addresses conda-forge SDK compatibility issues, and the Linux install_only policy is appropriate for CI environments where all dependencies should come from Pixi.


249-253: LGTM! dsymutil optimization is appropriate for CI.

The conditional disabling of stripping in non-release releasedbg mode during CI is a reasonable performance optimization. The logic correctly targets daily CI builds while preserving full symbol processing for actual release builds.


200-200: No action required—pytest is properly configured in the Pixi environment.

Pytest is declared in pixi.toml under [feature.test.pypi-dependencies] and will be available in the environment when xmake tasks run, as the develop and package environments both include the test feature. The direct os.vrunv("pytest", argv, run_opt) invocation is correct.

Comment thread xmake.lua
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
xmake.lua (2)

318-322: Address the unused Release mapping (duplicate).

This issue was previously identified: the Release = "release" mapping at line 320 is unused because the manifest only contains Debug and RelWithDebInfo build types. Either remove the unused mapping or add corresponding Release entries to llvm-manifest.json.

Refer to the existing comment on lines 317-331 for detailed verification steps and remediation options.


364-364: Reconsider using trycp for the bin directory (duplicate).

This issue was previously identified: using os.trycp() instead of os.vcp() could silently mask packaging issues if the bin directory is missing from pre-built LLVM packages. The choice depends on whether bin is expected in all package variants from clice-llvm/releases.

Refer to the existing comment on line 364 for detailed analysis and remediation options.

🧹 Nitpick comments (1)
xmake.lua (1)

249-249: Clarify the need for force = true parameter.

The force = true parameter may be intended to override the earlier add_ldflags at line 47, but this creates potential confusion about which flags take precedence. Consider:

  1. If both line 47 and line 249 should apply the same flags, remove force = true to allow them to combine
  2. If line 249 needs to override line 47, add a comment explaining why the override is necessary

The current implementation may lead to unexpected behavior depending on xmake's flag precedence rules.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 860494f and 091f8f1.

📒 Files selected for processing (2)
  • .github/workflows/build-llvm.yml (2 hunks)
  • xmake.lua (5 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .github/workflows/build-llvm.yml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: build (ubuntu-24.04, Debug)
  • GitHub Check: build (windows-2025, RelWithDebInfo)
  • GitHub Check: build (macos-15, Debug)
  • GitHub Check: build (ubuntu-24.04, releasedbg)
  • GitHub Check: build (macos-15, debug)
  • GitHub Check: build (windows-2025, releasedbg)
  • GitHub Check: build (macos-15, releasedbg)
  • GitHub Check: build (ubuntu-24.04, debug)
🔇 Additional comments (3)
xmake.lua (3)

44-60: LGTM! Platform-specific configuration improvements.

The macOS configuration correctly addresses conda-forge compatibility with the _LIBCPP_DISABLE_AVAILABILITY workaround and ensures lld is used consistently across both executables and shared libraries. Propagating these settings to cmake dependencies maintains consistency. The Linux install_only policy appropriately prevents system package fetching in isolated build environments.


250-253: LGTM! Reasonable CI performance optimization.

Disabling dsymutil in daily CI builds for releasedbg mode is a sensible performance optimization. The condition correctly targets non-release CI builds while preserving symbol generation for actual releases.


200-200: pytest is properly available in Pixi test environments.

The change to direct os.vrunv("pytest", ...) is safe. pytest is declared in pixi.toml under [feature.test.pypi-dependencies], and the CI workflow runs pixi run xmake-test, which executes in the develop environment that includes the test feature. This ensures pytest is available when xmake test invokes the integration_tests target.

@16bit-ykiko 16bit-ykiko merged commit b8da7e7 into main Dec 17, 2025
10 checks passed
@16bit-ykiko 16bit-ykiko deleted the ci-pixi branch December 17, 2025 05:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants