mirror of
https://gitlab.com/pezkuwichain/pezkuwi-sdk.git
synced 2026-10-20 18:56:23 +00:00
151 lines
4.3 KiB
YAML
151 lines
4.3 KiB
YAML
stages:
|
|
- lint
|
|
- security
|
|
- test
|
|
- build
|
|
- release
|
|
|
|
variables:
|
|
CARGO_HOME: "$CI_PROJECT_DIR/.cargo"
|
|
CARGO_INCREMENTAL: "0"
|
|
CARGO_TERM_COLOR: "always"
|
|
RUST_BACKTRACE: "short"
|
|
RUSTFLAGS: "-D warnings"
|
|
SCCACHE_DIR: "$CI_PROJECT_DIR/.sccache"
|
|
|
|
default:
|
|
image: rust:slim
|
|
before_script:
|
|
- apt-get update -qq && apt-get install -y -qq --no-install-recommends
|
|
pkg-config libssl-dev clang cmake protobuf-compiler git curl ca-certificates
|
|
- rustup show # installs channel from rust-toolchain.toml (1.88.0)
|
|
- rustup target add wasm32-unknown-unknown
|
|
- cargo --version && rustc --version
|
|
cache:
|
|
key:
|
|
files:
|
|
- Cargo.lock
|
|
- rust-toolchain.toml
|
|
paths:
|
|
- .cargo/registry/
|
|
- .cargo/git/
|
|
- target/
|
|
policy: pull-push
|
|
interruptible: true
|
|
timeout: 3h
|
|
|
|
# ─── LINT ────────────────────────────────────────────────────────────────────
|
|
|
|
fmt:
|
|
stage: lint
|
|
script:
|
|
- cargo fmt --all -- --check
|
|
allow_failure: false
|
|
|
|
check:
|
|
stage: lint
|
|
script:
|
|
- cargo check --workspace --locked
|
|
allow_failure: false
|
|
|
|
clippy:
|
|
stage: lint
|
|
script:
|
|
- cargo clippy --workspace --locked -- -D warnings
|
|
allow_failure: false
|
|
|
|
# ─── SECURITY ────────────────────────────────────────────────────────────────
|
|
|
|
cargo-audit:
|
|
stage: security
|
|
script:
|
|
- cargo install cargo-audit --quiet
|
|
- cargo audit
|
|
allow_failure: true # advisory-only; does not block merge
|
|
|
|
cargo-deny:
|
|
stage: security
|
|
script:
|
|
- cargo install cargo-deny --quiet
|
|
- cargo deny check --config deny.toml
|
|
allow_failure: false
|
|
|
|
license-check:
|
|
stage: security
|
|
script:
|
|
- |
|
|
echo "Checking Apache-2.0 license headers..."
|
|
if [ ! -f LICENSE-APACHE ]; then
|
|
echo "ERROR: LICENSE-APACHE missing" && exit 1
|
|
fi
|
|
if [ ! -f NOTICE ]; then
|
|
echo "ERROR: NOTICE file missing" && exit 1
|
|
fi
|
|
echo "✅ License files present"
|
|
allow_failure: false
|
|
|
|
# ─── TEST ────────────────────────────────────────────────────────────────────
|
|
|
|
unit-tests:
|
|
stage: test
|
|
script:
|
|
- cargo test --workspace --lib --locked 2>&1 | tee test-results.txt
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- test-results.txt
|
|
expire_in: 7 days
|
|
allow_failure: false
|
|
|
|
wasm-check:
|
|
stage: test
|
|
script:
|
|
- cargo check -p pezkuwichain-runtime --locked --target wasm32-unknown-unknown
|
|
allow_failure: false
|
|
|
|
# ─── BUILD ───────────────────────────────────────────────────────────────────
|
|
|
|
build:
|
|
stage: build
|
|
script:
|
|
- cargo build --release -p pezkuwi --locked 2>&1 | tee build.log
|
|
- ls -lh target/release/pezkuwi target/release/pezkuwi-execute-worker target/release/pezkuwi-prepare-worker
|
|
artifacts:
|
|
paths:
|
|
- target/release/pezkuwi
|
|
- target/release/pezkuwi-execute-worker
|
|
- target/release/pezkuwi-prepare-worker
|
|
expire_in: 1 day
|
|
when: on_success
|
|
only:
|
|
- main
|
|
- tags
|
|
|
|
# ─── RELEASE ─────────────────────────────────────────────────────────────────
|
|
|
|
release:
|
|
stage: release
|
|
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
|
before_script: [] # override default before_script — no Rust needed
|
|
needs:
|
|
- build
|
|
script:
|
|
- echo "Creating release $CI_COMMIT_TAG"
|
|
release:
|
|
tag_name: "$CI_COMMIT_TAG"
|
|
name: "Pezkuwi SDK $CI_COMMIT_TAG"
|
|
description: |
|
|
## Pezkuwi SDK $CI_COMMIT_TAG
|
|
|
|
Binary artifacts built from this release are attached.
|
|
|
|
**Install:**
|
|
```bash
|
|
curl -LO https://gitlab.com/pezkuwichain/pezkuwi-sdk/-/releases/$CI_COMMIT_TAG/downloads/pezkuwi
|
|
chmod +x pezkuwi
|
|
```
|
|
only:
|
|
- /^v\d+\.\d+\.\d+$/
|
|
except:
|
|
- branches
|