Skip to content

CI: add kdevops actions from 2025-04-17 #2

CI: add kdevops actions from 2025-04-17

CI: add kdevops actions from 2025-04-17 #2

# SPDX-License-Identifier: GPL-2.0 OR copyleft-next-0.3.1
#
# Run kdevops filesystem testing.
name: Run fstests
# ----------------------------
# Supporting manual dispatches
# ----------------------------
#
# We want to enable the option for users to manuall customize their tests.
# This is supported in github through the "workflow_dispatch". In order to
# allow for that a repository must have a .github/workflows/*.yml with a
# workflow_dispatch the "Default branch" of the target kernel repository.
# Typically this is "master" or "main", you whatever it is, you need that
# brancht to have the github the .github/workflows/ with workflow_dispatch
# enabled as below.
#
# --------------------------
# Supporting auto-push tests
# --------------------------
#
# By default we disable the push option for the default branch, because this
# can trigger tests to run for all profiles. If the filesystem you want to test
# has 20 profiles then that means using 20 guests for a single push. It is
# best to then leave the discretion of *what* you want to test down to the
# user using the CI interface through the manual dispatch:
#
# https://github.com/linux-kdevops/kdevops/blob/main/docs/kernel-ci/linux-filesystems-kdevops-CI-testing.md
#
# If you want to enable automatic tests for all profiles for your filesystem
# though you can just remove the comments for push below, just be mindful of
# the resources you will use for all your pushes.
on:
push:
branches:
- '**'
pull_request:
branches:
- '**'
workflow_dispatch: # Add this for manual triggering of the workflow
inputs:
defconfig:
description: "Select defconfig"
required: false
default: "all profiles"
type: choice
options:
- "all profiles"
- "btrfs_holes"
- "btrfs_noholes"
- "btrfs_compression"
- "btrfs_fspace"
- "btrfs_nohofspace"
- "btrfs_simple"
- "btrfs_zns"
soak:
description: "Select soak duration"
required: false
default: "No soak"
type: choice
options:
- "No soak"
- "Low - 30 minutes"
- "Mid - 1 hour"
- "High - 2.5 hours"
- "Pathological - 48 hours"
group:
description: "Which test group to use"
required: false
default: "auto"
type: choice
options:
- "auto"
- "all"
- "quick"
tests:
description: "Select additional test coverage"
required: false
default: "all"
type: choice
options:
- "all"
- "custom"
- "generic/001"
- "generic/002"
- "generic/003"
- "generic/004"
- "generic/005"
- "generic/006"
- "generic/007"
- "generic/008"
- "generic/009"
- "generic/010"
- "generic/011"
- "generic/012"
- "generic/013"
- "generic/014"
- "generic/015"
- "generic/016"
- "generic/017"
- "generic/018"
- "generic/019"
- "generic/020"
- "generic/021"
- "generic/022"
- "generic/023"
- "generic/024"
- "generic/025"
- "generic/026"
- "generic/027"
- "generic/028"
- "generic/029"
- "generic/030"
- "generic/031"
- "generic/032"
- "generic/033"
- "generic/034"
- "generic/035"
- "generic/036"
- "generic/037"
- "generic/038"
- "generic/039"
- "generic/040"
- "generic/041"
- "generic/042"
- "generic/043"
- "generic/044"
- "generic/045"
- "generic/046"
- "generic/047"
- "generic/048"
- "generic/049"
- "generic/050"
- "generic/051"
- "generic/052"
- "generic/053"
- "generic/054"
- "generic/055"
- "generic/056"
- "generic/057"
- "generic/058"
- "generic/059"
- "generic/060"
- "generic/061"
- "generic/062"
- "generic/063"
- "generic/064"
- "generic/065"
- "generic/066"
- "generic/067"
- "generic/068"
- "generic/069"
- "generic/070"
- "generic/071"
- "generic/072"
- "generic/073"
- "generic/074"
- "generic/075"
- "generic/076"
- "generic/077"
- "generic/078"
- "generic/079"
- "generic/080"
- "generic/081"
- "generic/082"
- "generic/083"
- "generic/084"
- "generic/085"
- "generic/086"
- "generic/087"
- "generic/088"
- "generic/089"
- "generic/090"
- "generic/091"
- "generic/092"
- "generic/093"
- "generic/094"
- "generic/095"
- "generic/096"
- "generic/097"
- "generic/098"
- "generic/099"
- "generic/100"
- "generic/101"
- "generic/102"
- "generic/103"
- "generic/104"
- "generic/105"
- "generic/106"
- "generic/107"
- "generic/108"
- "generic/109"
- "generic/110"
- "generic/111"
- "generic/112"
- "generic/113"
- "generic/114"
- "generic/115"
- "generic/116"
- "generic/117"
- "generic/118"
- "generic/119"
- "generic/120"
- "generic/121"
- "generic/122"
- "generic/123"
- "generic/124"
- "generic/125"
- "generic/126"
- "generic/127"
- "generic/128"
- "generic/129"
- "generic/130"
- "generic/131"
- "generic/132"
- "generic/133"
- "generic/134"
- "generic/135"
- "generic/136"
- "generic/137"
- "generic/138"
- "generic/139"
- "generic/140"
- "generic/141"
- "generic/142"
- "generic/143"
- "generic/144"
- "generic/145"
- "generic/146"
- "generic/147"
- "generic/148"
- "generic/149"
- "generic/150"
- "generic/151"
- "generic/152"
- "generic/153"
- "generic/154"
- "generic/155"
- "generic/156"
- "generic/157"
- "generic/158"
- "generic/159"
- "generic/160"
- "generic/161"
- "generic/162"
- "generic/163"
- "generic/164"
- "generic/165"
- "generic/166"
- "generic/167"
- "generic/168"
- "generic/169"
- "generic/170"
- "generic/171"
- "generic/172"
- "generic/173"
- "generic/174"
- "generic/175"
- "generic/176"
- "generic/177"
- "generic/178"
- "generic/179"
- "generic/180"
- "generic/181"
- "generic/182"
- "generic/183"
- "generic/184"
- "generic/185"
- "generic/186"
- "generic/187"
- "generic/188"
- "generic/189"
- "generic/190"
- "generic/191"
- "generic/192"
- "generic/193"
- "generic/194"
- "generic/195"
- "generic/196"
- "generic/197"
- "generic/198"
- "generic/199"
- "generic/200"
- "generic/201"
- "generic/202"
- "generic/203"
- "generic/204"
- "generic/205"
- "generic/206"
- "generic/207"
- "generic/208"
- "generic/209"
- "generic/210"
- "generic/211"
- "generic/212"
- "generic/213"
- "generic/214"
- "generic/215"
- "generic/216"
- "generic/217"
- "generic/218"
- "generic/219"
- "generic/220"
- "generic/221"
- "generic/222"
- "generic/223"
- "generic/224"
- "generic/225"
- "generic/226"
- "generic/227"
- "generic/228"
- "generic/229"
- "generic/230"
- "generic/231"
- "generic/232"
- "generic/233"
- "generic/234"
- "generic/235"
- "generic/236"
- "generic/237"
- "generic/238"
- "generic/239"
- "generic/240"
- "generic/241"
- "generic/242"
- "generic/243"
- "generic/244"
- "generic/245"
- "generic/246"
- "generic/247"
- "generic/248"
- "generic/249"
- "generic/250"
- "generic/251"
- "generic/252"
- "generic/253"
- "generic/254"
- "generic/255"
- "generic/256"
- "generic/257"
- "generic/258"
- "generic/259"
- "generic/260"
- "generic/261"
- "generic/262"
- "generic/263"
- "generic/264"
- "generic/265"
- "generic/266"
- "generic/267"
- "generic/268"
- "generic/269"
- "generic/270"
- "generic/271"
- "generic/272"
- "generic/273"
- "generic/274"
- "generic/275"
- "generic/276"
- "generic/277"
- "generic/278"
- "generic/279"
- "generic/280"
- "generic/281"
- "generic/282"
- "generic/283"
- "generic/284"
- "generic/285"
- "generic/286"
- "generic/287"
- "generic/288"
- "generic/289"
- "generic/290"
- "generic/291"
- "generic/292"
- "generic/293"
- "generic/294"
- "generic/295"
- "generic/296"
- "generic/297"
- "generic/298"
- "generic/299"
- "generic/300"
- "generic/301"
- "generic/302"
- "generic/303"
- "generic/304"
- "generic/305"
- "generic/306"
- "generic/307"
- "generic/308"
- "generic/309"
- "generic/310"
- "generic/311"
- "generic/312"
- "generic/313"
- "generic/314"
- "generic/315"
- "generic/316"
- "generic/317"
- "generic/318"
- "generic/319"
- "generic/320"
- "generic/321"
- "generic/322"
- "generic/323"
- "generic/324"
- "generic/325"
- "generic/326"
- "generic/327"
- "generic/328"
- "generic/329"
- "generic/330"
- "generic/331"
- "generic/332"
- "generic/333"
- "generic/334"
- "generic/335"
- "generic/336"
- "generic/337"
- "generic/338"
- "generic/339"
- "generic/340"
- "generic/341"
- "generic/342"
- "generic/343"
- "generic/344"
- "generic/345"
- "generic/346"
- "generic/347"
- "generic/348"
- "generic/349"
- "generic/350"
- "generic/351"
- "generic/352"
- "generic/353"
- "generic/354"
- "generic/355"
- "generic/356"
- "generic/357"
- "generic/358"
- "generic/359"
- "generic/360"
- "generic/361"
- "generic/362"
- "generic/363"
- "generic/364"
- "generic/371"
- "generic/372"
- "generic/373"
- "generic/374"
- "generic/375"
- "generic/376"
- "generic/377"
- "generic/378"
- "generic/379"
- "generic/380"
- "generic/381"
- "generic/382"
- "generic/383"
- "generic/384"
- "generic/385"
- "generic/386"
- "generic/387"
- "generic/388"
- "generic/389"
- "generic/390"
- "generic/391"
- "generic/392"
- "generic/393"
- "generic/394"
- "generic/395"
- "generic/396"
- "generic/397"
- "generic/398"
- "generic/399"
- "generic/400"
- "generic/401"
- "generic/402"
- "generic/403"
- "generic/404"
- "generic/405"
- "generic/406"
- "generic/407"
- "generic/408"
- "generic/409"
- "generic/410"
- "generic/411"
- "generic/412"
- "generic/413"
- "generic/414"
- "generic/415"
- "generic/416"
- "generic/417"
- "generic/418"
- "generic/419"
- "generic/420"
- "generic/421"
- "generic/422"
- "generic/423"
- "generic/424"
- "generic/425"
- "generic/426"
- "generic/427"
- "generic/428"
- "generic/429"
- "generic/430"
- "generic/431"
- "generic/432"
- "generic/433"
- "generic/434"
- "generic/435"
- "generic/436"
- "generic/437"
- "generic/438"
- "generic/439"
- "generic/440"
- "generic/441"
- "generic/442"
- "generic/443"
- "generic/444"
- "generic/445"
- "generic/446"
- "generic/447"
- "generic/448"
- "generic/449"
- "generic/450"
- "generic/451"
- "generic/452"
- "generic/453"
- "generic/454"
- "generic/455"
- "generic/456"
- "generic/457"
- "generic/458"
- "generic/459"
- "generic/460"
- "generic/461"
- "generic/462"
- "generic/463"
- "generic/464"
- "generic/465"
- "generic/466"
- "generic/467"
- "generic/468"
- "generic/469"
- "generic/470"
- "generic/471"
- "generic/472"
- "generic/473"
- "generic/474"
- "generic/475"
- "generic/476"
- "generic/477"
- "generic/478"
- "generic/479"
- "generic/480"
- "generic/481"
- "generic/482"
- "generic/483"
- "generic/484"
- "generic/485"
- "generic/486"
- "generic/487"
- "generic/488"
- "generic/489"
- "generic/490"
- "generic/491"
- "generic/492"
- "generic/493"
- "generic/494"
- "generic/495"
- "generic/496"
- "generic/497"
- "generic/498"
- "generic/499"
- "generic/500"
- "generic/501"
- "generic/502"
- "generic/503"
- "generic/504"
- "generic/505"
- "generic/506"
- "generic/507"
- "generic/508"
- "generic/509"
- "generic/510"
- "generic/511"
- "generic/512"
- "generic/513"
- "generic/514"
- "generic/515"
- "generic/516"
- "generic/517"
- "generic/518"
- "generic/519"
- "generic/520"
- "generic/521"
- "generic/522"
- "generic/523"
- "generic/524"
- "generic/525"
- "generic/526"
- "generic/527"
- "generic/528"
- "generic/529"
- "generic/530"
- "generic/531"
- "generic/532"
- "generic/533"
- "generic/534"
- "generic/535"
- "generic/536"
- "generic/537"
- "generic/538"
- "generic/539"
- "generic/540"
- "generic/541"
- "generic/542"
- "generic/543"
- "generic/544"
- "generic/545"
- "generic/546"
- "generic/547"
- "generic/548"
- "generic/549"
- "generic/550"
- "generic/551"
- "generic/552"
- "generic/553"
- "generic/554"
- "generic/555"
- "generic/556"
- "generic/557"
- "generic/558"
- "generic/559"
- "generic/560"
- "generic/561"
- "generic/562"
- "generic/563"
- "generic/564"
- "generic/565"
- "generic/566"
- "generic/567"
- "generic/568"
- "generic/569"
- "generic/570"
- "generic/571"
- "generic/572"
- "generic/573"
- "generic/574"
- "generic/575"
- "generic/576"
- "generic/577"
- "generic/578"
- "generic/579"
- "generic/580"
- "generic/581"
- "generic/582"
- "generic/583"
- "generic/584"
- "generic/585"
- "generic/586"
- "generic/587"
- "generic/588"
- "generic/589"
- "generic/590"
- "generic/591"
- "generic/592"
- "generic/593"
- "generic/594"
- "generic/595"
- "generic/596"
- "generic/597"
- "generic/598"
- "generic/599"
- "generic/600"
- "generic/601"
- "generic/602"
- "generic/603"
- "generic/604"
- "generic/605"
- "generic/606"
- "generic/607"
- "generic/608"
- "generic/609"
- "generic/610"
- "generic/611"
- "generic/612"
- "generic/613"
- "generic/614"
- "generic/615"
- "generic/616"
- "generic/617"
- "generic/618"
- "generic/619"
- "generic/620"
- "generic/621"
- "generic/622"
- "generic/623"
- "generic/624"
- "generic/625"
- "generic/626"
- "generic/627"
- "generic/628"
- "generic/629"
- "generic/630"
- "generic/631"
- "generic/632"
- "generic/633"
- "generic/634"
- "generic/635"
- "generic/636"
- "generic/637"
- "generic/638"
- "generic/639"
- "generic/640"
- "generic/641"
- "generic/642"
- "generic/643"
- "generic/644"
- "generic/645"
- "generic/646"
- "generic/647"
- "generic/648"
- "generic/649"
- "generic/650"
- "generic/651"
- "generic/652"
- "generic/653"
- "generic/654"
- "generic/655"
- "generic/656"
- "generic/657"
- "generic/658"
- "generic/659"
- "generic/660"
- "generic/661"
- "generic/662"
- "generic/663"
- "generic/664"
- "generic/665"
- "generic/666"
- "generic/667"
- "generic/668"
- "generic/669"
- "generic/670"
- "generic/671"
- "generic/672"
- "generic/673"
- "generic/674"
- "generic/675"
- "generic/676"
- "generic/677"
- "generic/678"
- "generic/679"
- "generic/680"
- "generic/681"
- "generic/682"
- "generic/683"
- "generic/684"
- "generic/685"
- "generic/686"
- "generic/687"
- "generic/688"
- "generic/689"
- "generic/690"
- "generic/691"
- "generic/692"
- "generic/693"
- "generic/694"
- "generic/695"
- "generic/696"
- "generic/697"
- "generic/698"
- "generic/699"
- "generic/700"
- "generic/701"
- "generic/702"
- "generic/703"
- "generic/704"
- "generic/705"
- "generic/706"
- "generic/707"
- "generic/708"
- "generic/709"
- "generic/710"
- "generic/711"
- "generic/712"
- "generic/713"
- "generic/714"
- "generic/715"
- "generic/716"
- "generic/717"
- "generic/718"
- "generic/719"
- "generic/720"
- "generic/721"
- "generic/722"
- "generic/723"
- "generic/724"
- "generic/725"
- "generic/726"
- "generic/727"
- "generic/728"
- "generic/729"
- "generic/730"
- "generic/731"
- "generic/732"
- "generic/733"
- "generic/734"
- "generic/735"
- "generic/736"
- "generic/737"
- "generic/738"
- "generic/739"
- "generic/740"
- "generic/741"
- "generic/742"
- "generic/743"
- "generic/744"
- "generic/745"
- "generic/746"
- "generic/747"
- "generic/748"
- "generic/749"
- "generic/750"
- "generic/751"
- "generic/752"
- "generic/753"
- "generic/754"
- "generic/755"
- "generic/756"
- "perf/001"
- "btrfs/001"
- "btrfs/002"
- "btrfs/003"
- "btrfs/004"
- "btrfs/005"
- "btrfs/006"
- "btrfs/007"
- "btrfs/008"
- "btrfs/009"
- "btrfs/010"
- "btrfs/011"
- "btrfs/012"
- "btrfs/013"
- "btrfs/014"
- "btrfs/015"
- "btrfs/016"
- "btrfs/017"
- "btrfs/018"
- "btrfs/019"
- "btrfs/020"
- "btrfs/021"
- "btrfs/022"
- "btrfs/023"
- "btrfs/024"
- "btrfs/025"
- "btrfs/026"
- "btrfs/027"
- "btrfs/028"
- "btrfs/029"
- "btrfs/030"
- "btrfs/031"
- "btrfs/032"
- "btrfs/033"
- "btrfs/034"
- "btrfs/035"
- "btrfs/036"
- "btrfs/037"
- "btrfs/038"
- "btrfs/039"
- "btrfs/040"
- "btrfs/041"
- "btrfs/042"
- "btrfs/043"
- "btrfs/044"
- "btrfs/045"
- "btrfs/046"
- "btrfs/047"
- "btrfs/048"
- "btrfs/049"
- "btrfs/050"
- "btrfs/051"
- "btrfs/052"
- "btrfs/053"
- "btrfs/054"
- "btrfs/055"
- "btrfs/056"
- "btrfs/057"
- "btrfs/058"
- "btrfs/059"
- "btrfs/060"
- "btrfs/061"
- "btrfs/062"
- "btrfs/063"
- "btrfs/064"
- "btrfs/065"
- "btrfs/066"
- "btrfs/067"
- "btrfs/068"
- "btrfs/069"
- "btrfs/070"
- "btrfs/071"
- "btrfs/072"
- "btrfs/073"
- "btrfs/074"
- "btrfs/075"
- "btrfs/076"
- "btrfs/077"
- "btrfs/078"
- "btrfs/079"
- "btrfs/080"
- "btrfs/081"
- "btrfs/082"
- "btrfs/083"
- "btrfs/084"
- "btrfs/085"
- "btrfs/086"
- "btrfs/087"
- "btrfs/088"
- "btrfs/089"
- "btrfs/090"
- "btrfs/091"
- "btrfs/092"
- "btrfs/093"
- "btrfs/094"
- "btrfs/095"
- "btrfs/096"
- "btrfs/097"
- "btrfs/098"
- "btrfs/099"
- "btrfs/100"
- "btrfs/101"
- "btrfs/102"
- "btrfs/103"
- "btrfs/104"
- "btrfs/105"
- "btrfs/106"
- "btrfs/107"
- "btrfs/108"
- "btrfs/109"
- "btrfs/110"
- "btrfs/111"
- "btrfs/112"
- "btrfs/113"
- "btrfs/114"
- "btrfs/115"
- "btrfs/116"
- "btrfs/117"
- "btrfs/118"
- "btrfs/119"
- "btrfs/120"
- "btrfs/121"
- "btrfs/122"
- "btrfs/123"
- "btrfs/124"
- "btrfs/125"
- "btrfs/126"
- "btrfs/127"
- "btrfs/128"
- "btrfs/129"
- "btrfs/130"
- "btrfs/131"
- "btrfs/132"
- "btrfs/133"
- "btrfs/134"
- "btrfs/135"
- "btrfs/136"
- "btrfs/137"
- "btrfs/138"
- "btrfs/139"
- "btrfs/140"
- "btrfs/141"
- "btrfs/142"
- "btrfs/143"
- "btrfs/144"
- "btrfs/145"
- "btrfs/146"
- "btrfs/147"
- "btrfs/148"
- "btrfs/149"
- "btrfs/150"
- "btrfs/151"
- "btrfs/152"
- "btrfs/153"
- "btrfs/154"
- "btrfs/155"
- "btrfs/156"
- "btrfs/157"
- "btrfs/158"
- "btrfs/159"
- "btrfs/160"
- "btrfs/161"
- "btrfs/162"
- "btrfs/163"
- "btrfs/164"
- "btrfs/165"
- "btrfs/166"
- "btrfs/167"
- "btrfs/168"
- "btrfs/169"
- "btrfs/170"
- "btrfs/171"
- "btrfs/172"
- "btrfs/173"
- "btrfs/174"
- "btrfs/175"
- "btrfs/176"
- "btrfs/177"
- "btrfs/178"
- "btrfs/179"
- "btrfs/180"
- "btrfs/181"
- "btrfs/182"
- "btrfs/183"
- "btrfs/184"
- "btrfs/185"
- "btrfs/186"
- "btrfs/187"
- "btrfs/188"
- "btrfs/189"
- "btrfs/190"
- "btrfs/191"
- "btrfs/192"
- "btrfs/193"
- "btrfs/194"
- "btrfs/195"
- "btrfs/196"
- "btrfs/197"
- "btrfs/198"
- "btrfs/199"
- "btrfs/200"
- "btrfs/201"
- "btrfs/202"
- "btrfs/203"
- "btrfs/204"
- "btrfs/205"
- "btrfs/206"
- "btrfs/207"
- "btrfs/208"
- "btrfs/209"
- "btrfs/210"
- "btrfs/211"
- "btrfs/212"
- "btrfs/213"
- "btrfs/214"
- "btrfs/215"
- "btrfs/216"
- "btrfs/217"
- "btrfs/218"
- "btrfs/219"
- "btrfs/220"
- "btrfs/221"
- "btrfs/222"
- "btrfs/223"
- "btrfs/224"
- "btrfs/225"
- "btrfs/226"
- "btrfs/227"
- "btrfs/228"
- "btrfs/229"
- "btrfs/230"
- "btrfs/231"
- "btrfs/232"
- "btrfs/233"
- "btrfs/234"
- "btrfs/235"
- "btrfs/236"
- "btrfs/237"
- "btrfs/238"
- "btrfs/239"
- "btrfs/240"
- "btrfs/241"
- "btrfs/242"
- "btrfs/243"
- "btrfs/244"
- "btrfs/245"
- "btrfs/246"
- "btrfs/247"
- "btrfs/248"
- "btrfs/249"
- "btrfs/250"
- "btrfs/251"
- "btrfs/252"
- "btrfs/253"
- "btrfs/254"
- "btrfs/255"
- "btrfs/256"
- "btrfs/257"
- "btrfs/258"
- "btrfs/259"
- "btrfs/260"
- "btrfs/261"
- "btrfs/262"
- "btrfs/263"
- "btrfs/264"
- "btrfs/265"
- "btrfs/266"
- "btrfs/267"
- "btrfs/268"
- "btrfs/269"
- "btrfs/270"
- "btrfs/271"
- "btrfs/272"
- "btrfs/273"
- "btrfs/274"
- "btrfs/275"
- "btrfs/276"
- "btrfs/277"
- "btrfs/278"
- "btrfs/279"
- "btrfs/280"
- "btrfs/281"
- "btrfs/282"
- "btrfs/283"
- "btrfs/284"
- "btrfs/285"
- "btrfs/286"
- "btrfs/287"
- "btrfs/288"
- "btrfs/289"
- "btrfs/290"
- "btrfs/291"
- "btrfs/292"
- "btrfs/293"
- "btrfs/294"
- "btrfs/295"
- "btrfs/296"
- "btrfs/297"
- "btrfs/298"
- "btrfs/299"
- "btrfs/300"
- "btrfs/301"
- "btrfs/302"
- "btrfs/303"
- "btrfs/304"
- "btrfs/305"
- "btrfs/306"
- "btrfs/307"
- "btrfs/308"
- "btrfs/309"
- "btrfs/310"
- "btrfs/311"
- "btrfs/312"
- "btrfs/313"
- "btrfs/314"
- "btrfs/315"
- "btrfs/316"
- "btrfs/317"
- "btrfs/318"
- "btrfs/319"
- "btrfs/320"
- "btrfs/321"
- "btrfs/322"
- "btrfs/323"
- "btrfs/324"
- "btrfs/330"
- "btrfs/331"
- "btrfs/332"
custom_tests:
description: "Enter custom test(s) (space or comma-separated: 'test1 test2' or 'test1,test2')"
required: false
type: string
default: ""
timeout_minutes:
description: "Timeout in minutes"
required: true
default: 43200 # 1 month
type: choice
options:
- 1440 # 1 day
- 2880 # 2 days
- 4320 # 3 days
- 5760 # 4 days
- 7200 # 5 days
jobs:
fstests_input_validation:
name: Process input parameters for fstests
runs-on: [self-hosted, Linux, X64]
timeout-minutes: ${{ fromJson(github.event.inputs.timeout_minutes || '7200') }}
outputs:
kdevops_test_timeout: ${{ steps.set_timeout.outputs.kdevops_test_timeout }}
group: ${{ steps.process_group.outputs.group }}
selected_tests: ${{ steps.process_tests.outputs.tests }}
kdevops_defconfig: ${{ steps.process_defconfig.outputs.defconfig }}
soak: ${{ steps.process_soak.outputs.soak }}
steps:
- name: Process timeout
id: set_timeout
run: |
MAX_TIMEOUT_ALLOWED_GITHUB_SELF_HOSTED="7200"
TIMEOUT="$MAX_TIMEOUT_ALLOWED_GITHUB_SELF_HOSTED"
# Note: Using curly braces for arithmetic comparison
REQUESTED_TIMEOUT="${{ fromJson((github.event.inputs && github.event.inputs.timeout_minutes) || '7200') }}"
if [[ -n "$REQUESTED_TIMEOUT" ]]; then
if [[ ${REQUESTED_TIMEOUT} -gt ${MAX_TIMEOUT_ALLOWED_GITHUB_SELF_HOSTED} ]]; then
echo "Requested timeout not allowed for github self-hosted runners."
echo "The max allowed today is $MAX_TIMEOUT_ALLOWED_GITHUB_SELF_HOSTED minutes, see:"
echo ""
echo "https://github.blog/changelog/2024-04-04-actions-jobs-executing-on-self-hosted-runners-will-now-timeout-in-5-days/"
echo ""
echo "We will use the max value"
else
TIMEOUT=$REQUESTED_TIMEOUT
fi
fi
echo "Setting timeout to $TIMEOUT minutes"
echo "kdevops_test_timeout=$TIMEOUT" >> $GITHUB_OUTPUT
- name: Process group selection
id: process_group
run: |
if [[ "${{ github.event.inputs.group }}" == "auto" ]] || [[ "${{ github.event.inputs.group }}" == "" ]]; then
echo "Default group: auto"
echo "group=auto" >> $GITHUB_OUTPUT
else
echo "group=${{ github.event.inputs.group }}" >> $GITHUB_OUTPUT
echo "Custom group selected: ${{ github.event.inputs.group }}"
fi
- name: Process test selection
id: process_tests
run: |
if [[ "${{ github.event.inputs.tests }}" == "custom" ]]; then
if [[ -n "${{ github.event.inputs.custom_tests }}" ]]; then
# Replace commas with spaces and collapse multiple spaces into single spaces
TESTS=$(echo "${{ github.event.inputs.custom_tests }}" | tr ',' ' ' | tr -s ' ')
# Trim leading and trailing whitespace
TESTS=$(echo "$TESTS" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
echo "tests=$TESTS" >> $GITHUB_OUTPUT
echo "Custom tests selected: $TESTS"
else
echo "No custom tests provided, falling back to all"
echo "tests=all" >> $GITHUB_OUTPUT
fi
elif [[ "${{ github.event.inputs.tests }}" == "" ||
"${{ github.event.inputs.tests }}" == "all" ]]; then
echo "Automated test so no specific test requested"
echo "tests=all" >> $GITHUB_OUTPUT
else
echo "Custom test: ${{ github.event.inputs.tests }}"
echo "tests=${{ github.event.inputs.tests }}" >> $GITHUB_OUTPUT
fi
- name: Process defconfig
id: process_defconfig
run: |
KDEVOPS_DEFCONFIG=$(basename ${{ github.repository }})
if [[ "${{ github.event.inputs.defconfig }}" == "all profiles" ]] || [[ "${{ github.event.inputs.defconfig }}" == "" ]]; then
KDEVOPS_DEFCONFIG=$(basename ${{ github.repository }})
else
KDEVOPS_DEFCONFIG="${{ github.event.inputs.defconfig }}"
fi
echo "defconfig=$KDEVOPS_DEFCONFIG" >> $GITHUB_OUTPUT
- name: Process soak
id: process_soak
run: |
if [[ "${{ github.event.inputs.soak }}" == "No soak" ]] || [[ "${{ github.event.inputs.soak }}" == "" ]]; then
echo "Using default soak, that is, we don't soak"
echo "soak=nosoak" >> $GITHUB_OUTPUT
elif [[ "${{ github.event.inputs.soak }}" == "Low - 30 minutes" ]]; then
echo "soak=1800" >> $GITHUB_OUTPUT
elif [[ "${{ github.event.inputs.soak }}" == "Mid - 1 hour" ]]; then
echo "soak=3600" >> $GITHUB_OUTPUT
elif [[ "${{ github.event.inputs.soak }}" == "High - 2.5 hours" ]]; then
echo "soak=9900" >> $GITHUB_OUTPUT
elif [[ "${{ github.event.inputs.soak }}" == "Pathological - 48 hours" ]]; then
echo "soak=172800" >> $GITHUB_OUTPUT
else
echo "This custom soak option not supported: ${{ github.event.inputs.soak }}"
exit 1
fi
initialize_kdevops:
needs: fstests_input_validation
name: Initialize kdevops environment
uses: ./.github/workflows/kdevops-init.yml
with:
kdevops_defconfig: ${{ needs.fstests_input_validation.outputs.kdevops_defconfig }}
selected_tests: ${{ needs.fstests_input_validation.outputs.tests }}
soak: ${{ needs.fstests_input_validation.outputs.soak }}
group: ${{ needs.fstests_input_validation.outputs.group }}
secrets: inherit
run_kdevops_fstests:
needs: [fstests_input_validation, initialize_kdevops]
name: Run CI tests
runs-on: [self-hosted, Linux, X64]
timeout-minutes: 43200
steps:
- name: Run CI tests
run: |
cd kdevops
if [[ "${{ needs.fstests_input_validation.outputs.selected_tests }}" == "all" ]]; then
echo "Running all the tests ..."
nohup stdbuf -oL bash -c 'make ci-test' > ci.log 2>&1 &
else
echo "Running selective tests: ${{ needs.fstests_input_validation.outputs.selected_tests }}"
nohup stdbuf -oL bash -c 'make fstests-baseline TESTS="${{ needs.fstests_input_validation.outputs.selected_tests }}"' > ci.log 2>&1 &
fi
echo $! > ci.pid
CI_WATCHDOG="./scripts/workflows/fstests/fstests_watchdog.py hosts baseline"
while kill -0 $(cat ci.pid) 2> /dev/null; do
$CI_WATCHDOG || echo watchdog barfed
sleep 60
done
make fstests-show-results > ci.commit_extra
if ! grep -E "failures, [1-9]|errors, [1-9]" ci.commit_extra; then
echo "ok" > ci.result
fi
cleanup-kdevops:
needs: run_kdevops_fstests
if: always()
uses: ./.github/workflows/kdevops-cleanup.yml
secrets: inherit