Skip to content

Commit

Permalink
Merge pull request #157 from conedevelopment/integrity-workflow
Browse files Browse the repository at this point in the history
Add Integrity workflow
  • Loading branch information
iamgergo authored Sep 25, 2023
2 parents 922a805 + b08e795 commit f739845
Show file tree
Hide file tree
Showing 9 changed files with 213 additions and 97 deletions.
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ block_comment = *
block_comment_end = */

[{*.php,*.js,*.scss}]
max_line_length = 120
max_line_length = 160

[*.blade.php]
max_line_length = 3000
Expand Down
91 changes: 1 addition & 90 deletions .github/workflows/back-end.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,28 +17,6 @@ concurrency:
cancel-in-progress: true

jobs:
byte_level:
name: "0️⃣ Byte-level"
runs-on: "ubuntu-22.04"
timeout-minutes: 1
steps:
-
name: "Checkout repository"
uses: "actions/checkout@v3"
-
name: "Check file permissions"
run: |
test "$(find ./ -type f -not -path './.git/*' -executable)" = ""
-
name: "Check for byte order mark (BOM)"
run: |
! git grep --perl-regexp -I -e '^\xEF\xBB\xBF'
-
# https://html.spec.whatwg.org/multipage/named-characters.html
name: "Find non-printable ASCII characters"
run: |
! LC_ALL=C.UTF-8 git grep --perl-regexp --line-number -e '[^ -~]' -- '*.php'
syntax_errors:
name: "1️⃣ Syntax errors"
runs-on: "ubuntu-22.04"
Expand All @@ -55,23 +33,17 @@ jobs:
-
name: "Checkout repository"
uses: "actions/checkout@v3"
-
name: "Search for conflict markers 🐌"
run: |
! git grep --line-number -e '^\(<<<<<<<\s\|=======\s\|=======$\|>>>>>>>\s\||||||||\s\)'
-
name: "Search for invalid complex curly syntax 🐌"
run: |
! git grep -e '\${[A-Z_a-z]' -- '*.php' '*.scss'
-
name: "Check source code for syntax errors"
run: "composer exec --no-interaction -- parallel-lint src/"
# @TODO Check template files for syntax errors
run: "composer exec --no-interaction -- parallel-lint src/ tests/"

unit_tests:
name: "2️⃣ Unit and functional tests"
needs:
- "byte_level"
- "syntax_errors"
strategy:
fail-fast: false
Expand Down Expand Up @@ -127,7 +99,6 @@ jobs:
static_analysis:
name: "3️⃣ Static Analysis"
needs:
- "byte_level"
- "syntax_errors"
runs-on: "ubuntu-22.04"
timeout-minutes: 5
Expand Down Expand Up @@ -171,7 +142,6 @@ jobs:
coding_standards:
name: "4️⃣ Coding Standards"
needs:
- "byte_level"
- "syntax_errors"
runs-on: "ubuntu-22.04"
timeout-minutes: 5
Expand All @@ -187,16 +157,6 @@ jobs:
-
name: "Checkout repository"
uses: "actions/checkout@v3"
-
name: "Check EditorConfig configuration"
run: "test -f .editorconfig"
-
name: "Check adherence to EditorConfig"
uses: "greut/eclint-action@v0"
-
name: "Look for TAB characters in the middle of the line 🐌"
run: |
! git grep --perl-regexp --line-number -I '^(?!//)[^\t]+\t'
-
name: "Install dependencies"
uses: "ramsey/composer-install@v2"
Expand All @@ -213,52 +173,3 @@ jobs:
name: "Annotate Pint results"
if: "${{ failure() && steps.pint.outcome == 'failure' }}"
run: "composer exec -- pint --test --format=checkstyle | cs2pr"
-
# Move TODO-s into GitHub issues!
name: "Search for TODO-s and FIXME-s 🐌"
run: |
! git grep --extended-regexp --ignore-case '\b(TODO|FIXME)\b' -- ':!:*/back-end\.yml'
-
name: "Remove blank first lines and multiple blank lines 🐌"
run: |
git ls-files --cached -z -- ':(exclude,glob)**/yarn.lock' \
| xargs --null -L 1 -- sed -i -e '/./,$!d' -e '/^$/N;/^\n$/D'
-
name: "Check differences to repository"
run: "git diff --exit-code"

