name: .NET permissions: read-all on: push: tags: - 'v*' workflow_dispatch: jobs: deploy: runs-on: ubuntu-latest env: APPSETTINGS_PATH: ui/Sufi.Demo.PeopleDirectory.UI/Server/appsettings.json IMAGE_NAME: sufiaziz/demo-contact steps: - name: 🔧 Install dependencies run: | apt-get update apt-get install -y curl sed ca-certificates gnupg # Install Docker CLI with Compose plugin install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ tee /etc/apt/sources.list.d/docker.list > /dev/null apt-get update apt-get install -y docker-ce-cli docker-compose-plugin # Verify installation docker compose version - name: 🔎 Checkout files uses: actions/checkout@v5 - name: 💎 Cache NuGet packages uses: actions/cache@v4 id: cache-nuget with: path: | ~/.nuget/packages ~/.local/share/NuGet/Cache-* key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }} restore-keys: | ${{ runner.os }}-nuget- - name: 🎽 Setup .NET uses: actions/setup-dotnet@v5 with: dotnet-version: '10.0.x' - name: 🔄 Replace placeholders in docker-compose.yml run: | echo "Replacing placeholders in docker-compose.yml..." echo "Replace connection string..." sed -i "s|#ConnectionString#|${{ secrets.CONNECTION_STRING }}|g" docker-compose.yml echo "Replace license key..." sed -i "s|#LuckyPennyLicenseKey#|${{ secrets.LUCKY_PENNY_LICENSE_KEY }}|g" docker-compose.yml echo "Replace SEQ settings..." sed -i "s|#SEQ_URL#|${{ vars.SEQ_URL }}|g" docker-compose.yml sed -i "s|#SEQ_APIKEY#|${{ secrets.SEQ_APIKEY }}|g" docker-compose.yml - name: 🐳 Build Docker image run: | docker build -t $IMAGE_NAME:latest \ --build-arg BUILD_PROJ="${{ vars.BUILD_PROJ }}" \ -f Dockerfile . echo "Docker image built successfully" - name: 🛑 Stop existing containers run: | echo "Stopping existing containers via docker compose..." docker compose down || echo "No existing containers to stop" - name: 🚀 Start containers with docker compose run: | echo "Starting containers via docker compose..." docker compose up -d echo "Containers started successfully at $(date)" - name: ✅ Verify container status run: | echo "Waiting for containers to be healthy..." sleep 5 echo "Listing running containers:" docker compose ps echo "" echo "Recent logs:" docker compose logs --tail=20 # Check if main service is running if docker compose ps | grep -q "Up"; then echo "Containers are running successfully" else echo "Error: Containers failed to start" docker compose logs exit 1 fi