init
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
name: 'Auto Deploy Abort'
|
||||
description: 'Aborts a pending deployment on the app server'
|
||||
inputs:
|
||||
ssh_key:
|
||||
description: 'SSH Private Key'
|
||||
required: true
|
||||
host:
|
||||
description: 'Remote App Host'
|
||||
required: true
|
||||
port:
|
||||
description: 'Remote SSH Port'
|
||||
required: true
|
||||
user:
|
||||
description: 'Remote User'
|
||||
required: true
|
||||
app_key:
|
||||
description: 'Application Key'
|
||||
required: true
|
||||
auto_deploy_path:
|
||||
description: 'Path to auto-deploy repo on remote'
|
||||
required: true
|
||||
auto_deploy_branch:
|
||||
description: 'Branch to checkout in auto-deploy repo'
|
||||
required: false
|
||||
default: 'main'
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: SSH Deploy Abort
|
||||
shell: bash
|
||||
env:
|
||||
SSH_KEY: ${{ inputs.ssh_key }}
|
||||
DEPLOY_HOST: ${{ inputs.host }}
|
||||
DEPLOY_PORT: ${{ inputs.port }}
|
||||
DEPLOY_USER: ${{ inputs.user }}
|
||||
APP_KEY: ${{ inputs.app_key }}
|
||||
AUTO_DEPLOY_PATH: ${{ inputs.auto_deploy_path }}
|
||||
AUTO_DEPLOY_BRANCH: ${{ inputs.auto_deploy_branch }}
|
||||
run: |
|
||||
set -eu
|
||||
|
||||
SSH_TMP_DIR="$(mktemp -d)"
|
||||
trap 'rm -rf "$SSH_TMP_DIR"' EXIT
|
||||
|
||||
echo "$SSH_KEY" > "$SSH_TMP_DIR/id_rsa"
|
||||
chmod 600 "$SSH_TMP_DIR/id_rsa"
|
||||
ssh-keyscan -p "$DEPLOY_PORT" "$DEPLOY_HOST" > "$SSH_TMP_DIR/known_hosts"
|
||||
|
||||
SSH_OPTS=(
|
||||
-i "$SSH_TMP_DIR/id_rsa"
|
||||
-o UserKnownHostsFile="$SSH_TMP_DIR/known_hosts"
|
||||
-o StrictHostKeyChecking=yes
|
||||
-p "$DEPLOY_PORT"
|
||||
)
|
||||
|
||||
ssh "${SSH_OPTS[@]}" "$DEPLOY_USER@$DEPLOY_HOST" \
|
||||
"APP_KEY=$(printf '%q' "$APP_KEY") AUTO_DEPLOY_PATH=$(printf '%q' "$AUTO_DEPLOY_PATH") AUTO_DEPLOY_BRANCH=$(printf '%q' "$AUTO_DEPLOY_BRANCH") bash -se -c 'cd \"\$AUTO_DEPLOY_PATH\"; git checkout \"\$AUTO_DEPLOY_BRANCH\"; git pull --ff-only; git submodule sync --recursive; git submodule update --init --recursive; echo \"[remote] auto-deploy repo updated\"; ./common/deploy.sh abort-pending \"\$APP_KEY\"; echo \"[remote] \$APP_KEY pending deployment aborted\"'"
|
||||
@@ -0,0 +1,57 @@
|
||||
name: 'Auto Deploy Finalize'
|
||||
description: 'Finalizes the deployment on the app server'
|
||||
inputs:
|
||||
ssh_key:
|
||||
description: 'SSH Private Key'
|
||||
required: true
|
||||
host:
|
||||
description: 'Remote App Host'
|
||||
required: true
|
||||
port:
|
||||
description: 'Remote SSH Port'
|
||||
required: true
|
||||
user:
|
||||
description: 'Remote User'
|
||||
required: true
|
||||
app_key:
|
||||
description: 'Application Key'
|
||||
required: true
|
||||
auto_deploy_path:
|
||||
description: 'Path to auto-deploy repo on remote'
|
||||
required: true
|
||||
auto_deploy_branch:
|
||||
description: 'Branch to checkout in auto-deploy repo'
|
||||
required: false
|
||||
default: 'main'
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: SSH Deploy Finalize
|
||||
shell: bash
|
||||
env:
|
||||
SSH_KEY: ${{ inputs.ssh_key }}
|
||||
DEPLOY_HOST: ${{ inputs.host }}
|
||||
DEPLOY_PORT: ${{ inputs.port }}
|
||||
DEPLOY_USER: ${{ inputs.user }}
|
||||
APP_KEY: ${{ inputs.app_key }}
|
||||
AUTO_DEPLOY_PATH: ${{ inputs.auto_deploy_path }}
|
||||
AUTO_DEPLOY_BRANCH: ${{ inputs.auto_deploy_branch }}
|
||||
run: |
|
||||
set -eu
|
||||
|
||||
SSH_TMP_DIR="$(mktemp -d)"
|
||||
trap 'rm -rf "$SSH_TMP_DIR"' EXIT
|
||||
|
||||
echo "$SSH_KEY" > "$SSH_TMP_DIR/id_rsa"
|
||||
chmod 600 "$SSH_TMP_DIR/id_rsa"
|
||||
ssh-keyscan -p "$DEPLOY_PORT" "$DEPLOY_HOST" > "$SSH_TMP_DIR/known_hosts"
|
||||
|
||||
SSH_OPTS=(
|
||||
-i "$SSH_TMP_DIR/id_rsa"
|
||||
-o UserKnownHostsFile="$SSH_TMP_DIR/known_hosts"
|
||||
-o StrictHostKeyChecking=yes
|
||||
-p "$DEPLOY_PORT"
|
||||
)
|
||||
|
||||
ssh "${SSH_OPTS[@]}" "$DEPLOY_USER@$DEPLOY_HOST" \
|
||||
"APP_KEY=$(printf '%q' "$APP_KEY") AUTO_DEPLOY_PATH=$(printf '%q' "$AUTO_DEPLOY_PATH") AUTO_DEPLOY_BRANCH=$(printf '%q' "$AUTO_DEPLOY_BRANCH") bash -se -c 'cd \"\$AUTO_DEPLOY_PATH\"; git checkout \"\$AUTO_DEPLOY_BRANCH\"; git pull --ff-only; git submodule sync --recursive; git submodule update --init --recursive; echo \"[remote] auto-deploy repo updated\"; ./common/deploy.sh finalize \"\$APP_KEY\"; echo \"[remote] \$APP_KEY deployment finalized\"'"
|
||||
@@ -0,0 +1,69 @@
|
||||
name: 'Auto Deploy Stage'
|
||||
description: 'Stages a new deployment on the app server'
|
||||
inputs:
|
||||
ssh_key:
|
||||
description: 'SSH Private Key'
|
||||
required: true
|
||||
host:
|
||||
description: 'Remote App Host'
|
||||
required: true
|
||||
port:
|
||||
description: 'Remote SSH Port'
|
||||
required: true
|
||||
user:
|
||||
description: 'Remote User'
|
||||
required: true
|
||||
harbor_user:
|
||||
description: 'Harbor Username'
|
||||
required: true
|
||||
harbor_secret:
|
||||
description: 'Harbor Secret'
|
||||
required: true
|
||||
image_tag:
|
||||
description: 'Image Tag to deploy'
|
||||
required: true
|
||||
app_key:
|
||||
description: 'Application Key'
|
||||
required: true
|
||||
auto_deploy_path:
|
||||
description: 'Path to auto-deploy repo on remote'
|
||||
required: true
|
||||
auto_deploy_branch:
|
||||
description: 'Branch to checkout in auto-deploy repo'
|
||||
required: false
|
||||
default: 'main'
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: SSH Deploy Stage
|
||||
shell: bash
|
||||
env:
|
||||
SSH_KEY: ${{ inputs.ssh_key }}
|
||||
DEPLOY_HOST: ${{ inputs.host }}
|
||||
DEPLOY_PORT: ${{ inputs.port }}
|
||||
DEPLOY_USER: ${{ inputs.user }}
|
||||
HARBOR_USER: ${{ inputs.harbor_user }}
|
||||
HARBOR_SECRET: ${{ inputs.harbor_secret }}
|
||||
IMAGE_TAG: ${{ inputs.image_tag }}
|
||||
APP_KEY: ${{ inputs.app_key }}
|
||||
AUTO_DEPLOY_PATH: ${{ inputs.auto_deploy_path }}
|
||||
AUTO_DEPLOY_BRANCH: ${{ inputs.auto_deploy_branch }}
|
||||
run: |
|
||||
set -eu
|
||||
|
||||
SSH_TMP_DIR="$(mktemp -d)"
|
||||
trap 'rm -rf "$SSH_TMP_DIR"' EXIT
|
||||
|
||||
echo "$SSH_KEY" > "$SSH_TMP_DIR/id_rsa"
|
||||
chmod 600 "$SSH_TMP_DIR/id_rsa"
|
||||
ssh-keyscan -p "$DEPLOY_PORT" "$DEPLOY_HOST" > "$SSH_TMP_DIR/known_hosts"
|
||||
|
||||
SSH_OPTS=(
|
||||
-i "$SSH_TMP_DIR/id_rsa"
|
||||
-o UserKnownHostsFile="$SSH_TMP_DIR/known_hosts"
|
||||
-o StrictHostKeyChecking=yes
|
||||
-p "$DEPLOY_PORT"
|
||||
)
|
||||
|
||||
ssh "${SSH_OPTS[@]}" "$DEPLOY_USER@$DEPLOY_HOST" \
|
||||
"APP_KEY=$(printf '%q' "$APP_KEY") IMAGE_TAG=$(printf '%q' "$IMAGE_TAG") HARBOR_USER=$(printf '%q' "$HARBOR_USER") HARBOR_SECRET=$(printf '%q' "$HARBOR_SECRET") AUTO_DEPLOY_PATH=$(printf '%q' "$AUTO_DEPLOY_PATH") AUTO_DEPLOY_BRANCH=$(printf '%q' "$AUTO_DEPLOY_BRANCH") bash -se -c 'printf \"%s\" \"\$HARBOR_SECRET\" | sudo /usr/bin/docker login harbor.hclife.co -u \"\$HARBOR_USER\" --password-stdin; echo \"[remote] Harbor login succeeded\"; cd \"\$AUTO_DEPLOY_PATH\"; git checkout \"\$AUTO_DEPLOY_BRANCH\"; git pull --ff-only; git submodule sync --recursive; git submodule update --init --recursive; echo \"[remote] auto-deploy repo updated\"; ./common/deploy.sh deploy \"\$APP_KEY\" \"\$IMAGE_TAG\"; echo \"[remote] \$APP_KEY deploy staged with IMAGE_TAG=\$IMAGE_TAG\"; echo \"[remote] current deployment status:\"; ./common/deploy.sh status \"\$APP_KEY\" --format env'"
|
||||
@@ -0,0 +1,75 @@
|
||||
name: 'Auto Deploy Status'
|
||||
description: 'Reads current deployment status from app server'
|
||||
inputs:
|
||||
ssh_key:
|
||||
description: 'SSH Private Key'
|
||||
required: true
|
||||
host:
|
||||
description: 'Remote App Host'
|
||||
required: true
|
||||
port:
|
||||
description: 'Remote SSH Port'
|
||||
required: true
|
||||
user:
|
||||
description: 'Remote User'
|
||||
required: true
|
||||
app_key:
|
||||
description: 'Application Key'
|
||||
required: true
|
||||
auto_deploy_path:
|
||||
description: 'Path to auto-deploy repo on remote'
|
||||
required: true
|
||||
outputs:
|
||||
app_upstream_host:
|
||||
description: 'Upstream Host or IP'
|
||||
value: ${{ steps.get_status.outputs.app_upstream_host }}
|
||||
pending_port:
|
||||
description: 'Pending Port'
|
||||
value: ${{ steps.get_status.outputs.pending_port }}
|
||||
pending_color:
|
||||
description: 'Pending Color'
|
||||
value: ${{ steps.get_status.outputs.pending_color }}
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: SSH Deploy Status
|
||||
id: get_status
|
||||
shell: bash
|
||||
env:
|
||||
SSH_KEY: ${{ inputs.ssh_key }}
|
||||
DEPLOY_HOST: ${{ inputs.host }}
|
||||
DEPLOY_PORT: ${{ inputs.port }}
|
||||
DEPLOY_USER: ${{ inputs.user }}
|
||||
APP_KEY: ${{ inputs.app_key }}
|
||||
AUTO_DEPLOY_PATH: ${{ inputs.auto_deploy_path }}
|
||||
run: |
|
||||
set -eu
|
||||
|
||||
SSH_TMP_DIR="$(mktemp -d)"
|
||||
trap 'rm -rf "$SSH_TMP_DIR"' EXIT
|
||||
|
||||
echo "$SSH_KEY" > "$SSH_TMP_DIR/id_rsa"
|
||||
chmod 600 "$SSH_TMP_DIR/id_rsa"
|
||||
ssh-keyscan -p "$DEPLOY_PORT" "$DEPLOY_HOST" > "$SSH_TMP_DIR/known_hosts"
|
||||
|
||||
SSH_OPTS=(
|
||||
-i "$SSH_TMP_DIR/id_rsa"
|
||||
-o UserKnownHostsFile="$SSH_TMP_DIR/known_hosts"
|
||||
-o StrictHostKeyChecking=yes
|
||||
-p "$DEPLOY_PORT"
|
||||
)
|
||||
|
||||
STATUS_OUTPUT="$(ssh "${SSH_OPTS[@]}" "$DEPLOY_USER@$DEPLOY_HOST" "cd $(printf '%q' "$AUTO_DEPLOY_PATH") && ./common/deploy.sh status $(printf '%q' "$APP_KEY") --format env")"
|
||||
printf '%s\n' "$STATUS_OUTPUT"
|
||||
|
||||
APP_UPSTREAM_HOST="$(printf '%s\n' "$STATUS_OUTPUT" | sed -n 's/^APP_UPSTREAM_HOST=//p')"
|
||||
PENDING_PORT="$(printf '%s\n' "$STATUS_OUTPUT" | sed -n 's/^PENDING_PORT=//p')"
|
||||
PENDING_COLOR="$(printf '%s\n' "$STATUS_OUTPUT" | sed -n 's/^PENDING_COLOR=//p')"
|
||||
|
||||
test -n "$APP_UPSTREAM_HOST"
|
||||
test -n "$PENDING_PORT"
|
||||
test -n "$PENDING_COLOR"
|
||||
|
||||
echo "app_upstream_host=$APP_UPSTREAM_HOST" >> "$GITHUB_OUTPUT"
|
||||
echo "pending_port=$PENDING_PORT" >> "$GITHUB_OUTPUT"
|
||||
echo "pending_color=$PENDING_COLOR" >> "$GITHUB_OUTPUT"
|
||||
@@ -0,0 +1,69 @@
|
||||
name: 'Nginx Switch'
|
||||
description: 'Switches the Nginx upstream to the newly staged color'
|
||||
inputs:
|
||||
ssh_key:
|
||||
description: 'SSH Private Key'
|
||||
required: true
|
||||
host:
|
||||
description: 'Remote Nginx Host'
|
||||
required: true
|
||||
port:
|
||||
description: 'Remote SSH Port'
|
||||
required: true
|
||||
user:
|
||||
description: 'Remote User'
|
||||
required: true
|
||||
app_key:
|
||||
description: 'Application Key'
|
||||
required: true
|
||||
app_upstream_host:
|
||||
description: 'App Server Host or IP'
|
||||
required: true
|
||||
pending_port:
|
||||
description: 'Pending Port'
|
||||
required: true
|
||||
pending_color:
|
||||
description: 'Pending Color'
|
||||
required: true
|
||||
auto_deploy_path:
|
||||
description: 'Path to auto-deploy repo on remote'
|
||||
required: true
|
||||
auto_deploy_branch:
|
||||
description: 'Branch to checkout in auto-deploy repo'
|
||||
required: false
|
||||
default: 'main'
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: SSH Nginx Switch
|
||||
shell: bash
|
||||
env:
|
||||
SSH_KEY: ${{ inputs.ssh_key }}
|
||||
DEPLOY_HOST: ${{ inputs.host }}
|
||||
DEPLOY_PORT: ${{ inputs.port }}
|
||||
DEPLOY_USER: ${{ inputs.user }}
|
||||
APP_KEY: ${{ inputs.app_key }}
|
||||
APP_UPSTREAM_HOST: ${{ inputs.app_upstream_host }}
|
||||
PENDING_PORT: ${{ inputs.pending_port }}
|
||||
PENDING_COLOR: ${{ inputs.pending_color }}
|
||||
AUTO_DEPLOY_PATH: ${{ inputs.auto_deploy_path }}
|
||||
AUTO_DEPLOY_BRANCH: ${{ inputs.auto_deploy_branch }}
|
||||
run: |
|
||||
set -eu
|
||||
|
||||
SSH_TMP_DIR="$(mktemp -d)"
|
||||
trap 'rm -rf "$SSH_TMP_DIR"' EXIT
|
||||
|
||||
echo "$SSH_KEY" > "$SSH_TMP_DIR/id_rsa"
|
||||
chmod 600 "$SSH_TMP_DIR/id_rsa"
|
||||
ssh-keyscan -p "$DEPLOY_PORT" "$DEPLOY_HOST" > "$SSH_TMP_DIR/known_hosts"
|
||||
|
||||
SSH_OPTS=(
|
||||
-i "$SSH_TMP_DIR/id_rsa"
|
||||
-o UserKnownHostsFile="$SSH_TMP_DIR/known_hosts"
|
||||
-o StrictHostKeyChecking=yes
|
||||
-p "$DEPLOY_PORT"
|
||||
)
|
||||
|
||||
ssh "${SSH_OPTS[@]}" "$DEPLOY_USER@$DEPLOY_HOST" \
|
||||
"APP_KEY=$(printf '%q' "$APP_KEY") APP_UPSTREAM_HOST=$(printf '%q' "$APP_UPSTREAM_HOST") PENDING_PORT=$(printf '%q' "$PENDING_PORT") PENDING_COLOR=$(printf '%q' "$PENDING_COLOR") AUTO_DEPLOY_PATH=$(printf '%q' "$AUTO_DEPLOY_PATH") AUTO_DEPLOY_BRANCH=$(printf '%q' "$AUTO_DEPLOY_BRANCH") bash -se -c 'cd \"\$AUTO_DEPLOY_PATH\"; git checkout \"\$AUTO_DEPLOY_BRANCH\"; git pull --ff-only; git submodule sync --recursive; git submodule update --init --recursive; echo \"[remote] auto-deploy repo updated on nginx server\"; ./common/nginx/manage-nginx.sh switch \"\$APP_KEY\" \"\$APP_UPSTREAM_HOST\" \"\$PENDING_PORT\"; echo \"[remote] nginx switched \$APP_KEY to \$APP_UPSTREAM_HOST:\$PENDING_PORT (\$PENDING_COLOR)\"'"
|
||||
Reference in New Issue
Block a user