| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | 
							- #!/usr/bin/env bash
 
- set -euo pipefail
 
- set +e
 
- git diff-files --quiet
 
- is_unclean=$?
 
- set -e
 
- # Revert `git stash` on exit
 
- function revert_git_stash {
 
-   >&2 echo "Unstashing uncommitted changes..."
 
-   git stash pop -q
 
- }
 
- # Stash pending changes and revert them when script ends
 
- if [ -z "${NO_STASH:-}" ] && [ $is_unclean -ne 0 ]; then
 
-   >&2 echo "Stashing uncommitted changes..."
 
-   GIT_LITERAL_PATHSPECS=0 git stash -q --keep-index
 
-   trap revert_git_stash EXIT
 
- fi
 
- export FLAKEBOX_GIT_LS
 
- FLAKEBOX_GIT_LS="$(git ls-files)"
 
- export FLAKEBOX_GIT_LS_TEXT
 
- FLAKEBOX_GIT_LS_TEXT="$(echo "$FLAKEBOX_GIT_LS" | grep -v -E "\.(png|ods|jpg|jpeg|woff2|keystore|wasm|ttf|jar|ico|gif)\$")"
 
- function check_nothing() {
 
-   true
 
- }
 
- export -f check_nothing
 
- function check_cargo_fmt() {
 
-     set -euo pipefail
 
-     cargo fmt --all --check
 
- }
 
- export -f check_cargo_fmt
 
- function check_cargo_lock() {
 
-     set -euo pipefail
 
-     # https://users.rust-lang.org/t/check-if-the-cargo-lock-is-up-to-date-without-building-anything/91048/5
 
-     cargo update --workspace --locked
 
- }
 
- export -f check_cargo_lock
 
- function check_leftover_dbg() {
 
-     set -euo pipefail
 
-     errors=""
 
-     for path in $(echo "$FLAKEBOX_GIT_LS_TEXT" | grep  '.*\.rs'); do
 
-       if grep 'dbg!(' "$path" > /dev/null; then
 
-         >&2 echo "$path contains dbg! macro"
 
-         errors="true"
 
-       fi
 
-     done
 
-     if [ -n "$errors" ]; then
 
-       >&2 echo "Fix the problems above or use --no-verify" 1>&2
 
-       return 1
 
-     fi
 
- }
 
- export -f check_leftover_dbg
 
- function check_semgrep() {
 
-     set -euo pipefail
 
-     # semgrep is not available on MacOS
 
-     if ! command -v semgrep > /dev/null ; then
 
-       >&2 echo "Skipping semgrep check: not available"
 
-       return 0
 
-     fi
 
-     if [ ! -f .config/semgrep.yaml ] ; then
 
-       >&2 echo "Skipping semgrep check: .config/semgrep.yaml doesn't exist"
 
-       return 0
 
-     fi
 
-     if [ ! -s .config/semgrep.yaml ] ; then
 
-       >&2 echo "Skipping semgrep check: .config/semgrep.yaml empty"
 
-       return 0
 
-     fi
 
-     env SEMGREP_ENABLE_VERSION_CHECK=0 \
 
-       semgrep -q --error --no-rewrite-rule-ids --config .config/semgrep.yaml
 
- }
 
- export -f check_semgrep
 
- function check_shellcheck() {
 
-     set -euo pipefail
 
-     for path in $(echo "$FLAKEBOX_GIT_LS_TEXT" | grep -E '.*\.sh$'); do
 
-       shellcheck --severity=warning "$path"
 
-     done
 
- }
 
- export -f check_shellcheck
 
- function check_trailing_newline() {
 
-     set -euo pipefail
 
-     errors=""
 
-     for path in $(echo "$FLAKEBOX_GIT_LS_TEXT"); do
 
-       # extra branches for clarity
 
-       if [ ! -s "$path" ]; then
 
-          # echo "$path is empty"
 
-          true
 
-       elif [ -z "$(tail -c 1 < "$path")" ]; then
 
-          # echo "$path ends with a newline or with a null byte"
 
-          true
 
-       else
 
-         >&2 echo "$path doesn't end with a newline" 1>&2
 
-         errors="true"
 
-       fi
 
-     done
 
-     if [ -n "$errors" ]; then
 
-       >&2 echo "Fix the problems above or use --no-verify" 1>&2
 
-       return 1
 
-     fi
 
- }
 
- export -f check_trailing_newline
 
- function check_trailing_whitespace() {
 
-     set -euo pipefail
 
-     if ! git diff --check HEAD ; then
 
-       echo "Trailing whitespace detected. Please remove them before committing."
 
-       return 1
 
-     fi
 
- }
 
- export -f check_trailing_whitespace
 
- function check_typos() {
 
-     set -euo pipefail
 
-     if ! echo "$FLAKEBOX_GIT_LS_TEXT" | typos --file-list - --force-exclude ; then
 
-       >&2 echo "Typos found: Valid new words can be added to '.typos.toml'"
 
-       return 1
 
-     fi
 
- }
 
- export -f check_typos
 
- parallel \
 
-   --nonotice \
 
- ::: \
 
-     check_cargo_fmt \
 
-     check_cargo_lock \
 
-     check_leftover_dbg \
 
-     check_semgrep \
 
-     check_shellcheck \
 
-     check_trailing_newline \
 
-     check_trailing_whitespace \
 
-     check_typos \
 
-   check_nothing
 
 
  |