Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
affc0a9
6654: Upgrade to doctrine-bundle 3.x
turegjorup Mar 19, 2026
c0889bf
6654: Update docker compose setup to node 24
turegjorup Mar 19, 2026
b919a51
6654: Add autogenerated config/reference.php
turegjorup Mar 19, 2026
a28c245
6654: Update gitignore
turegjorup Mar 19, 2026
751efa2
6654: Update doctrine bundle flex recipe
turegjorup Mar 19, 2026
f128dc9
6654: Upgrade to easyadmin-bundle 5.x and doctrine-migrations-bundle 4.x
turegjorup Mar 19, 2026
41c2fa3
6654: Remove redundant phpdocumentor/reflection-docblock
turegjorup Mar 19, 2026
2924920
6654: Upgrade to PHPUnit 13
turegjorup Mar 19, 2026
5f9e761
6654: Upgrade to PHP 8.5
turegjorup Mar 19, 2026
4ac1a39
6654: Upgrade codebase with rector fixes for PHP 8.5
turegjorup Mar 19, 2026
bd0fc1e
6869: Add agents.md and Claude Code configuration
turegjorup Mar 19, 2026
1e7c04c
&869: Update Chnagelog
turegjorup Mar 19, 2026
30a9a53
6869: Update Changelog
turegjorup Mar 19, 2026
7b21a00
Merge branch 'feature/6869_agent_config' of github.com:itk-dev/devops…
turegjorup Mar 19, 2026
f5a6bf6
6654: Fix Symfony 8 deprecations and broken routing resources
turegjorup Mar 25, 2026
73dad17
Code style fix
turegjorup Mar 25, 2026
c954906
Updated itkdev docker templates
turegjorup Mar 25, 2026
b1d3167
6654: Replace API spec workflow with oasdiff-based breaking change de…
turegjorup Mar 25, 2026
ae2cfb8
6654: Add Taskfile for local development workflow
turegjorup Mar 25, 2026
66a9e96
6654: Add twig-cs-fixer as dev dependency
turegjorup Mar 25, 2026
92296f1
6654: Apply PHP coding standards fixes
turegjorup Mar 25, 2026
f589268
6654: Apply Twig coding standards fixes
turegjorup Mar 25, 2026
38540f1
6654: Apply YAML/Prettier formatting and regenerate API spec
turegjorup Mar 25, 2026
0b26544
6654: Update documentation
turegjorup Mar 25, 2026
74a94db
Update gitignore
turegjorup Mar 25, 2026
5fb9463
Re-generate api-spec
turegjorup Mar 25, 2026
dbfb8e3
CS fixes
turegjorup Mar 25, 2026
57ca65e
6654: Exclude generated reference.php from php-cs-fixer and add task …
turegjorup Mar 25, 2026
50c257f
6654: Add code coverage reporting to PHPUnit workflow
turegjorup Mar 25, 2026
82d7030
6654: Fix PHPUnit workflow to start services and setup test database
turegjorup Mar 25, 2026
a555524
Merge pull request #63 from itk-dev/feature/6654_symfony_upgrade
turegjorup Mar 25, 2026
3d5ac2d
6869: Rename agents.md to claude.md and update settings
turegjorup Mar 25, 2026
864a7ca
Merge remote-tracking branch 'origin/develop' into feature/6869_agent…
turegjorup Mar 25, 2026
f07447d
Update .claude/settings.json
turegjorup Mar 25, 2026
8c33faf
6869: Add PHPStan job to PR workflow
turegjorup Mar 25, 2026
4b47640
6869: Improve Claude Code hooks and permissions
turegjorup Mar 25, 2026
560e5e5
6869: Clarify local-only dev credentials in docker-compose.override
turegjorup Mar 25, 2026
82b77ae
Merge branch 'feature/6869_agent_config' of github.com:itk-dev/devops…
turegjorup Mar 25, 2026
2ad001c
6869: Update claude.md for Symfony 8.0 and PHP 8.5
turegjorup Mar 25, 2026
9a88a00
6869: Fix typo in config reference (@var → @type)
turegjorup Mar 25, 2026
9344dca
6869: Fix FieldCollection::new() removed in EasyAdmin 5.x
turegjorup Mar 27, 2026
39144a6
6869: Update task file with "pr.actions" check
turegjorup Mar 27, 2026
84caedc
6869: Update defaults in claude.md
turegjorup Mar 27, 2026
506969b
6869: Add automation recommendations (agents, skills, hooks, MCP)
turegjorup Mar 27, 2026
5da6d06
6869: Fix hook file paths for Docker and update README
turegjorup Mar 27, 2026
bac1888
6869: Fix markdown lint errors in README.md
turegjorup Mar 27, 2026
7fd86a6
6869: Improve OpenAPI spec with descriptions, examples, and error codes
turegjorup Mar 27, 2026
7cf1f1e
Change agents.md to claude.md in Readme
turegjorup Apr 7, 2026
1f44f69
Use Symfony's when@dev to disable oidc in dev mode
turegjorup Apr 7, 2026
3b8f070
Merge pull request #62 from itk-dev/feature/6869_agent_config
turegjorup Apr 7, 2026
921be91
Merge pull request #64 from itk-dev/feature/api-spec-updates
turegjorup Apr 7, 2026
e1ef964
Update changelog
turegjorup Apr 7, 2026
41a7c3c
Merge pull request #65 from itk-dev/release/1.9.0
turegjorup Apr 7, 2026
cb14d1b
Merge branch 'release/1.9.0'
turegjorup Apr 7, 2026
9b9af9c
Merge tag '1.9.0' into develop
turegjorup Apr 7, 2026
0ebc193
Update to checkout@v6 for build release action
turegjorup Apr 7, 2026
5361322
Downgrade to PHP 8.4, update composer dependencies
turegjorup Apr 7, 2026
55d046e
Update Changelog
turegjorup Apr 7, 2026
3a6a952
Merge pull request #66 from itk-dev/hotfix/1.9.1
turegjorup Apr 7, 2026
73c7c71
Merge tag '1.9.1' into develop
turegjorup Apr 7, 2026
a1d5560
Merge branch 'hotfix/1.9.1'
turegjorup Apr 7, 2026
9b7ab63
Fix #[AdminRoute] attribute error, add smoke tests for admin routes
turegjorup Apr 7, 2026
b616e03
Update Changelog
turegjorup Apr 7, 2026
2e141c0
Markdownlint
turegjorup Apr 7, 2026
21af0c3
Disable webpack strict mode in test env
turegjorup Apr 7, 2026
524e011
Merge pull request #67 from itk-dev/hotfix/1.9.2
turegjorup Apr 7, 2026
cbf3324
Merge tag '1.9.2' into develop
turegjorup Apr 7, 2026
4e73cd5
Merge branch 'hotfix/1.9.2'
turegjorup Apr 7, 2026
debe1d5
Add method for getting advisories and update advisory_count template
martinyde Apr 7, 2026
3b91081
Renamed template
martinyde Apr 7, 2026
adf12ce
Updated changelog
martinyde Apr 7, 2026
a8a93f2
Readded deleted file
martinyde Apr 10, 2026
a674d56
Merge pull request #68 from itk-dev/feature/show_advisories_on_site
martinyde Apr 15, 2026
3264dfe
Updated advisory display
martinyde Apr 22, 2026
5673476
Updated advisory display
martinyde Apr 22, 2026
e9d79dc
Removed added file
martinyde Apr 22, 2026
68dbbe3
Updated changelog
martinyde Apr 22, 2026
167d9d0
Applied code styles
martinyde Apr 22, 2026
f041354
Merge pull request #69 from itk-dev/feature/show_sites_on_advisories
martinyde Apr 22, 2026
6f23f66
Update Changelog
turegjorup Apr 23, 2026
2e92e69
Merge pull request #70 from itk-dev/release/1.10.0
turegjorup Apr 23, 2026
cbe54e3
Merge tag '1.10.0' into develop
turegjorup Apr 23, 2026
02861d4
Merge branch 'release/1.10.0'
turegjorup Apr 23, 2026
bb578bb
chore: update composer dependencies
turegjorup May 11, 2026
23c52af
Merge pull request #71 from itk-dev/feature/update-composer-dependencies
turegjorup May 11, 2026
3cbcb0b
Update Changelog
turegjorup May 11, 2026
8126bb9
Merge pull request #72 from itk-dev/release/1.10.1
turegjorup May 11, 2026
027eeac
Merge branch 'main' into feature/5566_maintenance_contract-
martinyde May 18, 2026
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
15 changes: 15 additions & 0 deletions .claude/agents/create-migration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
name: create-migration
description: Generate and validate a Doctrine migration after entity changes
model: sonnet
---

