mirror of
https://github.com/Hmbown/DeepSeek-TUI.git
synced 2026-09-02 22:36:19 +08:00
Import the codewhale-cnb-bridge GitHub App credentials from the CNB KeyStore (codewhale.net/codewhale-ci-secrets, github-bridge.yml) via the documented imports mechanism, and add an endStages bridge step to the linux rust gates pipeline that mints an installation token and posts a non-required 'linux rust gates -cnb' Check Run on the exact GitHub SHA being built, with the conclusion mapped from CNB_PIPELINE_STATUS. Per the shadow-parity protocol in the CNB-primary CI design: GitHub Actions stays canonical and required, no GitHub gate flips, and the bridge runs in endStages so a bridge outage can never fail the CNB pipeline itself. Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net>
261 lines
10 KiB
YAML
261 lines
10 KiB
YAML
# CNB is a one-way mirror from GitHub. Keep this file source-controlled here;
|
|
# CNB-side edits will be overwritten by the GitHub -> CNB sync workflow.
|
|
|
|
.feishu_bridge_tests: &feishu_bridge_tests
|
|
name: feishu bridge tests
|
|
runner:
|
|
tags: cnb:arch:amd64
|
|
cpus: 8
|
|
docker:
|
|
image: node:22-bookworm
|
|
stages:
|
|
- name: feishu bridge tests
|
|
script: |
|
|
set -eu
|
|
cd integrations/feishu-bridge
|
|
npm ci
|
|
npm run check
|
|
npm test
|
|
|
|
.rust_workspace_gates_stage: &rust_workspace_gates_stage
|
|
name: rust workspace gates
|
|
# The all-feature TUI test crate is large enough that concurrent rustc and
|
|
# clippy processes or disposable test debug metadata can exceed the shared
|
|
# CNB runner's memory. Keep the full gate surface, but serialize Cargo,
|
|
# omit test-only debug tables, and use the established workspace-test stack
|
|
# size so deep runtime API tests do not abort on the platform default.
|
|
timeout: 45m
|
|
script: |
|
|
set -eu
|
|
export CARGO_BUILD_JOBS=1
|
|
export CARGO_PROFILE_TEST_DEBUG=0
|
|
./scripts/release/check-versions.sh
|
|
./scripts/release/check-ohos-deps.sh
|
|
cargo fmt --all -- --check
|
|
cargo check --workspace --all-targets --locked
|
|
cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
|
|
# Hermetic HOME so libtest's shared process cannot see a populated
|
|
# ~/.codewhale/config.toml (#5355 config-fixture family). Tests stay in
|
|
# the suite; isolation is scheduling, not deletion.
|
|
hermetic_home="${TMPDIR:-/tmp}/cw-cnb-hermetic-home-$$"
|
|
mkdir -p "${hermetic_home}/.codewhale"
|
|
export HOME="${hermetic_home}"
|
|
export USERPROFILE="${hermetic_home}"
|
|
export CODEWHALE_HOME="${hermetic_home}/.codewhale"
|
|
unset CODEWHALE_CONFIG_PATH DEEPSEEK_CONFIG_PATH DEEPSEEK_HOME || true
|
|
RUST_MIN_STACK=16777216 cargo test --workspace --all-features --locked
|
|
# Parity gates as first-class steps so drift surfaces as a named failure,
|
|
# not a buried workspace-test entry. Mirrors release.yml's parity job.
|
|
cargo test -p codewhale-protocol --test parity_protocol --locked
|
|
cargo test -p codewhale-state --test parity_state --locked
|
|
|
|
.linux_rust_gates: &linux_rust_gates
|
|
name: linux rust gates
|
|
runner:
|
|
tags: cnb:arch:amd64
|
|
cpus: 16
|
|
docker:
|
|
image: rust:1.88-bookworm
|
|
# codewhale-cnb-bridge GitHub App credentials from the CNB KeyStore
|
|
# (codewhale.net/codewhale-ci-secrets, github-bridge.yml), injected as
|
|
# environment variables. Values are never printed.
|
|
# https://docs.cnb.cool/en/repo/secret.html
|
|
imports:
|
|
- https://cnb.cool/codewhale.net/codewhale-ci-secrets/-/blob/main/github-bridge.yml
|
|
stages:
|
|
- name: install linux dependencies
|
|
script: |
|
|
set -eu
|
|
apt-get update
|
|
apt-get install -y git libdbus-1-dev nodejs npm pkg-config
|
|
if command -v rustup >/dev/null 2>&1; then
|
|
rustup component add rustfmt clippy
|
|
fi
|
|
|
|
- *rust_workspace_gates_stage
|
|
|
|
- name: linux npm wrapper smoke
|
|
# Full LTO can link silently for longer than CNB's default 10-minute
|
|
# no-output window. Keep the production profile and give the job enough
|
|
# time to emit its version and wrapper receipts.
|
|
timeout: 45m
|
|
script: |
|
|
set -eu
|
|
# The release profile uses full LTO and one codegen unit. Bound Cargo's
|
|
# parallelism so the final links cannot exhaust a shared CNB runner.
|
|
cargo build --jobs 2 --release --locked -p codewhale-cli
|
|
cp target/release/codewhale target/release/codew
|
|
export PATH="$PWD/target/release:$PATH"
|
|
node scripts/release/npm-wrapper-smoke.js
|
|
./target/release/codewhale --version
|
|
./target/release/codew --version
|
|
|
|
# Shadow-parity bridge (ops design: CNB-PRIMARY-CI-DESIGN-20260830). Post one
|
|
# non-required "-cnb" Check Run on the exact GitHub SHA being built so the
|
|
# CNB verdict is visible on GitHub while GitHub Actions stays the canonical,
|
|
# required CI. endStages always run and cannot fail the pipeline, so a
|
|
# bridge outage never turns a green CNB build red (and vice versa: the CNB
|
|
# verdict is reported from CNB_PIPELINE_STATUS, not from this stage).
|
|
endStages:
|
|
- name: github shadow check run
|
|
script: |
|
|
set -eu
|
|
case "${CNB_PIPELINE_STATUS:-error}" in
|
|
success) conclusion="success" ;;
|
|
cancel) conclusion="cancelled" ;;
|
|
*) conclusion="failure" ;;
|
|
esac
|
|
node scripts/ci/cnb-github-checkrun.mjs \
|
|
--name "linux rust gates -cnb" \
|
|
--sha "${CNB_COMMIT}" \
|
|
--status completed \
|
|
--conclusion "${conclusion}" \
|
|
--details-url "${CNB_BUILD_WEB_URL:-https://cnb.cool/${CNB_REPO_SLUG}}" \
|
|
--summary "CNB pipeline '${CNB_PIPELINE_NAME:-linux rust gates}' finished with status ${CNB_PIPELINE_STATUS:-unknown} on ${CNB_BRANCH:-unknown branch} (${CNB_COMMIT}). Shadow lane per the CNB-primary CI design: GitHub Actions remains canonical and required; nothing is gated on this check."
|
|
|
|
.linux_release_preflight: &linux_release_preflight
|
|
name: linux release preflight
|
|
runner:
|
|
tags: cnb:arch:amd64
|
|
cpus: 16
|
|
docker:
|
|
image: rust:1.88-bookworm
|
|
stages:
|
|
- name: install release dependencies
|
|
script: |
|
|
set -eu
|
|
apt-get update
|
|
apt-get install -y curl git libdbus-1-dev nodejs npm pkg-config
|
|
if command -v rustup >/dev/null 2>&1; then
|
|
rustup component add rustfmt clippy
|
|
fi
|
|
|
|
- *rust_workspace_gates_stage
|
|
|
|
- name: crate publish dry-run
|
|
script: |
|
|
set -eu
|
|
./scripts/release/publish-crates.sh dry-run
|
|
|
|
- name: release binary smoke
|
|
# Full LTO can link silently for longer than CNB's default 10-minute
|
|
# no-output window. Keep the production profile and give the job enough
|
|
# time to emit its version and wrapper receipts.
|
|
timeout: 45m
|
|
script: |
|
|
set -eu
|
|
# Keep the production release profile intact while avoiding a burst of
|
|
# concurrent rustc/linker processes on the shared release runner.
|
|
cargo build --jobs 2 --release --locked -p codewhale-cli
|
|
cp target/release/codewhale target/release/codew
|
|
export PATH="$PWD/target/release:$PATH"
|
|
node scripts/release/npm-wrapper-smoke.js
|
|
./target/release/codewhale --version
|
|
./target/release/codew --version
|
|
|
|
main:
|
|
push:
|
|
- *feishu_bridge_tests
|
|
- *linux_rust_gates
|
|
|
|
"(fix/*|rebrand/*)":
|
|
push:
|
|
- *linux_rust_gates
|
|
|
|
"work/v*":
|
|
push:
|
|
- *feishu_bridge_tests
|
|
- *linux_release_preflight
|
|
|
|
$:
|
|
tag_push:
|
|
- docker:
|
|
image: rust:1.88-bookworm
|
|
stages:
|
|
- name: build linux x64 release assets (static)
|
|
# The static full-LTO link can also outlive CNB's default no-output
|
|
# window. Do not weaken the release profile to keep the runner alive.
|
|
timeout: 45m
|
|
script: |
|
|
set -eu
|
|
|
|
apt-get update
|
|
apt-get install -y git musl-tools nodejs pkg-config
|
|
rustup target add x86_64-unknown-linux-musl
|
|
|
|
./scripts/release/check-versions.sh
|
|
./scripts/release/check-ohos-deps.sh
|
|
checkout_sha="$(git rev-parse 'HEAD^{commit}')"
|
|
commit_sha="${CNB_COMMIT:-${checkout_sha}}"
|
|
if [ "$commit_sha" != "$checkout_sha" ]; then
|
|
echo "ERROR: CNB_COMMIT ${commit_sha} does not match checkout ${checkout_sha}" >&2
|
|
exit 1
|
|
fi
|
|
export CODEWHALE_BUILD_SHA="$commit_sha"
|
|
cargo build --jobs 2 --release --locked \
|
|
--target x86_64-unknown-linux-musl \
|
|
-p codewhale-cli # single binary
|
|
|
|
mkdir -p target/cnb-release
|
|
BIN_DIR="target/x86_64-unknown-linux-musl/release"
|
|
cp "$BIN_DIR/codewhale" target/cnb-release/codewhale-linux-x64
|
|
cp "$BIN_DIR/codewhale" target/cnb-release/codew-linux-x64
|
|
cp "$BIN_DIR/codewhale" target/cnb-release/codewhale-tui-linux-x64
|
|
strip \
|
|
target/cnb-release/codewhale-linux-x64 \
|
|
target/cnb-release/codew-linux-x64 \
|
|
target/cnb-release/codewhale-tui-linux-x64 \
|
|
|| true
|
|
|
|
(
|
|
cd target/cnb-release
|
|
sha256sum \
|
|
codewhale-linux-x64 \
|
|
codew-linux-x64 \
|
|
codewhale-tui-linux-x64 \
|
|
> codewhale-artifacts-sha256.txt
|
|
)
|
|
|
|
tag_name="${CNB_BRANCH:-}"
|
|
if [ -z "$tag_name" ]; then
|
|
tag_name="$(git describe --tags --exact-match 2>/dev/null || true)"
|
|
fi
|
|
version="${tag_name#v}"
|
|
cargo_version="$(grep -E '^version = "' Cargo.toml | head -n1 | sed -E 's/^version = "([^"]+)".*/\1/')"
|
|
if [ -n "$tag_name" ] && [ "$version" != "$cargo_version" ]; then
|
|
echo "ERROR: tag ${tag_name} does not match Cargo.toml version ${cargo_version}" >&2
|
|
exit 1
|
|
fi
|
|
{
|
|
echo "# ${tag_name:-CNB release}"
|
|
echo
|
|
awk -v version="${version}" '
|
|
index($0, "## [" version "]") == 1 { in_section = 1; next }
|
|
in_section && /^## \[/ { exit }
|
|
in_section { print }
|
|
' CHANGELOG.md
|
|
echo
|
|
echo "Built by CNB from ${commit_sha}."
|
|
echo
|
|
echo "Assets:"
|
|
echo "- codewhale-linux-x64"
|
|
echo "- codew-linux-x64"
|
|
echo "- codewhale-tui-linux-x64 (v0.9.4 compatibility alias)"
|
|
echo "- codewhale-artifacts-sha256.txt"
|
|
} > target/cnb-release/CNB_RELEASE.md
|
|
|
|
- name: create cnb release
|
|
type: git:release
|
|
options:
|
|
descriptionFromFile: target/cnb-release/CNB_RELEASE.md
|
|
latest: true
|
|
|
|
- name: upload linux x64 release assets
|
|
image: cnbcool/attachments:latest
|
|
settings:
|
|
attachments:
|
|
- target/cnb-release/codewhale-linux-x64
|
|
- target/cnb-release/codew-linux-x64
|
|
- target/cnb-release/codewhale-tui-linux-x64
|
|
- target/cnb-release/codewhale-artifacts-sha256.txt
|