diff --git a/.github/workflows/integrate.yml b/.github/workflows/integrate.yml new file mode 100644 index 0000000..25b0890 --- /dev/null +++ b/.github/workflows/integrate.yml @@ -0,0 +1,147 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow + +name: "Integrate - Version 1.0.0-beta.3" + +on: + push: + branches: + - "1.0.0-beta.3" + pull_request: + branches: + - "main" + - "1.0.0-beta.3" + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + +jobs: + byte_level: + name: "0️⃣ Byte level - 1.0.0-beta.3" + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout code" + uses: "actions/checkout@v3" + - 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 . -type f -name 'includes/*.php' -print0 | xargs -0 -- grep -PHn '[^\t -~]' + + syntax_errors: + name: "1️⃣ Syntax errors - 1.0.0-beta.3" + runs-on: "ubuntu-20.04" + steps: + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" + with: + php-version: "7.4" + coverage: "none" + - 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 functions.php includes/ patterns/" + + unit_tests: + name: "2️⃣ Unit and functional tests - 1.0.0-beta.3" + needs: + - "byte_level" + - "syntax_errors" + strategy: + matrix: + php-version: + - "8.0" + - "8.1" + - "8.2" + dependencies: + - "lowest" + - "highest" + runs-on: "ubuntu-20.04" + steps: + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" + with: + php-version: "${{ matrix.php-version }}" + - name: "Checkout code" + uses: "actions/checkout@v3" + - name: "Install dependencies" + uses: "ramsey/composer-install@v2" + with: + dependency-versions: "${{ matrix.dependencies }}" + - name: "Execute unit tests" + run: "composer run pest -- --ci" + + static_analysis: + name: "3️⃣ Static Analysis - 1.0.0-beta.3" + needs: + - "byte_level" + - "syntax_errors" + runs-on: "ubuntu-20.04" + steps: + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" + with: + php-version: "8.0" + coverage: "none" + - 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: "Check PSR-4 mapping" + run: "composer dump-autoload --optimize --strict-psr" + - name: "Perform static analysis" + run: | + composer run phpstan + + coding_standards: + name: "4️⃣ Coding Standards - 1.0.0-beta.3" + needs: + - "byte_level" + - "syntax_errors" + runs-on: "ubuntu-20.04" + steps: + - name: "Set up PHP" + uses: "shivammathur/setup-php@v2" + with: + php-version: "8.0" + coverage: "none" + - name: "Checkout code" + uses: "actions/checkout@v3" + - name: "Check EditorConfig configuration" + run: "test -f .editorconfig" + - name: "Check adherence to EditorConfig" + uses: "greut/eclint-action@v0" + with: + eclint_args: "-exclude=vendor/**,patterns/**,assets/**" + - name: "Install dependencies" + uses: "ramsey/composer-install@v2" + with: + dependency-versions: "highest" + - name: "Check coding style" + run: "composer run phpcs" + + exported_files: + name: "5️⃣ Exported files - 1.0.0-beta.3" + needs: + - "byte_level" + - "syntax_errors" + runs-on: "ubuntu-20.04" + steps: + - name: "Checkout code" + uses: "actions/checkout@v3" + - name: "Check exported files" + run: | + EXPECTED="LICENSE,composer.json,functions.php,index.php,package.json,readme.txt,screenshot.png,style.css,theme.json" + CURRENT="$(git archive HEAD | tar --list --exclude='assets' --exclude='assets/*' --exclude='includes' --exclude='includes/*' --exclude='languages' --exclude='languages/*' --exclude='parts' --exclude='parts/*' --exclude='patterns' --exclude='patterns/*' --exclude='styles' --exclude='styles/*' --exclude='templates' --exclude='templates/*' | paste --serial --delimiters=',')" + echo "CURRENT=${CURRENT}" + echo "EXPECTED=${EXPECTED}" + test "${CURRENT}" = "${EXPECTED}"