/ .circleci / config.yml
config.yml
  1  version: 2.1
  2  
  3  parameters:
  4    medium:
  5      type: string
  6      default: medium
  7    large:
  8      type: string
  9      default: large
 10    xlarge:
 11      type: string
 12      default: xlarge
 13  
 14  executors:
 15    rust-docker:
 16      docker:
 17        - image: cimg/rust:1.88.0
 18      resource_class: << pipeline.parameters.xlarge >>
 19  
 20  commands:
 21    checkout_all_repos:
 22      description: "Checkout adnet and all dependent repositories"
 23      steps:
 24        - checkout:
 25            path: ~/project/adnet
 26        - run:
 27            name: Clone alphavm
 28            command: |
 29              git clone --depth 1 git@github.com:BlockBlox-MD/alphavm.git ~/project/alphavm
 30        - run:
 31            name: Clone deltavm
 32            command: |
 33              git clone --depth 1 git@github.com:BlockBlox-MD/deltavm.git ~/project/deltavm
 34        - run:
 35            name: Clone adnet-core
 36            command: |
 37              git clone --depth 1 git@github.com:BlockBlox-MD/adnet-core.git ~/project/adnet-core
 38  
 39    setup_environment:
 40      description: "Setup testing environment"
 41      parameters:
 42        cache_key:
 43          type: string
 44          default: v1.1.0-rust-1.88.0-adnet-cache
 45      steps:
 46        - run:
 47            name: Install Debian packages
 48            command: |
 49              DEBIAN_FRONTEND=noninteractive sudo apt-get update
 50              DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --no-install-recommends clang llvm-dev llvm pkg-config libssl-dev
 51        - restore_cache:
 52            keys:
 53              - << parameters.cache_key >>-{{ checksum "~/project/adnet/Cargo.lock" }}
 54              - << parameters.cache_key >>
 55  
 56    clear_environment:
 57      description: "Clear environment"
 58      parameters:
 59        cache_key:
 60          type: string
 61          default: v1.1.0-rust-1.88.0-adnet-cache
 62      steps:
 63        - save_cache:
 64            key: << parameters.cache_key >>-{{ checksum "~/project/adnet/Cargo.lock" }}
 65            paths:
 66              - ~/.cargo/registry
 67              - ~/.cargo/git
 68              - ~/project/adnet/target
 69  
 70    install_rust_nightly:
 71      description: "Install Rust nightly toolchain"
 72      steps:
 73        - run: rustup toolchain install nightly-x86_64-unknown-linux-gnu
 74  
 75  jobs:
 76    check-fmt:
 77      executor: rust-docker
 78      resource_class: << pipeline.parameters.medium >>
 79      steps:
 80        - add_ssh_keys:
 81            fingerprints:
 82              - "SHA256:CircleCIDeployKey"  # Add your deploy key fingerprint
 83        - checkout_all_repos
 84        - install_rust_nightly
 85        - setup_environment:
 86            cache_key: v1.1.0-rust-1.88.0-adnet-fmt-cache
 87        - run:
 88            name: Check style
 89            working_directory: ~/project/adnet
 90            command: cargo +nightly fmt --all -- --check
 91        - clear_environment:
 92            cache_key: v1.1.0-rust-1.88.0-adnet-fmt-cache
 93  
 94    check-clippy:
 95      executor: rust-docker
 96      resource_class: << pipeline.parameters.medium >>
 97      steps:
 98        - add_ssh_keys:
 99            fingerprints:
100              - "SHA256:CircleCIDeployKey"  # Add your deploy key fingerprint
101        - checkout_all_repos
102        - setup_environment:
103            cache_key: v1.1.0-rust-1.88.0-adnet-clippy-cache
104        - run:
105            name: Check Clippy
106            working_directory: ~/project/adnet
107            command: cargo clippy --workspace --all-targets -- -D warnings
108        - clear_environment:
109            cache_key: v1.1.0-rust-1.88.0-adnet-clippy-cache
110  
111    test-all:
112      executor: rust-docker
113      steps:
114        - add_ssh_keys:
115            fingerprints:
116              - "SHA256:CircleCIDeployKey"  # Add your deploy key fingerprint
117        - checkout_all_repos
118        - setup_environment
119        - run:
120            name: Test all packages
121            working_directory: ~/project/adnet
122            no_output_timeout: 20m
123            command: cargo test --workspace
124        - clear_environment
125  
126    build-release:
127      executor: rust-docker
128      steps:
129        - add_ssh_keys:
130            fingerprints:
131              - "SHA256:CircleCIDeployKey"  # Add your deploy key fingerprint
132        - checkout_all_repos
133        - setup_environment:
134            cache_key: v1.1.0-rust-1.88.0-adnet-release-cache
135        - run:
136            name: Build release binary
137            working_directory: ~/project/adnet
138            no_output_timeout: 30m
139            command: cargo build --release
140        - clear_environment:
141            cache_key: v1.1.0-rust-1.88.0-adnet-release-cache
142  
143  workflows:
144    version: 2
145  
146    quality-workflow:
147      jobs:
148        - check-fmt
149        - check-clippy
150  
151    test-workflow:
152      jobs:
153        - test-all
154  
155    build-workflow:
156      jobs:
157        - build-release