Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Integrity workflow #157

Merged
merged 9 commits into from
Sep 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading