{"id":15515039,"url":"https://github.com/szepeviktor/byte-level-care","last_synced_at":"2025-08-16T16:10:08.466Z","repository":{"id":182284706,"uuid":"668243912","full_name":"szepeviktor/byte-level-care","owner":"szepeviktor","description":"Living with zero problems while developing your web application","archived":false,"fork":false,"pushed_at":"2025-08-07T16:08:57.000Z","size":512,"stargazers_count":8,"open_issues_count":35,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-07T16:09:41.109Z","etag":null,"topics":["application","ci","continuous-delivery","continuous-deployment","continuous-integration","github-actions","tech-debt","technical-debt","web-application","workflow"],"latest_commit_sha":null,"homepage":"https://github.com/szepeviktor","language":"YAML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/szepeviktor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-07-19T11:00:58.000Z","updated_at":"2025-08-07T14:09:43.000Z","dependencies_parsed_at":"2023-10-11T21:21:35.832Z","dependency_job_id":"03c806ec-2f2c-404a-af50-c4631ae88053","html_url":"https://github.com/szepeviktor/byte-level-care","commit_stats":{"total_commits":222,"total_committers":3,"mean_commits":74.0,"dds":"0.23873873873873874","last_synced_commit":"cee3abf26e58a857d0a172eaed99241e44b39f00"},"previous_names":["szepeviktor/byte-level-care"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/szepeviktor/byte-level-care","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/szepeviktor%2Fbyte-level-care","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/szepeviktor%2Fbyte-level-care/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/szepeviktor%2Fbyte-level-care/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/szepeviktor%2Fbyte-level-care/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/szepeviktor","download_url":"https://codeload.github.com/szepeviktor/byte-level-care/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/szepeviktor%2Fbyte-level-care/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270735376,"owners_count":24636350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-16T02:00:11.002Z","response_time":91,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["application","ci","continuous-delivery","continuous-deployment","continuous-integration","github-actions","tech-debt","technical-debt","web-application","workflow"],"created_at":"2024-10-02T10:01:11.081Z","updated_at":"2025-08-16T16:10:08.409Z","avatar_url":"https://github.com/szepeviktor.png","language":"YAML","funding_links":["https://github.com/sponsors/szepeviktor"],"categories":[],"sub_categories":[],"readme":"# Byte-level care\n\n[![theories](https://img.shields.io/badge/more-theories-purple)](https://github.com/stars/szepeviktor/lists/theory)\n[![Tweet](https://img.shields.io/badge/Tweet-share-d5d5d5?style=social\u0026logo=twitter)](https://twitter.com/intent/tweet?text=Living%20with%20zero%20problems%20while%20developing%20your%20web%20application\u0026url=https%3A%2F%2Fgithub.com%2Fszepeviktor%2Fbyte-level-care)\n\n\u003e [!NOTE]\n\u003e Currently there are 14 _GitHub Actions_\n\u003e [workflows](.github/workflows)\n\u003e in this repository.\n\nHow to live with zero problems through Total Control.\n\n-   Analyze service providers before you choose one\n-   Monitor your service providers\n-   Collaborate closely with your service providers\n-   Know every piece of software on your server and its author;\n    uninstall anything that is not needed\n-   Monitor every process on your server with functional tests, not just pings\n-   Run [QA tools](./.github/workflows) on every byte of your git repositories\n-   Know your dependencies (packages) and their authors\n-   Deploy 100% automatically\n-   Run production environments without human intervention\n-   Be conservative with software versions when upgrading\n\nSee [Special infrastructure for web applications][href-infrastructure]\n\n## Support my work\n\nPlease consider supporting my work if you benefit from this knowledge.\n\n[![Sponsor][src-sponsor-button]][href-sponsor-page]\n\nThank you!\n\n---\n\n[![Back-end][src-gha-back-end-badge]][href-gha-back-end]\n[![Coverage Status][src-coveralls-badge]][href-coveralls]\n[![License][src-packagist-license]][href-license-file]\n[![PHP Version][src-php-version]][href-composer-file]\n[![Packagist stats][src-packagist-downloads]][href-packagist-stats]\n[![Latest version][src-latest-version]][href-packagist]\n[![PHPStan enabled][src-phpstan-enabled]][href-phpstan-org]\n\n## CI\n\nHow to design and implement continuous integration.\n\nYou find a complete CI workflow in [this repository](.github/workflows).\n\n-   Run in a premade container or install OS packages\n-   Display environment information\n-   Set access credentials\n-   Version control\n    - Git committer\n    - Commit message\n    - PR title\n-   Cache OS and programming language library packages\n-   Check programming language and framework version compatibility\n-   Check package management configuration (validate \u0026 normalize)\n-   Check outdated packages and known security vulnerabilities\n-   Build code\n-   Configure application\n-   :zero: Byte-level\n    -   Check execute file mode bit\n    -   Look for non-ASCII characters\n        (non-English alphabets, whitespace characters, control characters)\n-   :one: Syntax errors\n    - Check source code for syntax errors\n    - Check template files for syntax errors\n-   :two: Run unit and functional tests\n-   :three: Static Analysis\n    - Run static analysis: **PHPStan**\n    - Magic Number Detector\n    - Copy-Paste Detector\n-   :four: Coding Standards\n    - Check coding style\n    - Adhere to EditorConfig\n-   Measure code coverage\n-   Check route methods (controllers of routes)\n-   Check list of distributed files\n-   Check spelling: Typos\n-   Custom checks and warnings\n-   Display logs in CI output or upload logs as artifacts\n-   Start CD by SSH-ing to own server\n    (`restrict,command` in authorized_keys and `DenyUsers` in sshd.conf)\n-   Wipe sensitive data\n\n## CD\n\nHow to design and implement continuous delivery.\n\n-   Possible constrains:\n    - successful tests\n    - do not run on PR-s\n    - our repo\n    - specific branch\n    - tag in commit message `[deploy:prod]`\n    - deploy head commit only\n    - optional manual start ([GitLab manual actions][href-gitlab-manual-actions])\n-   Do not run as root user\n-   Keep deploy configuration in a file\n-   Log every output to a file, log start and finish to syslog\n-   Limit execution time of time-consuming steps (timeout)\n-   Optionally back up project files before starting to deploy\n-   Create a bot user on the server for git access with SSH key (`@companybot`)\n-   List changes in current project files\n-   [Check for maintenance mode][href-laravel-isdown],\n    Turn on maintenance mode `php artisan down`\n    covering static resource, page, AJAX and API requests\n-   Clear caches (configuration, routes, application, template etc.)\n-   Wait for to finish and disable cron jobs and background workers\n    after clearing caches (email piped to a program)\n-   Identify git repository and branch\n-   Checkout by commit hash (not by branch HEAD)\n-   At least **lint the source code**\n-   Don't deploy testing packages\n-   Enable production optimizations in package manager\n-   Build code\n-   Run database migrations\n-   Turn off maintenance mode\n-   Populate caches (application, OPcache, `wp rewrite flush`)\n-   Run at least 1 basic functional or unit test (e.g. log in or display dashboard)\n-   Check HTML output\n-   Special sudo configuration for reloading PHP-FPM or Cachetool\n-   **Alert on failure**\n-   \"Was down for X seconds\"\n-   Send email, Slack, Trello or Google Hangouts notification\n\n## Static analysis with PHPStan\n\n- [Extensions](https://phpstan.org/user-guide/extension-library)\n- `phpstan/phpstan-strict-rules`\n- `phpstan/phpstan-deprecation-rules`\n- `dave-liddament/sarb`\n- `ekino/phpstan-banned-code`\n- `tomasvotruba/type-coverage`\n- `pepakriz/phpstan-exception-rules`\n- `canvural/larastan-strict-rules`\n- `schlndh/maria-stan`\n- [Starred repositories](https://github.com/stars/szepeviktor/lists/static-analysis)\n\n[href-composer-file]: https://github.com/szepeviktor/byte-level-care/blob/master/composer.json\n[href-coveralls]: https://coveralls.io/github/szepeviktor/byte-level-care?branch=master\n[href-gha-back-end]: https://github.com/szepeviktor/byte-level-care/actions/workflows/back-end.yml\n[href-gitlab-manual-actions]: https://docs.gitlab.com/ee/ci/environments/#configure-manual-deployments\n[href-infrastructure]: https://github.com/szepeviktor/infrastructure-for-hosting-web-applications\n[href-laravel-isdown]: https://github.com/szepeviktor/running-laravel/blob/master/app/Console/Commands/IsDownForMaintenanceCommand.php\n[href-license-file]: https://github.com/szepeviktor/byte-level-care/blob/master/LICENSE\n[href-packagist]: https://packagist.org/packages/szepeviktor/phpstan-wordpress\n[href-packagist-stats]: https://packagist.org/packages/szepeviktor/phpstan-wordpress/stats\n[href-phpstan-org]: https://phpstan.org/\n[href-sponsor-page]: https://github.com/sponsors/szepeviktor\n[src-coveralls-badge]: https://coveralls.io/repos/github/szepeviktor/byte-level-care/badge.svg?branch=master\n[src-gha-back-end-badge]: https://github.com/szepeviktor/byte-level-care/actions/workflows/back-end.yml/badge.svg\n[src-latest-version]: https://img.shields.io/packagist/v/szepeviktor/phpstan-wordpress.svg\n[src-packagist-downloads]: https://img.shields.io/packagist/dt/szepeviktor/phpstan-wordpress.svg\n[src-packagist-license]: https://img.shields.io/packagist/l/szepeviktor/phpstan-wordpress\n[src-phpstan-enabled]: https://img.shields.io/badge/PHPStan-enabled-44CC11\n[src-php-version]: https://img.shields.io/packagist/dependency-v/szepeviktor/phpstan-wordpress/php\n[src-sponsor-button]: https://github.com/szepeviktor/.github/raw/master/.github/assets/github-like-sponsor-button.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fszepeviktor%2Fbyte-level-care","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fszepeviktor%2Fbyte-level-care","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fszepeviktor%2Fbyte-level-care/lists"}