Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
4698cf9
Improved ping error reporting
rimi-itk Oct 9, 2026
ef01179
Improved archiving on matter
rimi-itk Oct 9, 2026
8bc78bc
Prepared for "Archive on case"
rimi-itk Oct 22, 2026
41f6e95
Updated DDEV Drupal Contrib setup
rimi-itk Oct 22, 2026
ec06c03
Ignored DDEV Docroot when symlinking project
rimi-itk Oct 22, 2026
3cd222e
Updated DDEV tasks
rimi-itk Oct 22, 2026
913d836
Merge pull request #9 from itk-dev/feature/ddev-drupal
rimi-itk Oct 23, 2026
b23b741
Added "Archive on case"
rimi-itk Oct 23, 2026
8c490a9
Refactored handler configuration form
rimi-itk Oct 23, 2026
d367b95
Added F2 item storage
rimi-itk Oct 23, 2026
b7d7a81
Added matter type setting
rimi-itk Oct 23, 2026
32f0044
Updated DDEV stuff
rimi-itk Oct 23, 2026
a085109
Updated translations
rimi-itk Oct 23, 2026
87f1b7d
Made helper readonly
rimi-itk Oct 24, 2026
12e9489
Removed composer audit
rimi-itk Oct 24, 2026
13099d8
Added some logging
rimi-itk Oct 24, 2026
8c8cfcc
Improved stuff
rimi-itk Oct 26, 2026
f97f545
Drupal 11
rimi-itk Oct 26, 2026
ee66ca6
Added examples module
rimi-itk Oct 27, 2026
60ba73c
Added API client command
rimi-itk Oct 9, 2026
faada06
Updated documentation
rimi-itk Oct 27, 2026
9ea95ec
Updated translations
rimi-itk Oct 27, 2026
c848785
Update src/Drush/Commands/ApiClientCommand.php
rimi-itk Oct 30, 2026
19f0bf2
Updated translations
rimi-itk Oct 27, 2026
e74a9d1
Updated user manual
rimi-itk Oct 28, 2026
1d7f117
Cleaned up TypeScript
rimi-itk Oct 28, 2026
9c5e9b4
Updated user manual
rimi-itk Oct 28, 2026
f16195c
More test stuff
rimi-itk Oct 28, 2026
384a48a
Even more test stuff
rimi-itk Oct 29, 2026
1000c66
Updated DDEV config
rimi-itk Oct 30, 2026
1f3f305
Cleaned up tests
rimi-itk Oct 30, 2026
67fefa4
Added documentation on Playwright test module
rimi-itk Oct 30, 2026
6035d8d
Cleaned up tests
rimi-itk Oct 30, 2026
4d4535d
Updated images
rimi-itk Oct 30, 2026
37cce80
Locked rector/rector
rimi-itk Oct 30, 2026
5d2c863
Made stuff work
rimi-itk Oct 30, 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
1 change: 1 addition & 0 deletions .ddev/.env.playwright
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
PLAYWRIGHT_DOCKER_IMAGE="mcr.microsoft.com/playwright:v1.64.1-noble"
2 changes: 1 addition & 1 deletion .ddev/.env.web
Original file line number Diff line number Diff line change
@@ -1 +1 @@
DRUPAL_CORE="^10.5.10"
DRUPAL_CORE="^11.4.10"
4 changes: 2 additions & 2 deletions .ddev/addon-metadata/ddev-drupal-contrib/manifest.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: ddev-drupal-contrib
repository: ddev/ddev-drupal-contrib
version: 1.2.0
install_date: "2026-09-17T22:53:45+02:00"
version: 1.2.2
install_date: "2026-10-26T17:19:56+01:00"
project_files:
- commands/host/core-version
- commands/web/eslint
Expand Down
15 changes: 15 additions & 0 deletions .ddev/addon-metadata/playwright/manifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: playwright
repository: julienloizelet/ddev-playwright
version: v3.1.0
install_date: "2026-10-25T09:07:45+01:00"
project_files:
- commands/playwright/playwright
- commands/playwright/playwright-install
- commands/playwright/playwright-init
- playwright-build/Dockerfile
- playwright-build/kasmvnc.yaml
- playwright-build/xstartup
- playwright-build/entrypoint.sh
- docker-compose.playwright.yaml
global_files: []
removal_actions: []
24 changes: 24 additions & 0 deletions .ddev/commands/playwright/playwright
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env bash
#ddev-generated
# Remove the line above if you don't want this file to be overwritten when you run
# ddev add-on get julienloizelet/ddev-playwright
#
# This file comes from https://github.com/julienloizelet/ddev-playwright
#
## Description: Run playwright command
## Usage: playwright [options] [command]
## Example: "ddev playwright test"
cd /var/www/html || exit 1
cd "${PLAYWRIGHT_TEST_DIR}" || exit 1

