loading...
Cover image for GitHub action for multi-project Rust repository

GitHub action for multi-project Rust repository

petr7555 profile image Petr Janik ・1 min read

My Workflow

I recently started learning Rust. If you are interested in following my journey, see the Rust series here on DEV.


For this, I created a repository containing multiple subfolders.
I would like to be able to build and test each of the projects for each pull request or when a new code is pushed to the master.

I started off the suggested rust.yml action.

name: Rust

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

env:
  CARGO_TERM_COLOR: always

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Build, test, clippy all
      run: sh -x ./scripts/ci.sh
Enter fullscreen mode Exit fullscreen mode

My build job includes one step, called Build, test, clippy all and it executes a bash script in the repository.
The script looks as follows:

build_test_clippy(){
  while read path; do
    printf "Project: %s\n" "$path"
    cargo build --verbose --manifest-path "$path"
    cargo test --verbose --manifest-path "$path"
    cargo clippy --verbose --manifest-path "$path"
  done
}

find . -name 'Cargo.toml' | sort -u | build_test_clippy
Enter fullscreen mode Exit fullscreen mode

First, the find command finds all directories containing the
Cargo.toml file. This is like package.json if you are familiar with JavaScript.
In the directories it finds, it executes cargo build which builds the project, cargo test which runs the tests and cargo clippy which is a linter for Rust.

Submission Category:

Wacky Wildcards

Link to Code

Discussion

pic
Editor guide