After entity changes, generate and validate a Doctrine migration:

1. Run `docker compose exec -T phpfpm bin/console doctrine:migrations:diff` to generate a migration
2. Read the generated migration file and verify the SQL looks correct
3. Run `docker compose exec -T phpfpm bin/console doctrine:migrations:migrate --no-interaction`
4. Run `docker compose exec -T phpfpm bin/console doctrine:schema:validate`

Report the migration file path, the SQL it contains, and whether schema validation passed.
If schema validation fails, investigate and report the discrepancies.
24 changes: 24 additions & 0 deletions .claude/agents/pr-readiness.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
name: pr-readiness
description: Run all CI-equivalent checks locally before creating a PR
model: haiku
---

Run the following checks in sequence inside Docker and report results for each.
Stop early if a critical check fails.

## Checks

1. **Composer validate**: `docker compose exec -T phpfpm composer validate --strict`
2. **Composer normalize**: `docker compose exec -T phpfpm composer normalize --dry-run`
3. **PHP coding standards**: `docker compose exec -T phpfpm composer coding-standards-check`
4. **PHPStan**: `docker compose exec -T phpfpm vendor/bin/phpstan analyse --no-progress`
5. **PHPUnit tests**: `docker compose exec -T phpfpm composer tests`
6. **Twig coding standards**: `docker compose exec -T phpfpm vendor/bin/twig-cs-fixer lint templates/`
7. **JS coding standards**: `docker compose run --rm -T node yarn coding-standards-check`
8. **API spec up to date**: Run `docker compose exec -T phpfpm composer update-api-spec`, then check `git diff --exit-code public/api-spec-v1.*`
9. **CHANGELOG updated**: Verify CHANGELOG.md has changes compared to the base branch (`git diff develop -- CHANGELOG.md`)

