diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 402e43c..2929cc7 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -21,17 +21,52 @@ steps: - name: 'us-central1-docker.pkg.dev/cloud-db-nl2sql/evalbench/eval_server:latest' entrypoint: 'bash' # Decrypts the secret from Secret Manager into the DB_PASSWORD environment variable - secretEnv: ['DB_PASSWORD'] + secretEnv: ['DB_PASSWORD', 'GITHUB_TOKEN'] args: - '-c' - | set -e + + # Only run on release branches + if [[ "$_HEAD_BRANCH" != release-please-* ]]; then + echo "Not a release-please branch. Exiting." + exit 0 + fi + echo "Release branch detected. Fetching PR data from GitHub API..." + + # Fetch PR data and status code + HTTP_STATUS=$(curl -s -o pr_data.json -w "%{http_code}" -H "Authorization: token $$GITHUB_TOKEN" \ + "https://api.github.com/repos/$REPO_FULL_NAME/pulls/$_PR_NUMBER") + + if [ "$$HTTP_STATUS" -ne 200 ]; then + echo "Error fetching PR data: HTTP $$HTTP_STATUS" + cat pr_data.json + exit 1 + fi + + PR_DATA=$(cat pr_data.json) + + # Extract labels and title from PR data (Use $$ to escape bash variables) + PR_LABELS=$(echo "$$PR_DATA" | jq -r '[.labels[].name] | join(",")') + PR_TITLE=$(echo "$$PR_DATA" | jq -r '.title') + + # Determine Release Version (Use double quotes and $$ for bash variables) + if [[ "$$PR_LABELS" == *"autorelease: triggered"* ]]; then + if [[ "$$PR_TITLE" =~ release\ ([0-9]+\.[0-9]+\.[0-9]+) ]]; then + export RELEASE_VERSION="$${BASH_REMATCH[1]}" + else + export RELEASE_VERSION="unknown" + fi + else + export RELEASE_VERSION="unknown" + fi + # Workaround for evalbench bug: settings are only applied if path basename matches extension ID ln -s /workspace /workspace/cloud-sql-postgresql cd /evalbench export EVAL_GCP_PROJECT_ID=$PROJECT_ID - export EVAL_GCP_PROJECT_REGION=us-central1 + export EVAL_GCP_PROJECT_REGION=$_CLOUD_SQL_REGION export GOOGLE_CLOUD_PROJECT=$PROJECT_ID export CLOUD_SQL_POSTGRES_PROJECT=$PROJECT_ID export CLOUD_SQL_POSTGRES_INSTANCE=$_CLOUD_SQL_INSTANCE @@ -58,3 +93,5 @@ availableSecrets: secretManager: - versionName: projects/$PROJECT_ID/secrets/daily-ci-evals-db-password/versions/latest env: 'DB_PASSWORD' + - versionName: projects/$PROJECT_ID/secrets/GITHUB_TOKEN/versions/latest + env: 'GITHUB_TOKEN' diff --git a/evals/run_config.yaml b/evals/run_config.yaml index b83b7e6..eb745a9 100644 --- a/evals/run_config.yaml +++ b/evals/run_config.yaml @@ -13,13 +13,13 @@ # limitations under the License. extension_id: cloud-sql-postgresql +release_version: ${RELEASE_VERSION} dataset_config: /workspace/evals/dataset.json dataset_format: gemini-cli-format orchestrator: geminicli model_config: /workspace/evals/model_config.yaml -# You can reference default simulated user models provided by the evalbench repo: simulated_user_model_config: /workspace/evals/gemini_2.5_pro_model.yaml scorers: diff --git a/evals/substitute_env.py b/evals/substitute_env.py index 3ef2295..f10c8e3 100644 --- a/evals/substitute_env.py +++ b/evals/substitute_env.py @@ -2,16 +2,17 @@ import re def main(): - yaml_path = '/workspace/evals/model_config.yaml' - if os.path.exists(yaml_path): - with open(yaml_path, 'r') as f: - content = f.read() - content = re.sub(r'\${(\w+)}', lambda m: os.environ.get(m.group(1), m.group(0)), content) - with open(yaml_path, 'w') as f: - f.write(content) - print(f"Successfully substituted environment variables in {yaml_path}") - else: - print(f"File not found: {yaml_path}") + yaml_paths = ['/workspace/evals/model_config.yaml', '/workspace/evals/run_config.yaml'] + for yaml_path in yaml_paths: + if os.path.exists(yaml_path): + with open(yaml_path, 'r') as f: + content = f.read() + content = re.sub(r'\${(\w+)}', lambda m: os.environ.get(m.group(1), m.group(0)), content) + with open(yaml_path, 'w') as f: + f.write(content) + print(f"Successfully substituted environment variables in {yaml_path}") + else: + print(f"File not found: {yaml_path}") if __name__ == '__main__': main() \ No newline at end of file