agama/.github/workflows/ci-shfmt.yml
2026-06-05 20:52:37 +02:00

97 lines
3.2 KiB
YAML

name: "CI - shfmt Check"
permissions:
contents: read
on:
push:
paths:
# NOTE: GitHub Actions do not allow using YAML references, the same path
# list is used below for the pull request event. Keep both lists in sync!!
# this file as well
- .github/workflows/ci-shfmt.yml
# all shell files
- "**.sh"
# all files in "bin" subdirectories
- "**/bin/*"
# not Markdown in "bin"
- "!**.md"
# not Ruby files in "bin"
- "!service/bin/*"
# explicitly list files without the *.sh suffix outside the "bin" subdirectories
# run this command in the checkout root directory to get the list:
# shfmt -f . | grep -v -e "\.sh$" -e "/bin/" -e "^live/dist/" | sort
- doc/dbus/make-index
- live/src/fix_bootconfig
- rust/build_pot
- rust/share/agama-journal
- rust/share/agama-zypp-journal
- web/build_pot
- web/build_pot_container
pull_request:
paths:
# NOTE: GitHub Actions do not allow using YAML references, the same path
# list is used above for the push event. Keep both lists in sync!!
# this file as well
- .github/workflows/ci-shfmt.yml
# all shell files
- "**.sh"
# all files in "bin" subdirectories
- "**/bin/*"
# not Markdown in "bin"
- "!**.md"
# not Ruby files in "bin"
- "!service/bin/*"
# explicitly list files without the *.sh suffix outside the "bin" subdirectories
# run this command in the checkout root directory to get the list:
# shfmt -f . | grep -v -e "\.sh$" -e "/bin/" -e "^live/dist/" | sort
- doc/dbus/make-index
- live/src/fix_bootconfig
- rust/build_pot
- rust/share/agama-journal
- rust/share/agama-zypp-journal
- web/build_pot
- web/build_pot_container
jobs:
shfmt:
runs-on: ubuntu-latest
container:
image: registry.opensuse.org/opensuse/tumbleweed:latest
steps:
- name: Configure and refresh repositories
# disable unused repositories to have faster refresh
run: zypper modifyrepo -d repo-non-oss repo-openh264 repo-update && zypper ref
- name: Install needed packages
run: zypper --non-interactive install --no-recommends --allow-downgrade
git shfmt diffutils yq
- name: Git Checkout
uses: actions/checkout@v6
- name: Run shfmt check (run `shfmt -w .` to fix )
run: shfmt -d .
- name: Verify "paths" list is up to date
# we use bash process substitution, make sure this runs in bash
shell: bash
run: |
# Extract explicit file paths from the workflow (ignoring globs, negations, and YAML files)
PUSH_PATHS=$(yq ".on.push.paths[]" .github/workflows/ci-shfmt.yml | grep -v -e "\*" -e "^!" -e "\.yml$" | sort -u)
# Get the actual file list that shfmt sees in the repository
FOUND_PATHS=$(shfmt -f . | grep -v -e "\.sh$" -e "/bin/" -e "^live/dist/" | sort)
# compare the lists, they should be the same
if ! diff -u <(echo "$PUSH_PATHS" ) <(echo "$FOUND_PATHS"); then
echo
echo "::error file=.github/workflows/ci-shfmt.yml::The 'paths' list is out of date!"
exit 1
fi