exported_files:
name: "5️⃣ Exported files"
needs:
- "byte_level"
- "syntax_errors"
runs-on: "ubuntu-22.04"
timeout-minutes: 1
steps:
-
name: "Checkout repository"
uses: "actions/checkout@v3"
-
name: "Check for ignored files in the index 🐌"
run: |
IGNORED_FILES="$(git ls-files --cached --ignored --exclude-standard)"
test -z "${IGNORED_FILES}"
-
name: "Check exported files"
run: |
EXPECTED="LICENSE,README.md,composer.json,package.json"
CURRENT="$(
git archive HEAD \
| tar --list --exclude="src" --exclude="src/*" \
--exclude="config" --exclude="config/*" \
--exclude="database" --exclude="database/*" \
--exclude="public" --exclude="public/*" \
--exclude="resources" --exclude="resources/*" \
--exclude="routes" --exclude="routes/*" \
--exclude="src" --exclude="src/*" \
--exclude="stubs" --exclude="stubs/*" \
| paste --serial --delimiters=","
)"
echo "CURRENT =${CURRENT}"
echo "EXPECTED=${EXPECTED}"
test "${CURRENT}" = "${EXPECTED}"
39 changes: 39 additions & 0 deletions .github/workflows/integrity.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow

name: "Integrity"
# This workflow prevents earthquakes.

on:
pull_request: null
push:
branches:
- "master"

permissions: {}

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true

jobs:
call_workflow_integrity:
name: "Integrity"
uses: "./.github/workflows/reusable-integrity.yml"
with:
not-printable-ascii-paths: >-
src/
resources/
tests/
export-excludes: >-
--exclude="config" --exclude="config/*"
--exclude="database" --exclude="database/*"
--exclude="public" --exclude="public/*"
--exclude="resources" --exclude="resources/*"
--exclude="routes" --exclude="routes/*"
--exclude="src" --exclude="src/*"
--exclude="stubs" --exclude="stubs/*"
exported-paths: >-
LICENSE
README.md
composer.json
package.json
169 changes: 169 additions & 0 deletions .github/workflows/reusable-integrity.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow

name: "Shared Integrity"
# This action prevents earthquakes.

on:
workflow_call:
inputs:
executables:
description: "List of executable files"
type: "string"
default: ""
required: false
not-printable-ascii-paths:
description: "Paths to be searched for characters outside the printable ASCII range"
type: "string"
default: "src/ tests/"
required: false
export-excludes:
description: "List of the expected exported directories"
type: "string"
default: "--exclude='src' --exclude='src/*'"
required: false
exported-paths:
description: "List of the expected exported files"
type: "string"
default: "LICENSE README.md composer.json"
required: false

permissions: {}

concurrency:
group: "${{ github.workflow }}-${{ github.ref }}-reusable-integrity"
cancel-in-progress: true

jobs:
file:
name: "File"
runs-on: "ubuntu-22.04"
timeout-minutes: 1
steps:
-
name: "Checkout repository"
uses: "actions/checkout@v3"
-
name: "Check file permissions"
run: |
test "$(
git ls-files --stage \
| grep -v '^100644' \
| cut -c '51-'
)" = "${{ inputs.executables }}"
-
# https://github.com/greut/eclint/issues/6
name: "Check for byte order mark (BOM)"
run: |
! git grep --perl-regexp -I -e '^\xEF\xBB\xBF'
-
# https://html.spec.whatwg.org/multipage/named-characters.html
name: "Search for characters outside the printable ASCII range"
run: |
! LC_ALL=C.UTF-8 git grep --perl-regexp --line-number -I -e '[^ -~]' \
-- ${{ inputs.not-printable-ascii-paths }}
-
name: "Check EditorConfig configuration"
run: "test -f .editorconfig"
-
name: "Check adherence to EditorConfig"
uses: "greut/eclint-action@v0"
-
name: "Look for TAB characters in the middle of the line 🐌"
run: |
! git grep --perl-regexp --line-number -I -e '^(?!//)[^\t]+\t'
-
name: "Look for multiple space characters in the middle of the line 🐌"
run: |
# Exclude docblocks
! git grep --perl-regexp --line-number -I \
-e '(?!^#)\S\s\s' --and --not -e ' \* @' \
-- ':!:*.lock' ':!:*.md' ':!:.github/**.yml' ':!:public/build/'
-
# Move TODO-s into GitHub issues!
name: "Search for TODO-s and FIXME-s 🐌"
run: |
! git grep --extended-regexp --ignore-case -I -e '\b(TODO|FIXME)\b' \
-- ':!:.github/workflows/reusable-integrity.yml' ':!:.github/workflows/back-end.yml'
-
name: "Remove blank first lines and multiple blank lines 🐌"
run: |
# Exclude binary files, empty files and ones with linguist-generated attribute set
git grep --files-with-matches -I -e '.' \
| git check-attr --stdin --all \
| sed -n -e 's#^\(.\+\): linguist-generated: set$#":!:\1"#p' \
| xargs -- git ls-files --cached -z -- \
| xargs --null -n 1 -- sed -i -e '/./,$!d' -e '/^$/N;/^\n$/D'
-
name: "Check differences to repository"
run: "git diff --exit-code"

