From b1f735609595b5f8f178524c822e463440dc61b4 Mon Sep 17 00:00:00 2001 From: Italo Date: Wed, 27 Jul 2022 13:11:30 -0400 Subject: [PATCH] Improves CI --- .gitattributes | 6 +- {.assets => .github/assets}/buymeacoffee.png | Bin {.assets => .github/assets}/ko-fi.png | Bin {.assets => .github/assets}/patreon.png | Bin {.assets => .github/assets}/paypal.png | Bin .github/workflows/php.yml | 143 ++++++++++++++----- .gitignore | 13 +- README.md | 2 +- 8 files changed, 120 insertions(+), 44 deletions(-) rename {.assets => .github/assets}/buymeacoffee.png (100%) rename {.assets => .github/assets}/ko-fi.png (100%) rename {.assets => .github/assets}/patreon.png (100%) rename {.assets => .github/assets}/paypal.png (100%) diff --git a/.gitattributes b/.gitattributes index f358bea..4b62b65 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,10 +2,12 @@ # https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html # Ignore all test and documentation with "export-ignore". +/.github export-ignore /.gitattributes export-ignore /.gitignore export-ignore /phpunit.xml.dist export-ignore +/phpunit.xml export-ignore /tests export-ignore /.editorconfig export-ignore -/.github export-ignore -/.assets export-ignore +/.styleci.yml export-ignore +/composer.lock export-ignore \ No newline at end of file diff --git a/.assets/buymeacoffee.png b/.github/assets/buymeacoffee.png similarity index 100% rename from .assets/buymeacoffee.png rename to .github/assets/buymeacoffee.png diff --git a/.assets/ko-fi.png b/.github/assets/ko-fi.png similarity index 100% rename from .assets/ko-fi.png rename to .github/assets/ko-fi.png diff --git a/.assets/patreon.png b/.github/assets/patreon.png similarity index 100% rename from .assets/patreon.png rename to .github/assets/patreon.png diff --git a/.assets/paypal.png b/.github/assets/paypal.png similarity index 100% rename from .assets/paypal.png rename to .github/assets/paypal.png diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 420454f..c1eccad 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -1,50 +1,125 @@ -name: Tests +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow + +name: "Tests" on: push: pull_request: jobs: - test: - - runs-on: ubuntu-latest - strategy: - fail-fast: true - matrix: - php: [ 8.0, 8.1 ] - laravel: [ 9.* ] - dependency-version: [ prefer-stable, prefer-lowest ] - include: - - laravel: 9.* - testbench: 7.* - - name: PHP ${{ matrix.php }} - Laravel ${{ matrix.laravel }} - ${{ matrix.dependency-version }} + byte_level: + name: "0️⃣ Byte-level" + runs-on: "ubuntu-latest" steps: - - name: Checkout - uses: actions/checkout@v2 + - name: "Checkout code" + uses: "actions/checkout@v3" - - name: Setup PHP - uses: shivammathur/setup-php@v2 + - name: "Check file permissions" + run: | + test "$(find . -type f -not -path './.git/*' -executable)" == "" + - name: "Find non-printable ASCII characters" + run: | + ! LC_ALL=C.UTF-8 find ./src -type f -name "*.php" -print0 | xargs -0 -- grep -PHn "[^ -~]" + syntax_errors: + name: "1️⃣ Syntax errors" + runs-on: "ubuntu-latest" + steps: + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" with: - php-version: ${{ matrix.php }} + php-version: "8.1" + tools: "parallel-lint" + + - name: "Checkout code" + uses: "actions/checkout@v3" + + - name: "Install dependencies" + uses: "ramsey/composer-install@v2" + with: + dependency-versions: "highest" + + - name: "Check source code for syntax errors" + run: "composer exec -- parallel-lint src/" + + unit_tests: + name: "2️⃣ Unit and Feature tests" + needs: + - "byte_level" + - "syntax_errors" + runs-on: "ubuntu-latest" + strategy: + matrix: + php-version: + - "8.1" + laravel-constrain: + - "9.*" + dependencies: + - "lowest" + - "highest" + steps: + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" + with: + php-version: "${{ matrix.php-version }}" extensions: mbstring, intl coverage: xdebug - - name: Cache dependencies - uses: actions/cache@v2 + - name: "Checkout code" + uses: "actions/checkout@v3" + + - name: "Install dependencies" + uses: "ramsey/composer-install@v2" with: - path: ~/.composer/cache/files - key: ${{ runner.os }}-laravel-${{ matrix.laravel }}-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }} - restore-keys: ${{ runner.os }}-laravel-${{ matrix.laravel }}-php-${{ matrix.php }}-composer- + dependency-versions: "${{ matrix.dependencies }}" - - name: Install dependencies + - name: "Execute unit tests" + run: "composer run-script test" + + - name: "Upload coverage to Codecov" + uses: "codecov/codecov-action@v2" + + static_analysis: + name: "3️⃣ Static Analysis" + needs: + - "byte_level" + - "syntax_errors" + runs-on: "ubuntu-latest" + steps: + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" + with: + php-version: "8.1" + tools: "phpstan" + + - name: "Checkout code" + uses: "actions/checkout@v3" + + - name: "Validate Composer configuration" + run: "composer validate --strict" + + - name: "Install dependencies" + uses: "ramsey/composer-install@v2" + with: + dependency-versions: "highest" + + - name: "Execute static analysis" + run: "composer exec -- phpstan analyze -l 5 src/" + + exported_files: + name: "4️⃣ Exported files" + needs: + - "byte_level" + - "syntax_errors" + runs-on: "ubuntu-latest" + steps: + - name: "Checkout code" + uses: "actions/checkout@v3" + + - name: "Check exported files" run: | - composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-progress --no-update - composer update --${{ matrix.dependency-version }} --prefer-dist --no-progress - - name: Run Tests - run: composer run-script test - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2 - + EXPECTED="LICENSE.md,README.md,composer.json" + CURRENT="$(git archive HEAD | tar --list --exclude="src" --exclude="src/*" --exclude=".stubs" --exclude=".stubs/*" --exclude="stubs" --exclude="stubs/*" --exclude="lang" --exclude="lang/*" --exclude="config" --exclude="config/*" --exclude="database" --exclude="database/*" --exclude="resources" --exclude="resources/*" --exclude="routes" --exclude="routes/*" | paste -s -d ",")" + echo "CURRENT =${CURRENT}" + echo "EXPECTED=${EXPECTED}" + test "${CURRENT}" == "${EXPECTED}" \ No newline at end of file diff --git a/.gitignore b/.gitignore index f6ff282..c612ac8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ -.idea -build -composer.lock -docs -vendor -coverage +/build +/vendor +/.idea +.php-cs-fixer.cache .phpunit.result.cache -.vscode +composer.lock +phpunit.xml.bak \ No newline at end of file diff --git a/README.md b/README.md index ecc862a..f2eb251 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ public function login(AssertedRequest $request) ## Keep this package free -[![Patreon](.assets/patreon.png)](https://patreon.com/packagesforlaravel)[![Ko-fi](.assets/ko-fi.png)](https://ko-fi.com/DarkGhostHunter)[![Buymeacoffee](.assets/buymeacoffee.png)](https://www.buymeacoffee.com/darkghosthunter)[![PayPal](.assets/paypal.png)](https://www.paypal.com/paypalme/darkghosthunter) +[![Patreon](.github/assets/patreon.png)](https://patreon.com/packagesforlaravel)[![Ko-fi](.github/assets/ko-fi.png)](https://ko-fi.com/DarkGhostHunter)[![Buymeacoffee](.github/assets/buymeacoffee.png)](https://www.buymeacoffee.com/darkghosthunter)[![PayPal](.github/assets/paypal.png)](https://www.paypal.com/paypalme/darkghosthunter) Your support allows me to keep this package free, up-to-date and maintainable. Alternatively, you can **[spread the word!](http://twitter.com/share?text=I%20am%20using%20this%20cool%20PHP%20package&url=https://github.com%2FLaragear%2FWebAuthn&hashtags=PHP,Laravel)**