mirror of
https://github.com/MarijnDoeve/TijdVoorDeTest.git
synced 2026-07-05 23:20:18 +02:00
Compare commits
7 Commits
2f67a6b852
..
v0.1.3
| Author | SHA1 | Date | |
|---|---|---|---|
| 5ea7a636b8 | |||
| d37136be93 | |||
| 212401a97f | |||
| 7c74574d3c | |||
| b1f84d441f | |||
| 8c72b1b217 | |||
| 806cff8c0f |
@@ -28,3 +28,7 @@ updates:
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
|
||||
+118
-30
@@ -17,31 +17,58 @@ permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
quality:
|
||||
name: Code Quality
|
||||
build:
|
||||
name: Build Dev Image
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20
|
||||
timeout-minutes: 15
|
||||
if: "!startsWith(github.ref, 'refs/tags/')"
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Lint Dockerfile
|
||||
uses: hadolint/hadolint-action@v3.1.0
|
||||
uses: hadolint/hadolint-action@2332a7b74a6de0dda2e2221d575162eba76ba5e5 # v3.3.0
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4
|
||||
- name: Build Docker images
|
||||
uses: docker/bake-action@v5
|
||||
uses: docker/bake-action@d3418bd7d0e9324001bca92fa8ba175ea7e6dc9b # v7
|
||||
with:
|
||||
pull: true
|
||||
files: |
|
||||
compose.yaml
|
||||
compose.override.yaml
|
||||
set: |
|
||||
*.cache-from=type=gha,scope=${{github.ref}}-devbuild
|
||||
*.cache-from=type=gha,scope=refs/heads/main-devbuild
|
||||
*.cache-to=type=gha,scope=${{github.ref}}-devbuild,mode=${{ github.event_name == 'pull_request' && 'min' || 'max' }}
|
||||
|
||||
quality:
|
||||
name: Code Quality
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20
|
||||
needs: build
|
||||
if: "!startsWith(github.ref, 'refs/tags/')"
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4
|
||||
- name: Load Docker images
|
||||
uses: docker/bake-action@d3418bd7d0e9324001bca92fa8ba175ea7e6dc9b # v7
|
||||
with:
|
||||
load: true
|
||||
files: |
|
||||
compose.yaml
|
||||
compose.override.yaml
|
||||
set: |
|
||||
*.cache-from=type=gha,scope=${{github.ref}}-quality
|
||||
*.cache-from=type=gha,scope=refs/heads/main
|
||||
*.cache-to=type=gha,scope=${{github.ref}}-quality,mode=${{ github.event_name == 'pull_request' && 'min' || 'max' }}
|
||||
*.cache-from=type=gha,scope=${{github.ref}}-devbuild
|
||||
- name: Start services
|
||||
run: docker compose up php database --wait --no-build
|
||||
- name: Warm up dev cache
|
||||
@@ -71,34 +98,47 @@ jobs:
|
||||
- name: Assert all checks passed
|
||||
if: always()
|
||||
run: |
|
||||
outcomes="${{ steps.twig_lint.outcome }} ${{ steps.cs.outcome }} ${{ steps.twig_cs.outcome }} ${{ steps.phpstan.outcome }} ${{ steps.rector.outcome }}"
|
||||
if echo "$outcomes" | grep -q "failure"; then exit 1; fi
|
||||
failed=0
|
||||
check() {
|
||||
local name="$1" outcome="$2"
|
||||
if [[ "$outcome" == "failure" ]]; then
|
||||
echo "::error::$name failed"
|
||||
failed=1
|
||||
fi
|
||||
}
|
||||
check "Twig Lint" "${{ steps.twig_lint.outcome }}"
|
||||
check "Coding Style" "${{ steps.cs.outcome }}"
|
||||
check "Twig Coding Style" "${{ steps.twig_cs.outcome }}"
|
||||
check "PHPStan" "${{ steps.phpstan.outcome }}"
|
||||
check "Rector" "${{ steps.rector.outcome }}"
|
||||
exit $failed
|
||||
|
||||
tests:
|
||||
name: Tests
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20
|
||||
needs: build
|
||||
if: "!startsWith(github.ref, 'refs/tags/')"
|
||||
permissions:
|
||||
checks: write
|
||||
pull-requests: write
|
||||
contents: read
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Build Docker images
|
||||
uses: docker/bake-action@v5
|
||||
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4
|
||||
- name: Load Docker images
|
||||
uses: docker/bake-action@d3418bd7d0e9324001bca92fa8ba175ea7e6dc9b # v7
|
||||
with:
|
||||
pull: true
|
||||
load: true
|
||||
files: |
|
||||
compose.yaml
|
||||
compose.override.yaml
|
||||
set: |
|
||||
*.cache-from=type=gha,scope=${{github.ref}}-tests
|
||||
*.cache-from=type=gha,scope=refs/heads/main
|
||||
*.cache-to=type=gha,scope=${{github.ref}}-tests,mode=${{ github.event_name == 'pull_request' && 'min' || 'max' }}
|
||||
*.cache-from=type=gha,scope=${{github.ref}}-devbuild
|
||||
- name: Start services
|
||||
run: docker compose up php database --wait --no-build
|
||||
- name: Create test database
|
||||
@@ -111,13 +151,55 @@ jobs:
|
||||
run: docker compose exec -T php vendor/bin/phpunit --log-junit var/phpunit/junit.xml
|
||||
- name: Publish PHPUnit test results
|
||||
if: always()
|
||||
uses: mikepenz/action-junit-report@v5
|
||||
uses: mikepenz/action-junit-report@d9f48fc87bc235f7e214acf696ca5abc0a986f16 # v6
|
||||
with:
|
||||
report_paths: var/phpunit/junit.xml
|
||||
check_name: PHPUnit
|
||||
- name: Doctrine Schema Validator
|
||||
run: docker compose exec -T php bin/console -e test doctrine:schema:validate
|
||||
|
||||
verify-prior-run:
|
||||
name: Verify Prior CI Run
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
permissions:
|
||||
actions: read
|
||||
steps:
|
||||
- name: Wait for and verify successful CI run on this commit
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
max_attempts=30
|
||||
attempt=0
|
||||
while [[ $attempt -lt $max_attempts ]]; do
|
||||
attempt=$((attempt + 1))
|
||||
|
||||
success_count=$(gh api \
|
||||
"repos/${{ github.repository }}/actions/workflows/ci.yml/runs?head_sha=${{ github.sha }}&status=success&per_page=5" \
|
||||
--jq "[.workflow_runs[] | select(.id != ${{ github.run_id }})] | length")
|
||||
|
||||
if [[ "$success_count" -gt 0 ]]; then
|
||||
echo "Found $success_count prior successful CI run(s) for ${{ github.sha }}."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
in_progress_count=$(gh api \
|
||||
"repos/${{ github.repository }}/actions/workflows/ci.yml/runs?head_sha=${{ github.sha }}&per_page=10" \
|
||||
--jq "[.workflow_runs[] | select(.id != ${{ github.run_id }}) | select(.status == \"in_progress\" or .status == \"queued\" or .status == \"waiting\" or .status == \"requested\" or .status == \"pending\")] | length")
|
||||
|
||||
if [[ "$in_progress_count" -gt 0 ]]; then
|
||||
echo "CI still in progress (attempt $attempt/$max_attempts), waiting 30s..."
|
||||
sleep 30
|
||||
else
|
||||
echo "::error::No prior successful CI run found for ${{ github.sha }}. Only tag commits that have passed CI on main."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "::error::Timed out waiting for CI run to complete for ${{ github.sha }}."
|
||||
exit 1
|
||||
|
||||
build-deploy:
|
||||
name: Build and Deploy
|
||||
permissions:
|
||||
@@ -126,17 +208,21 @@ jobs:
|
||||
environment:
|
||||
name: ${{ startsWith(github.ref, 'refs/tags/') && 'production' || 'acceptance' }}
|
||||
url: ${{ vars.URL }}
|
||||
needs: [quality, tests]
|
||||
needs: [quality, tests, verify-prior-run]
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
if: (github.ref == 'refs/heads/main' && false) || startsWith(github.ref, 'refs/tags/')
|
||||
if: >-
|
||||
always() && !cancelled() && !failure() &&
|
||||
((github.ref == 'refs/heads/main' && false) || startsWith(github.ref, 'refs/tags/'))
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4
|
||||
- name: Log in to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@c99871dec2022cc055c062a10cc1a1310835ceb4 # v4
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
@@ -164,7 +250,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Build and Push Docker images
|
||||
uses: docker/bake-action@v5
|
||||
uses: docker/bake-action@d3418bd7d0e9324001bca92fa8ba175ea7e6dc9b # v7
|
||||
with:
|
||||
pull: true
|
||||
push: true
|
||||
@@ -178,7 +264,7 @@ jobs:
|
||||
*.tags=${{ steps.meta.outputs.full_name }}
|
||||
|
||||
- name: Create Sentry release
|
||||
uses: getsentry/action-release@v3
|
||||
uses: getsentry/action-release@ff07929a6537bac57790c3451cf4d364aca38528 # v3
|
||||
env:
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
|
||||
@@ -191,5 +277,7 @@ jobs:
|
||||
shell: bash
|
||||
env:
|
||||
PORTAINER_WEBHOOK: ${{secrets.PORTAINER_WEBHOOK}}
|
||||
IMAGE_TAG: ${{steps.meta.outputs.tag}}
|
||||
SENTRY_RELEASE: ${{steps.meta.outputs.sentry_version}}
|
||||
run: |
|
||||
curl -v -X POST "${PORTAINER_WEBHOOK}?IMAGE_TAG=${{steps.meta.outputs.tag}}" --fail-with-body
|
||||
curl -v -X POST "${PORTAINER_WEBHOOK}?IMAGE_TAG=${IMAGE_TAG}&SENTRY_RELEASE=${SENTRY_RELEASE}" --fail-with-body
|
||||
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
steps:
|
||||
- name: Dependabot metadata
|
||||
id: metadata
|
||||
uses: dependabot/fetch-metadata@v2
|
||||
uses: dependabot/fetch-metadata@v3
|
||||
with:
|
||||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
- name: Enable auto-merge for Dependabot PRs
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ services:
|
||||
MAILER_DSN: ${MAILER_DSN}
|
||||
MAILER_SENDER: ${MAILER_SENDER}
|
||||
SENTRY_DSN: ${SENTRY_DSN}
|
||||
SENTRY_RELEASE: ${IMAGE_TAG}
|
||||
SENTRY_RELEASE: ${SENTRY_RELEASE}
|
||||
SENTRY_ENVIRONMENT: ${SENTRY_ENVIRONMENT}
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
|
||||
Generated
+14
-14
@@ -1839,16 +1839,16 @@
|
||||
},
|
||||
{
|
||||
"name": "martin-georgiev/postgresql-for-doctrine",
|
||||
"version": "v4.6.0",
|
||||
"version": "v4.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/martin-georgiev/postgresql-for-doctrine.git",
|
||||
"reference": "59841c7e53f8339b13bc0cb0ee9931b7b9bbb139"
|
||||
"reference": "23b5c2694083355ab87eaa913b43a0cddd8c64bb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/martin-georgiev/postgresql-for-doctrine/zipball/59841c7e53f8339b13bc0cb0ee9931b7b9bbb139",
|
||||
"reference": "59841c7e53f8339b13bc0cb0ee9931b7b9bbb139",
|
||||
"url": "https://api.github.com/repos/martin-georgiev/postgresql-for-doctrine/zipball/23b5c2694083355ab87eaa913b43a0cddd8c64bb",
|
||||
"reference": "23b5c2694083355ab87eaa913b43a0cddd8c64bb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1863,13 +1863,13 @@
|
||||
"deptrac/deptrac": "^4.0",
|
||||
"doctrine/orm": "~2.14||~3.0",
|
||||
"ekino/phpstan-banned-code": "^3.2.0",
|
||||
"friendsofphp/php-cs-fixer": "^3.95.2",
|
||||
"phpstan/phpstan": "^2.1.55",
|
||||
"friendsofphp/php-cs-fixer": "^3.95.11",
|
||||
"phpstan/phpstan": "^2.2.2",
|
||||
"phpstan/phpstan-deprecation-rules": "^2.0.4",
|
||||
"phpstan/phpstan-doctrine": "^2.0.22",
|
||||
"phpstan/phpstan-doctrine": "^2.0.27",
|
||||
"phpstan/phpstan-phpunit": "^2.0.16",
|
||||
"phpunit/phpunit": "^10.5.63||^11.5",
|
||||
"rector/rector": "^2.4.4",
|
||||
"rector/rector": "^2.5.2",
|
||||
"symfony/cache": "^6.4||^7.0",
|
||||
"symfony/var-exporter": "^6.4||^7.0"
|
||||
},
|
||||
@@ -1952,7 +1952,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/martin-georgiev/postgresql-for-doctrine/issues",
|
||||
"source": "https://github.com/martin-georgiev/postgresql-for-doctrine/tree/v4.6.0"
|
||||
"source": "https://github.com/martin-georgiev/postgresql-for-doctrine/tree/v4.7.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1964,7 +1964,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-05-29T19:11:20+00:00"
|
||||
"time": "2026-07-01T18:17:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpdocumentor/reflection-common",
|
||||
@@ -9676,11 +9676,11 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "2.2.3",
|
||||
"version": "2.2.4",
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/4048833dd47b377287818841877fb3087289509c",
|
||||
"reference": "4048833dd47b377287818841877fb3087289509c",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/f0fe3fb03bb53ce68cc2416785b260e62226ec27",
|
||||
"reference": "f0fe3fb03bb53ce68cc2416785b260e62226ec27",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -9736,7 +9736,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-06-30T21:15:26+00:00"
|
||||
"time": "2026-07-03T07:00:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-doctrine",
|
||||
|
||||
+4
-1
@@ -3,6 +3,7 @@
|
||||
declare(strict_types=1);
|
||||
|
||||
use Rector\Config\RectorConfig;
|
||||
use Rector\PHPUnit\CodeQuality\Rector\Class_\AddSeeTestAnnotationRector;
|
||||
use Rector\Symfony\Bridge\Symfony\Routing\SymfonyRoutesProvider;
|
||||
use Rector\Symfony\Contract\Bridge\Symfony\Routing\SymfonyRoutesProviderInterface;
|
||||
|
||||
@@ -13,7 +14,7 @@ return RectorConfig::configure()
|
||||
__DIR__.'/src',
|
||||
__DIR__.'/tests',
|
||||
])
|
||||
->withSkip([__DIR__.'/config/reference.php'])
|
||||
->withSkipPath(__DIR__.'/config/reference.php')
|
||||
->withSymfonyContainerXml(__DIR__.'/var/cache/dev/Tvdt_KernelDevDebugContainer.xml')
|
||||
->withSymfonyContainerPhp(__DIR__.'/tests/symfony-container.php')
|
||||
->registerService(SymfonyRoutesProvider::class, SymfonyRoutesProviderInterface::class)
|
||||
@@ -34,4 +35,6 @@ return RectorConfig::configure()
|
||||
)
|
||||
->withAttributesSets(all: true)
|
||||
->withComposerBased(twig: true, doctrine: true, phpunit: true, symfony: true)
|
||||
->withSkip([AddSeeTestAnnotationRector::class])
|
||||
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user