| --- |
| name: 'build darwin python backend container images (reusable)' |
|
|
| on: |
| workflow_call: |
| inputs: |
| backend: |
| description: 'Backend to build' |
| required: true |
| type: string |
| build-type: |
| description: 'Build type (e.g., mps)' |
| default: '' |
| type: string |
| use-pip: |
| description: 'Use pip to install dependencies' |
| default: false |
| type: boolean |
| lang: |
| description: 'Programming language (e.g. go)' |
| default: 'python' |
| type: string |
| go-version: |
| description: 'Go version to use' |
| default: '1.24.x' |
| type: string |
| tag-suffix: |
| description: 'Tag suffix for the built image' |
| required: true |
| type: string |
| runs-on: |
| description: 'Runner to use' |
| default: 'macOS-14' |
| type: string |
| secrets: |
| dockerUsername: |
| required: false |
| dockerPassword: |
| required: false |
| quayUsername: |
| required: true |
| quayPassword: |
| required: true |
|
|
| jobs: |
| darwin-backend-build: |
| runs-on: ${{ inputs.runs-on }} |
| strategy: |
| matrix: |
| go-version: ['${{ inputs.go-version }}'] |
| steps: |
| - name: Clone |
| uses: actions/checkout@v6 |
| with: |
| submodules: true |
|
|
| - name: Setup Go ${{ matrix.go-version }} |
| uses: actions/setup-go@v5 |
| with: |
| go-version: ${{ matrix.go-version }} |
| cache: false |
|
|
| |
| - name: Display Go version |
| run: go version |
|
|
| - name: Dependencies |
| run: | |
| brew install protobuf grpc make protoc-gen-go protoc-gen-go-grpc libomp llvm |
| |
| - name: Build ${{ inputs.backend }}-darwin |
| run: | |
| make protogen-go |
| BACKEND=${{ inputs.backend }} BUILD_TYPE=${{ inputs.build-type }} USE_PIP=${{ inputs.use-pip }} make build-darwin-${{ inputs.lang }}-backend |
| |
| - name: Upload ${{ inputs.backend }}.tar |
| uses: actions/upload-artifact@v6 |
| with: |
| name: ${{ inputs.backend }}-tar |
| path: backend-images/${{ inputs.backend }}.tar |
|
|
| darwin-backend-publish: |
| needs: darwin-backend-build |
| if: github.event_name != 'pull_request' |
| runs-on: ubuntu-latest |
| steps: |
| - name: Download ${{ inputs.backend }}.tar |
| uses: actions/download-artifact@v7 |
| with: |
| name: ${{ inputs.backend }}-tar |
| path: . |
|
|
| - name: Install crane |
| run: | |
| curl -L https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz | tar -xz |
| sudo mv crane /usr/local/bin/ |
| |
| - name: Log in to DockerHub |
| run: | |
| echo "${{ secrets.dockerPassword }}" | crane auth login docker.io -u "${{ secrets.dockerUsername }}" --password-stdin |
| |
| - name: Log in to quay.io |
| run: | |
| echo "${{ secrets.quayPassword }}" | crane auth login quay.io -u "${{ secrets.quayUsername }}" --password-stdin |
| |
| - name: Docker meta |
| id: meta |
| uses: docker/metadata-action@v5 |
| with: |
| images: | |
| localai/localai-backends |
| tags: | |
| type=ref,event=branch |
| type=semver,pattern={{raw}} |
| type=sha |
| flavor: | |
| latest=auto |
| suffix=${{ inputs.tag-suffix }},onlatest=true |
| |
| - name: Docker meta |
| id: quaymeta |
| uses: docker/metadata-action@v5 |
| with: |
| images: | |
| quay.io/go-skynet/local-ai-backends |
| tags: | |
| type=ref,event=branch |
| type=semver,pattern={{raw}} |
| type=sha |
| flavor: | |
| latest=auto |
| suffix=${{ inputs.tag-suffix }},onlatest=true |
| |
| - name: Push Docker image (DockerHub) |
| run: | |
| for tag in $(echo "${{ steps.meta.outputs.tags }}" | tr ',' '\n'); do |
| crane push ${{ inputs.backend }}.tar $tag |
| done |
| |
| - name: Push Docker image (Quay) |
| run: | |
| for tag in $(echo "${{ steps.quaymeta.outputs.tags }}" | tr ',' '\n'); do |
| crane push ${{ inputs.backend }}.tar $tag |
| done |
| |