## Output

Report a summary table with columns: Check Name, Status (pass/fail), and error output for failures.
160 changes: 160 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"env": {
"COMPOSE_USER": "deploy"
},
"permissions": {
"allow": [
"Bash(cat:*)",
"Bash(diff:*)",
"Bash(echo:*)",
"Bash(find:*)",
"Bash(gh:*)",
"Bash(git:*)",
"Bash(grep:*)",
"Bash(head:*)",
"Bash(ls:*)",
"Bash(pwd)",
"Bash(tail:*)",
"Bash(task:*)",
"Bash(tree:*)",
"Bash(wc:*)",
"Bash(which:*)",
"Bash(docker compose exec:*)",
"Bash(docker compose run:*)",
"Bash(docker compose up:*)",
"Bash(docker compose ps:*)",
"Bash(docker compose logs:*)",
"Bash(docker compose top:*)",
"Bash(docker compose config:*)",
"Bash(docker compose pull:*)",
"Bash(docker compose images:*)",
"Bash(docker network:*)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(gh issue delete:*)",
"Bash(gh release delete:*)",
"Bash(gh repo delete:*)",
"Bash(gh label delete:*)",
"Read(./.env.local)",
"Read(./.env.local.*)",
"Read(./config/secrets/*)"
],
"ask": [
"Bash(docker compose down:*)",
"Bash(docker compose stop:*)",
"Bash(docker compose rm:*)",
"Bash(docker compose restart:*)",
"Bash(gh issue create:*)",
"Bash(gh issue close:*)",
"Bash(gh issue edit:*)",
"Bash(gh issue comment:*)",
"Bash(gh pr create:*)",
"Bash(gh pr close:*)",
"Bash(gh pr merge:*)",
"Bash(gh pr edit:*)",
"Bash(gh pr comment:*)",
"Bash(gh pr review:*)",
"Bash(gh release create:*)",
"Bash(gh release edit:*)",
"Bash(gh repo create:*)",
"Bash(gh label create:*)",
"Bash(gh label edit:*)",
"Bash(git push:*)",
"Bash(git branch -d:*)",
"Bash(git branch -D:*)",
"Bash(git tag -d:*)",
"Bash(git tag -a:*)",
"Bash(git tag :*)",
"Bash(git reset:*)",
"Bash(git rebase:*)",
"Bash(git merge:*)",
"Bash(git stash drop:*)",
"Bash(git clean:*)",
"Bash(git checkout -- :*)",
"Bash(git restore:*)",
"Bash(git commit:*)"
]
},
"hooks": {
"SessionStart": [
{
"matcher": "startup",
"hooks": [
{
"type": "command",
"command": "docker compose up --detach --quiet-pull 2>/dev/null || true",
"timeout": 60,
"statusMessage": "Starting Docker services..."
}
]
}
],
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "case \"$CLAUDE_FILE_PATH\" in */composer.lock|*/yarn.lock|*/.env.local|*/.env.local.*) echo 'BLOCKED: Do not edit lock files or .env.local directly' >&2; exit 1 ;; esac"
}
]
}
],
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "case \"$CLAUDE_FILE_PATH\" in *.php) REL_PATH=\"${CLAUDE_FILE_PATH#$CLAUDE_PROJECT_DIR/}\"; docker compose exec -T phpfpm vendor/bin/php-cs-fixer fix --quiet \"$REL_PATH\" 2>/dev/null || true ;; esac",
"timeout": 30
},
{
"type": "command",
"command": "case \"$CLAUDE_FILE_PATH\" in *.php) REL_PATH=\"${CLAUDE_FILE_PATH#$CLAUDE_PROJECT_DIR/}\"; docker compose exec -T phpfpm vendor/bin/phpstan analyse --no-progress --error-format=raw \"$REL_PATH\" 2>/dev/null || true ;; esac",
"timeout": 30
},
{
"type": "command",
"command": "case \"$CLAUDE_FILE_PATH\" in *.twig) REL_PATH=\"${CLAUDE_FILE_PATH#$CLAUDE_PROJECT_DIR/}\"; docker compose exec -T phpfpm vendor/bin/twig-cs-fixer lint --fix \"$REL_PATH\" 2>/dev/null || true ;; esac",
"timeout": 15
},
{
"type": "command",
"command": "case \"$CLAUDE_FILE_PATH\" in */composer.json) docker compose exec -T phpfpm composer normalize --quiet 2>/dev/null || true ;; esac",
"timeout": 30
},
{
"type": "command",
"command": "case \"$CLAUDE_FILE_PATH\" in *.js|*.css|*.scss|*.yaml|*.yml|*.md) REL_PATH=\"${CLAUDE_FILE_PATH#$CLAUDE_PROJECT_DIR/}\"; docker compose run --rm -T node npx prettier --write \"$REL_PATH\" 2>/dev/null || true ;; esac",
"timeout": 15
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "docker compose exec -T phpfpm bin/console lint:container 2>/dev/null || true",
"timeout": 30,
"statusMessage": "Validating Symfony DI container..."
}
]
}
]
},
"enabledPlugins": {
"php-lsp@claude-plugins-official": true,
"code-simplifier@claude-plugins-official": true,
"context7@claude-plugins-official": true,
"code-review@claude-plugins-official": true,
"security-guidance@claude-plugins-official": true,
"playwright@claude-plugins-official": true,
"feature-dev@claude-plugins-official": true,
"itkdev-skills@itkdev-marketplace": true
}
}
12 changes: 12 additions & 0 deletions .claude/skills/update-api-spec/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
name: update-api-spec
description: Regenerate and stage API spec files after API resource changes
user-invocable: true
---

