Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
140 commits
Select commit Hold shift + click to select a range
f6bfda0
First steps site.deploy.yml workflow.
jonpugh Sep 26, 2025
5140d01
Add calling workflow.
jonpugh Sep 26, 2025
1e7bba0
Add environment and defaults.
jonpugh Sep 26, 2025
3e99cf4
Try remote uses.
jonpugh Sep 26, 2025
6540e53
Needs @ref
jonpugh Sep 26, 2025
3c92469
Reusable workflows are jobs.
jonpugh Sep 26, 2025
1f546fa
Make not required since we can autodetect.
jonpugh Sep 26, 2025
2de44d1
Name jobs
jonpugh Sep 26, 2025
41a689a
Add comments.
jonpugh Sep 26, 2025
f65af2f
Add run_start input to control ddev start.
jonpugh Sep 26, 2025
364bb83
Clone code.
jonpugh Sep 26, 2025
eb3beb5
Clone code.
jonpugh Sep 26, 2025
7aa8dda
Put in home dir.
jonpugh Sep 26, 2025
8eff117
Bad quotes.
jonpugh Sep 26, 2025
8e6abae
add start site.
jonpugh Sep 26, 2025
5c7d711
Add install ddev action.
jonpugh Sep 26, 2025
1ddad3b
Separate start site job.
jonpugh Sep 26, 2025
e95480d
Launch a test server in github actions infrastructure so the environm…
jonpugh Sep 26, 2025
7528a4b
inconsisten vars.
jonpugh Sep 26, 2025
a2e0c00
runs-on.
jonpugh Sep 26, 2025
809cd42
Wrong runs-on.
jonpugh Sep 26, 2025
fc5d8f8
Cancel in progress.
jonpugh Sep 26, 2025
93b6cd8
Try unephemeral runner....
jonpugh Sep 26, 2025
7e41a53
base ddev config
jonpugh Sep 26, 2025
1491f78
Kick off the runner script over and over until there are no more queu…
jonpugh Sep 26, 2025
6e4cf0f
Use env var.
jonpugh Sep 26, 2025
9e82b9d
Ephemeral.
jonpugh Sep 26, 2025
50b5f29
Check for ddev installation so this works on self-hosted runners.
jonpugh Sep 26, 2025
e7684fe
Only create one deployment per run.
jonpugh Sep 26, 2025
eb748a3
comment.
jonpugh Sep 26, 2025
a27d83f
Add prepare_command, start_command input vars.
jonpugh Sep 26, 2025
53e1bf3
Add vars for both environment and url.
jonpugh Sep 26, 2025
b98e857
remove comments.
jonpugh Sep 26, 2025
27fbf29
Comments.
jonpugh Sep 26, 2025
c1d7962
Set example prepare and deploy command.
jonpugh Sep 26, 2025
daf03a8
Default start to true.
jonpugh Sep 26, 2025
cc4262c
Use proper URL.
jonpugh Sep 26, 2025
8ddf328
Add run tests step.
jonpugh Sep 26, 2025
6882e79
Needs
jonpugh Sep 26, 2025
da7cc39
Check homepage.
jonpugh Sep 26, 2025
bd942a3
Check homepage.
jonpugh Sep 27, 2025
254cab9
Move ddev install to calling workflow.
jonpugh Sep 27, 2025
c0d6295
Put it back in the deploy workflow.
jonpugh Sep 27, 2025
5bf0251
Add test file.
jonpugh Sep 27, 2025
9937d01
Set docroot
jonpugh Sep 27, 2025
c57b599
Wrong var name
jonpugh Sep 27, 2025
54a0ca7
Write ddev config.
jonpugh Sep 27, 2025
0762898
Sleep in case there's no tasks for a second.
jonpugh Sep 27, 2025
eb31a15
huh
jonpugh Sep 27, 2025
d6b9543
list current dir.
jonpugh Sep 27, 2025
10e2bc7
fix path.
jonpugh Sep 27, 2025
c5f53b1
Fix URL.
jonpugh Sep 28, 2025
f5dec47
Rename.
jonpugh Oct 2, 2025
0f75b87
Update ops.site.deploy.ddev.yml to use run-with-summary.
jonpugh Oct 4, 2025
d39a48b
Update ops.site.deploy.ddev.yml
jonpugh Oct 4, 2025
98cd83a
Use right version
jonpugh Oct 4, 2025
b9b0ac8
Update ops.site.deploy.ddev.yml
jonpugh Oct 4, 2025
c7c9fa6
Update ops.site.deploy.ddev.yml
jonpugh Oct 4, 2025
022b59d
Update ops.site.deploy.ddev.yml
jonpugh Oct 4, 2025
066c9dd
Update ops.site.deploy.ddev.yml
jonpugh Oct 4, 2025
ed0faa2
Update ops.site.deploy.ddev.yml
jonpugh Oct 4, 2025
a5c791d
Fix usage of goatscripts run-with-summary.
jonpugh Oct 8, 2025
2f4907d
Set message.
jonpugh Oct 8, 2025
3068657
Fix path.
jonpugh Oct 8, 2025
952de53
Set path.
jonpugh Oct 8, 2025
895c55a
Try to use run-with-summary when launching server.
jonpugh Oct 8, 2025
9e6d98c
Set path to allow commands.
jonpugh Oct 8, 2025
0bec64b
Set PATH at the top.
jonpugh Oct 8, 2025
29cd587
make identical,
jonpugh Oct 8, 2025
66d7efc
Add goatscripts to path.
jonpugh Oct 8, 2025
f8325cf
Add summary.
jonpugh Oct 8, 2025
042c6bb
Add summary.
jonpugh Oct 8, 2025
97bdc94
try again?
jonpugh Oct 8, 2025
d18e6ea
try again?
jonpugh Oct 8, 2025
f178444
try again?
jonpugh Oct 8, 2025
52c8891
Forgot to download scripts.
jonpugh Oct 8, 2025
dd9ef0e
print git log as well.
jonpugh Oct 8, 2025
a0c07ef
don't bother with summaries for github runners.
jonpugh Oct 8, 2025
a5974c8
Don't cancel in progress site preview deploy runs.
jonpugh Oct 8, 2025
983bf1f
Use run with summary for tests.
jonpugh Oct 8, 2025
f8903f6
Disable instrumentation.
jonpugh Oct 8, 2025
eb67e01
Sleep 4 just to make sure
jonpugh Oct 8, 2025
4ceee25
Curl
jonpugh Oct 8, 2025
5e64dda
Use versioned scripts.
jonpugh Oct 8, 2025
2243d38
#3: Use run-with-summary script.
jonpugh Oct 8, 2025
595099d
Change filename of ddev deploy reusable workflow.
jonpugh Oct 8, 2025
5b1cf79
Add comments.
jonpugh Oct 8, 2025
fc719a9
Is this secret needed??
jonpugh Oct 8, 2025
655e77d
Comments on the GITHUB_TOKEN substitution.
jonpugh Oct 8, 2025
8330349
Merge branch 'feature/reusable-workflows' of github.com:operations-pr…
jonpugh Oct 8, 2025
f7ded91
Add delete site workflow.
jonpugh Oct 10, 2025
180ff46
Don't run until test site is done.
jonpugh Oct 10, 2025
9e43886
debug
jonpugh Oct 10, 2025
a5edff8
Wrong runs-on.
jonpugh Oct 10, 2025
df9f086
Set env.
jonpugh Oct 10, 2025
e107328
no need to sleep?
jonpugh Oct 10, 2025
6b7c2f0
sleep 3
jonpugh Oct 10, 2025
1bf364c
Revise README for DDEV Hosting GitHub Actions
jonpugh Oct 30, 2025
93cee94
Create operations.site.command.yml
jonpugh Oct 30, 2025
65fabea
Add workflow to run arbitrary command.
jonpugh Oct 30, 2025
748d28e
Implement "command" workflow in main preview template.
jonpugh Oct 30, 2025
d40b8f9
Rename workflow name to 'Run command'
jonpugh Oct 30, 2025
ade5d2b
Run in working-directory.
jonpugh Oct 30, 2025
5cff95a
Change input to working_directory
jonpugh Oct 30, 2025
9aa3097
Use goatscripts github action.
jonpugh Oct 31, 2025
6567718
Wrong input.
jonpugh Oct 31, 2025
ada6b22
Update operations.site.deploy.ddev.yml
jonpugh Oct 31, 2025
6d9d60a
Update operations.site.deploy.ddev.yml
jonpugh Oct 31, 2025
7882344
Use latest github action.
jonpugh Oct 31, 2025
535250d
Wait a second before starting the runner in case the job isn't availa…
jonpugh Oct 31, 2025
198c10e
Use correct directory,.
jonpugh Oct 31, 2025
d87ae4c
sleep before and after.
jonpugh Oct 31, 2025
4a931d9
Update and rename example.site.preview.yml to test.ddev.workflows.yml
jonpugh Nov 1, 2025
bbe0de2
Create site.preview.yml.example
jonpugh Nov 1, 2025
52bc9dc
Make sure the parent directory exists.
jonpugh Nov 1, 2025
6b3c046
Use SSH URL to clone by default.
jonpugh Nov 1, 2025
ce04f7d
No need for this.
jonpugh Nov 1, 2025
9d5e43c
Set DDEV_NONINTERACTIVE
jonpugh Nov 1, 2025
a3f12ee
Testing receiving env vars
jonpugh Nov 1, 2025
bcd2639
Can't use env. here.
jonpugh Nov 1, 2025
b0f40ad
Don't forget to pull latest.
jonpugh Nov 1, 2025
763f24d
Fetch and reset,
jonpugh Nov 1, 2025
97978d4
Hide process details table in summaries.
jonpugh Nov 1, 2025
c1a5c7a
Fix emoji used for command complete
jonpugh Nov 1, 2025
6f4b006
Attempt to add "env" input
jonpugh Nov 1, 2025
896c721
Try to set env input.
jonpugh Nov 1, 2025
85f03a1
Set the git_repository to public url.
jonpugh Nov 1, 2025
fb0ca25
Use action to install.
jonpugh Nov 1, 2025
00b3134
No default.
jonpugh Nov 1, 2025
f0eb1c4
Checkout the branch
jonpugh Nov 1, 2025
7e4f0c3
Skip prepare job completely.
jonpugh Nov 1, 2025
e0b7a32
Set deployment environment name and URL on the start site job,
jonpugh Nov 1, 2025
0060d79
Labels
jonpugh Nov 22, 2025
dea496c
Add SSH agent
jonpugh Nov 24, 2025
acf9cbf
Add SSH agents
jonpugh Nov 24, 2025
c430986
Use secrets instead of inputs.
jonpugh Nov 24, 2025
7987132
Can we use env in if?
jonpugh Nov 24, 2025
5354016
Secrets are like inputs.
jonpugh Nov 24, 2025
f5003e1
Set SSH_PRIVATE_KEY env var so it can be used in the "if" statement.
jonpugh Nov 24, 2025
84f4828
Checkout code and sync submodules (on new branch, might have new subm…
jonpugh Nov 24, 2025
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
280 changes: 280 additions & 0 deletions .ddev/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,280 @@
name: github-runner
type: php
docroot: tests/docroot
php_version: "8.2"
webserver_type: nginx-fpm
xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
database:
type: mariadb
version: "10.11"
use_dns_when_possible: true
composer_version: "2"
web_environment: []
corepack_enable: false

# Key features of DDEV's config.yaml:

# name: <projectname> # Name of the project, automatically provides
# http://projectname.ddev.site and https://projectname.ddev.site

# type: <projecttype> # backdrop, craftcms, django4, drupal, drupal6, drupal7, laravel, magento, magento2, php, python, shopware6, silverstripe, typo3, wordpress
# See https://ddev.readthedocs.io/en/stable/users/quickstart/ for more
# information on the different project types
# "drupal" covers recent Drupal 8+

# docroot: <relative_path> # Relative path to the directory containing index.php.

# php_version: "8.2" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2", "8.3"

# You can explicitly specify the webimage but this
# is not recommended, as the images are often closely tied to DDEV's' behavior,
# so this can break upgrades.

# webimage: <docker_image> # nginx/php docker image.

# database:
# type: <dbtype> # mysql, mariadb, postgres
# version: <version> # database version, like "10.11" or "8.0"
# MariaDB versions can be 5.5-10.8 and 10.11, MySQL versions can be 5.5-8.0
# PostgreSQL versions can be 9-16.

# router_http_port: <port> # Port to be used for http (defaults to global configuration, usually 80)
# router_https_port: <port> # Port for https (defaults to global configuration, usually 443)

# xdebug_enabled: false # Set to true to enable Xdebug and "ddev start" or "ddev restart"
# Note that for most people the commands
# "ddev xdebug" to enable Xdebug and "ddev xdebug off" to disable it work better,
# as leaving Xdebug enabled all the time is a big performance hit.

# xhprof_enabled: false # Set to true to enable Xhprof and "ddev start" or "ddev restart"
# Note that for most people the commands
# "ddev xhprof" to enable Xhprof and "ddev xhprof off" to disable it work better,
# as leaving Xhprof enabled all the time is a big performance hit.

# webserver_type: nginx-fpm, apache-fpm, or nginx-gunicorn

# timezone: Europe/Berlin
# This is the timezone used in the containers and by PHP;
# it can be set to any valid timezone,
# see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
# For example Europe/Dublin or MST7MDT

# composer_root: <relative_path>
# Relative path to the Composer root directory from the project root. This is
# the directory which contains the composer.json and where all Composer related
# commands are executed.

# composer_version: "2"
# You can set it to "" or "2" (default) for Composer v2 or "1" for Composer v1
# to use the latest major version available at the time your container is built.
# It is also possible to use each other Composer version channel. This includes:
# - 2.2 (latest Composer LTS version)
# - stable
# - preview
# - snapshot
# Alternatively, an explicit Composer version may be specified, for example "2.2.18".
# To reinstall Composer after the image was built, run "ddev debug refresh".

# nodejs_version: "20"
# change from the default system Node.js version to any other version.
# Numeric version numbers can be complete (i.e. 18.15.0) or
# incomplete (18, 17.2, 16). 'lts' and 'latest' can be used as well along with
# other named releases.
# see https://www.npmjs.com/package/n#specifying-nodejs-versions
# Note that you can continue using 'ddev nvm' or nvm inside the web container
# to change the project's installed node version if you need to.

# corepack_enable: false
# Change to 'true' to 'corepack enable' and gain access to latest versions of yarn/pnpm

# additional_hostnames:
# - somename
# - someothername
# would provide http and https URLs for "somename.ddev.site"
# and "someothername.ddev.site".

# additional_fqdns:
# - example.com
# - sub1.example.com
# would provide http and https URLs for "example.com" and "sub1.example.com"
# Please take care with this because it can cause great confusion.

# upload_dirs: "custom/upload/dir"
#
# upload_dirs:
# - custom/upload/dir
# - ../private
#
# would set the destination paths for ddev import-files to <docroot>/custom/upload/dir
# When Mutagen is enabled this path is bind-mounted so that all the files
# in the upload_dirs don't have to be synced into Mutagen.

# disable_upload_dirs_warning: false
# If true, turns off the normal warning that says
# "You have Mutagen enabled and your 'php' project type doesn't have upload_dirs set"

# ddev_version_constraint: ""
# Example:
# ddev_version_constraint: ">= 1.22.4"
# This will enforce that the running ddev version is within this constraint.
# See https://github.com/Masterminds/semver#checking-version-constraints for
# supported constraint formats

# working_dir:
# web: /var/www/html
# db: /home
# would set the default working directory for the web and db services.
# These values specify the destination directory for ddev ssh and the
# directory in which commands passed into ddev exec are run.

# omit_containers: [db, ddev-ssh-agent]
# Currently only these containers are supported. Some containers can also be
# omitted globally in the ~/.ddev/global_config.yaml. Note that if you omit
# the "db" container, several standard features of DDEV that access the
# database container will be unusable. In the global configuration it is also
# possible to omit ddev-router, but not here.

# performance_mode: "global"
# DDEV offers performance optimization strategies to improve the filesystem
# performance depending on your host system. Should be configured globally.
#
# If set, will override the global config. Possible values are:
# - "global": uses the value from the global config.
# - "none": disables performance optimization for this project.
# - "mutagen": enables Mutagen for this project.
# - "nfs": enables NFS for this project.
#
# See https://ddev.readthedocs.io/en/stable/users/install/performance/#nfs
# See https://ddev.readthedocs.io/en/stable/users/install/performance/#mutagen

# fail_on_hook_fail: False
# Decide whether 'ddev start' should be interrupted by a failing hook

# host_https_port: "59002"
# The host port binding for https can be explicitly specified. It is
# dynamic unless otherwise specified.
# This is not used by most people, most people use the *router* instead
# of the localhost port.

# host_webserver_port: "59001"
# The host port binding for the ddev-webserver can be explicitly specified. It is
# dynamic unless otherwise specified.
# This is not used by most people, most people use the *router* instead
# of the localhost port.

# host_db_port: "59002"
# The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic
# unless explicitly specified.

# mailpit_http_port: "8025"
# mailpit_https_port: "8026"
# The Mailpit ports can be changed from the default 8025 and 8026

# host_mailpit_port: "8025"
# The mailpit port is not normally bound on the host at all, instead being routed
# through ddev-router, but it can be bound directly to localhost if specified here.

# webimage_extra_packages: [php7.4-tidy, php-bcmath]
# Extra Debian packages that are needed in the webimage can be added here

# dbimage_extra_packages: [telnet,netcat]
# Extra Debian packages that are needed in the dbimage can be added here

# use_dns_when_possible: true
# If the host has internet access and the domain configured can
# successfully be looked up, DNS will be used for hostname resolution
# instead of editing /etc/hosts
# Defaults to true

# project_tld: ddev.site
# The top-level domain used for project URLs
# The default "ddev.site" allows DNS lookup via a wildcard
# If you prefer you can change this to "ddev.local" to preserve
# pre-v1.9 behavior.

# ngrok_args: --basic-auth username:pass1234
# Provide extra flags to the "ngrok http" command, see
# https://ngrok.com/docs/ngrok-agent/config or run "ngrok http -h"

# disable_settings_management: false
# If true, DDEV will not create CMS-specific settings files like
# Drupal's settings.php/settings.ddev.php or TYPO3's AdditionalConfiguration.php
# In this case the user must provide all such settings.

# You can inject environment variables into the web container with:
# web_environment:
# - SOMEENV=somevalue
# - SOMEOTHERENV=someothervalue

# no_project_mount: false
# (Experimental) If true, DDEV will not mount the project into the web container;
# the user is responsible for mounting it manually or via a script.
# This is to enable experimentation with alternate file mounting strategies.
# For advanced users only!

# bind_all_interfaces: false
# If true, host ports will be bound on all network interfaces,
# not the localhost interface only. This means that ports
# will be available on the local network if the host firewall
# allows it.

# default_container_timeout: 120
# The default time that DDEV waits for all containers to become ready can be increased from
# the default 120. This helps in importing huge databases, for example.

#web_extra_exposed_ports:
#- name: nodejs
# container_port: 3000
# http_port: 2999
# https_port: 3000
#- name: something
# container_port: 4000
# https_port: 4000
# http_port: 3999
# Allows a set of extra ports to be exposed via ddev-router
# Fill in all three fields even if you don’t intend to use the https_port!
# If you don’t add https_port, then it defaults to 0 and ddev-router will fail to start.
#
# The port behavior on the ddev-webserver must be arranged separately, for example
# using web_extra_daemons.
# For example, with a web app on port 3000 inside the container, this config would
# expose that web app on https://<project>.ddev.site:9999 and http://<project>.ddev.site:9998
# web_extra_exposed_ports:
# - name: myapp
# container_port: 3000
# http_port: 9998
# https_port: 9999

#web_extra_daemons:
#- name: "http-1"
# command: "/var/www/html/node_modules/.bin/http-server -p 3000"
# directory: /var/www/html
#- name: "http-2"
# command: "/var/www/html/node_modules/.bin/http-server /var/www/html/sub -p 3000"
# directory: /var/www/html

# override_config: false
# By default, config.*.yaml files are *merged* into the configuration
# But this means that some things can't be overridden
# For example, if you have 'use_dns_when_possible: true'' you can't override it with a merge
# and you can't erase existing hooks or all environment variables.
# However, with "override_config: true" in a particular config.*.yaml file,
# 'use_dns_when_possible: false' can override the existing values, and
# hooks:
# post-start: []
# or
# web_environment: []
# or
# additional_hostnames: []
# can have their intended affect. 'override_config' affects only behavior of the
# config.*.yaml file it exists in.

# Many DDEV commands can be extended to run tasks before or after the
# DDEV command is executed, for example "post-start", "post-import-db",
# "pre-composer", "post-composer"
# See https://ddev.readthedocs.io/en/stable/users/extend/custom-commands/ for more
# information on the commands that can be extended and the tasks you can define
# for them. Example:
#hooks:
45 changes: 45 additions & 0 deletions .github/workflows/operations.site.command.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#
# Site Command. Use to run any command.
#
name: Run command
on:
workflow_call:
inputs:

working_directory:
required: true
type: string
description: The path to run the command in.

command:
type: string
description: The command to run.
required: true

github_runs_on:
type: string
default: ubuntu-latest
description: The label of the runner you wish to use.

env:
type: string
description: |
A string of environment variables to set for the command run. To alter the summary, see https://github.com/jonpugh/goatscripts/blob/main/src/run-with-summary

jobs:
run-command:
name: Run command
runs-on: ${{ inputs.github_runs_on }}
steps:
- uses: jonpugh/goatscripts@main

- name: run command
env:
SUCCESS: ":white_check_mark: Command complete"
ERROR: ":x: Command failed"
SUMMARY: |
- Root: `${{ inputs.working_directory }}`
working-directory: ${{ inputs.working_directory }}
run: |
${{ inputs.env }}
run-with-summary ${{ inputs.command }}
Loading