build-docker-image.yml 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. name: Build Docker Images
  2. on:
  3. push:
  4. branches:
  5. - main
  6. tags:
  7. - "v*"
  8. jobs:
  9. build:
  10. runs-on: ubuntu-latest-16c64g
  11. strategy:
  12. matrix:
  13. target: [webui, server]
  14. backend: [cuda, cpu]
  15. steps:
  16. - uses: actions/checkout@v4
  17. - name: Set up Docker Buildx
  18. uses: docker/setup-buildx-action@v3
  19. - name: Get Version
  20. run: |
  21. if [[ $GITHUB_REF == refs/tags/v* ]]; then
  22. version=$(basename ${GITHUB_REF})
  23. else
  24. version=nightly
  25. fi
  26. echo "version=${version}" >> $GITHUB_ENV
  27. echo "Current version: ${version}"
  28. - name: Login to Docker Hub
  29. uses: docker/login-action@v3
  30. with:
  31. username: ${{ secrets.DOCKER_USER }}
  32. password: ${{ secrets.DOCKER_PAT }}
  33. - name: Set platform for CPU builds
  34. id: platform
  35. run: |
  36. if [ "${{ matrix.backend }}" = "cpu" ]; then
  37. echo "platforms=linux/amd64,linux/arm64" >> $GITHUB_OUTPUT
  38. else
  39. echo "platforms=linux/amd64" >> $GITHUB_OUTPUT
  40. fi
  41. - name: Build and Push ${{ matrix.target }}-${{ matrix.backend }} Image
  42. uses: docker/build-push-action@v6
  43. with:
  44. context: .
  45. file: docker/Dockerfile
  46. platforms: ${{ steps.platform.outputs.platforms }}
  47. push: true
  48. target: ${{ matrix.target }}
  49. build-args: |
  50. BACKEND=${{ matrix.backend }}
  51. UV_EXTRA=${{ matrix.backend == 'cuda' && 'cu126' || 'cpu' }}
  52. tags: |
  53. fishaudio/fish-speech-${{ matrix.target }}:${{ env.version }}-${{ matrix.backend }}
  54. fishaudio/fish-speech-${{ matrix.target }}:latest-${{ matrix.backend }}
  55. outputs: type=image,oci-mediatypes=true,compression=zstd,compression-level=3,force-compression=true
  56. cache-from: type=registry,ref=fishaudio/fish-speech-${{ matrix.target }}:latest-${{ matrix.backend }}
  57. cache-to: type=inline
  58. update-readme:
  59. runs-on: ubuntu-latest
  60. needs: build
  61. if: github.ref == 'refs/heads/main'
  62. steps:
  63. - name: Push README to Dockerhub
  64. uses: peter-evans/dockerhub-description@v4
  65. with:
  66. username: ${{ secrets.DOCKER_USER }}
  67. password: ${{ secrets.DOCKER_PAT }}
  68. repository: fishaudio/fish-speech