diff --git a/.github/workflows/docs-check.yml b/.github/workflows/docs-check.yml index 6951b621..4f44990c 100644 --- a/.github/workflows/docs-check.yml +++ b/.github/workflows/docs-check.yml @@ -10,39 +10,4 @@ on: jobs: checkdocs: - name: "Check Docs" - - runs-on: ${{ matrix.operating-system }} - - strategy: - matrix: - dependencies: - - "locked" - php-version: - - "8.4" - operating-system: - - "ubuntu-latest" - - steps: - - name: "Checkout" - uses: actions/checkout@v6 - - - name: "Install PHP" - uses: "shivammathur/setup-php@2.37.0" - with: - coverage: none - php-version: "${{ matrix.php-version }}" - ini-values: memory_limit=-1, opcache.enable_cli=1 - - - uses: ramsey/composer-install@4.0.0 - with: - dependency-versions: ${{ matrix.dependencies }} - - - name: "extract php code" - run: "bin/docs-extract-php-code" - - - name: "lint php" - run: "php -l docs_php/*.php" - - - name: "docs code style" - run: "vendor/bin/phpcbf docs_php --exclude=SlevomatCodingStandard.TypeHints.DeclareStrictTypes" \ No newline at end of file + uses: patchlevel/.github/.github/workflows/docs-check.yml@main diff --git a/Makefile b/Makefile index 6b8d3434..b9d61636 100644 --- a/Makefile +++ b/Makefile @@ -42,11 +42,11 @@ dev: static test .PHONY: docs-extract-php docs-extract-php: - bin/docs-extract-php-code + vendor/bin/docs-extract-php-code .PHONY: docs-inject-php docs-inject-php: - bin/docs-inject-php-code + vendor/bin/docs-inject-php-code .PHONY: docs-format docs-format: docs-phpcs docs-inject-php diff --git a/bin/docs-extract-php-code b/bin/docs-extract-php-code deleted file mode 100755 index d50b642d..00000000 --- a/bin/docs-extract-php-code +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -addExtension(new MarkdownRendererExtension()); - -$parser = new MarkdownParser($environment); - -$targetDir = __DIR__ . '/../docs_php'; - -if (file_exists($targetDir)) { - exec('rm -rf ' . $targetDir); -} - -mkdir($targetDir); - -$finder = new Symfony\Component\Finder\Finder(); -$finder->files()->in(__DIR__ . '/../docs')->name('*.md'); - -foreach ($finder as $file) { - $fileName = pathinfo($file->getBasename(), PATHINFO_FILENAME); - - $content = file_get_contents($file->getPathname()); - $document = $parser->parse($content); - - $result = (new Query()) - ->where(Query::type(FencedCode::class)) - ->findAll($document); - - /** - * @var FencedCode $node - */ - foreach ($result as $i => $node) { - if ($node->getInfo() !== 'php') { - continue; - } - - $source = sprintf('%s:%s', $file->getRealPath(), $node->getStartLine()); - - $code = "getLiteral(); - - $targetPath = $targetDir . '/' . $fileName . '_' . $i . '.php'; - file_put_contents($targetPath, $code); - } -} diff --git a/bin/docs-inject-php-code b/bin/docs-inject-php-code deleted file mode 100755 index e4e81ead..00000000 --- a/bin/docs-inject-php-code +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env php -addExtension(new MarkdownRendererExtension()); - -$parser = new MarkdownParser($environment); -$markdownRenderer = new MarkdownRenderer($environment); - -$targetDir = __DIR__ . '/../docs_php'; - -if (!file_exists($targetDir)) { - exit(1); -} - -$finder = new Symfony\Component\Finder\Finder(); -$finder->files()->in(__DIR__ . '/../docs')->name('*.md'); - -foreach ($finder as $file) { - $fileName = pathinfo($file->getBasename(), PATHINFO_FILENAME); - - $content = file_get_contents($file->getPathname()); - $document = $parser->parse($content); - - $result = (new Query()) - ->where(Query::type(FencedCode::class)) - ->findAll($document); - - /** - * @var FencedCode $node - */ - foreach ($result as $i => $node) { - if ($node->getInfo() !== 'php') { - $node->setLiteral(trim($node->getLiteral())); - continue; - } - - $targetPath = $targetDir . '/' . $fileName . '_' . $i . '.php'; - - if (!file_exists($targetPath)) { - $node->setLiteral(trim($node->getLiteral())); - continue; - } - - $code = file_get_contents($targetPath); - - $lines = explode("\n", $code); - array_splice($lines, 0, 2); - $code = implode("\n", $lines); - - $node->setLiteral(trim($code)); - } - - file_put_contents($file->getPathname(), $markdownRenderer->renderDocument($document)); -} - -if (file_exists($targetDir)) { - exec('rm -rf ' . $targetDir); -} \ No newline at end of file diff --git a/composer.json b/composer.json index 5eb3de11..3cf64a29 100644 --- a/composer.json +++ b/composer.json @@ -38,6 +38,7 @@ "infection/infection": "^0.32.0", "league/commonmark": "^2.4", "patchlevel/coding-standard": "^1.3.0", + "patchlevel/docs-tools": "^1.0", "phpstan/phpstan": "^2.1.32", "phpstan/phpstan-symfony": "^2.0.8", "phpunit/phpunit": "^11.5.45", diff --git a/composer.lock b/composer.lock index 3fda10de..fef134ce 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "43e01b6335841afbf0b83487ba30b960", + "content-hash": "07050a87c752889b79fb731a1c40a2a4", "packages": [ { "name": "brick/math", @@ -5412,6 +5412,42 @@ }, "time": "2023-06-02T10:05:08+00:00" }, + { + "name": "patchlevel/docs-tools", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/patchlevel/docs-tools.git", + "reference": "61b87cf298cf9de069bddb6c61c22b5fab924e97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/patchlevel/docs-tools/zipball/61b87cf298cf9de069bddb6c61c22b5fab924e97", + "reference": "61b87cf298cf9de069bddb6c61c22b5fab924e97", + "shasum": "" + }, + "require": { + "league/commonmark": "^2.4", + "php": "^8.2", + "symfony/finder": "^6.4 || ^7.0 || ^8.0", + "wnx/commonmark-markdown-renderer": "^1.4" + }, + "bin": [ + "bin/docs-extract-php-code", + "bin/docs-inject-php-code" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Extract and re-inject PHP code samples from/into markdown documentation", + "support": { + "issues": "https://github.com/patchlevel/docs-tools/issues", + "source": "https://github.com/patchlevel/docs-tools/tree/v1.0.0" + }, + "time": "2026-09-16T12:33:28+00:00" + }, { "name": "phar-io/manifest", "version": "2.0.4",