Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
dbcc5aa
updated readme
leglesslizard Jun 30, 2026
d22a206
added new atomic deploy workflow
leglesslizard Jun 30, 2026
f249808
added migrate flow
leglesslizard Jun 30, 2026
305f233
add swap and migrate action
leglesslizard Jun 30, 2026
09ea1d0
added swap script
leglesslizard Jun 30, 2026
cd492f3
added notification settings on error
leglesslizard Jun 30, 2026
f0fd384
added migration action
leglesslizard Jun 30, 2026
970a910
migrate script added
leglesslizard Jun 30, 2026
4edf6e1
updated readme
leglesslizard Jun 30, 2026
4d653b3
only leave maintenance mode active if live actions fail
leglesslizard Jun 30, 2026
5fcce96
updated readme
leglesslizard Jun 30, 2026
1443086
fix wildcard call potentially targeting incorrect tables
leglesslizard Jun 30, 2026
ca1e0f6
validate paths early to avoid potential desync on symlinks
leglesslizard Jun 30, 2026
0d96206
protect SQL by escaping filenames
leglesslizard Jun 30, 2026
f4fc816
escape vars before running remote actions
leglesslizard Jun 30, 2026
416d5cd
more specific error checking for notifications
leglesslizard Jun 30, 2026
121c453
update commands in notification email
leglesslizard Jun 30, 2026
ec385e2
updated readme
leglesslizard Jun 30, 2026
032fbce
update action to use absolute paths
leglesslizard Jun 30, 2026
f9b5901
make workflows queue not race
leglesslizard Jun 30, 2026
23cf4f0
updated comment
leglesslizard Jun 30, 2026
728a804
safeguard swap script
leglesslizard Jun 30, 2026
763c1e9
update readme
leglesslizard Jun 30, 2026
9e17cd8
added logic to prevent additive prefixes
leglesslizard Jun 30, 2026
0ab9093
avoid whitespace issues with release directories
leglesslizard Jun 30, 2026
3c7e479
updated comments
leglesslizard Jun 30, 2026
b2c96e3
add robust check for absolute paths
leglesslizard Jun 30, 2026
7bba305
centralise migrate scripts
leglesslizard Jun 30, 2026
bebf68f
more robust checks
leglesslizard Jun 30, 2026
f9c1741
minor fixes
leglesslizard Jun 30, 2026
befc17e
updated branch refs for testing
leglesslizard Jun 30, 2026
355a8af
mkdir if not exists and update branch refs
leglesslizard Jun 30, 2026
505cec0
updated passable releases dir
leglesslizard Jun 30, 2026
3fd5dae
remove redundant chmos
leglesslizard Jun 30, 2026
92ef559
use short sha
leglesslizard Jun 30, 2026
17be130
fix prefix custom table
leglesslizard Jun 30, 2026
d3da835
update drop command
leglesslizard Jun 30, 2026
d03bddf
update wp db prefix for user caps
leglesslizard Jun 30, 2026
54eef11
changed symlinks to mv
leglesslizard Jul 2, 2026
31f5107
update scripts
leglesslizard Jul 2, 2026
d1d8210
updated readme
leglesslizard Jul 2, 2026
21f8d6f
Potential fix for pull request finding
leglesslizard Jul 2, 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
83 changes: 83 additions & 0 deletions .github/workflows/atomic-deploy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
name: Atomic Deploy

on:
Comment thread
leglesslizard marked this conversation as resolved.
workflow_call:
inputs:
ssh-host:
type: string
description: "SSH host to connect to"
required: true
ssh-user:
type: string
description: "SSH user to connect with"
required: false
default: piecode
ssh-port:
type: number
description: "SSH port to connect to"
required: false
default: 22
wp-root:
type: string
description: "Absolute path to the WordPress root on the remote server (must start with /)"
required: true
components:
type: string
description: "Newline-separated list of components to deploy, one per line in type:name format (e.g. plugins:my-plugin)"
required: true
releases-dir:
type: string
description: "Absolute path to the releases directory on the server. Defaults to a 'releases' sibling of wp-root when not set."
required: false
default: ""
secrets:
SSH_PRIVATE_KEY:
description: "SSH private key"
required: true
SMTP_SERVER:
description: "SMTP server for failure notifications"
required: false
SMTP_USERNAME:
description: "SMTP username"
required: false
SMTP_PASSWORD:
description: "SMTP password"
required: false
NOTIFY_EMAIL:
description: "Override recipient email (defaults to #uptime_alerts Slack channel)"
required: false

