Use this checklist before publishing an Emulsify Drupal 7.x minor release.
- Confirm the current published version on GitHub, Drupal.org, and Packagist.
- Run
composer validate --no-check-publish. - Run
npm ci --ignore-scripts. - Run
npm audit --omit=dev. - Run
npm audit. - Run
npm run lint:php. - Run
npm run docs:check-commandsafter documentation command example changes. - Run
npm run release:check. - Run
npm run release:check -- --skip-smokeafter any release-guard edits.
- Confirm
composer.json,emulsify.info.yml,whisk/whisk.info.yml, andwhisk/whisk.info.emulsify.ymldescribe the same Drupal core and Emulsify Tools compatibility. - Confirm local README and upgrade notes describe the current Emulsify Drupal parent theme workflow, Drupal 11.3+ and Drupal 12 forward compatibility, Node.js 24 tooling, and favicon package deployment expectations.
- Confirm
whiskremains generation-only starterkit source and generated child themes keepemulsifyas their runtime parent theme. - Confirm generated themes retain
project.emulsify.json. - Confirm favicon defaults, install config, schema, and
FaviconSettings::DEFAULTSremain in sync. - Confirm release automation still emits non-prefixed SemVer tags and has
npmPublish: false.
- Pull requests run Composer validation,
npm ci --ignore-scripts, runtime and full npm audits, PHP linting, static release checks, template parity, parent-theme render smoke, favicon smoke with GD and Imagick, and generated starterkit build/test smoke. - The semantic-release workflow runs a blocking release-readiness job before publishing from
main. That job repeats Composer validation, clean npm install, audits, PHP linting, static release checks, and fullnpm run release:checksmoke coverage with GD and Imagick. - Scheduled and manual Theme Readiness runs include extended generated child-theme Storybook and accessibility checks using
npm run storybook-buildandnpm run a11y.
Semantic Release publishes only from main with the Angular conventional-commit preset. Use commit types intentionally:
feat:produces a minor release.fix:andperf:produce a patch release.docs:,test:,chore:,ci:, and merge commits without a release-triggering conventional subject do not produce a release by themselves.type!:headers orBREAKING CHANGEfooters produce a major release and should not be used for a 7.x minor unless maintainers are intentionally preparing the next major line.
Run npm run publish-test -- --no-ci before release. On non-main branches, this should load the release configuration but report that no version will be published because release.config.js only publishes from main. To predict the eventual version, review commits since the latest tag with the configured analyzer. If the commits after 7.0.0 remain fixes, docs, tests, and internal chores, Semantic Release will produce a patch release, not 7.1.0.
For an intentional 7.1.0, land a legitimate backward-compatible feature as a real feat: commit before merging to main, or document and follow an explicit manual release process. Do not label fixes, tests, metadata cleanup, or documentation-only work as feat: just to force a minor version.
- Review license metadata before release.
LICENSE,package.json, andwhisk/package.jsonnow identify the npm-side project and generated starter metadata asGPL-3.0-only;composer.json, Packagist, and Drupal.org still identify the Composer package asGPL-2.0-only. Maintainers should make an explicit legal/release decision before changing either the Composer/Drupal.org metadata or the repository license file. - Copy final GitHub release notes into Drupal.org release notes and mark the release supported or recommended as appropriate.