export PLAYWRIGHT_BROWSERS_PATH=0

if [ -f "package-lock.json" ]; then
npx playwright "$@"
elif [ -f "yarn.lock" ]; then
yarn playwright "$@"
else
echo "ERROR: could not find lock file for a supported package manager (npm, yarn) in '${PLAYWRIGHT_TEST_DIR}'"
echo "Please run 'ddev playwright-install' or 'ddev playwright-init' to install playwright."
exit 1
fi
48 changes: 48 additions & 0 deletions .ddev/commands/playwright/playwright-init
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env bash
#ddev-generated
# Remove the line above if you don't want this file to be overwritten when you run
# ddev add-on get julienloizelet/ddev-playwright
#
# This file comes from https://github.com/julienloizelet/ddev-playwright
#
## Description: Init playwright in PLAYWRIGHT_TEST_DIR
## Usage: playwright-init --pm [npm|yarn]
## Example: "ddev playwright-init --pm yarn"

function display_help() {
echo "Usage: $0 --pm [yarn|npm]"
echo "Example: $0 --pm yarn"
exit 1
}

# Default package manager is not set
PACKAGE_MANAGER=""

while [[ "$#" -gt 0 ]]; do
case $1 in
--pm) PACKAGE_MANAGER="$2"; shift ;;
*) echo "Unknown parameter passed: $1"; display_help ;;
esac
shift
done

# Check if package manager is specified and valid
if [[ -z "$PACKAGE_MANAGER" ]] || ! { [[ "$PACKAGE_MANAGER" == "yarn" ]] || [[ "$PACKAGE_MANAGER" == "npm" ]]; }; then
echo "Warning: Package manager should be specified with --pm and be one of 'yarn' or 'npm'."
echo "Defaulting to yarn"
PACKAGE_MANAGER="yarn"
fi

cd /var/www/html || exit 1
cd "${PLAYWRIGHT_TEST_DIR}" || exit 1

export PLAYWRIGHT_BROWSERS_PATH=0

if [[ $PACKAGE_MANAGER == "npm" ]]; then
npm init playwright@latest
elif [[ $PACKAGE_MANAGER == "yarn" ]]; then
yarn create playwright
fi

# Conditionally copy an .env file if an example file exists
[ -f .env.example ] && [ ! -f .env ] && cp -n .env.example .env; exit 0
50 changes: 50 additions & 0 deletions .ddev/commands/playwright/playwright-install
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/usr/bin/env bash
#ddev-generated
# Remove the line above if you don't want this file to be overwritten when you run
# ddev add-on get julienloizelet/ddev-playwright
#
# This file comes from https://github.com/julienloizelet/ddev-playwright
#
## Description: Install playwright in PLAYWRIGHT_TEST_DIR
## Usage: playwright-install --pm [npm|yarn]
## Example: "ddev playwright-install --pm npm"

function display_help() {
echo "Usage: $0 --pm [yarn|npm]"
echo "Example: $0 --pm yarn"
exit 1
}

# Default package manager is not set
PACKAGE_MANAGER=""

while [[ "$#" -gt 0 ]]; do
case $1 in
--pm) PACKAGE_MANAGER="$2"; shift ;;
*) echo "Unknown parameter passed: $1"; display_help ;;
esac
shift
done

# Check if package manager is specified and valid
if [[ -z "$PACKAGE_MANAGER" ]] || ! { [[ "$PACKAGE_MANAGER" == "yarn" ]] || [[ "$PACKAGE_MANAGER" == "npm" ]]; }; then
echo "Warning: Package manager should be specified with --pm and be one of 'yarn' or 'npm'."
echo "Defaulting to yarn"
PACKAGE_MANAGER="yarn"
fi