When API resources or operations change, regenerate the OpenAPI spec files:

1. Run `docker compose exec -T phpfpm composer update-api-spec`
2. Check `git diff public/api-spec-v1.*` for changes
3. If changed, stage the spec files with `git add public/api-spec-v1.yaml public/api-spec-v1.json`
4. Report what changed in the API spec
4 changes: 2 additions & 2 deletions .docker/data/.gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Ignore everything in this directory
*
# Except this file
# Except
!.gitignore
!Readme.md
!README.md
4 changes: 1 addition & 3 deletions .docker/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@ http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

set_real_ip_from 172.16.0.0/16;
real_ip_recursive on;
real_ip_header X-Forwarded-For;
# Note: set_real_ip_from is set in the server block

log_format main '$http_x_real_ip - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
Expand Down
11 changes: 10 additions & 1 deletion .docker/templates/default.conf.template
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,20 @@ server {

client_max_body_size ${NGINX_MAX_BODY_SIZE};

# This also needs to be set in the single server tag and not only in http.
set_real_ip_from 172.16.0.0/16;
set_real_ip_from 192.168.39.0/24;
real_ip_recursive on;
real_ip_header X-Forwarded-For;

location = /cron-metrics {
# Proxy to supercronic metrics
proxy_pass http://${NGINX_CRON_METRICS}/metrics;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
Expand Down
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
COMPOSE_PROJECT_NAME=itksites
COMPOSE_DOMAIN=itksites.local.itkdev.dk
ITKDEV_TEMPLATE=symfony-8

ITKDEV_TEMPLATE=symfony-6

# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
Expand Down
Loading
Loading