Merge pull request #6 from StacklokLabs/upgrade_31-07-2025ii #15
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | --- | |
| name: Build and Push to ECR | |
| 'on': | |
| push: | |
| branches: [stacklok-main, main] | |
| paths: | |
| - 'Dockerfile' | |
| - 'helm/librechat/values.yaml' | |
| - 'helm/librechat/**' | |
| - 'helm/librechat-rag-api/**' | |
| - '.github/workflows/**' | |
| workflow_dispatch: | |
| env: | |
| AWS_REGION: us-east-1 | |
| ECR_REGISTRY: 781189302813.dkr.ecr.us-east-1.amazonaws.com | |
| permissions: | |
| contents: read | |
| id-token: write | |
| jobs: | |
| build-and-push: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Install yq | |
| run: | | |
| sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 | |
| sudo chmod a+x /usr/local/bin/yq | |
| - name: Set version | |
| id: version | |
| run: | | |
| echo "Searching for version in values.yaml..." | |
| cat helm/librechat/values.yaml | |
| echo "Extracting version..." | |
| VERSION=$(yq -r '.image.tag // ""' helm/librechat/values.yaml) | |
| echo "Extracted version: '$VERSION'" | |
| if [ -z "$VERSION" ]; then | |
| echo "No version found, using default" | |
| VERSION="1.7.3" | |
| else | |
| # Remove 'v' prefix if present | |
| VERSION=${VERSION#v} | |
| echo "Version after removing potential 'v' prefix: $VERSION" | |
| fi | |
| # Validate version format | |
| if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | |
| echo "Error: Invalid version format: $VERSION" | |
| echo "Using default version" | |
| VERSION="1.7.3" | |
| fi | |
| echo "Final version: $VERSION" | |
| echo "version=$VERSION" >> "$GITHUB_OUTPUT" | |
| - name: Configure AWS credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: arn:aws:iam::781189302813:role/github-actions-research | |
| aws-region: ${{ env.AWS_REGION }} | |
| audience: sts.amazonaws.com | |
| - name: Login to Amazon ECR | |
| id: login-ecr | |
| uses: aws-actions/amazon-ecr-login@v2 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build and push LibreChat image | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| push: true | |
| platforms: linux/arm64,linux/amd64 | |
| tags: >- | |
| ${{ env.ECR_REGISTRY }}/librechat:${{ steps.version.outputs.version }} | |
| # Use official MongoDB image instead of building custom one | |
| - name: Pull and push MongoDB image | |
| run: | | |
| docker pull --platform linux/amd64 mongo:8.0.3 | |
| docker pull --platform linux/arm64 mongo:8.0.3 | |
| docker tag mongo:8.0.3 ${{ env.ECR_REGISTRY }}/mongodb:8.0.3-amd64 | |
| docker tag mongo:8.0.3 ${{ env.ECR_REGISTRY }}/mongodb:8.0.3-arm64 | |
| docker push ${{ env.ECR_REGISTRY }}/mongodb:8.0.3-amd64 | |
| docker push ${{ env.ECR_REGISTRY }}/mongodb:8.0.3-arm64 | |
| docker manifest create ${{ env.ECR_REGISTRY }}/mongodb:8.0.3 \ | |
| ${{ env.ECR_REGISTRY }}/mongodb:8.0.3-arm64 \ | |
| ${{ env.ECR_REGISTRY }}/mongodb:8.0.3-amd64 | |
| docker manifest push ${{ env.ECR_REGISTRY }}/mongodb:8.0.3 | |
| # Use official Meilisearch image instead of building custom one | |
| - name: Pull and push Meilisearch image | |
| run: | | |
| docker pull --platform linux/amd64 getmeili/meilisearch:v1.7.3 | |
| docker pull --platform linux/arm64 getmeili/meilisearch:v1.7.3 | |
| docker tag getmeili/meilisearch:v1.7.3 ${{ env.ECR_REGISTRY }}/meilisearch:v1.7.3-amd64 | |
| docker tag getmeili/meilisearch:v1.7.3 ${{ env.ECR_REGISTRY }}/meilisearch:v1.7.3-arm64 | |
| docker push ${{ env.ECR_REGISTRY }}/meilisearch:v1.7.3-amd64 | |
| docker push ${{ env.ECR_REGISTRY }}/meilisearch:v1.7.3-arm64 | |
| docker manifest create ${{ env.ECR_REGISTRY }}/meilisearch:v1.7.3 \ | |
| ${{ env.ECR_REGISTRY }}/meilisearch:v1.7.3-arm64 \ | |
| ${{ env.ECR_REGISTRY }}/meilisearch:v1.7.3-amd64 | |
| docker manifest push ${{ env.ECR_REGISTRY }}/meilisearch:v1.7.3 | |
| - name: Set up Helm | |
| uses: azure/setup-helm@v3 | |
| with: | |
| version: 'v3.12.3' | |
| - name: Package Helm Charts | |
| run: | | |
| # Debug: Show current directory | |
| pwd | |
| echo "Directory contents before packaging:" | |
| ls -la | |
| # Package LibreChat chart | |
| echo "Packaging LibreChat chart..." | |
| helm dependency update helm/librechat | |
| helm package helm/librechat | |
| # Verify LibreChat chart was created | |
| if [ ! -f librechat-*.tgz ]; then | |
| echo "Error: LibreChat chart package was not created" | |
| exit 1 | |
| fi | |
| # Package LibreChat RAG API chart | |
| echo "Packaging LibreChat RAG API chart..." | |
| helm dependency update helm/librechat-rag-api | |
| helm package helm/librechat-rag-api | |
| # Verify RAG API chart was created | |
| if [ ! -f librechat-rag-api-*.tgz ]; then | |
| echo "Error: LibreChat RAG API chart package was not created" | |
| exit 1 | |
| fi | |
| echo "Directory contents after packaging:" | |
| ls -la *.tgz | |
| - name: Push Helm Charts to ECR | |
| run: | | |
| # Create ECR repository for LibreChat chart if it doesn't exist | |
| aws ecr describe-repositories --repository-names librechat || \ | |
| aws ecr create-repository --repository-name librechat | |
| aws ecr describe-repositories --repository-names librechat-rag-api || \ | |
| aws ecr create-repository --repository-name librechat-rag-api | |
| # Login to ECR | |
| aws ecr get-login-password --region ${{ env.AWS_REGION }} | \ | |
| helm registry login --username AWS --password-stdin ${{ env.ECR_REGISTRY }} | |
| # Push LibreChat chart | |
| echo "Pushing LibreChat chart..." | |
| LIBRECHAT_CHART=$(ls librechat-[0-9]*.tgz 2>/dev/null || true) | |
| if [ -z "$LIBRECHAT_CHART" ]; then | |
| echo "Error: LibreChat chart package not found in root directory" | |
| echo "Current directory contents:" | |
| ls -la | |
| exit 1 | |
| fi | |
| echo "Found chart: $LIBRECHAT_CHART" | |
| helm push "$LIBRECHAT_CHART" "oci://${{ env.ECR_REGISTRY }}" | |
| # Push LibreChat RAG API chart | |
| echo "Pushing LibreChat RAG API chart..." | |
| RAG_CHART=$(ls librechat-rag-api-[0-9]*.tgz 2>/dev/null || true) | |
| if [ -z "$RAG_CHART" ]; then | |
| echo "Error: LibreChat RAG API chart package not found in root directory" | |
| echo "Current directory contents:" | |
| ls -la | |
| exit 1 | |
| fi | |
| echo "Found chart: $RAG_CHART" | |
| helm push "$RAG_CHART" "oci://${{ env.ECR_REGISTRY }}" |