cd /var/www/html || exit 1
cd "${PLAYWRIGHT_TEST_DIR}" || exit 1

export PLAYWRIGHT_BROWSERS_PATH=0

if [[ $PACKAGE_MANAGER == "npm" ]]; then
npm install
npx playwright install --with-deps
elif [[ $PACKAGE_MANAGER == "yarn" ]]; then
yarn install
yarn playwright install --with-deps
fi

# Conditionally copy an .env file if an example file exists
[ -f .env.example ] && [ ! -f .env ] && cp -n .env.example .env; exit 0
22 changes: 22 additions & 0 deletions .ddev/commands/web/eslint
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env bash

#ddev-generated
## Command provided by https://github.com/ddev/ddev-drupal-contrib
## Description: Run eslint inside the web container
## Usage: eslint [flags] [args]
## Example: "ddev eslint"
## ExecRaw: true

set -eu -o pipefail

if "$DDEV_DOCROOT/core/node_modules/.bin/eslint" --version >/dev/null ; then
# Configure prettier
test -e .prettierrc.json || ln -s $DDEV_DOCROOT/core/.prettierrc.json .
test -e .prettierignore || echo '*.yml' > .prettierignore
# Change directory to the project root folder
cd "$DDEV_DOCROOT/$DRUPAL_PROJECTS_PATH/${DDEV_SITENAME//-/_}" || exit
"$DDEV_COMPOSER_ROOT/$DDEV_DOCROOT/core/node_modules/.bin/eslint" --config="../../../core/.eslintrc.passing.json" --no-error-on-unmatched-pattern --ignore-pattern="*.es6.js" --resolve-plugins-relative-to=$DDEV_COMPOSER_ROOT/$DDEV_DOCROOT/core --ext=.js,.yml . "$@"
else
echo "eslint is not available. You may need to 'ddev exec \"cd $DDEV_DOCROOT/core && yarn install\"'"
exit 1
fi
28 changes: 28 additions & 0 deletions .ddev/commands/web/expand-composer-json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env bash

#ddev-generated
## Command provided by https://github.com/ddev/ddev-drupal-contrib
## Description: Add Drupal core and other needed dependencies.
## Usage: expand-composer-json [flags] [PROJECT_NAME]
## Example: "ddev expand-composer-json ctools"
## ExecRaw: true
## MutagenSync: true

set -eu -o pipefail

# Set the default core version.
export DRUPAL_CORE=${DRUPAL_CORE:-^11}

export _WEB_ROOT=$DDEV_DOCROOT
cd "$DDEV_COMPOSER_ROOT" || exit
curl -fsSL -O https://git.drupalcode.org/project/gitlab_templates/-/raw/default-ref/scripts/expand_composer_json.php
_ddev_drupal_contrib_empty_composer=false
if [[ ! -f composer.json ]]; then
echo "{}" > composer.json
_ddev_drupal_contrib_empty_composer=true
fi
php expand_composer_json.php "$DDEV_SITENAME"
rm -f expand_composer_json.php
if [ "$_ddev_drupal_contrib_empty_composer" = true ]; then
rm -f composer.json
fi
12 changes: 12 additions & 0 deletions .ddev/commands/web/nightwatch
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/usr/bin/env bash

#ddev-generated
## Command provided by https://github.com/ddev/ddev-drupal-contrib
## Description: Run nightwatch inside the web container
## Usage: nightwatch [flags] [args]
## Example: "ddev nightwatch"
## ExecRaw: true

set -eu -o pipefail

yarn --cwd "$DDEV_DOCROOT/core" test:nightwatch "$DDEV_APPROOT/$DDEV_DOCROOT/$DRUPAL_PROJECTS_PATH/" "$@"
17 changes: 17 additions & 0 deletions .ddev/commands/web/phpcbf
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash

#ddev-generated
## Command provided by https://github.com/ddev/ddev-drupal-contrib
## Description: Run phpcbf inside the web container
## Usage: phpcbf [flags] [args]
## Example: "ddev phpcbf" or "ddev phpcbf -n"
## ExecRaw: true

