Skip to main content

gitlab ci drupal template

Drupal CI: drupal-master Component (Authoritative)

Status: Production
Owner: Agent platform CI; single source of truth for all Drupal module/theme/recipe pipelines.
Component: gitlab_componentsdrupal-master
Wiki: /Volumes/AgentPlatform/applications/wikis (this file + gitlab_components.wiki/components/drupal-master.md)


Overview

All Drupal projects use one GitLab CI component: drupal-master. One include in .gitlab-ci.yml provides:

  • Lint: PHP syntax, composer validate, *.info.yml validation
  • Quality: PHPCS (Drupal/DrupalPractice), optional PHPStan
  • Test: Install test (fresh Drupal, enable module, validate services/config, uninstall)
  • Package: Composer package → GitLab Package Registry (all projects)
  • Release: Branch sync and/or tag push to git.drupalcode.org (drupal.org projects only)

Two modes:

  1. GitLab-only – No drupal.org; lint, quality, test, Composer package on GitLab.com.
  2. drupal.org – Same plus sync to git.drupalcode.org (branch on push to release_branch, tag on tag push).

Component Reference


Standard .gitlab-ci.yml

GitLab-only (no drupal.org)

include: - component: $CI_SERVER_FQDN/blueflyio/gitlab_components/drupal-master@release/v0.1.x inputs: php_version: "8.3" drupal_core: "11" phpcs_enabled: "true" composer_package: "true" enable_drupalorg: "false"

drupal.org (branch sync + tag release)

include: - component: $CI_SERVER_FQDN/blueflyio/gitlab_components/drupal-master@release/v0.1.x inputs: php_version: "8.3" drupal_core: "11" phpcs_enabled: "true" composer_package: "true" enable_drupalorg: "true" drupal_project: "PROJECT_MACHINE_NAME" release_branch: "release/v0.1.x" drupalorg_sync_branch: "true"

Replace PROJECT_MACHINE_NAME with the drupal.org project name (e.g. api_normalization).


Required CI Variable (drupal.org only)

For projects with enable_drupalorg: "true" the release job pushes to git.drupalcode.org and requires:

VariableTypeDescription
DEPLOY_DRUPALORG_TOKENVariable (masked)drupal.org project access token with write_repository

Without it, the release:drupalorg job fails with instructions to set the variable.


Key Inputs (summary)

InputDefaultDescription
php_version"8.3"PHP version for all jobs
drupal_core"11"Drupal core major (10 or 11)
phpcs_enabled"true"Run PHPCS
composer_package"true"Publish Composer package to GitLab
enable_drupalorg"false"Enable push to git.drupalcode.org
drupal_project""drupal.org project machine name (required if enable_drupalorg)
release_branch"main"Branch to sync/push (set to release/v0.1.x for platform)
drupalorg_sync_branch"true"On push to release_branch, sync that branch to drupalcode.org
install_test"true"Install on fresh Drupal, validate, uninstall
docs_enabled"false"MkDocs → GitLab Pages
docs_versioning"false"Use mike for versioned docs
docs_version_name""Version name for mike

Full list: gitlab_components repo templates/drupal-master/template.yml (spec.inputs).


Projects Using drupal-master

All 24 custom modules use drupal-master. Consistency: same component ref, same branch release/v0.1.x where applicable.

GitLab-only (no drupal.org)

ModuleNotes
ai_agents_communication
ai_agents_orchestra
ai_provider_apple
ai_provider_langchain
apidog_integration
blockchain_manager

drupal.org (branch sync + tag release)

Moduledrupal_projectrelease_branch
api_normalizationapi_normalizationrelease/v0.1.x
agentic_canvas_blocksagentic_canvas_blocksrelease/v0.1.x
ai_agents_claudeai_agents_clauderelease/v0.1.x
ai_agents_clientai_agents_clientrelease/v0.1.x
ai_agents_crewaiai_agents_crewairelease/v0.1.x
ai_agents_cursorai_agents_cursorrelease/v0.1.x
ai_agents_huggingfaceai_agents_huggingfacerelease/v0.1.x
ai_agents_kagentai_agents_kagentrelease/v0.1.x
ai_agents_ossaai_agents_ossarelease/v0.1.x
alternative_servicesalternative_servicesrelease/v0.1.x
cedar_policycedar_policyrelease/v0.1.x
code_executorcode_executorrelease/v0.1.x
dita_ccmsdita_ccmsrelease/v0.1.x
drupal_patch_frameworkdrupal_patch_frameworkrelease/v0.1.x
external_migrationexternal_migrationrelease/v0.1.x
layout_system_converterlayout_system_converterrelease/v0.1.x
mcp_registrymcp_registryrelease/v0.1.x
recipe_onboardingrecipe_onboardingrelease/v0.1.x

Pipeline Flow

  1. Lint – php-lint, composer-validate, info-yml-validate
  2. Quality – phpcs (optional phpstan)
  3. Test – install-test (fresh Drupal, enable, validate services/config, uninstall)
  4. Package – composer-package (GitLab Package Registry)
  5. Release (if enable_drupalorg) – release:drupalorg runs after quality (needs: phpcs); syncs branch on push to release_branch, pushes tag on tag push.

Release job does not wait for install-test; it runs once quality passes so drupalcode.org stays in sync even if install-test fails.


Verification

  • GitLab pipelines: https://gitlab.com/blueflyio/agent-platform/drupal/<project>/-/pipelines
  • drupalcode.org pipelines: https://git.drupalcode.org/project/<project>/-/pipelines
  • After a successful push to release/v0.1.x, drupalcode.org should show a new pipeline for that branch (if DEPLOY_DRUPALORG_TOKEN is set).

Adding a New Drupal Project

  1. Create .gitlab-ci.yml with one include (GitLab-only or drupal.org block above).
  2. For drupal.org: set drupal_project, release_branch, drupalorg_sync_branch, and add DEPLOY_DRUPALORG_TOKEN in project CI/CD variables.
  3. Push to release/v0.1.x (or your release_branch); pipeline runs and, for drupal.org, syncs to git.drupalcode.org.