97 lines
3.0 KiB
YAML
97 lines
3.0 KiB
YAML
name: 'Docker Compose Deploy'
|
|
description: 'Deploy application using Docker Compose'
|
|
|
|
inputs:
|
|
compose_file:
|
|
description: 'Path to docker-compose file'
|
|
required: false
|
|
default: 'docker-compose.yml'
|
|
project_name:
|
|
description: 'Docker Compose project name'
|
|
required: true
|
|
url:
|
|
description: 'Url of the deployed application'
|
|
required: true
|
|
environment_file:
|
|
description: 'Path to environment file'
|
|
required: false
|
|
default: '.env'
|
|
image_url:
|
|
description: 'Docker image tag to deploy'
|
|
required: false
|
|
default: 'latest'
|
|
registry:
|
|
description: 'Docker registry'
|
|
required: false
|
|
default: 'git.klemp.dev'
|
|
deployment_key:
|
|
description: 'SSH deployment private key'
|
|
required: true
|
|
|
|
runs:
|
|
using: 'composite'
|
|
steps:
|
|
- uses: webfactory/ssh-agent@v0.9.1
|
|
with:
|
|
ssh-private-key: ${{ inputs.deployment_key }}
|
|
|
|
- name: Create environment file
|
|
shell: bash
|
|
run: |
|
|
cat > ${{ inputs.environment_file }} << EOF
|
|
IMAGE_URL=${{ inputs.image_url }}
|
|
URL=${{ inputs.url }}
|
|
REGISTRY=${{ inputs.registry }}
|
|
PROJECT_NAME=${{ inputs.project_name }}
|
|
COMPOSE_PROJECT_NAME=${{ inputs.project_name }}
|
|
EOF
|
|
|
|
- name: Create Docker context
|
|
shell: bash
|
|
run: |
|
|
# Remove existing context if it exists
|
|
docker context rm deploy_target 2>/dev/null || true
|
|
|
|
# Create new Docker context
|
|
docker context create deploy_target \
|
|
--docker "host=ssh://${{ vars.ssh_user }}@${{ vars.ssh_host }}:${{ vars.ssh_port }}"
|
|
|
|
# Verify context works
|
|
docker --context deploy_target info
|
|
|
|
- name: Stop existing deployment
|
|
shell: bash
|
|
run: |
|
|
docker-compose --context deploy_target -f ${{ inputs.compose_file }} -p ${{ inputs.project_name }} down --remove-orphans || true
|
|
|
|
- name: Pull latest images
|
|
shell: bash
|
|
run: |
|
|
docker-compose --context deploy_target -f ${{ inputs.compose_file }} -p ${{ inputs.project_name }} pull
|
|
|
|
- name: Deploy with Docker Compose
|
|
id: deploy
|
|
shell: bash
|
|
run: |
|
|
# Start services
|
|
docker-compose --context deploy_target -f ${{ inputs.compose_file }} -p ${{ inputs.project_name }} up -d
|
|
|
|
# Wait for services to be healthy
|
|
echo "Waiting for services to start..."
|
|
sleep 10
|
|
|
|
# Get container names
|
|
CONTAINERS=$(docker-compose --context deploy_target -f ${{ inputs.compose_file }} -p ${{ inputs.project_name }} ps --services | tr '\n' ',' | sed 's/,$//')
|
|
echo "containers=$CONTAINERS" >> $GITHUB_OUTPUT
|
|
|
|
echo "✅ Deployment completed successfully!"
|
|
echo "🌐 URL: ${{ inputs.url }}"
|
|
echo "📦 Containers: $CONTAINERS"
|
|
|
|
- name: Show deployment status
|
|
shell: bash
|
|
run: |
|
|
echo "=== Deployment Status ==="
|
|
docker-compose --context deploy_target -f ${{ inputs.compose_file }} -p ${{ inputs.project_name }} ps
|
|
echo "========================="
|