concurrency:
group: atomic-deploy-${{ inputs.ssh-host }}-${{ inputs.wp-root }}
cancel-in-progress: false

jobs:
atomic_deploy:
runs-on: ubuntu-latest
steps:

- name: Compute short SHA
id: sha
shell: bash
run: echo "short_sha=${GITHUB_SHA:0:8}" >> $GITHUB_OUTPUT

- uses: pie/.github/actions/add-ssh-config@feature/add-symlink-and-sql-flows
Comment thread
leglesslizard marked this conversation as resolved.
name: Add SSH key to runner
with:
ssh-user: ${{inputs.ssh-user}}
ssh-port: ${{inputs.ssh-port}}
ssh-host: ${{inputs.ssh-host}}
ssh-key: ${{secrets.SSH_PRIVATE_KEY}}

- uses: pie/.github/actions/swap-and-migrate@feature/add-symlink-and-sql-flows
Comment thread
leglesslizard marked this conversation as resolved.
name: Run atomic swap and migrations
with:
wp-root: ${{inputs.wp-root}}
git-sha: ${{ steps.sha.outputs.short_sha }}
repo-name: ${{github.event.repository.name}}
components: ${{inputs.components}}
releases-dir: ${{inputs.releases-dir}}
notify-email: ${{secrets.NOTIFY_EMAIL || 'uptime_alerts-aaaaabagrbjrarifmw25mquney@piecode.slack.com'}}
smtp-server: ${{secrets.SMTP_SERVER}}
smtp-username: ${{secrets.SMTP_USERNAME}}
smtp-password: ${{secrets.SMTP_PASSWORD}}
6 changes: 3 additions & 3 deletions .github/workflows/deploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ jobs:
runs-on: ubuntu-latest
steps:

- uses: pie/.github/actions/add-ssh-config@main
- uses: pie/.github/actions/add-ssh-config@feature/add-symlink-and-sql-flows
Comment thread
leglesslizard marked this conversation as resolved.
name: Add SSH Key to this runner
if: ${{ inputs.sshpass == 'false' }}
with:
Expand All @@ -85,7 +85,7 @@ jobs:
ssh-host: ${{inputs.ssh-host}}
ssh-key: ${{secrets.SSH_PRIVATE_KEY}}

- uses: pie/.github/actions/add-ssh-pass@main
- uses: pie/.github/actions/add-ssh-pass@feature/add-symlink-and-sql-flows
Comment thread
leglesslizard marked this conversation as resolved.
name: Add SSH Pass to this runner
if: ${{ inputs.sshpass != 'false' }}
with:
Expand All @@ -94,7 +94,7 @@ jobs:
ssh-host: ${{inputs.ssh-host}}
ssh-pass: ${{secrets.SSH_PRIVATE_KEY}}

- uses: pie/.github/actions/deploy-via-rsync@main
- uses: pie/.github/actions/deploy-via-rsync@feature/add-symlink-and-sql-flows
Comment thread
leglesslizard marked this conversation as resolved.
name: Deploying to ${{inputs.destination-path}} on remote
with:
ssh-port: ${{inputs.ssh-port}}
Expand Down
18 changes: 18 additions & 0 deletions .github/workflows/setup.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Setup

on:
workflow_call:
outputs:
short-sha:
description: "Short (8-character) git commit SHA for use in release directory paths"
value: ${{ jobs.setup.outputs.short_sha }}

jobs:
setup:
runs-on: ubuntu-latest
outputs:
short_sha: ${{ steps.sha.outputs.short_sha }}
steps:
- id: sha
shell: bash
run: echo "short_sha=${GITHUB_SHA:0:8}" >> $GITHUB_OUTPUT
Loading