https://github.com/10up/pantheon-wp-deploy-action
A GitHub Action to Deploy WordPress sites to Pantheon.
https://github.com/10up/pantheon-wp-deploy-action
Last synced: 5 months ago
JSON representation
A GitHub Action to Deploy WordPress sites to Pantheon.
- Host: GitHub
- URL: https://github.com/10up/pantheon-wp-deploy-action
- Owner: 10up
- License: gpl-3.0
- Created: 2024-04-16T21:11:47.000Z (over 1 year ago)
- Default Branch: trunk
- Last Pushed: 2025-07-31T20:50:42.000Z (5 months ago)
- Last Synced: 2025-07-31T23:24:55.399Z (5 months ago)
- Language: Shell
- Homepage:
- Size: 43 KB
- Stars: 7
- Watchers: 11
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Pantheon WordPress Deploy Action
> Deploy WordPress sites to Pantheon
[](#support-level) [](https://github.com/10up/pantheon-wp-deploy-action/releases/latest) [](https://github.com/10up/pantheon-wp-deploy-action/blob/trunk/LICENSE) [](https://github.com/10up/pantheon-wp-deploy-action/actions/workflows/test.yml)
[Pantheon](https://pantheon.io/product/wordpress-hosting) has its own deployment workflow called "WebOps" which is based around a unique, git-driven infrastructure. All environments on Pantheon are version-controlled with git, this includes WordPress core, plugins, themes, etc. Pantheon's `master` branch is tied to the `Dev` environment, from there you need to manually(from the dashboard or via the Terminus CLI) promote the content to Pantheon's `Test` environment and ultimately to the `Live` site which is the production environment. At 10up, the code in the git's main branch is production ready(preprod and production environments only) therefore our preferred deployment workflow for Github + Pantheon sites is:
* Use Pantheon multidev environments for the project's lower environments(dev, staging, etc.) and create a Github branch with the same name as the multidev environment to automatically deploy to them
* The Github main branch deploys to the Pantheon's `Dev` environment but automatically promotes the code to the Pantheon `Test` environment
* We use the Pantheon's `Test` environment as our preprod environment
* Once the changes have been tested we promote the code in the `Test` environment to `Live`
# Requirements
* The `Development Mode` must to be set as `Git` in the dashboard
* This Github action expects a payload/artifact containing a fully built WordPress site with the following structure:
* WordPress root files at the top level. e.g. `pantheon.yml`, `wp-config.php`, etc
* Plugins, MU Plugins, drop-in plugins, Themes, `vendor` directory and everything that should go inside the `wp-content` directory(excluding the `uploads` directory) in a folder with the same name
* Install the [Pantheon MU Plugin](https://github.com/pantheon-systems/pantheon-mu-plugin) in inside the `wp-content/mu-plugins` directory
# Inputs
| Name | Required | Description |
| --- | --- | --- |
| `pantheon_git_url` | True | Pantheon's Git URL |
| `multidev_env_name` | False | Pantheon's multidev environment name. If set, the Github action will deploy to a multidev environment with the same name. This input is ignored on actions executed from the main branch |
| `working_dir` | False | Directory containing the WordPress built site |
| `site_name` | False | Pantheon's site name |
| `terminus_token` | False | Token to authenticate with the Terminus CLI. See instructions to generate machine tokens [here](https://docs.pantheon.io/machine-tokens) |
| `ssh_private_key` | True | Private SSH Key to access the Pantheon's repository. The public key must be added to Pantheon, see instructions [here](https://docs.pantheon.io/ssh-keys) |
| `wordpress_version` | True | WordPress core version to fetch into the site from Pantheon's upstream before deploying to Pantheon |
| `root_files` | False | Files to copy in the WordPress root directory. e.g. `pantheon.yml`, `wp-config.php`, etc |
| `git_user_name` | False | GIT user name needed to pull and push to the Pantheon's repository |
| `git_user_email` | False | GIT user email address needed to pull and push to the Pantheon's repository |
| `promote_test_to_live` | False | Backups Pantheon Live site and promotes Test to Live. If this value is set to `yes`(must be an exact match) the action will only backup the Live site, promote Test to Live and then exits; all other steps will be ignored. This input is applied on actions executed from the main branch only. The workflow **must** use `workflow_dispatch` as trigger in order to manually execute this action |
# Examples
## Deploy to a multidev environment
This example assumes the WordPress site has been previously built inside the `payload` directory following the structure described [here](#requirements)
```yaml
name: Deploy
on:
push:
branches:
- staging
jobs:
deploy:
name: Deploy built site to Pantheon
runs-on: ubuntu-latest
steps:
# Fetch previously built site.
- name: Fetch artifact
uses: actions/cache@v3
with:
path: payload
key: ${{ github.sha }}
# Deploy to Pantheon
- name: Deploy to Pantheon
uses: 10up/pantheon-wp-deploy-action@v1
with:
pantheon_git_url: "${{ secrets.PANTHEON_GIT_URL }}"
multidev_env_name: "staging"
ssh_private_key: "${{ secrets.PRIVATE_KEY }}"
wordpress_version: "6.4.3"
working_dir: "./payload"
root_files: "pantheon.yml wp-config.php"
```
## Deploy to Pantheon's Dev environment and automatically promotes Dev to Test
This example assumes the WordPress site has been previously built inside the `payload` directory following the structure described [here](#requirements)
```yaml
name: Deploy
on:
push:
branches:
- trunk
jobs:
deploy:
name: Deploy built site to Pantheon
runs-on: ubuntu-latest
steps:
# Fetch previously built site.
- name: Fetch artifact
uses: actions/cache@v3
with:
path: payload
key: ${{ github.sha }}
# Deploy to Pantheon
- name: Deploy to Pantheon
uses: 10up/pantheon-wp-deploy-action@v1
with:
pantheon_git_url: "${{ secrets.PANTHEON_GIT_URL }}"
ssh_private_key: "${{ secrets.PRIVATE_KEY }}"
terminus_token: "${{ secrets.TERMINUS_TOKEN }}"
site_name: "my-pantheon-site"
wordpress_version: "6.4.3"
working_dir: "./payload"
root_files: "pantheon.yml wp-config.php"
```
## Deploy to Pantheon's Dev environment only (not recommended)
This example assumes the WordPress site has been previously built inside the `payload` directory following the structure described [here](#requirements)
```yaml
name: Deploy
on:
push:
branches:
- trunk
jobs:
deploy:
name: Deploy built site to Pantheon
runs-on: ubuntu-latest
steps:
# Fetch previously built site.
- name: Fetch artifact
uses: actions/cache@v3
with:
path: payload
key: ${{ github.sha }}
# Deploy to Pantheon
- name: Deploy to Pantheon
uses: 10up/pantheon-wp-deploy-action@v1
with:
pantheon_git_url: "${{ secrets.PANTHEON_GIT_URL }}"
ssh_private_key: "${{ secrets.PRIVATE_KEY }}"
site_name: "my-pantheon-site"
wordpress_version: "6.4.3"
working_dir: "./payload"
root_files: "pantheon.yml wp-config.php"
```
By not adding the `terminus_token` the action will skip the step to automatically promote `Dev` to `Test`
## Deploy to Pantheon's Live environment
In this example the inputs `pantheon_git_url`, `ssh_private_key` and `wordpress_version` aren't being used by the Github action but they are marked as required in the `actions.yml` so we add them to prevent the action from failing
```yaml
name: Promote Test to Live
on: workflow_dispatch
jobs:
deploy:
name: Promote Test to Live
runs-on: ubuntu-latest
steps:
- name: Promote Test to Live
uses: 10up/pantheon-wp-deploy-action@v1
with:
pantheon_git_url: "${{ secrets.PANTHEON_GIT_URL }}"
ssh_private_key: "${{ secrets.PRIVATE_KEY }}"
terminus_token: "${{ secrets.TERMINUS_TOKEN }}"
wordpress_version: "6.4.3"
site_name: "my-pantheon-site"
promote_test_to_live: "yes"
```
## Support Level
**Active:** 10up is actively working on this, and we expect to continue work for the foreseeable. Bug reports, feature requests, questions, and pull requests are welcome.
## Changelog
A complete listing of all notable changes to this Github Action are documented in [CHANGELOG.md](https://github.com/10up/pantheon-wp-deploy-action/blob/trunk/CHANGELOG.md).
## Contributing
Please read [CODE_OF_CONDUCT.md](https://github.com/10up/pantheon-wp-deploy-action/blob/trunk/CODE_OF_CONDUCT.md) for details on our code of conduct, [CONTRIBUTING.md](https://github.com/10up/pantheon-wp-deploy-action/blob/trunk/CONTRIBUTING.md) for details on the process for submitting pull requests to us, and [CREDITS.md](https://github.com/10up/pantheon-wp-deploy-action/blob/trunk/CREDITS.md) for a listing of maintainers and contributors.
## Like what you see?
