run_action_checks.rs

 1use gh_workflow::*;
 2
 3use crate::tasks::workflows::{
 4    run_tests::run_tests_in,
 5    runners,
 6    steps::{self, FluentBuilder, NamedJob, named, release_job},
 7};
 8
 9pub(crate) fn run_action_checks() -> Workflow {
10    let action_checks = actionlint();
11    let shell_checks = shellcheck();
12
13    named::workflow()
14        .map(|workflow| {
15            run_tests_in(
16                &[
17                    ".github/workflows/**",
18                    ".github/actions/**",
19                    ".github/actionlint.yml",
20                    "script/**",
21                ],
22                workflow,
23            )
24        })
25        .add_job(action_checks.name, action_checks.job)
26        .add_job(shell_checks.name, shell_checks.job)
27}
28const ACTION_LINT_STEP_ID: &'static str = "get_actionlint";
29
30fn actionlint() -> NamedJob {
31    named::job(
32        release_job(&[])
33            .runs_on(runners::LINUX_SMALL)
34            .add_step(steps::checkout_repo())
35            .add_step(download_actionlint())
36            .add_step(run_actionlint()),
37    )
38}
39
40fn shellcheck() -> NamedJob {
41    named::job(
42        release_job(&[])
43            .runs_on(runners::LINUX_SMALL)
44            .add_step(steps::checkout_repo())
45            .add_step(run_shellcheck()),
46    )
47}
48
49fn download_actionlint() -> Step<Run> {
50    named::bash("bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)").id(ACTION_LINT_STEP_ID)
51}
52
53fn run_actionlint() -> Step<Run> {
54    named::bash(indoc::indoc! {r#"
55            ${{ steps.get_actionlint.outputs.executable }} -color
56        "#})
57}
58
59fn run_shellcheck() -> Step<Run> {
60    named::bash("./script/shellcheck-scripts error")
61}