name: Publish Docker image on: push: branches: [main] release: types: [published] workflow_dispatch: jobs: build_and_push: runs-on: ubuntu-latest strategy: matrix: include: - dockerfile: "Dockerfile" platforms: "linux/amd64" tag_name: "cpu" - dockerfile: "nvidia.Dockerfile" platforms: "linux/amd64" tag_name: "cuda" steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Lowercase Actor and Extract Repo Name run: | echo "ACTOR_LOWER=$(echo ${{ github.actor }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV echo "REPO_NAME=$(echo ${{ github.repository }} | cut -d'/' -f 2)" >> $GITHUB_ENV - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ env.ACTOR_LOWER }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to DockerHub uses: docker/login-action@v3 with: username: ${{ vars.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push Docker image uses: docker/build-push-action@v5 with: context: . file: ./${{ matrix.dockerfile }} platforms: ${{ matrix.platforms }} push: true tags: | ghcr.io/${{ env.ACTOR_LOWER }}/${{ env.REPO_NAME }}:${{ matrix.tag_name }}-${{ github.sha }} ghcr.io/${{ env.ACTOR_LOWER }}/${{ env.REPO_NAME }}:${{ matrix.tag_name }} ghcr.io/${{ env.ACTOR_LOWER }}/${{ env.REPO_NAME }}:latest ${{ vars.DOCKERHUB_USERNAME }}/${{ env.REPO_NAME }}:${{ matrix.tag_name }}-${{ github.sha }} ${{ vars.DOCKERHUB_USERNAME }}/${{ env.REPO_NAME }}:${{ matrix.tag_name }} ${{ vars.DOCKERHUB_USERNAME }}/${{ env.REPO_NAME }}:latest - name: Docker Hub Description uses: peter-evans/dockerhub-description@v3.4.2 with: username: ${{ vars.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} repository: ${{ vars.DOCKERHUB_USERNAME }}/${{ env.REPO_NAME }}