1010 fail-fast : false
1111 matrix :
1212 mode : ["server", "library"]
13- environment : ["ci", "azure"]
13+ environment : ["ci", "azure", "vertexai" ]
1414
1515 name : " E2E: ${{ matrix.mode }} mode / ${{ matrix.environment }}"
1616
5252 - name : Load lightspeed-stack.yaml configuration
5353 run : |
5454 MODE="${{ matrix.mode }}"
55- CONFIG_FILE="tests/e2e/configuration/lightspeed-stack-${MODE}-mode.yaml"
56-
55+ CONFIG_FILE="tests/e2e/configuration/${MODE}-mode/lightspeed-stack.yaml"
5756 echo "Loading configuration for ${MODE} mode"
5857 echo "Source: ${CONFIG_FILE}"
5958
@@ -91,46 +90,85 @@ jobs:
9190 echo "✅ Successfully obtained Azure access token."
9291 echo "AZURE_API_KEY=$ACCESS_TOKEN" >> $GITHUB_ENV
9392
93+ - name : Save VertexAI service account key to file
94+ if : matrix.environment == 'vertexai'
95+ env :
96+ GOOGLE_SA_KEY : ${{ secrets.GOOGLE_SA_KEY }}
97+ run : |
98+ echo "Setting up Google Cloud service account credentials..."
99+
100+ if [ -z "$GOOGLE_SA_KEY" ]; then
101+ echo "❌ GOOGLE_SA_KEY is not set. Please configure the secret in GitHub repository settings."
102+ exit 1
103+ fi
104+
105+ GCP_KEYS_PATH=./tmp/.gcp-keys
106+ echo "GCP_KEYS_PATH=$GCP_KEYS_PATH" >> $GITHUB_ENV
107+
108+ mkdir -p $GCP_KEYS_PATH
109+
110+ echo "Writing service account key to file..."
111+
112+ # Decode from base64, needed because GH changes the key if using the raw key
113+ printf '%s' "$GOOGLE_SA_KEY" | base64 -d > $GCP_KEYS_PATH/gcp-key.json
114+
115+ # Verify the file was created and is valid JSON
116+ if [ ! -f "$GCP_KEYS_PATH/gcp-key.json" ]; then
117+ echo "❌ Failed to create gcp-key.json file"
118+ exit 1
119+ fi
120+
121+ if ! jq empty "$GCP_KEYS_PATH/gcp-key.json" 2>/dev/null; then
122+ echo "❌ gcp-key.json is not valid JSON"
123+ exit 1
124+ fi
125+ echo "✅ gcp-key.json is valid JSON"
126+
127+ # Set proper permissions (readable by all, needed for container user 1001)
128+ chmod 644 $GCP_KEYS_PATH/gcp-key.json
129+
130+ echo "GOOGLE_APPLICATION_CREDENTIALS=/opt/app-root/.gcp-keys/gcp-key.json" >> $GITHUB_ENV
131+
94132 - name : Select and configure run.yaml
95133 env :
96- CONFIG_MODE : ${{ matrix.mode }}
134+ CONFIG_ENVIRONMENT : ${{ matrix.environment || 'ci' }}
97135 run : |
98136 CONFIGS_DIR="tests/e2e/configs"
99- MODE ="$CONFIG_MODE "
137+ ENVIRONMENT ="$CONFIG_ENVIRONMENT "
100138
101- echo "Deployment mode: $MODE "
139+ echo "Looking for configurations in $CONFIGS_DIR/ "
102140
103- # Select config based on mode:
104- # - library mode: run-library.yaml (llama-stack 0.3.0 format)
105- # - server mode: run-ci.yaml (original format)
106- if [ "$MODE" == "library" ]; then
107- CONFIG_FILE="$CONFIGS_DIR/run-library.yaml"
141+ # List available configurations
142+ if [ -d "$CONFIGS_DIR" ]; then
143+ echo "Available configurations:"
144+ ls -la "$CONFIGS_DIR"/*.yaml 2>/dev/null || echo "No YAML files found in $CONFIGS_DIR/"
108145 else
109- CONFIG_FILE="$CONFIGS_DIR/run-ci.yaml"
146+ echo "Configs directory '$CONFIGS_DIR' not found!"
147+ exit 1
110148 fi
111149
112- echo "Using configuration: $CONFIG_FILE"
150+ # Determine which config file to use
151+ CONFIG_FILE="$CONFIGS_DIR/run-$ENVIRONMENT.yaml"
152+
153+ echo "Looking for: $CONFIG_FILE"
113154
114- if [ ! -f "$CONFIG_FILE" ]; then
115- echo "❌ Configuration not found: $CONFIG_FILE"
116- echo "Available configs:"
117- ls -la "$CONFIGS_DIR"/*.yaml
155+ if [ -f "$CONFIG_FILE" ]; then
156+ echo "✅ Found config for environment: $ENVIRONMENT"
157+ cp "$CONFIG_FILE" run.yaml
158+ echo "✅ Config copied to run.yaml"
159+ else
160+ echo "❌ Configuration file not found: $CONFIG_FILE"
161+ echo "Available files in $CONFIGS_DIR:"
162+ ls -la "$CONFIGS_DIR/"
118163 exit 1
119164 fi
120-
121- cp "$CONFIG_FILE" run.yaml
122- echo "✅ Configuration copied to run.yaml"
123165
124166 - name : Show final configuration
125167 run : |
126168 echo "=== Configuration Summary ==="
127169 echo "Deployment mode: ${{ matrix.mode }}"
128170 echo "Environment: ${{ matrix.environment }}"
129- if [ "${{ matrix.mode }}" == "library" ]; then
130- echo "Source config: tests/e2e/configs/run-library.yaml"
131- else
132- echo "Source config: tests/e2e/configs/run-ci.yaml"
133- fi
171+ echo "Source config: tests/e2e/configs/run-ci.yaml"
134172 echo ""
135173 echo "=== Configuration Preview ==="
136174 echo "Providers: $(grep -c "provider_id:" run.yaml)"
@@ -139,19 +177,37 @@ jobs:
139177 echo "=== lightspeed-stack.yaml ==="
140178 grep -A 3 "llama_stack:" lightspeed-stack.yaml
141179
180+ - name : Docker Login for quay access
181+ env :
182+ QUAY_ROBOT_USERNAME : ${{ secrets.QUAY_DOWNSTREAM_USERNAME }}
183+ QUAY_ROBOT_TOKEN : ${{ secrets.QUAY_DOWNSTREAM_TOKEN }}
184+ run : |
185+ echo $QUAY_ROBOT_TOKEN | docker login quay.io -u=$QUAY_ROBOT_USERNAME --password-stdin
186+
187+ - name : Create dummy GCP keys directory
188+ if : matrix.environment != 'vertexai'
189+ run : |
190+ echo "Creating dummy GCP keys directory for non-VertexAI environment..."
191+ mkdir -p ./tmp/.gcp-keys-dummy
192+ echo "✅ Dummy directory created."
193+
142194 - name : Run services (Server Mode)
143195 if : matrix.mode == 'server'
144- env :
196+ env :
145197 OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
146198 AZURE_API_KEY : ${{ env.AZURE_API_KEY }}
199+ VERTEX_AI_LOCATION : ${{ secrets.VERTEX_AI_LOCATION }}
200+ VERTEX_AI_PROJECT : ${{ secrets.VERTEX_AI_PROJECT }}
201+ GOOGLE_APPLICATION_CREDENTIALS : ${{ env.GOOGLE_APPLICATION_CREDENTIALS }}
202+ GCP_KEYS_PATH : ${{ env.GCP_KEYS_PATH }}
147203 run : |
148204 # Debug: Check if environment variable is available for docker-compose
149205 echo "OPENAI_API_KEY is set: $([ -n "$OPENAI_API_KEY" ] && echo 'YES' || echo 'NO')"
150206 echo "OPENAI_API_KEY length: ${#OPENAI_API_KEY}"
151-
207+
152208 docker compose version
153209 docker compose up -d
154-
210+
155211 # Check for errors and show logs if any services failed
156212 if docker compose ps | grep -E 'Exit|exited|stopped'; then
157213 echo "Some services failed to start - showing logs:"
@@ -166,10 +222,14 @@ jobs:
166222 env :
167223 OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
168224 AZURE_API_KEY : ${{ env.AZURE_API_KEY }}
225+ VERTEX_AI_LOCATION : ${{ secrets.VERTEX_AI_LOCATION }}
226+ VERTEX_AI_PROJECT : ${{ secrets.VERTEX_AI_PROJECT }}
227+ GOOGLE_APPLICATION_CREDENTIALS : ${{ env.GOOGLE_APPLICATION_CREDENTIALS }}
228+ GCP_KEYS_PATH : ${{ env.GCP_KEYS_PATH }}
169229 run : |
170230 echo "Starting service in library mode (1 container)"
171231 docker compose -f docker-compose-library.yaml up -d
172-
232+
173233 if docker compose -f docker-compose-library.yaml ps | grep -E 'Exit|exited|stopped'; then
174234 echo "Service failed to start - showing logs:"
175235 docker compose -f docker-compose-library.yaml logs
0 commit comments