Files
phoenix/.gitea/actions/deploy/action.yml
Tobias Klemp 960770d73b
Some checks failed
CI / build-and-test (push) Failing after 2m23s
add debug
2026-01-02 01:49:44 +01:00

140 lines
4.3 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: Debug environment file
shell: bash
run: |
echo "=== ENVIRONMENT FILE DEBUG ==="
echo "File path: ${{ inputs.environment_file }}"
echo ""
# Check if file exists
if [ -f "${{ inputs.environment_file }}" ]; then
echo "✅ Environment file exists"
# Show file size and permissions
ls -la "${{ inputs.environment_file }}"
echo ""
# Show file contents
echo "📄 File contents:"
echo "---"
cat "${{ inputs.environment_file }}"
echo "---"
echo ""
# Show line count
LINE_COUNT=$(wc -l < "${{ inputs.environment_file }}")
echo "📊 File has $LINE_COUNT lines"
# Check for empty lines or whitespace issues
echo "🔍 Checking for issues:"
if grep -q "^$" "${{ inputs.environment_file }}"; then
echo "⚠️ File contains empty lines"
else
echo "✅ No empty lines found"
fi
# Validate each variable is set
echo "🔧 Variable validation:"
while IFS='=' read -r key value; do
if [ -n "$key" ] && [ -n "$value" ]; then
echo " ✅ $key = $value"
elif [ -n "$key" ]; then
echo " ❌ $key is empty"
fi
done < "${{ inputs.environment_file }}"
else
echo "❌ Environment file does not exist!"
fi
echo "=============================="
- name: Create Docker context
shell: bash
run: |
docker context rm deploy_target 2>/dev/null || true
docker context create deploy_target \
--docker "host=ssh://${{ vars.ssh_user }}@${{ vars.ssh_host }}:${{ vars.ssh_port }}"
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: |
docker-compose --context deploy_target -f ${{ inputs.compose_file }} -p ${{ inputs.project_name }} up -d
echo "Waiting for services to start..."
sleep 10
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 "========================="