set -eu -o pipefail

if ! command -v phpcbf >/dev/null; then
echo "phpcbf is not available. You may need to 'ddev composer install'"
exit 1
fi
test -e phpcs.xml.dist || curl -fsSL -O https://git.drupalcode.org/project/gitlab_templates/-/raw/default-ref/assets/phpcs.xml.dist
phpcbf -s --report-full --report-summary --report-source $DDEV_DOCROOT/$DRUPAL_PROJECTS_PATH --ignore=*/.ddev/* "$@"
17 changes: 17 additions & 0 deletions .ddev/commands/web/phpcs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash

#ddev-generated
## Command provided by https://github.com/ddev/ddev-drupal-contrib
## Description: Run phpcs inside the web container
## Usage: phpcs [flags] [args]
## Example: "ddev phpcs" or "ddev phpcs -n"
## ExecRaw: true

set -eu -o pipefail

if ! command -v phpcs >/dev/null; then
echo "phpcs is not available. You may need to 'ddev composer install'"
exit 1
fi
test -e phpcs.xml.dist || curl -fsSL -O https://git.drupalcode.org/project/gitlab_templates/-/raw/default-ref/assets/phpcs.xml.dist
phpcs -s --report-full --report-summary --report-source $DDEV_DOCROOT/$DRUPAL_PROJECTS_PATH --ignore=*/.ddev/* "$@"
31 changes: 31 additions & 0 deletions .ddev/commands/web/phpstan
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env bash

#ddev-generated
## Command provided by https://github.com/ddev/ddev-drupal-contrib
## Description: Run phpstan inside the web container
## Usage: phpstan [flags] [args]
## Example: "ddev phpstan" or "ddev phpstan -n"
## ExecRaw: true
## MutagenSync: true

set -eu -o pipefail

if ! command -v phpstan >/dev/null; then
echo "phpstan is not available. You may need to 'ddev poser'"
exit 1
fi
# PHPStan discovers phpstan.neon.dist and phpstan.dist.neon on its own, so only scaffold when neither exists.
if [ -e phpstan.neon ] || { [ ! -e phpstan.neon.dist ] && [ ! -e phpstan.dist.neon ]; }; then
test -e phpstan.neon || curl -fsSL -O https://git.drupalcode.org/project/gitlab_templates/-/raw/default-ref/assets/phpstan.neon
# See https://git.drupalcode.org/project/gitlab_templates/-/commit/a107b7f1f79af12e0b09f70be47b68e3f69b4504
sed -i 's/BASELINE_PLACEHOLDER/phpstan-baseline.neon/g' phpstan.neon
# Add an empty baseline file to ensure it exists.
test -e phpstan-baseline.neon || touch phpstan-baseline.neon
fi

EXTENSION_DIRECTORY=$DDEV_DOCROOT/$DRUPAL_PROJECTS_PATH/${DDEV_SITENAME//-/_}
cd "$EXTENSION_DIRECTORY" || exit 1
# Ensure PHPStan configuration is symlinked from project root.
ln -s $DDEV_DOCROOT/phpstan.neon 2>/dev/null || true
ln -s $DDEV_DOCROOT/phpstan-baseline.neon 2>/dev/null || true
phpstan analyze . "$@"
33 changes: 33 additions & 0 deletions .ddev/commands/web/phpunit
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env bash

#ddev-generated
## Command provided by https://github.com/ddev/ddev-drupal-contrib
## Description: Run phpunit inside the web container
## Usage: phpunit [flags] [args]
## Example: "ddev phpunit" or "ddev phpunit --stop-on-failure"
## Example: "ddev phpunit web/modules/custom/mymodule/tests/src/Unit/MyTest.php"
## Example: "ddev phpunit --filter testMyFunction"
## ExecRaw: true

set -eu -o pipefail

if ! command -v phpunit >/dev/null; then
echo "phpunit is not available. You may need to 'ddev composer install'"
exit 1
fi

# CHECK for local config.
if [ -f "phpunit.xml" ]; then
# Defer to local config
phpunit "$@"
else
# Check if we are running a specific test or test folder.
if [ $# -gt 0 ] && [ -e "$1" ]; then
TEST_PATH="$1"
shift
phpunit --bootstrap $PWD/$DDEV_DOCROOT/core/tests/bootstrap.php "$TEST_PATH" "$@"
else
# Run all custom module tests.
phpunit --bootstrap $PWD/$DDEV_DOCROOT/core/tests/bootstrap.php $DDEV_DOCROOT/$DRUPAL_PROJECTS_PATH "$@"
fi
fi
18 changes: 18 additions & 0 deletions .ddev/commands/web/poser
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/usr/bin/env bash

#ddev-generated
## Command provided by https://github.com/ddev/ddev-drupal-contrib
## Description: Expand composer.json and run composer update.
## Usage: poser [flags] [args]
## Example: "ddev poser" or "ddev poser --prefer-source" or "ddev poser --prefer-lowest --prefer-stable"
## ExecRaw: true
## MutagenSync: true

set -eu -o pipefail

export COMPOSER=composer.contrib.json
.ddev/commands/web/expand-composer-json
composer update "$@"
# The -f flag suppresses errors if lock file does not exist.
rm -f composer.contrib.json composer.contrib.lock
touch $DDEV_DOCROOT/core/.env
21 changes: 21 additions & 0 deletions .ddev/commands/web/stylelint
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env bash

#ddev-generated
## Command provided by https://github.com/ddev/ddev-drupal-contrib
## Description: Run stylelint inside the web container
## Usage: stylelint [flags] [args]
## Example: "ddev stylelint"
## ExecRaw: true

set -eu -o pipefail

if "$DDEV_DOCROOT/core/node_modules/.bin/stylelint" --version >/dev/null ; then
# Configure prettier
test -e .prettierrc.json || ln -s $DDEV_DOCROOT/core/.prettierrc.json .
# Change directory to the project root folder
cd "$DDEV_DOCROOT/$DRUPAL_PROJECTS_PATH/${DDEV_SITENAME//-/_}" || exit
"$DDEV_COMPOSER_ROOT/$DDEV_DOCROOT/core/node_modules/.bin/stylelint" --color --config "$DDEV_COMPOSER_ROOT/$DDEV_DOCROOT/core/.stylelintrc.json" "./**/*.css" "$@"
else
echo "stylelint is not available. You may need to 'ddev exec \"cd $DDEV_DOCROOT/core && yarn install\"'"
exit 1
fi
32 changes: 32 additions & 0 deletions .ddev/commands/web/symlink-project
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env bash

