Skip to content

Commit 6343715

Browse files
authored
Align the tooling with the ecosystem standard. (#5)
1 parent c7d3579 commit 6343715

6 files changed

Lines changed: 33 additions & 43 deletions

File tree

‎.github/PULL_REQUEST_TEMPLATE.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ Closes #...
1212

1313
- [ ] Tests added or updated.
1414
- [ ] Documentation updated when applicable.
15-
- [ ] `composer review` passes.
16-
- [ ] `composer tests` passes.
15+
- [ ] `make review` passes.
16+
- [ ] `make tests` passes.

‎.github/copilot-instructions.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ PHP library in the tiny-blocks ecosystem.
66

77
## Mandatory pre-task step
88

9-
Before starting any task, read and strictly follow `CLAUDE.md` and every rule file in
9+
Before starting any task, read and strictly follow `.claude/CLAUDE.md` and every rule file in
1010
`.claude/rules/`. These files are the absolute source of truth for code generation. Apply every
1111
rule strictly. Do not deviate from the patterns, folder structure, or naming conventions defined
1212
in them.

‎.github/workflows/ci.yml‎

Lines changed: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -11,42 +11,39 @@ permissions:
1111
contents: read
1212

1313
jobs:
14-
resolve-php-version:
15-
name: Resolve PHP version
14+
resolve-tooling-image:
15+
name: Resolve tooling image
1616
runs-on: ubuntu-latest
1717
timeout-minutes: 5
1818
outputs:
19-
php-version: ${{ steps.config.outputs.php-version }}
19+
php-image: ${{ steps.config.outputs.php-image }}
2020
steps:
2121
- name: Checkout
2222
uses: actions/checkout@v7
2323

24-
- name: Resolve PHP version from composer.json
24+
- name: Resolve tooling image from the Makefile
2525
id: config
26-
run: |
27-
version=$(jq -r '.require.php' composer.json | grep -oP '\d+\.\d+' | head -1)
28-
echo "php-version=$version" >> "$GITHUB_OUTPUT"
26+
run: echo "php-image=$(make show-image)" >> "$GITHUB_OUTPUT"
2927

3028
build:
3129
name: Build
32-
needs: resolve-php-version
30+
needs: resolve-tooling-image
3331
runs-on: ubuntu-latest
3432
timeout-minutes: 15
33+
env:
34+
image: ${{ needs.resolve-tooling-image.outputs.php-image }}
35+
workspace: /var/www/html
3536
steps:
3637
- name: Checkout
3738
uses: actions/checkout@v7
3839

39-
- name: Setup PHP
40-
uses: shivammathur/setup-php@v2
41-
with:
42-
tools: composer:2
43-
php-version: ${{ needs.resolve-php-version.outputs.php-version }}
44-
4540
- name: Validate composer.json
46-
run: composer validate --no-interaction
41+
run: docker run --rm -v "${PWD}":${{ env.workspace }} ${{ env.image }} composer validate --no-interaction
4742

4843
- name: Install dependencies
49-
run: composer install --no-progress --optimize-autoloader --prefer-dist --no-interaction
44+
run: >
45+
docker run --rm -v "${PWD}":${{ env.workspace }} ${{ env.image }}
46+
composer install --no-progress --optimize-autoloader --prefer-dist --no-interaction
5047
5148
- name: Upload vendor and composer.lock as artifact
5249
uses: actions/upload-artifact@v7
@@ -58,48 +55,36 @@ jobs:
5855
5956
auto-review:
6057
name: Auto review
61-
needs: [resolve-php-version, build]
58+
needs: [resolve-tooling-image, build]
6259
runs-on: ubuntu-latest
6360
timeout-minutes: 15
6461
steps:
6562
- name: Checkout
6663
uses: actions/checkout@v7
6764

68-
- name: Setup PHP
69-
uses: shivammathur/setup-php@v2
70-
with:
71-
tools: composer:2
72-
php-version: ${{ needs.resolve-php-version.outputs.php-version }}
73-
7465
- name: Download vendor artifact from build
7566
uses: actions/download-artifact@v8
7667
with:
7768
name: vendor-artifact
7869
path: .
7970

8071
- name: Run review
81-
run: composer review
72+
run: make review
8273

8374
tests:
8475
name: Tests
85-
needs: [resolve-php-version, auto-review]
76+
needs: [resolve-tooling-image, auto-review]
8677
runs-on: ubuntu-latest
8778
timeout-minutes: 15
8879
steps:
8980
- name: Checkout
9081
uses: actions/checkout@v7
9182

92-
- name: Setup PHP
93-
uses: shivammathur/setup-php@v2
94-
with:
95-
tools: composer:2
96-
php-version: ${{ needs.resolve-php-version.outputs.php-version }}
97-
9883
- name: Download vendor artifact from build
9984
uses: actions/download-artifact@v8
10085
with:
10186
name: vendor-artifact
10287
path: .
10388

10489
- name: Run tests
105-
run: composer tests
90+
run: make tests

‎Makefile‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@ endif
88

99
TTY := $(shell [ -t 0 ] && echo -it)
1010

11-
DOCKER_RUN = docker run ${PLATFORM} --rm ${TTY} --net=host -v ${PWD}:/app -w /app gustavofreze/php:8.5-alpine
11+
PHP_VERSION := $(shell sed -n 's/.*"php": *"^\([0-9]*\.[0-9]*\)".*/\1/p' composer.json)
12+
IMAGE_VERSION := 1.0.0
13+
PHP_IMAGE := gustavofreze/php:${PHP_VERSION}-cli-${IMAGE_VERSION}
14+
WORKSPACE := /var/www/html
15+
16+
DOCKER_RUN = docker run ${PLATFORM} --rm ${TTY} --net=host -v ${PWD}:${WORKSPACE} ${PHP_IMAGE}
1217

1318
RESET := \033[0m
1419
GREEN := \033[0;32m
@@ -44,6 +49,10 @@ show-reports: ## Open coverage and mutation reports in the browser
4449
show-outdated: ## Show outdated direct dependencies
4550
@${DOCKER_RUN} composer outdated --direct
4651

52+
.PHONY: show-image
53+
show-image: ## Show the pinned PHP tooling image
54+
@echo ${PHP_IMAGE}
55+
4756
.PHONY: clean
4857
clean: ## Remove dependencies and generated artifacts
4958
@sudo chown -R ${USER}:${USER} ${PWD}
@@ -66,7 +75,7 @@ help: ## Display this help message
6675
| awk 'BEGIN {FS = ":.*?## "}; {printf "$(YELLOW)%-25s$(RESET) %s\n", $$1, $$2}'
6776
@echo ""
6877
@echo "$$(printf '$(GREEN)')Reports$$(printf '$(RESET)')"
69-
@grep -E '^(show-reports|show-outdated):.*?## .*$$' $(MAKEFILE_LIST) \
78+
@grep -E '^(show-reports|show-outdated|show-image):.*?## .*$$' $(MAKEFILE_LIST) \
7079
| awk 'BEGIN {FS = ":.*?## "}; {printf "$(YELLOW)%-25s$(RESET) %s\n", $$1, $$2}'
7180
@echo ""
7281
@echo "$$(printf '$(GREEN)')Cleanup$$(printf '$(RESET)')"

‎composer.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
"ergebnis/composer-normalize": true,
6060
"infection/extension-installer": true
6161
},
62+
"process-timeout": 0,
6263
"sort-packages": true
6364
},
6465
"scripts": {

‎phpstan.neon.dist‎

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,26 @@ parameters:
33
paths:
44
- src
55
- tests
6+
tmpDir: reports/phpstan
67
ignoreErrors:
78
# Constructor parameter holds the registered entries; PHPDoc is prohibited on constructors.
89
- identifier: missingType.iterableValue
910
path: src/ExceptionMappingTable.php
10-
1111
# Iteration over the constructor-typed array of entries; root cause is the same as above.
1212
- identifier: method.nonObject
1313
path: src/ExceptionMappingTable.php
14-
1514
# The mapTo return type cannot be inferred without the constructor-level array shape.
1615
- identifier: return.type
1716
path: src/ExceptionMappingTable.php
18-
1917
# Internal matcher accepts a list of class-strings; PHPDoc is prohibited inside src/Internal/.
2018
- identifier: missingType.iterableValue
2119
path: src/Internal/AnyExactClassMatcher.php
22-
2320
# Closure invocation is opaque to PHPStan; PHPDoc is prohibited inside src/Internal/.
2421
- identifier: return.type
2522
path: src/Internal/DynamicMappedErrorResolver.php
26-
2723
# json_decode in test assertions yields mixed; PHPDoc is prohibited inside tests/.
2824
- identifier: offsetAccess.nonOffsetAccessible
2925
path: tests/Unit/ErrorMiddlewareTest.php
30-
3126
# Same root cause as the offset access entry: assertArrayHasKey/NotHasKey receive mixed from json_decode.
3227
- identifier: argument.type
3328
path: tests/Unit/ErrorMiddlewareTest.php

0 commit comments

Comments
 (0)