#!/bin/bash # # Script to generate a CL with Android Test Hub test dashboard configurations # for all libraries, which will display recent test failures. The test dashboard # with failures for all AndroidX libraries is at go/androidx-ath, each of these # dashboards will display a subset of these failures. # # Creates the set of libraries by grouping the test configs from the latest # build by prefix. For libraries that already have test dashboards, just the # query line is updated. # # If the library flag is used, the configuration is created/updated for just the # one provided library instead of for all libraries. # # Sample usage to create/update dashboards for all libraries: # # ./development/create_library_test_dashboard.sh # # Sample usage to create/update dashboard for just the paging library: # # ./development/create_library_test_dashboard.sh --library paging source gbash.sh || exit DEFINE_string library "" "If provided, the one library to create a dashboard for." # Parse the command line arguments gbash::init_google "$@" printf "\n" printf "=================================================================== \n" printf "== Fetch test configs from the latest green builds \n" printf "=================================================================== \n" # Fetch entries from both branches, as they can be different branches=("aosp-androidx-main" "androidx-platform-dev") allZipEntries="" for branch in ${branches[@]}; do # Find the ID of the latest build # --latest and --list_zip_entries don't work together for fetch_artifact: b/226554339 latestBuild=$(/google/data/ro/projects/android/ab lkgb \ --branch $branch --target androidx_device_tests \ --raw --custom_raw_format '{o[buildId]}') if [ -z "$latestBuild" ]; then printf "ERROR: Failed to fetch ID of latest green build for $branch \n" exit else printf "Using latest green build $latestBuild of $branch \n" fi # Get the list of test configs from the latest build branchZipEntries=$(/google/data/ro/projects/android/fetch_artifact \ --bid $latestBuild --target androidx_device_tests \ --list_zip_entries androidTest.zip) if [ -z "$branchZipEntries" ]; then printf "ERROR: Failed to fetch test configs from build $latestBuild for $branch \n" exit fi allZipEntries+="$branchZipEntries\n" done # Create list of unique .xml file names testZipEntries=$(grep ".xml" <<< $allZipEntries | sort | uniq) # Use the one library provided, or all library names (based on prefixes of the # test entries) if no library was provided. if [ -z $FLAGS_library ]; then # The config file names are of the form `library-rest-of-config-name.xml` or # `libraryRestOfConfigName.xml`. Truncate them to just `library`. libraryNames=$(sed 's/\(\([a-z]\|[0-9]\)*\)\([A-Z]\|-\).*/\1/' <<< $testZipEntries \ | uniq) else libraryNames=$FLAGS_library fi printf "\n" printf "=================================================================== \n" printf "== Create (if needed) and sync g4 workspace \n" printf "=================================================================== \n" client="$(p4 g4d -f androidx-test-dashboards --multichange)" cd "$client" # Revert all local changes to prevent merge conflicts when syncing. # This is OK since we always want to start with a fresh CitC client g4 revert ... g4 sync printf "\n" printf "=================================================================== \n" printf "== Create a CL with the test dashboard configuration \n" printf "=================================================================== \n" for library in $libraryNames; do filePath="wireless/android/busytown/ath_config/configs/prod/androidx/$library.gcl" # Filter test entries to ones starting with the library name # Separate entries with "|" delimiter and remove trailing "|" libraryTests=$(grep "^${library}\(-\|[A-Z]\)" <<< "$testZipEntries" \ | tr '\n' "|" \ | sed "s/|$//") query="query = 'branch:(aosp-androidx-main|androidx-platform-dev) module:($libraryTests)'" if [ -f "$filePath" ]; then # Update just the query line if the file already exists printf "Updating dashboard configuration for $library\n" sed -i "s/query = '.*'/$query/" $filePath else printf "Creating dashboard configuration for $library\n" cat > $filePath <