Test llama stack build #24
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: Test Llama Stack Build | |
| run-name: Test llama stack build | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - 'src/llama_stack/cli/stack/build.py' | |
| - 'src/llama_stack/cli/stack/_build.py' | |
| - 'src/llama_stack/core/build.*' | |
| - 'src/llama_stack/core/*.sh' | |
| - '.github/workflows/providers-build.yml' | |
| - 'src/llama_stack/distributions/**' | |
| - 'pyproject.toml' | |
| - 'containers/Containerfile' | |
| - '.dockerignore' | |
| pull_request: | |
| paths: | |
| - 'src/llama_stack/cli/stack/build.py' | |
| - 'src/llama_stack/cli/stack/_build.py' | |
| - 'src/llama_stack/core/build.*' | |
| - 'src/llama_stack/core/*.sh' | |
| - '.github/workflows/providers-build.yml' | |
| - 'src/llama_stack/distributions/**' | |
| - 'pyproject.toml' | |
| - 'containers/Containerfile' | |
| - '.dockerignore' | |
| schedule: | |
| - cron: '0 0 * * *' # Daily at 12 AM UTC | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| generate-matrix: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| distros: ${{ steps.set-matrix.outputs.distros }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - name: Generate Distribution List | |
| id: set-matrix | |
| run: | | |
| distros=$(ls -d src/llama_stack/distributions/*/ 2>/dev/null | \ | |
| awk -F'/' '{print $(NF-1)}' | \ | |
| grep -v '^__pycache__$' | \ | |
| grep -v '^ci-tests$' | \ | |
| jq -R -s -c 'split("\n") | map(select(length > 0))') | |
| echo "distros=$distros" >> "$GITHUB_OUTPUT" | |
| build: | |
| needs: generate-matrix | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| distro: ${{ fromJson(needs.generate-matrix.outputs.distros) }} | |
| image-type: [venv, container] | |
| fail-fast: false # We want to run all jobs even if some fail | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - name: Install dependencies | |
| uses: ./.github/actions/setup-runner | |
| - name: Install distribution into venv | |
| if: matrix.image-type == 'venv' | |
| run: | | |
| uv run llama stack list-deps ${{ matrix.distro }} | xargs -L1 uv pip install | |
| - name: Build container image | |
| if: matrix.image-type == 'container' | |
| run: | | |
| BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=${{ matrix.distro }}" | |
| if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then | |
| BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL" | |
| fi | |
| if [ -n "${UV_INDEX_STRATEGY:-}" ]; then | |
| BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY" | |
| fi | |
| docker build . \ | |
| -f containers/Containerfile \ | |
| $BUILD_ARGS \ | |
| --tag llama-stack:${{ matrix.distro }}-ci | |
| build-arm64: | |
| if: github.event_name == 'schedule' | |
| needs: generate-matrix | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| distro: ${{ fromJson(needs.generate-matrix.outputs.distros) }} | |
| exclude: | |
| # meta-reference-gpu depends on fbgemm-gpu-genai which only has x86_64 wheels | |
| - distro: meta-reference-gpu | |
| fail-fast: false # We want to run all jobs even if some fail | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - name: Install dependencies | |
| uses: ./.github/actions/setup-runner | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f | |
| - name: Build ARM64 container image | |
| run: | | |
| BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=${{ matrix.distro }}" | |
| if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then | |
| BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL" | |
| fi | |
| if [ -n "${UV_INDEX_STRATEGY:-}" ]; then | |
| BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY" | |
| fi | |
| docker buildx build --platform linux/arm64 --load . \ | |
| -f containers/Containerfile \ | |
| $BUILD_ARGS \ | |
| --tag llama-stack:${{ matrix.distro }}-arm64-ci | |
| build-single-provider: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - name: Install dependencies | |
| uses: ./.github/actions/setup-runner | |
| - name: Build a single provider | |
| run: | | |
| uv pip install -e . | |
| uv run --no-sync llama stack list-deps --providers inference=remote::ollama | xargs -L1 uv pip install | |
| build-custom-container-distribution: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - name: Install dependencies | |
| uses: ./.github/actions/setup-runner | |
| - name: Build container image | |
| run: | | |
| BASE_IMAGE=$(yq -r '.distribution_spec.container_image // "python:3.12-slim"' src/llama_stack/distributions/ci-tests/config.yaml) | |
| BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=ci-tests" | |
| BUILD_ARGS="$BUILD_ARGS --build-arg BASE_IMAGE=$BASE_IMAGE" | |
| BUILD_ARGS="$BUILD_ARGS --build-arg RUN_CONFIG_PATH=/workspace/src/llama_stack/distributions/ci-tests/config.yaml" | |
| if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then | |
| BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL" | |
| fi | |
| if [ -n "${UV_INDEX_STRATEGY:-}" ]; then | |
| BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY" | |
| fi | |
| docker build . \ | |
| -f containers/Containerfile \ | |
| $BUILD_ARGS \ | |
| -t llama-stack:ci-tests | |
| - name: Inspect the container image entrypoint | |
| run: | | |
| IMAGE_ID=$(docker images --format "{{.Repository}}:{{.Tag}}" | head -n 1) | |
| if [ -z "$IMAGE_ID" ]; then | |
| echo "No image found" | |
| exit 1 | |
| fi | |
| entrypoint=$(docker inspect --format '{{ .Config.Entrypoint }}' $IMAGE_ID) | |
| echo "Entrypoint: $entrypoint" | |
| if [ "$entrypoint" != "[/usr/local/bin/llama-stack-entrypoint.sh]" ]; then | |
| echo "Entrypoint is not correct" | |
| exit 1 | |
| fi | |
| build-ubi9-container-distribution: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - name: Install dependencies | |
| uses: ./.github/actions/setup-runner | |
| - name: Pin distribution to UBI9 base | |
| run: | | |
| yq -i ' | |
| .distribution_spec.container_image = "registry.access.redhat.com/ubi9:latest" | |
| ' src/llama_stack/distributions/ci-tests/config.yaml | |
| - name: Build UBI9 container image | |
| run: | | |
| BASE_IMAGE=$(yq -r '.distribution_spec.container_image // "registry.access.redhat.com/ubi9:latest"' src/llama_stack/distributions/ci-tests/config.yaml) | |
| BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=ci-tests" | |
| BUILD_ARGS="$BUILD_ARGS --build-arg BASE_IMAGE=$BASE_IMAGE" | |
| BUILD_ARGS="$BUILD_ARGS --build-arg RUN_CONFIG_PATH=/workspace/src/llama_stack/distributions/ci-tests/config.yaml" | |
| if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then | |
| BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL" | |
| fi | |
| if [ -n "${UV_INDEX_STRATEGY:-}" ]; then | |
| BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY" | |
| fi | |
| docker build . \ | |
| -f containers/Containerfile \ | |
| $BUILD_ARGS \ | |
| -t llama-stack:ci-tests-ubi9 | |
| - name: Inspect UBI9 image | |
| run: | | |
| IMAGE_ID=$(docker images --format "{{.Repository}}:{{.Tag}}" | head -n 1) | |
| if [ -z "$IMAGE_ID" ]; then | |
| echo "No image found" | |
| exit 1 | |
| fi | |
| entrypoint=$(docker inspect --format '{{ .Config.Entrypoint }}' $IMAGE_ID) | |
| echo "Entrypoint: $entrypoint" | |
| if [ "$entrypoint" != "[/usr/local/bin/llama-stack-entrypoint.sh]" ]; then | |
| echo "Entrypoint is not correct" | |
| exit 1 | |
| fi | |
| echo "Checking /etc/os-release in $IMAGE_ID" | |
| docker run --rm --entrypoint sh "$IMAGE_ID" -c \ | |
| 'source /etc/os-release && echo "$ID"' \ | |
| | grep -qE '^(rhel|ubi)$' \ | |
| || { echo "Base image is not UBI 9!"; exit 1; } | |
| build-starter-ubi9-arm64-container: | |
| if: github.event_name == 'schedule' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 | |
| - name: Install dependencies | |
| uses: ./.github/actions/setup-runner | |
| - name: Set up QEMU for ARM64 emulation | |
| uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f | |
| - name: Build starter distribution on UBI9 ARM64 | |
| run: | | |
| BASE_IMAGE="registry.access.redhat.com/ubi9:latest" | |
| BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=starter" | |
| BUILD_ARGS="$BUILD_ARGS --build-arg BASE_IMAGE=$BASE_IMAGE" | |
| if [ -n "${UV_EXTRA_INDEX_URL:-}" ]; then | |
| BUILD_ARGS="$BUILD_ARGS --build-arg UV_EXTRA_INDEX_URL=$UV_EXTRA_INDEX_URL" | |
| fi | |
| if [ -n "${UV_INDEX_STRATEGY:-}" ]; then | |
| BUILD_ARGS="$BUILD_ARGS --build-arg UV_INDEX_STRATEGY=$UV_INDEX_STRATEGY" | |
| fi | |
| docker buildx build --platform linux/arm64 --load . \ | |
| -f containers/Containerfile \ | |
| $BUILD_ARGS \ | |
| --tag llama-stack:starter-ubi9-arm64 | |
| - name: Inspect starter UBI9 ARM64 image | |
| run: | | |
| IMAGE_ID=$(docker images --format "{{.Repository}}:{{.Tag}}" | head -n 1) | |
| if [ -z "$IMAGE_ID" ]; then | |
| echo "No image found" | |
| exit 1 | |
| fi | |
| entrypoint=$(docker inspect --format '{{ .Config.Entrypoint }}' $IMAGE_ID) | |
| echo "Entrypoint: $entrypoint" | |
| if [ "$entrypoint" != "[/usr/local/bin/llama-stack-entrypoint.sh]" ]; then | |
| echo "Entrypoint is not correct" | |
| exit 1 | |
| fi | |
| echo "Checking /etc/os-release in $IMAGE_ID" | |
| docker run --rm --platform linux/arm64 --entrypoint sh "$IMAGE_ID" -c \ | |
| 'source /etc/os-release && echo "$ID"' \ | |
| | grep -qE '^(rhel|ubi)$' \ | |
| || { echo "Base image is not UBI 9!"; exit 1; } |