diff --git a/CI/linters/pint.yml b/CI/linters/pint.yml new file mode 100644 index 0000000..ab8fd42 --- /dev/null +++ b/CI/linters/pint.yml @@ -0,0 +1,41 @@ +pint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: "8.2" + + - name: Cache Composer + uses: actions/cache@v4 + with: + path: vendor + key: composer-${{ hashFiles('composer.lock') }} + restore-keys: composer- + + - name: Install dependencies + run: composer install --no-interaction --prefer-dist + + - name: Run pint + run: | + set -euo pipefail + + if [[ -x "vendor/bin/pint" ]]; then + PINT="vendor/bin/pint" + elif command -v pint &> /dev/null; then + PINT="pint" + else + echo "::error::laravel/pint not found (run 'composer require --dev laravel/pint')" + exit 1 + fi + + echo "ℹ️ Running Pint in check mode..." + + if "$PINT" --test; then + echo "✅ pint passed" + else + echo "❌ pint found style issues" + exit 1 + fi diff --git a/README.md b/README.md index 8a3c2c9..1240fa7 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ that projects compose into their own workflows. | markdownlint | linters | [CI/linters/markdownlint.yml](https://github.com/prog-time/workflows/blob/main/CI/linters/markdownlint.yml) | | mermaid-cli | linters | [CI/linters/mermaid.yml](https://github.com/prog-time/workflows/blob/main/CI/linters/mermaid.yml) | | phpcs | linters | [CI/linters/phpcs.yml](https://github.com/prog-time/workflows/blob/main/CI/linters/phpcs.yml) | +| Pint | linters | [CI/linters/pint.yml](https://github.com/prog-time/workflows/blob/main/CI/linters/pint.yml) | | RuboCop | linters | [CI/linters/rubocop.yml](https://github.com/prog-time/workflows/blob/main/CI/linters/rubocop.yml) | | Ruff | linters | [CI/linters/ruff.yml](https://github.com/prog-time/workflows/blob/main/CI/linters/ruff.yml) | | ShellCheck | linters | [CI/linters/shellcheck.yml](https://github.com/prog-time/workflows/blob/main/CI/linters/shellcheck.yml) | diff --git a/scripts/CI/linters/pint.yml b/scripts/CI/linters/pint.yml new file mode 100644 index 0000000..f6c26b0 --- /dev/null +++ b/scripts/CI/linters/pint.yml @@ -0,0 +1,22 @@ +pint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: "8.2" + + - name: Cache Composer + uses: actions/cache@v4 + with: + path: vendor + key: composer-${{ hashFiles('composer.lock') }} + restore-keys: composer- + + - name: Install dependencies + run: composer install --no-interaction --prefer-dist + + - name: Run pint + run: bash scripts/shell/linters/pint.sh diff --git a/scripts/shell/linters/pint.sh b/scripts/shell/linters/pint.sh new file mode 100644 index 0000000..30bf96d --- /dev/null +++ b/scripts/shell/linters/pint.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [[ -x "vendor/bin/pint" ]]; then + PINT="vendor/bin/pint" +elif command -v pint &> /dev/null; then + PINT="pint" +else + echo "::error::laravel/pint not found (run 'composer require --dev laravel/pint')" + exit 1 +fi + +echo "ℹ️ Running Pint in check mode..." + +if "$PINT" --test; then + echo "✅ pint passed" +else + echo "❌ pint found style issues" + exit 1 +fi diff --git a/tests/linters/pint.bats b/tests/linters/pint.bats new file mode 100644 index 0000000..c338677 --- /dev/null +++ b/tests/linters/pint.bats @@ -0,0 +1,43 @@ +#!/usr/bin/env bats + +load "../helpers/common" + +SCRIPT="$BATS_TEST_DIRNAME/../../scripts/shell/linters/pint.sh" + +setup() { + setup_test_dir +} + +teardown() { + teardown_test_dir +} + +make_pint_stub() { + local exit_code="$1" + mkdir -p "$TEST_DIR/vendor/bin" + cat > "$TEST_DIR/vendor/bin/pint" <