Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
e6a5f70
chore(deps-dev): bump lint-staged from 17.0.7 to 17.0.8
dependabot[bot] Jun 22, 2026
7485262
Merge pull request #343 from emulsify-ds/dependabot/npm_and_yarn/lint…
callinmullaney Jun 22, 2026
20b9637
chore(deps-dev): bump @commitlint/cli from 21.0.2 to 21.1.0
dependabot[bot] Jun 24, 2026
bd8c947
chore(deps-dev): bump @commitlint/config-conventional
dependabot[bot] Jun 24, 2026
d8a5744
chore(deps-dev): bump @types/node from 26.0.0 to 26.0.1
dependabot[bot] Jun 25, 2026
b5316fd
feat(platform): add WordPress support
Jun 28, 2026
113030f
Merge pull request #344 from emulsify-ds/dependabot/npm_and_yarn/comm…
callinmullaney Jun 28, 2026
02e2347
Merge pull request #345 from emulsify-ds/dependabot/npm_and_yarn/comm…
callinmullaney Jun 28, 2026
6f4a96b
Merge pull request #346 from emulsify-ds/dependabot/npm_and_yarn/type…
callinmullaney Jun 28, 2026
41fd6f8
build(deps): update dependencies and audit fixes
Jul 4, 2026
792c7cf
fix(package): remove nested dependencies from CLI tarball
Jul 20, 2026
1734e83
ci(release): verify CLI package and release calculation
Jul 20, 2026
767aeef
feat(audit): delegate project audits to Emulsify Core
Jul 20, 2026
e8a52ee
feat(cache): key the cache by repository and add cache clear
Aug 29, 2026
9347041
fix(system): validate cached system configuration on the read path
Aug 29, 2026
0e65b0b
fix(fs): terminate the parent directory walk at the filesystem root
Aug 29, 2026
c324a10
ci(workflows): run unit tests on ubuntu, macos, and windows
Aug 29, 2026
4d75903
test(e2e): add an end-to-end fixture suite for the built CLI
Aug 30, 2026
1749e7c
test(e2e): report known failures as conditional todos
Aug 30, 2026
d5c0ca1
chore: project dependency updates
Aug 30, 2026
6c7d029
test(audit): make fixtures portable on Windows
Aug 30, 2026
3ebd160
fix(cache): bound the remote ref lookup used for cache reuse
Aug 30, 2026
979a4c2
fix(system): resolve the system install hook against a directory
Aug 30, 2026
0ae6cb5
fix(component): exit non-zero when a requested component fails to ins…
Aug 30, 2026
fa4ef96
test(e2e): assert the previously known-failing CLI behaviors
Aug 30, 2026
d92a3ea
ci(release): enable npm provenance and pin workflow actions
Aug 30, 2026
d958e18
docs: add contributor, security, and issue templates
Aug 30, 2026
ac159e3
chore(tooling): correct the lint, husky, and lint-staged configuration
Aug 30, 2026
bd0243e
fix(system): require repository and checkout options together
Aug 30, 2026
a4c9832
fix(cli): remove the unused global checkout option and correct instal…
Aug 30, 2026
d2cc8bf
fix(cache): make concurrent cache population safe
Aug 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
14 changes: 14 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
root = true

