-
-
Notifications
You must be signed in to change notification settings - Fork 425
perf(ci): parallelize jobs, prebuilt Docker image, caching and shallow clone #197
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
3921 commits
Select commit
Hold shift + click to select a range
cc0cbd9
refactor(task): remove dead kstd_vector includes after etl migration
MRNIU a6bf059
Merge branch 'feature/etl-containers-migration'
MRNIU cf6d3a8
fix(task): provide explicit etl::vector container type for sleeping_t…
MRNIU e438244
style: update include styler
MRNIU cd25f16
fix: update cmake
MRNIU 527bd5c
fix: add math.h, waiting for c++26
MRNIU ab7ba87
docs: etl plans
MRNIU b523f64
refactor: replace sk_assert with assert
MRNIU fe7fa1e
refactor: kstd
MRNIU 6136111
fix: update unique_ptr
MRNIU e94ce69
refactor: migrate Singleton<T> to etl::singleton<T> named aliases
MRNIU d2c1ff2
refactor(arch): move arch-specific singletons out of kernel.h and mak…
MRNIU 41b1a80
refactor(arch): remove static from Interrupt handler arrays
MRNIU fa41f51
3rd: add cpu_io
MRNIU 36d5cde
refactor(arch): move arch-specific singletons from kernel.h to arch d…
MRNIU df2d13d
fix: string
MRNIU 9870bde
fix: string
MRNIU 470ed18
refactor: klog
MRNIU 1958b73
refactor: io_buffer
MRNIU 4f07b42
doc: update AGENT.md
MRNIU edfb305
doc(etl): add ETL integration migration design plan
MRNIU 46a38d4
fix(libc): wrap noexcept in __cplusplus guard for C compilation
MRNIU 79db340
feat(task): add ETL message and router ID registry
MRNIU dc75be8
refactor(task): replace CloneFlags enum and cpu_affinity with etl::flags
MRNIU 86af6ce
refactor(interrupt): replace InterruptFunc pointer with etl::delegate
MRNIU 906d1d7
refactor(task): replace TaskStatus enum with etl::fsm state machine
MRNIU 89b3fe8
fix(task): address code quality review findings for etl::fsm migration
MRNIU 41fa41c
feat(kernel): add tick and panic observer interfaces using etl::observer
MRNIU 6ccea0b
feat(kernel): add lifecycle and virtio message types for etl::message…
MRNIU 6955faa
docs(plans): add ETL migration implementation plan
MRNIU 9f5b563
Merge branch 'feature/etl-migration'
MRNIU 9070858
fix: task_fsm
MRNIU 809ddf9
refactor: InterruptDelegate
MRNIU 09e2155
style: update include style
MRNIU 96b72c7
refactor: fsm
MRNIU 980f883
refactor: task_control_block
MRNIU 72fb14c
test: fix st
MRNIU 0e9992d
chore(docs): remove superseded etl-migration plan files
MRNIU 929cdd5
feat(expected): add VirtIO/device error codes for device_framework un…
MRNIU 18f5530
feat(device): add platform_config.hpp concrete impl for device_framew…
MRNIU 3022af5
build(device): use BEFORE in TARGET_INCLUDE_DIRECTORIES for platform_…
MRNIU 54846c4
refactor(device_node): replace atomic<bool> with SpinLock-guarded boo…
MRNIU 0d36548
refactor(df_bridge): remove DeviceStorage and ToKernelError, error ty…
MRNIU 3dd1522
refactor(driver_registry): add etl::flat_map index for O(log N) platf…
MRNIU 21618ed
refactor(virtio_blk_driver): remove Traits template param, use unifie…
MRNIU 851605e
refactor(device): remove PlatformTraits template usage, unify error h…
MRNIU c852757
fix(arch/riscv64): remove PlatformTraits template param from VirtioBl…
MRNIU 42a1176
fix(device): add kMaxSpinIterations to PlatformTraits; use TryBind() …
MRNIU d77a4d0
chore(submodule): bump device_framework to merged main (440bfe7)
MRNIU 85e2092
refactor(device): delete placeholder and redundant header files
MRNIU 3df49b0
refactor(device): simplify device module — remove Driver concept and …
MRNIU 4c7e161
fix(arch/riscv64,device): update interrupt_main and virtio_blk_driver…
MRNIU d304efe
docs(device): add device_framework integration design doc
MRNIU 9abe0b3
chore(device): create driver/ subdirectory skeleton
MRNIU d4de005
feat(device): add traits.hpp inlined from device_framework
MRNIU ab2ec34
feat(device): add ops/device_ops_base.hpp inlined from device_framework
MRNIU 39cd119
feat(device): add ops/char_device.hpp inlined from device_framework
MRNIU 2310a60
feat(device): add ops/block_device_ops.hpp inlined from device_framework
MRNIU c7f099c
feat(device): add detail/mmio_accessor.hpp inlined from device_framework
MRNIU 6455a07
feat(device): add detail/storage.hpp inlined from device_framework
MRNIU 1170e44
feat(device): add detail/uart_device.hpp inlined from device_framework
MRNIU 35ec909
feat(device): add detail/ns16550a/ inlined from device_framework
MRNIU d7cc63e
feat(device): add detail/pl011/ inlined from device_framework
MRNIU 82dc38d
feat(device): add detail/virtio/defs.h + traits.hpp (task 11)
MRNIU f9a0883
feat(device): add detail/virtio/transport/ (task 12)
MRNIU cd5f451
feat(device): add detail/virtio/virt_queue/ inlined from device_frame…
MRNIU fb0b357
feat(device): add detail/virtio/device/ inlined from device_framework
MRNIU 10a21c7
feat(device): add detail/acpi/ inlined from device_framework
MRNIU 18b9d2b
feat(device): add pl011/acpi facade headers and update driver include…
MRNIU 42e5514
refactor(arch): replace device_framework includes with inlined driver…
MRNIU 02344b3
build: remove device_framework from CMake and .gitmodules
MRNIU 9c73cec
chore(device): remove device_framework submodule and platform_config.…
MRNIU fcaaa63
fix(device): add platform_config.hpp for inlined VirtIO driver and fi…
MRNIU 5eb0af1
style: apply clang-format to VirtIO device and transport headers
MRNIU 25e11e6
docs: remove plan
MRNIU c4721ff
refactor(device): replace raw array+ptr with etl::vector/flat_map in …
MRNIU e06ef8c
refactor(device): migrate Ns16550aDriver to etl::delegate, remove Dri…
MRNIU 5968f3e
refactor(device): migrate VirtioBlkDriver to etl::optional + etl::del…
MRNIU b3f7bb1
refactor(device): delete detail/storage.hpp, superseded by etl::optional
MRNIU 9ae7637
docs(device): update AGENTS.md for ETL refactor
MRNIU 908514d
docs(device): fix duplicate section in AGENTS.md
MRNIU 28c72c9
docs: add device module refactor design document
MRNIU 314bcf9
refactor(device): extract VirtioBlkVfsAdapter to dedicated header
MRNIU 238164a
test(device): add failing tests for VirtioDriver
MRNIU 34f9889
feat(device): add unified VirtioDriver with runtime device-type dispatch
MRNIU f288f4a
build(device): add virtio_driver.cpp to device library sources
MRNIU e0cc946
refactor(device): update DeviceInit to use unified VirtioDriver
MRNIU 106936a
refactor(device): ns16550a_driver include ns16550a.hpp directly
MRNIU 2eb8d5f
refactor(device): pl011_driver include pl011.hpp directly
MRNIU aabc8e5
refactor(device): delete dead ops/ CRTP layer and unused device wrappers
MRNIU b85c1e9
docs(device): update AGENTS.md for new VirtioDriver architecture
MRNIU d3a2f18
Merge branch 'feat/device-refactor'
MRNIU c3b0dda
3rd: update
MRNIU a75047b
refactor(device): restructure drivers into per-driver subdirectories
MRNIU 9c0c06d
refactor: device
MRNIU 133682b
feat(device,fdt): add ForEachDeviceNode filter and split device_manager
MRNIU 76f06c2
refactor(device): assert-harden mmio_helper and use ForEachDeviceNode
MRNIU b3b9d8e
refactor: device
MRNIU e42bd46
refactor: device
MRNIU 3c42396
refactor(virtio): reorganize device/ into per-type subdirectories
MRNIU 22555d1
refactor(virtio): modernize VirtioBlk with std::array
MRNIU 0da72d6
Merge branch 'refactor/virtio-restructure'
MRNIU 641875a
3rd: update cpu_io
MRNIU a4a0c40
refactor: device
MRNIU 1f7bb59
feat: mmio_accessor
MRNIU 2d4cce0
feat(arch/riscv64): add etl_putchar shim for ETL print support
MRNIU 57092c5
feat(arch/aarch64): add etl_putchar shim for ETL print support
MRNIU 2a74038
feat(arch/x86_64): add etl_putchar shim for ETL print support
MRNIU 1946f47
refactor(device): migrate klog calls to ETL format syntax
MRNIU 1e163e4
refactor(task): migrate klog calls to ETL format syntax
MRNIU 8da36b0
refactor(arch): migrate klog calls to ETL format syntax
MRNIU 88cdf93
refactor(src): migrate klog calls to ETL format syntax
MRNIU 1b17db5
docs: update
MRNIU aa513c2
docs: update
MRNIU c976afd
feat(klog): rewrite kernel_log.hpp with type-safe {} format syntax
MRNIU 840b076
docs: update
MRNIU 8615148
refactor(libc): remove nanoprintf, replace sk_printf with emit helpers
MRNIU a4cf7bc
Merge branch 'refactor/remove-nanoprintf'
MRNIU d04e882
3rd: update cpu_io
MRNIU c62eeb5
refactor(libc): replace sk_putchar with etl_putchar
MRNIU 96413b2
refactor(klog): simplify kernel_log — 8 complexity fixes
MRNIU e2687f5
refactor: replace nanoprintf with etl
MRNIU 743b67f
docs: remove plans
MRNIU c8a5890
feat: remove kstd::ostream
MRNIU 7c7fecd
refactor: sk_print_str
MRNIU 347ee5f
style: replace __attribute__ with [[xxx]]
MRNIU f23f126
style: replace __attribute__ with [[xxx]]
MRNIU 0948aff
fix: backtrace
MRNIU 5c1f87f
fix: virtio
MRNIU 179f164
refactor: device
MRNIU c3de0cf
refactor(device): unify driver singletons to etl::singleton
MRNIU 4c00570
refactor: device
MRNIU 3c14990
docs: remove etl docs
MRNIU e1546c4
fix(device): resolve singleton alias forward-reference in GetEntry()
MRNIU 6256fc9
feat(device): add DmaRegion type and IoBuffer::ToDmaRegion()
MRNIU 2cc08bb
refactor(device): replace void* DMA with DmaRegion + VirtToPhys abstr…
MRNIU adf9435
Merge branch 'feature/dma-region'
MRNIU 5bb1b83
refactor: sk_print_str
MRNIU 2cbffc9
refactor: device
MRNIU 659ba02
feat(log): add per-CPU lock-free LogLineRaw/LogStreamRaw interfaces
MRNIU 91a3e1c
fix(arch): use lock-free klog::raw_err in DumpStack to prevent deadlock
MRNIU 0a6a968
refactor: klog
MRNIU b8926c5
refactor: klog
MRNIU af170d6
refactor: klog
MRNIU 89e4b4a
3rd: add stb and EasyLogger
MRNIU ba5b96a
3rd: add stb and EasyLogger
MRNIU 6a102e2
3rd: add stb and EasyLogger
MRNIU 4ef9b5f
3rd: add stb and EasyLogger
MRNIU b1d9e6c
docs(log): add MPMC log refactor design and implementation plan
MRNIU 4665623
refactor(log): rewrite kernel_log.hpp with MPMC lock-free queue
MRNIU 9f448a2
refactor(log): migrate src/main.cpp to new klog API
MRNIU affc4b1
refactor(log): migrate src/arch/x86_64/ to new klog API
MRNIU 090c62f
refactor(log): migrate src/arch/riscv64/ to new klog API
MRNIU f9ed87e
refactor(log): migrate src/arch/aarch64/ to new klog API
MRNIU 4b865d1
refactor(log): migrate src/memory/ to new klog API
MRNIU ba65624
refactor(log): migrate src/device/ to new klog API
MRNIU a4e1236
refactor(log): migrate src/task/ to new klog API
MRNIU a8fd75b
refactor(log): migrate src/filesystem/ to new klog API
MRNIU 7811ccd
refactor(log): migrate remaining headers and syscall to new klog API
MRNIU 19f9e53
refactor(log): update commented-out klog calls in spinlock.hpp to new…
MRNIU 74b328a
fix(log): replace __always_inline with inline on variadic klog functions
MRNIU a3413c5
fix(log): add missing cpu_io.h include for GetCurrentCoreId
MRNIU e852253
feat: mpsc log
MRNIU 263ecbb
Merge branch 'refactor/mpmc-log'
MRNIU f822a01
feat: etl format
MRNIU 96eac4e
fix: etl format
MRNIU 1f46c1a
style: update
MRNIU 282baaa
style: update
MRNIU d6cea43
feat: log with core id
MRNIU 2c10805
feat: log with core id
MRNIU 2cc9ac3
feat: working on smp
MRNIU e9dca22
3rd: update etl
MRNIU 65655c8
3rd: update etl
MRNIU abe8f87
style: update
MRNIU 61a774f
fix: add boot_task
MRNIU 4fa5a9b
fix: move TimerInit to main
MRNIU 71c14ee
fix: move TimerInit to main
MRNIU 138a17d
doc: update AGENTS.md
MRNIU 4b62f82
style: update
MRNIU d6f8c39
style: update
MRNIU f6f4413
style: update
MRNIU 5368836
style: update
MRNIU de15a46
style: update
MRNIU 3c51b6c
style: update
MRNIU 912116b
style: use pragma once
MRNIU 7d192b0
style: update
MRNIU 7e58bd5
style(arch,filesystem,memory): update headers to coding standards
MRNIU 714cad4
style: use trailing return types in .cpp and arch.h
MRNIU e19ce72
style: update
MRNIU f4a952b
style: update
MRNIU ad9f9fa
style: update
MRNIU 0468109
style: update
MRNIU b32fcf6
style: update
MRNIU 9ede4b1
style: update
MRNIU 0aff049
style: update
MRNIU 7062582
style: update
MRNIU 120f937
style: update
MRNIU c12081f
style: update
MRNIU d269b9e
style: update
MRNIU 0e14242
style: update
MRNIU 6d06d10
style: update
MRNIU e30f707
style: update
MRNIU d55a4cd
style: update
MRNIU 2ef12ea
style: update
MRNIU 1b2c35a
style: update
MRNIU 32b2b01
style: update
MRNIU 378df42
style: update
MRNIU 2fbdff5
style: update
MRNIU 401fdf8
style: update
MRNIU 550166e
style: update
MRNIU 3ab5d4a
docs: update AGENTS.md
MRNIU b640df2
test: fix st
MRNIU 16e9a00
style: update
MRNIU 490b88f
style: update
MRNIU dd2a75d
test: fix st
MRNIU 69a10d4
test: fix st
MRNIU a6dcb17
test: fix st
MRNIU 3d264d3
docs: update AGENTS.md
MRNIU d3549d1
fix: warnning
MRNIU da0693c
fix(multi): address Copilot review findings across IO APIC, VFS, devi…
MRNIU a34714f
test: update devcontainer
MRNIU 7527168
merge: upstream
MRNIU c953681
test: update devcontainer
MRNIU b4f72e6
test: update devcontainer
MRNIU bee7635
test: update devcontainer
MRNIU aa94bf0
Merge remote-tracking branch 'upstream'
MRNIU dc52556
feat: working on signal
MRNIU 7610c3d
test: fix st
MRNIU 5574c2a
fix: update st
MRNIU 7eb2168
fix: st
MRNIU 1508849
test: update ci
MRNIU f8c39cc
test: update ci
MRNIU 33e0169
fix(cmake): create /srv/tftp directory before symlinking
MRNIU 6f96431
fix(devcontainer): create /srv/tftp for QEMU built-in TFTP server
MRNIU 7def88e
fix(devcontainer): add libssl-dev for U-Boot build
MRNIU 34c0230
fix(devcontainer): add aarch64-linux-gnu-cpp alternative for OP-TEE b…
MRNIU 37b0f52
feat(syscall): wire signal and affinity syscalls into dispatcher
MRNIU fa40d05
test(task): add yield system test
MRNIU cec4251
test: claen main.cpp
MRNIU 3cbfa88
test(task): add fork system test
MRNIU 49b1998
test(task): add signal, affinity, tick, zombie_reap, stress system tests
MRNIU 5e6e1d6
fix: st
MRNIU bcd9be6
test: fix st
MRNIU 82ae3a9
test: working on st
MRNIU ceba98c
fix: st
MRNIU 4d8800e
fix: timer seq bug
MRNIU aca5734
fix: timer seq bug
MRNIU 3fc9132
feat: remove x86_64
MRNIU 3b3697b
fix(ci): use virtio-net-device and correct codecov path for ARM runner
MRNIU 5f214f8
perf(ci): parallelize jobs, prebuilt Docker image, caching and shallo…
MRNIU File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| # Copyright The SimpleKernel Contributors | ||
|
|
||
| name: dev-image | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main] | ||
| paths: | ||
| - '.devcontainer/Dockerfile' | ||
| - '.github/workflows/dev-image.yml' | ||
| workflow_dispatch: | ||
|
|
||
| env: | ||
| IMAGE: ghcr.io/simple-xx/simplekernel-dev | ||
|
|
||
| jobs: | ||
| build-and-push: | ||
| runs-on: ubuntu-24.04-arm | ||
| permissions: | ||
| contents: read | ||
| packages: write | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 1 | ||
|
|
||
| - name: Set up Docker Buildx | ||
| uses: docker/setup-buildx-action@v3 | ||
|
|
||
| - name: Log in to GHCR | ||
| uses: docker/login-action@v3 | ||
| with: | ||
| registry: ghcr.io | ||
| username: ${{ github.actor }} | ||
| password: ${{ secrets.GITHUB_TOKEN }} | ||
|
|
||
| - name: Build and push | ||
| uses: docker/build-push-action@v6 | ||
| with: | ||
| context: .devcontainer | ||
| file: .devcontainer/Dockerfile | ||
| push: true | ||
| tags: | | ||
| ${{ env.IMAGE }}:latest | ||
| ${{ env.IMAGE }}:${{ github.sha }} | ||
| cache-from: type=gha | ||
| cache-to: type=gha,mode=max |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -3,54 +3,132 @@ | |||||
| name: build | ||||||
|
|
||||||
| on: | ||||||
| - push | ||||||
| - pull_request | ||||||
| - release | ||||||
| push: | ||||||
| pull_request: | ||||||
| release: | ||||||
| types: [published] | ||||||
|
|
||||||
| # Cancel in-progress runs for the same branch/PR | ||||||
| concurrency: | ||||||
| group: ${{ github.workflow }}-${{ github.ref }} | ||||||
| cancel-in-progress: true | ||||||
|
|
||||||
| env: | ||||||
| # PR: 3 runs for speed; push/release: 10 runs for stability | ||||||
| SYSTEM_TEST_RUNS: ${{ github.event_name == 'pull_request' && 3 || 10 }} | ||||||
|
|
||||||
| jobs: | ||||||
| build: | ||||||
| runs-on: ubuntu-latest | ||||||
| build-riscv64: | ||||||
| runs-on: ubuntu-24.04-arm | ||||||
| permissions: | ||||||
| contents: write | ||||||
| contents: read | ||||||
| packages: read | ||||||
| statuses: write | ||||||
| container: | ||||||
| image: ghcr.io/simple-xx/simplekernel-dev:latest | ||||||
| steps: | ||||||
| - name: Checkout | ||||||
| uses: actions/checkout@v4 | ||||||
| with: | ||||||
| fetch-depth: 0 | ||||||
| submodules: recursive | ||||||
| fetch-depth: 1 | ||||||
|
|
||||||
| - name: x86_64 | ||||||
| uses: devcontainers/ci@v0.3 | ||||||
| - name: Shallow submodule init | ||||||
| run: git submodule update --init --recursive --depth 1 | ||||||
|
|
||||||
| - name: Cache CMake build (riscv64) | ||||||
| uses: actions/cache@v4 | ||||||
| with: | ||||||
| runCmd: | | ||||||
| cmake --preset=build_x86_64 | ||||||
| cmake --build build_x86_64 --target SimpleKernel unit-test coverage docs | ||||||
| path: build_riscv64/ | ||||||
| key: cmake-riscv64-${{ runner.arch }}-${{ hashFiles('CMakeLists.txt', 'cmake/**', 'src/**') }} | ||||||
|
||||||
| key: cmake-riscv64-${{ runner.arch }}-${{ hashFiles('CMakeLists.txt', 'cmake/**', 'src/**') }} | |
| key: cmake-riscv64-${{ runner.arch }}-${{ hashFiles('CMakeLists.txt', 'cmake/**') }} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -16,3 +16,4 @@ Doxyfile | |
| *.elf | ||
| .pre-commit-config.yaml | ||
| .worktrees/ | ||
| .claude | ||
Submodule cpu_io
updated
4 files
| +4 −0 | CMakePresets.json | |
| +24 −6 | include/aarch64/context.hpp | |
| +2 −12 | include/aarch64/cpu.hpp | |
| +30 −6 | include/riscv64/context.hpp |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR 描述聚焦于 CI 性能优化,但该 PR 同时包含大量内核功能变更(信号机制、Wait/Exit 并发语义调整)、系统测试大规模新增、以及 x86_64 架构与相关构建/文档的整体移除。这会显著增加 review 与回滚成本;建议将 CI/workflow 变更与内核/架构变更拆分为独立 PR,或至少在 PR 描述中明确列出这些非 CI 范畴的重大改动与迁移影响。