#ddev-generated
## Command provided by https://github.com/ddev/ddev-drupal-contrib
## Description: Symlink project files into the configured location (defaults to `web/modules/custom/[PROJECT_NAME]`)
## Usage: symlink-project [flags] [args]
## Example: "ddev symlink-project"
## ExecRaw: true

set -eu -o pipefail

export _WEB_ROOT=$DDEV_DOCROOT
cd "$DDEV_COMPOSER_ROOT" || exit
curl -fsSL -O https://git.drupalcode.org/project/gitlab_templates/-/raw/default-ref/scripts/symlink_project.php

if [ -z "${PROJECT_FILES-}" ]; then
# Suppress a warning.
PROJECT_FILES=$(ls -A --ignore="$DDEV_DOCROOT" --ignore="vendor" --ignore="symlink_project.php" --ignore=".ddev" --ignore=".idea" --ignore=".claude")
export PROJECT_FILES
fi

# Symlink name using underscores.
# @see https://www.drupal.org/docs/develop/creating-modules/naming-and-placing-your-drupal-module
# DRUPAL_PROJECT_FOLDER is used by the symlink-project script in gitlab_templates
export DRUPAL_PROJECT_FOLDER=${DDEV_DOCROOT}/${DRUPAL_PROJECTS_PATH}/${DDEV_SITENAME//-/_}
php symlink_project.php
rm -f symlink_project.php

# Ignore generated Drupal paths, unless the project already manages its own .gitignore.
if [ ! -e .gitignore ]; then
printf "/vendor/\n/$DDEV_DOCROOT/\n" > .gitignore
fi
Loading
Loading