name: Docker Compose Build Latest Main Image Tag (Manual Dispatch) on: workflow_dispatch: permissions: contents: read packages: write jobs: build: runs-on: ubuntu-latest strategy: matrix: include: - target: api-build file: Dockerfile.multi image_name: librechat-api - target: node file: Dockerfile image_name: librechat steps: - name: Checkout uses: actions/checkout@v4 with: ref: main fetch-depth: 0 - name: Fetch tags and set the latest tag run: | set -euo pipefail git fetch --tags --force LATEST_TAG=$(git tag --list 'v[0-9]*' --sort=-v:refname | grep -E '^v[0-9]+[.][0-9]+[.][0-9]+$' | head -n 1) if [ -z "$LATEST_TAG" ]; then echo "::error::No stable v tag found" exit 1 fi printf 'LATEST_TAG=%s\n' "$LATEST_TAG" >> "$GITHUB_ENV" - name: Compute build metadata run: | printf 'BUILD_COMMIT=%s\n' "$(git rev-parse HEAD)" >> "$GITHUB_ENV" printf 'BUILD_BRANCH=main\n' >> "$GITHUB_ENV" printf 'BUILD_DATE=%s\n' "$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> "$GITHUB_ENV" # Set up QEMU - name: Set up QEMU uses: docker/setup-qemu-action@v3 # Set up Docker Buildx - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 # Log in to GitHub Container Registry - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} # Login to Docker Hub - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} # Prepare the environment - name: Prepare environment run: | cp .env.example .env # Build and push Docker images for each target - name: Build and push Docker images uses: docker/build-push-action@v5 with: context: . file: ${{ matrix.file }} push: true tags: | ghcr.io/${{ github.repository_owner }}/${{ matrix.image_name }}:${{ env.LATEST_TAG }} ghcr.io/${{ github.repository_owner }}/${{ matrix.image_name }}:latest ${{ secrets.DOCKERHUB_USERNAME }}/${{ matrix.image_name }}:${{ env.LATEST_TAG }} ${{ secrets.DOCKERHUB_USERNAME }}/${{ matrix.image_name }}:latest platforms: linux/amd64,linux/arm64 target: ${{ matrix.target }} build-args: | BUILD_COMMIT=${{ env.BUILD_COMMIT }} BUILD_BRANCH=${{ env.BUILD_BRANCH }} BUILD_DATE=${{ env.BUILD_DATE }}