[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
insert_final_newline = true
max_line_length = 80
quote_type = single
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# TODO(codeowners): Add a catch-all rule using the GitHub users or teams
# supplied by the maintainers. No owner is assigned until then.
52 changes: 52 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Bug report
description: Report reproducible Emulsify CLI behavior that differs from the documentation
labels:
- '🐛 Bug'
body:
- type: markdown
attributes:
value: |
Thanks for helping improve Emulsify CLI. Search existing issues before filing a duplicate.

**Do not report vulnerabilities here.** Follow the repository's [security policy](https://github.com/emulsify-ds/emulsify-cli/security/policy) so sensitive details remain private.
- type: textarea
id: observed-behavior
attributes:
label: Observed behavior
description: What did the CLI do, including the exact error or unexpected result?
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Reproduction
description: Include the exact command and the smallest project or configuration needed to reproduce the problem.
placeholder: |
1. Run `emulsify ...`
2. ...
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behavior
description: What should have happened instead?
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment
description: Include Emulsify CLI version, Node.js version, operating system, and project platform.
placeholder: |
Emulsify CLI: output of `emulsify --version`
Node.js: output of `node --version`
Operating system:
Project platform: drupal, wordpress, or none
validations:
required: true
- type: textarea
id: context
attributes:
label: Additional context
description: Add relevant redacted logs or configuration. Do not include credentials, tokens, or other secrets.
44 changes: 44 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Feature request
description: Propose an improvement to an Emulsify CLI workflow
labels:
- '🪄 Enhancement'
body:
- type: markdown
attributes:
value: Thanks for suggesting an improvement. Describe the user workflow before proposing implementation details.
- type: textarea
id: workflow
attributes:
label: Workflow or problem
description: What are you trying to accomplish, and what makes it difficult today?
validations:
required: true
- type: textarea
id: proposed-behavior
attributes:
label: Proposed CLI behavior
description: Describe the command, option, output, or configuration behavior you want.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives or current workaround
description: How do you handle this workflow now, and what alternatives have you considered?
- type: checkboxes
id: platforms
attributes:
label: Affected platforms
description: Select every platform this request affects.
options:
- label: Drupal
- label: WordPress
- label: No-platform projects (`none`)
- label: Platform-independent CLI behavior
validations:
required: true
- type: textarea
id: context
attributes:
label: Additional context
description: Add examples, command sketches, or configuration excerpts that clarify the request.
34 changes: 34 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Pull Request

> **Title requirement:** Every pull request targeting `main` must have a
> release-producing conventional title whose release type matches the complete
> change, such as `fix(scope): ...` or `feat(scope): ...`. CI evaluates the
> title as a prospective squash commit; if squash merging is used, the title
> becomes the release-bearing commit.

## Summary

<!-- What changed, and why is this the right change for Emulsify CLI? -->

## Related Issue

<!-- Use "Closes #123" when this pull request should close an issue. -->

## Verification

<!-- Check the commands you ran. Explain any omitted step below. -->

- [ ] `npm run build`
- [ ] `npm run type`
- [ ] `npm test`
- [ ] `npm run pack:dry-run`
- [ ] `npm run smoke:pack`

<!-- Add manual checks or explain why a command was not applicable. -->

## Checklist

- [ ] I added or updated tests for behavior changes.
- [ ] I updated documentation for user-facing changes.
- [ ] I did not manually change the package version; the release workflow owns
it.
4 changes: 4 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,7 @@ updates:
directory: '/'
schedule:
interval: daily
- package-ecosystem: github-actions
directory: '/'
schedule:
interval: weekly
57 changes: 47 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,70 @@ name: CI

on:
pull_request:
branches: [develop, main]
push:
branches: [develop, main]

permissions:
contents: read

jobs:
validate:
name: Validate
runs-on: ubuntu-latest
unit:
name: Unit (${{ matrix.os }})
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
with:
fetch-depth: 0
- name: Install Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: '24.x'
node-version-file: '.nvmrc'
cache: npm
- name: Install
run: npm ci
- name: Build
run: npm run build
- name: Typecheck
run: npm run type
- name: Test
run: npm test
- name: Pack
run: npm pack --dry-run
- name: Unit tests
run: npm run test:unit
- name: Release tests
run: npm run test:release
- name: End-to-end tests
run: npm run test:e2e

package:
name: Package
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
with:
fetch-depth: 0
- name: Install Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: '.nvmrc'
cache: npm
- name: Install
run: npm ci
- name: Build
run: npm run build
- name: Verify package contents
run: npm run pack:dry-run
- name: Smoke test packed install
run: npm run smoke:pack
- name: Verify release calculation
if: github.event_name == 'pull_request' && github.base_ref == 'main'
env:
RELEASE_FROM: ${{ github.event.pull_request.base.sha }}
RELEASE_TO: HEAD
RELEASE_SQUASH_MESSAGE: ${{ github.event.pull_request.title }}
run: npm run release:analyze
23 changes: 0 additions & 23 deletions .github/workflows/contributors.yml

This file was deleted.

40 changes: 33 additions & 7 deletions .github/workflows/develop-version-bump.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:

permissions:
contents: write
pull-requests: write

concurrency:
group: develop-version-bump
Expand All @@ -19,29 +20,54 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
with:
fetch-depth: 0
- name: Install Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: '24.x'
node-version-file: '.nvmrc'
cache: 'npm'
- name: Install
run: npm ci
- name: Update version from semantic commits
run: npm run version:develop -- "${{ github.event.before }}" "${{ github.sha }}"
- name: Commit package version
run: npm run version:develop -- "origin/main" "${{ github.sha }}"
- name: Open package version pull request
env:
GH_TOKEN: ${{ github.token }}
run: |
if git diff --quiet -- package.json package-lock.json; then
echo "No package version changes to commit."
exit 0
fi

NEXT_VERSION="$(node -p "require('./package.json').version")"
BUMP_BRANCH="chore/develop-version-bump"
PR_TITLE="chore(release): bump version to ${NEXT_VERSION}"
PR_BODY="Updates package metadata to ${NEXT_VERSION} after semantic commits landed on develop.

Triggering commit: ${{ github.sha }}"

git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git switch -c "${BUMP_BRANCH}"
git add package.json package-lock.json
git commit -m "chore(release): bump version to ${NEXT_VERSION} [skip ci]"
git push origin HEAD:develop
git commit -m "${PR_TITLE}"
git push --force-with-lease origin HEAD:"${BUMP_BRANCH}"

EXISTING_PR="$(
gh pr list \
--base develop \
--head "${BUMP_BRANCH}" \
--state open \
--json number \
--jq '.[0].number // empty'
)"

if [ -n "${EXISTING_PR}" ]; then
gh pr edit "${EXISTING_PR}" --title "${PR_TITLE}" --body "${PR_BODY}"
echo "Updated version bump PR #${EXISTING_PR}."
exit 0
fi

gh pr create --base develop --head "${BUMP_BRANCH}" --title "${PR_TITLE}" --body "${PR_BODY}"
Loading
Loading