name: Build and Push Docker Image on: push: branches: - main jobs: build-and-push: runs-on: self-hosted env: IMAGE_NAME: ${{ github.event.repository.name }} PORT: 54321 TEST_PORT: 54322 steps: - name: Checkout code uses: actions/checkout@v2 - name: Build Docker image run: | docker build -t "$IMAGE_NAME:latest" -t "$IMAGE_NAME:${{ github.run_number }}" . - name: Ensure no existing temp container run: | if [ "$(docker ps -aq -f name=temp-$IMAGE_NAME)" ]; then docker stop temp-$IMAGE_NAME || true docker rm temp-$IMAGE_NAME || true fi - name: Run temporary container for health check run: | docker run -d --name temp-$IMAGE_NAME -p $TEST_PORT:54321 $IMAGE_NAME:latest sleep 10 # Wait for the container to start if curl -f http://localhost:$TEST_PORT/health; then echo "Health check passed" docker stop temp-$IMAGE_NAME docker rm temp-$IMAGE_NAME else echo "Health check failed" docker logs temp-$IMAGE_NAME docker stop temp-$IMAGE_NAME docker rm temp-$IMAGE_NAME exit 1 fi - name: Stop and remove current container run: | if [ "$(docker ps -q -f name=$IMAGE_NAME)" ]; then docker stop $IMAGE_NAME || true docker rm $IMAGE_NAME || true fi - name: Run new container run: | docker run -d --name $IMAGE_NAME -p $PORT:54321 --restart=always \ -v "/volume2/docker/$IMAGE_NAME/data:/app/data" \ -e BUILD_NUMBER=${{ github.run_number }} \ "$IMAGE_NAME:latest" - name: Cleanup run: | docker image prune -a -f