fix: resolve invalid yaml nesting
This commit is contained in:
170
action.yml
170
action.yml
@@ -1,82 +1,104 @@
|
|||||||
name: Deploy Docker Compose via SSH
|
name: Deploy Docker Compose
|
||||||
|
|
||||||
|
description: Deploy a Docker Compose file to a remote server via SSH
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
docker_compose_path:
|
||||||
|
description: 'Path to the docker-compose file (e.g. docker-compose.yml)'
|
||||||
|
required: true
|
||||||
|
default: 'docker-compose.yml'
|
||||||
|
|
||||||
|
remote_host:
|
||||||
|
description: 'Remote server IP or hostname'
|
||||||
|
required: true
|
||||||
|
default: '185.218.126.87'
|
||||||
|
|
||||||
|
remote_user:
|
||||||
|
description: 'SSH username on remote server'
|
||||||
|
required: true
|
||||||
|
default: 'linly'
|
||||||
|
|
||||||
|
deployment_path:
|
||||||
|
description: 'Remote path to deploy the compose file (e.g. /home/linly/services/gitea)'
|
||||||
|
required: true
|
||||||
|
default: '/home/linly/services/gitea'
|
||||||
|
|
||||||
|
|
||||||
|
timeout:
|
||||||
|
description: 'Timeout in seconds for docker-compose up'
|
||||||
|
required: false
|
||||||
|
default: 300
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: ubuntu-latest
|
||||||
inputs:
|
# We use Docker to run this action, so we don't need to run it on a runner
|
||||||
docker_compose_path:
|
# (you can also use "ubuntu-latest" if you prefer, but Docker is better for consistency)
|
||||||
description: 'Path to deploy docker-compose.yml (e.g. /home/user/app/docker-compose.yml)'
|
|
||||||
required: false
|
|
||||||
default: 'docker-compose.yml'
|
|
||||||
remote_host:
|
|
||||||
description: 'Remote host (e.g. 192.168.1.100)'
|
|
||||||
required: false
|
|
||||||
default: '185.218.126.87'
|
|
||||||
remote_user:
|
|
||||||
description: 'Remote user (e.g. ubuntu)'
|
|
||||||
required: false
|
|
||||||
default: 'linly'
|
|
||||||
deployment_path:
|
|
||||||
description: 'the path where the docker-compose file will be copied to'
|
|
||||||
required: true
|
|
||||||
default: '/home/linly/services/gitea'
|
|
||||||
env:
|
|
||||||
# These are provided via GitHub Secrets
|
|
||||||
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
||||||
SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }}
|
|
||||||
DEPLOYMENT_PATH: ${{ inputs.deployment_path || 'docker-compose.yml' }}
|
|
||||||
REMOTE_HOST: ${{ inputs.remote_host || 'your-server.example.com' }}
|
|
||||||
REMOTE_USER: ${{ inputs.remote_user || 'ubuntu' }}
|
|
||||||
DOCKER_COMPOSE_PATH: ${{ inputs.docker_compose_path }}
|
|
||||||
|
|
||||||
steps:
|
# Specify the Docker image to use (this is optional but recommended)
|
||||||
- name: Checkout code
|
# You can use a custom image or just use the base image
|
||||||
uses: actions/checkout@v4
|
# Here we use a minimal image with SSH and docker-compose
|
||||||
|
|
||||||
- name: Set up SSH agent (to use private key)
|
# Environment variables (we pass inputs to the action)
|
||||||
run: |
|
env:
|
||||||
mkdir -p ~/.ssh
|
REMOTE_HOST: ${{ inputs.remote_host }}
|
||||||
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
|
REMOTE_USER: ${{ inputs.remote_user }}
|
||||||
chmod 600 ~/.ssh/id_rsa
|
DEPLOYMENT_PATH: ${{ inputs.deployment_path }}
|
||||||
# Optional: add known hosts
|
DOCKER_COMPOSE_PATH: ${{ inputs.docker_compose_path }}
|
||||||
echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
|
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
chmod 644 ~/.ssh/known_hosts
|
SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }}
|
||||||
# Ensure SSH config
|
TIMEOUT: ${{ inputs.timeout }}
|
||||||
echo "Host ${REMOTE_HOST}" >> ~/.ssh/config
|
|
||||||
echo " HostName ${REMOTE_HOST}" >> ~/.ssh/config
|
|
||||||
echo " User ${REMOTE_USER}" >> ~/.ssh/config
|
|
||||||
echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
|
|
||||||
echo " StrictHostKeyChecking yes" >> ~/.ssh/config
|
|
||||||
echo " UserKnownHostsFile ~/.ssh/known_hosts" >> ~/.ssh/config
|
|
||||||
|
|
||||||
- name: Copy docker-compose.yml to remote host
|
# Optional: Set timeout for the entire action
|
||||||
run: |
|
# timeout-minutes: 10
|
||||||
# Ensure the remote path exists
|
|
||||||
mkdir -p "$(dirname "${DEPLOYMENT_PATH}")"
|
|
||||||
# Use scp to copy the file
|
|
||||||
scp -o StrictHostKeyChecking=yes -o UserKnownHostsFile= ~/.ssh/known_hosts \
|
|
||||||
-i ~/.ssh/id_rsa \
|
|
||||||
${COMPOSE_PATH} \
|
|
||||||
${REMOTE_USER}@${REMOTE_HOST}:"${DEPLOYMENT_PATH}"
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Deploy services via SSH
|
steps:
|
||||||
run: |
|
- name: Checkout code
|
||||||
# Run docker-compose up -d on the remote host
|
uses: actions/checkout@v4
|
||||||
ssh -o StrictHostKeyChecking=yes \
|
|
||||||
-o UserKnownHostsFile= ~/.ssh/known_hosts \
|
|
||||||
-i ~/.ssh/id_rsa \
|
|
||||||
${REMOTE_USER}@${REMOTE_HOST} \
|
|
||||||
"docker-compose -f ${DEPLOYMENT_PATH} up -d --timeout 300"
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Verify services are running
|
- name: Set up SSH config
|
||||||
run: |
|
run: |
|
||||||
ssh -o StrictHostKeyChecking=yes \
|
mkdir -p ~/.ssh
|
||||||
-o UserKnownHostsFile= ~/.ssh/known_hosts \
|
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
|
||||||
-i ~/.ssh/id_rsa \
|
chmod 600 ~/.ssh/id_rsa
|
||||||
${REMOTE_USER}@${REMOTE_HOST} \
|
|
||||||
"docker-compose -f ${DEPLOYMENT_PATH} ps"
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Final success message
|
echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
|
||||||
run: echo "✅ Docker Compose deployed successfully on ${REMOTE_HOST}"
|
chmod 644 ~/.ssh/known_hosts
|
||||||
|
|
||||||
|
# SSH config file
|
||||||
|
echo "Host ${REMOTE_HOST}" > ~/.ssh/config
|
||||||
|
echo " HostName ${REMOTE_HOST}" >> ~/.ssh/config
|
||||||
|
echo " User ${REMOTE_USER}" >> ~/.ssh/config
|
||||||
|
echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
|
||||||
|
echo " StrictHostKeyChecking yes" >> ~/.ssh/config
|
||||||
|
echo " UserKnownHostsFile ~/.ssh/known_hosts" >> ~/.ssh/config
|
||||||
|
|
||||||
|
- name: Copy docker-compose file to remote server
|
||||||
|
run: |
|
||||||
|
mkdir -p "$(dirname "${DEPLOYMENT_PATH}")"
|
||||||
|
scp -o StrictHostKeyChecking=yes \
|
||||||
|
-o UserKnownHostsFile= ~/.ssh/known_hosts \
|
||||||
|
-i ~/.ssh/id_rsa \
|
||||||
|
"${DOCKER_COMPOSE_PATH}" \
|
||||||
|
"${REMOTE_USER}@${REMOTE_HOST}:${DEPLOYMENT_PATH}"
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Deploy services via SSH
|
||||||
|
run: |
|
||||||
|
ssh -o StrictHostKeyChecking=yes \
|
||||||
|
-o UserKnownHostsFile= ~/.ssh/known_hosts \
|
||||||
|
-i ~/.ssh/id_rsa \
|
||||||
|
"${REMOTE_USER}@${REMOTE_HOST}" \
|
||||||
|
"docker-compose -f ${DEPLOYMENT_PATH} up -d --timeout ${TIMEOUT}"
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Verify services are running
|
||||||
|
run: |
|
||||||
|
ssh -o StrictHostKeyChecking=yes \
|
||||||
|
-o UserKnownHostsFile= ~/.ssh/known_hosts \
|
||||||
|
-i ~/.ssh/id_rsa \
|
||||||
|
"${REMOTE_USER}@${REMOTE_HOST}" \
|
||||||
|
"docker-compose -f ${DEPLOYMENT_PATH} ps"
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Final success message
|
||||||
|
run: echo "✅ Docker Compose deployed successfully on ${REMOTE_HOST}"
|
||||||
|
|||||||
Reference in New Issue
Block a user