cloc:
name: "Lines of Code"
runs-on: "ubuntu-22.04"
timeout-minutes: 1
steps:
-
name: "Checkout repository"
uses: "actions/checkout@v3"
-
name: "Count Lines of Code"
env:
GH_TOKEN: "${{ github.token }}"
run: |
mkdir -p "${{ runner.temp }}/cloc"
RELEASE_ASSET_URL="$(
# v1.98
gh api /repos/AlDanial/cloc/releases/117882376 \
--jq '."assets"[] | select(."name" | test("^cloc-.+\\.pl$")) | ."browser_download_url"'
)"
wget --secure-protocol=TLSv1_3 --max-redirect=1 --retry-on-host-error --retry-connrefused --tries=3 \
--no-verbose --output-document="${{ runner.temp }}/cloc/cloc" "${RELEASE_ASSET_URL}"
{
git ls-files -- ':!:LICENSE' ':!:package-lock.json' >"${{ runner.temp }}/cloc/include-list"
echo '```'
perl "${{ runner.temp }}/cloc/cloc" --hide-rate \
--list-file="${{ runner.temp }}/cloc/include-list" \
--ignored="${{ runner.temp }}/cloc/.clocignored"
cat "${{ runner.temp }}/cloc/.clocignored"
echo '```'
} >>"${GITHUB_STEP_SUMMARY}"
commit:
name: "Commit"
runs-on: "ubuntu-22.04"
timeout-minutes: 1
steps:
-
name: "Checkout repository"
uses: "actions/checkout@v3"
-
name: "Search for conflict markers 🐌"
run: |
! git grep --line-number -e '^\(<<<<<<<\s\|=======\s\|=======$\|>>>>>>>\s\||||||||\s\)'
git_archive:
name: "Git archive"
runs-on: "ubuntu-22.04"
timeout-minutes: 1
steps:
-
name: "Checkout repository"
uses: "actions/checkout@v3"
-
name: "Check for ignored files in the index 🐌"
run: |
# Add negated files: ':!:path/to/negated'
IGNORED_FILES="$(git ls-files --cached --ignored --exclude-standard)"
test -z "${IGNORED_FILES}"
-
name: "Check exported files"
run: |
EXPECTED="${{ inputs.exported-paths }}"
CURRENT="$(
git archive HEAD \
| tar --list ${{ inputs.export-excludes }} \
| paste --serial --delimiters=" "
)"
echo "CURRENT =${CURRENT}"
echo "EXPECTED=${EXPECTED}"
test "${CURRENT}" = "${EXPECTED}"
2 changes: 1 addition & 1 deletion .github/workflows/spelling.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

name: "Spelling"

on: # yamllint disable-line rule:truthy
on:
pull_request: null
push:
branches:
Expand Down
4 changes: 2 additions & 2 deletions resources/sass/config/_dark-colors.scss
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ $colors: (
),
'scrollbar': (
'thumb-background': hsl(0 0% 100% / 15%),
'thumb-background-hover': hsl(0 0% 100% / 25%),
'track-background': hsl(0 0% 100% / 5%),
'thumb-background-hover': hsl(0 0% 100% / 25%),
'track-background': hsl(0 0% 100% / 5%),
),
'widget': (
'icon-background': color.adjust($dark-color-black, $lightness: 5%),
Expand Down
1 change: 0 additions & 1 deletion src/Console/Commands/ResourceMake.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace Cone\Root\Console\Commands;

use Illuminate\Console\GeneratorCommand;
use Illuminate\Support\Str;
use Symfony\Component\Console\Input\InputOption;

class ResourceMake extends GeneratorCommand
Expand Down
1 change: 0 additions & 1 deletion src/RootApplicationServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Cone\Root;

use Illuminate\Routing\Router;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;

Expand Down
Loading

0 comments on commit f739845

Please sign in to comment.