108 lines
3.2 KiB
YAML
108 lines
3.2 KiB
YAML
# Linux 流水线:Rust 存储 + Haskell 引擎/Web/CLI 的构建与测试。
|
||
#
|
||
# 这里每条命令都在 WSL Debian(cargo 1.98 / GHC 9.10.3 / stack 3.11.1)上跑通过,
|
||
# 见仓库根 README 的「构建与测试」段。Haskell 这边链接并装入 libchusql_core_storage.so,
|
||
# 所以 Rust 先构建,LD_LIBRARY_PATH 指向它的输出目录,Haskell 用例才能真跑而不是 pending。
|
||
# 打包和发版资源走 .github/workflows/release.yml(tag 触发,也可手动 dispatch)。
|
||
name: linux
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
pull_request:
|
||
workflow_dispatch:
|
||
|
||
concurrency:
|
||
group: linux-${{ github.ref }}
|
||
cancel-in-progress: true
|
||
|
||
env:
|
||
CARGO_TERM_COLOR: always
|
||
LD_LIBRARY_PATH: ${{ github.workspace }}/chusql-core/storage/target/release
|
||
|
||
jobs:
|
||
linux:
|
||
name: build + test
|
||
runs-on: ubuntu-latest
|
||
timeout-minutes: 90
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
# ---------- Rust 存储 ----------
|
||
- name: Rust toolchain
|
||
uses: dtolnay/rust-toolchain@stable
|
||
with:
|
||
components: clippy
|
||
|
||
- name: Cache cargo
|
||
uses: actions/cache@v4
|
||
with:
|
||
path: |
|
||
~/.cargo/registry
|
||
~/.cargo/git
|
||
chusql-core/storage/target
|
||
key: ${{ runner.os }}-cargo-${{ hashFiles('chusql-core/storage/Cargo.lock') }}
|
||
restore-keys: ${{ runner.os }}-cargo-
|
||
|
||
- name: cargo build (release)
|
||
working-directory: chusql-core/storage
|
||
run: cargo build --release
|
||
|
||
- name: cargo test
|
||
working-directory: chusql-core/storage
|
||
run: cargo test --release
|
||
|
||
- name: cargo clippy (-D warnings)
|
||
working-directory: chusql-core/storage
|
||
run: cargo clippy --all-targets -- -D warnings
|
||
|
||
# 故意不做 rustfmt 检查:仓库里没有 rustfmt.toml,历史代码也不是按当前 rustfmt 的
|
||
# 默认风格排的,直接跑会报上百处折行与 use 排序差异;格式化不是本仓的门禁,别拿它
|
||
# 当交付标准。
|
||
|
||
# ---------- Haskell ----------
|
||
- name: Haskell toolchain
|
||
uses: haskell-actions/setup@v2
|
||
with:
|
||
ghc-version: '9.10.3'
|
||
enable-stack: true
|
||
stack-version: '3.11.1'
|
||
|
||
- name: Cache stack
|
||
uses: actions/cache@v4
|
||
with:
|
||
path: |
|
||
~/.stack
|
||
chusql-core/engine/.stack-work
|
||
chusql-bootstrap/.stack-work
|
||
chusql-server/.stack-work
|
||
chusql-web/.stack-work
|
||
chusql-cli/.stack-work
|
||
key: ${{ runner.os }}-stack-${{ hashFiles('**/stack.yaml', '**/stack.yaml.lock') }}
|
||
restore-keys: ${{ runner.os }}-stack-
|
||
|
||
- name: stack build (cabal 里带 -Wall)
|
||
working-directory: chusql-cli
|
||
run: stack build --fast
|
||
|
||
- name: bootstrap build
|
||
working-directory: chusql-bootstrap
|
||
run: stack build --fast
|
||
|
||
- name: engine tests
|
||
working-directory: chusql-core/engine
|
||
run: stack test --fast
|
||
|
||
- name: server tests
|
||
working-directory: chusql-server
|
||
run: stack test --fast
|
||
|
||
- name: web tests
|
||
working-directory: chusql-web
|
||
run: stack test --fast
|
||
|
||
- name: cli tests
|
||
working-directory: chusql-cli
|
||
run: stack test chusql-cli --fast
|
||
|