-
-
Notifications
You must be signed in to change notification settings - Fork 34
Blog: Running DDEV in CI with WarpBuild #515
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| --- | ||
| name: Andrew Berry | ||
| firstName: Andrew | ||
| avatarUrl: https://2.gravatar.com/avatar/fa4256320a36792e419f7d315048707e57234cdca897102467bf1564833c5ff4?s=96&d=mm&r=g | ||
| --- | ||
|
|
||
| Andrew loves nerding about tech and building things with code. He's the VP of Technology at Lullabot and a member of the DDEV Board of Directors. |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,108 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| title: "Using WarpBuild to speed up DDEV in CI" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| pubDate: 2026-01-01 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| modifiedDate: 2026-01-03 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+3
to
+4
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These need bumping before publishing. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| modifiedComment: "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| summary: Use WarpBuild to speed up DDEV in CI. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| author: Andrew Berry | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| featureImage: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| src: /img/blog/2026/01/warp-speed-ci.jpg | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| srcDark: /img/blog/2026/01/warp-speed-ci.jpg | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| alt: Warp Speed CI | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| caption: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| credit: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| categories: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - DevOps | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Performance | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| For most developers, DDEV solves a common challenge: making sure that each developer as a consistent, stable local environment for building their web application. At Lullabot, as we had more and more success with DDEV, another related issue kept coming up: how do we grow and develop our use of continuous integration and automated testing while avoiding similar challenges? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
"how do we grow and develop our use of continuous integration and automated testing while avoiding similar challenges" seems pretty vague, can you make that stronger?
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| For most developers, DDEV solves a common challenge: making sure that each developer as a consistent, stable local environment for building their web application. At Lullabot, as we had more and more success with DDEV, another related issue kept coming up: how do we grow and develop our use of continuous integration and automated testing while avoiding similar challenges? | |
| For most developers, DDEV solves a common challenge: making sure that each developer has a consistent, stable local environment for building their web application. At Lullabot, as we had more and more success with DDEV, another related issue kept coming up: how do we grow and develop our use of continuous integration and automated testing while avoiding similar challenges? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| A typical CI/CD pipeline is implemented using the tools and systems provided by the CI service itself. For example, at a basic level you can place shell commands inside configuration files to run tests and tools. Running those commands locally in DDEV is possible, but it's a painful copypaste process. If you're a back-end or DevOps engineer, odds are high you've wasted hours trying to figure out why a test you wrote locally isn't passing in CI – or vice versa! | |
| A typical CI/CD pipeline is implemented using the tools and systems provided by the CI service itself. For example, at a basic level you can place shell commands inside configuration files to run tests and tools. Running those commands locally in DDEV is possible, but it's a painful copy/paste process. If you're a back-end or DevOps engineer, odds are high you've wasted hours trying to figure out why a test you wrote locally isn't passing in CI – or vice versa! |
Copilot
AI
Jan 20, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's a grammatical error. The sentence "Running those commands locally in DDEV is possible, but it's a painful copypaste process" uses "copypaste" which should be "copy-paste" (hyphenated) or "copy and paste" to be grammatically correct.
| A typical CI/CD pipeline is implemented using the tools and systems provided by the CI service itself. For example, at a basic level you can place shell commands inside configuration files to run tests and tools. Running those commands locally in DDEV is possible, but it's a painful copypaste process. If you're a back-end or DevOps engineer, odds are high you've wasted hours trying to figure out why a test you wrote locally isn't passing in CI – or vice versa! | |
| A typical CI/CD pipeline is implemented using the tools and systems provided by the CI service itself. For example, at a basic level you can place shell commands inside configuration files to run tests and tools. Running those commands locally in DDEV is possible, but it's a painful copy-paste process. If you're a back-end or DevOps engineer, odds are high you've wasted hours trying to figure out why a test you wrote locally isn't passing in CI – or vice versa! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| Luckily, based on our experience building [Tugboat](https://tugboatqa.com/), we knew that the technology to improve startup performance existed. When [WarpBuild](https://www.warpbuild.com/) was announced with Snapshot support in 2024, we immediately started testing it out. Our theory was that Snapshots would be fast enough to create and restore that we'd see significant improvements in startup time. Let's show how we set it up! | |
| Luckily, based on our experience building [Tugboat](https://tugboatqa.com/), we knew that the technology to improve startup performance existed. When [WarpBuild](https://www.warpbuild.com/) was announced with Snapshot support in 2024, we immediately started testing it out. We theorized that the performance improvement of snapshots would result in significant startup time improvement. Here's how we set it up! |
Copilot
AI
Jan 20, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's a potential confusion in the workflow logic. The runs-on configuration at line 46 references "inputs.snapshot", but the "Determine Snapshot Base" step that creates this value doesn't run until later (lines 61-68). In GitHub Actions, the runs-on selector is evaluated before any steps run. This suggests either: (1) this should be a reusable workflow where "inputs.snapshot" is a workflow input, or (2) the code snippets are shown out of order, or (3) there's a logic error. Consider clarifying how the snapshot value is provided to the runs-on selector, perhaps by explaining this needs to be in a separate job or by showing the complete workflow structure.
| - name: Determine Snapshot Base | |
| id: snapshot-base | |
| run: | | |
| set -x | |
| hash=$(cat .github/actions/ddev/action.yml test/playwright/.yarnrc.yml test/playwright/yarn.lock | md5sum | cut -c 1-8) | |
| echo "snapshot=$hash" >> $GITHUB_OUTPUT | |
| shell: bash | |
| jobs: | |
| snapshot-base: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| snapshot: ${{ steps.snapshot-base.outputs.snapshot }} | |
| steps: | |
| - name: Determine Snapshot Base | |
| id: snapshot-base | |
| run: | | |
| set -x | |
| hash=$(cat .github/actions/ddev/action.yml test/playwright/.yarnrc.yml test/playwright/yarn.lock | md5sum | cut -c 1-8) | |
| echo "snapshot=$hash" >> $GITHUB_OUTPUT | |
| shell: bash | |
| playwright-tests: | |
| needs: snapshot-base | |
| uses: ./.github/workflows/playwright-tests.yml | |
| with: | |
| snapshot: ${{ needs.snapshot-base.outputs.snapshot }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems to be indented to become part of 5, but I think it ends up looking wrong (and overlooked by the reader) as a result. Maybe put it above the code?
Copilot
AI
Jan 20, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's a typo in "copypaste" which should be "copy-paste" (hyphenated) or "copy and paste" for readability.
| We don't pin actions to hashes in these examples for easy copypaste, but for security we always [use Renovate to pin hashes for us](https://docs.renovatebot.com/modules/manager/github-actions/#digest-pinning-and-updating). | |
| We don't pin actions to hashes in these examples for easy copy-paste, but for security we always [use Renovate to pin hashes for us](https://docs.renovatebot.com/modules/manager/github-actions/#digest-pinning-and-updating). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The removal of the "Resources" category from the README appears to be an unrelated cleanup change that is not mentioned in the PR description. While this may be a valid cleanup if the category is indeed unused, it would be better to either include this change in a separate PR or document it in the PR description to explain why this category is being removed.