name: Quality on: push: branches: [main] pull_request: permissions: contents: write jobs: format: name: Auto Format runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v4 with: ref: ${{ github.head_ref }} token: ${{ secrets.GITHUB_TOKEN }} - name: Cache Homebrew uses: actions/cache@v4 with: path: | ~/Library/Caches/Homebrew /usr/local/Cellar/shfmt /usr/local/Cellar/shellcheck key: ${{ runner.os }}-brew-quality-${{ hashFiles('**/Brewfile') }} restore-keys: | ${{ runner.os }}-brew-quality- - name: Install tools run: brew install shfmt shellcheck - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.24' - name: Format all code run: | echo "Formatting shell scripts..." ./scripts/format.sh echo "Formatting Go code..." gofmt -w ./cmd echo "✓ All code formatted" - name: Commit formatting changes run: | git config user.name "Tw93" git config user.email "tw93@qq.com" if [[ -n $(git status --porcelain) ]]; then git add . git commit -m "chore: auto format code" git push echo "✓ Formatting changes committed" else echo "✓ No formatting changes needed" fi quality: name: Code Quality runs-on: macos-latest needs: format steps: - name: Checkout uses: actions/checkout@v4 with: ref: ${{ github.head_ref }} - name: Cache Homebrew uses: actions/cache@v4 with: path: | ~/Library/Caches/Homebrew /usr/local/Cellar/shfmt /usr/local/Cellar/shellcheck key: ${{ runner.os }}-brew-quality-${{ hashFiles('**/Brewfile') }} restore-keys: | ${{ runner.os }}-brew-quality- - name: Install tools run: brew install shfmt shellcheck - name: ShellCheck run: | echo "Running ShellCheck on all shell scripts..." shellcheck mole shellcheck bin/*.sh find lib -name "*.sh" -exec shellcheck {} + echo "✓ ShellCheck passed" - name: Syntax check run: | echo "Checking Bash syntax..." bash -n mole for script in bin/*.sh; do bash -n "$script" done find lib -name "*.sh" | while read -r script; do bash -n "$script" done echo "✓ All scripts have valid syntax"