diff --git a/.fluentci/src/dagger/index.ts b/.fluentci/src/dagger/index.ts index b915f31..6aa8a77 100644 --- a/.fluentci/src/dagger/index.ts +++ b/.fluentci/src/dagger/index.ts @@ -1,4 +1,4 @@ import pipeline from "./pipeline.ts"; -import { build, test } from "./jobs.ts"; +import { clippy, build, test } from "./jobs.ts"; -export { pipeline, build, test }; +export { pipeline, clippy, build, test }; diff --git a/.fluentci/src/dagger/jobs.ts b/.fluentci/src/dagger/jobs.ts index 519d952..aa7f6e7 100644 --- a/.fluentci/src/dagger/jobs.ts +++ b/.fluentci/src/dagger/jobs.ts @@ -1,12 +1,53 @@ import Client, { connect } from "../../deps.ts"; export enum Job { + clippy = "clippy", test = "test", build = "build", } export const exclude = ["target", ".git", ".devbox", ".fluentci"]; +export const clippy = async (src = ".") => { + await connect(async (client: Client) => { + const context = client.host().directory(src); + const ctr = client + .pipeline(Job.test) + .container() + .from("rust:1.73-bookworm") + .withExec(["apt-get", "update"]) + .withExec([ + "apt-get", + "install", + "-y", + "build-essential", + "libasound2-dev", + "protobuf-compiler", + "pkg-config", + ]) + .withExec(["rustup", "component", "add", "clippy"]) + .withExec(["cargo", "install", "clippy-sarif", "--version", "0.3.0"]) + .withExec(["cargo", "install", "sarif-fmt", "--version", "0.3.0"]) + .withDirectory("/app", context, { exclude }) + .withWorkdir("/app") + .withMountedCache("/app/target", client.cacheVolume("target")) + .withMountedCache("/root/cargo/registry", client.cacheVolume("registry")) + .withExec([ + "sh", + "-c", + "cargo clippy \ + --all-features \ + --message-format=json | clippy-sarif | tee rust-clippy-results.sarif | sarif-fmt", + ]); + + await ctr + .file("/app/rust-clippy-results.sarif") + .export("./rust-clippy-results.sarif"); + await ctr.stdout(); + }); + return "Done"; +}; + export const test = async (src = ".") => { await connect(async (client: Client) => { const context = client.host().directory(src); @@ -23,6 +64,7 @@ export const test = async (src = ".") => { "libasound2-dev", "protobuf-compiler", "wget", + "pkg-config", ]) .withExec([ "wget", @@ -89,6 +131,7 @@ export const build = async (src = ".") => { "-y", "build-essential", "libasound2-dev", + "pkg-config", ]) .withDirectory("/app", context, { exclude }) .withWorkdir("/app/webui/musicplayer") @@ -130,11 +173,13 @@ export type JobExec = (src?: string) => ) => Promise); export const runnableJobs: Record = { + [Job.clippy]: clippy, [Job.test]: test, [Job.build]: build, }; export const jobDescriptions: Record = { + [Job.clippy]: "Run Rust clippy", [Job.test]: "Run tests", [Job.build]: "Build the project", }; diff --git a/.github/workflows/rust-clippy.yml b/.github/workflows/rust-clippy.yml index 82851b4..736bf31 100644 --- a/.github/workflows/rust-clippy.yml +++ b/.github/workflows/rust-clippy.yml @@ -29,27 +29,23 @@ jobs: - name: Checkout code uses: actions/checkout@v2 - - name: Install Rust toolchain - uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af #@v1 + - uses: denoland/setup-deno@v1 with: - profile: minimal - toolchain: stable - components: clippy - override: true - - - name: Install required cargo + deno-version: v1.37 + - name: Setup Fluent CI CLI + run: deno install -A -r https://cli.fluentci.io -n fluentci + - name: Setup Dagger run: | - cargo install clippy-sarif --version 0.3.0 - cargo install sarif-fmt --version 0.3.0 + curl -L https://dl.dagger.io/dagger/install.sh | DAGGER_VERSION=0.8.8 sh + sudo mv bin/dagger /usr/local/bin + dagger version - name: Run rust-clippy - run: cargo clippy - --all-features - --message-format=json | clippy-sarif | tee rust-clippy-results.sarif | sarif-fmt + run: fluentci run . clippy continue-on-error: true - name: Upload analysis results to GitHub - uses: github/codeql-action/upload-sarif@v1 + uses: github/codeql-action/upload-sarif@v2 with: sarif_file: rust-clippy-results.sarif wait-for-processing: true