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}