Skip to content

Merge pull request #6 from StacklokLabs/upgrade_31-07-2025ii #15

Merge pull request #6 from StacklokLabs/upgrade_31-07-2025ii

Merge pull request #6 from StacklokLabs/upgrade_31-07-2025ii #15

---
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 }}"