Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
718be43
chore: fix parallelism in library compilation
diegomarquezp Mar 11, 2025
9262477
trigger on pull request (temporarily)
diegomarquezp Mar 11, 2025
efcfaff
do not use awk
diegomarquezp Mar 11, 2025
c7319b4
try running command without piping output
diegomarquezp Mar 11, 2025
10984cb
move to script file
diegomarquezp Apr 1, 2025
8e07b42
chore: add vim files to .gitignore
diegomarquezp Apr 1, 2025
c3e8b17
chore: skip enforcer in verification script
diegomarquezp Apr 1, 2025
9a7676c
specify working directory
diegomarquezp Apr 1, 2025
d30b9cc
parallelize on variant
diegomarquezp Apr 1, 2025
685c01d
Merge branch 'main' into fix-dashboard-parallelism
diegomarquezp Apr 1, 2025
6ee3828
fix "run" step
diegomarquezp Apr 1, 2025
3dc2985
do not cancel parallel jobs if one fails
diegomarquezp Apr 1, 2025
33ca92c
parallelize by alphabet letter
diegomarquezp Apr 1, 2025
702176d
use explicit letters
diegomarquezp Apr 1, 2025
64b32b1
correct matrix config
diegomarquezp Apr 1, 2025
4797261
add runs-on to print_results job
diegomarquezp Apr 1, 2025
eb48543
test against current variant only
diegomarquezp Apr 1, 2025
e8a69d6
fix output file reference
diegomarquezp Apr 1, 2025
7a3162e
fix error handling
diegomarquezp Apr 1, 2025
fc9827e
add output consumption config
diegomarquezp Apr 1, 2025
c8cc778
use official recommendation for parallel job output handling
diegomarquezp Apr 1, 2025
3689b09
correct output reference
diegomarquezp Apr 1, 2025
4999d7c
print results from parallel jobs
diegomarquezp Apr 1, 2025
89554d8
fix sed command
diegomarquezp Apr 1, 2025
9d1f155
fail on error
diegomarquezp Apr 1, 2025
3f3256e
do not use xtrace on print results job
diegomarquezp Apr 1, 2025
1736f0f
improve error message
diegomarquezp Apr 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions .github/workflows/verify.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
set -ex
export repo_dir=$(realpath $(dirname "${BASH_SOURCE[0]}")/../../)
pushd "${repo_dir}/clients"

# We only test against the latest variant
readonly CURRENT_VARIANT="2.0.0"

# An optional argument to only compile libraries starting with this letter
starting_letter="$1"

# find all generated clients' pom.xml
find . -wholename "*${CURRENT_VARIANT}/pom.xml" -not -path '*/target/*' > pom_list_raw
cat pom_list_raw

# trim down to those starting with "${starting_letter}"
cat pom_list_raw | { grep "google-api-services-${starting_letter}" || true; } > pom_list
cat pom_list


# format result to list of Maven modules
cat pom_list | cut -d'/' -f2-4 \
| sed 's/\(.*\)/<module>\1<\/module>/' > module_list
cat module_list

# produce a temporary pom with the modules
(echo "<project><modelVersion>4.0.0</modelVersion><groupId>temp</groupId><artifactId>temp</artifactId><version>1.0</version><packaging>pom</packaging><modules>"; cat module_list; echo "</modules></project>") > pom.xml
cat pom.xml

# use generated pom to test compilation
mvn clean compile -T 1.5C -Dmaven.testSkip=true -Denforcer.skip -fae --fail-at-end 2>&1 | tee out
cat out | grep 'rev20' | grep 's]' | { grep 'FAILURE' || true; } > errors
if [[ $(cat errors | wc -l) -gt 0 ]]; then
echo "Compilation errors found in the following libraries:"
cat errors
# send to GH output
if [[ -f "${GITHUB_OUTPUT}" ]]; then
echo "failed_libraries_${starting_letter}=$(cat errors | tr '\n' ',')" > "${GITHUB_OUTPUT}"
fi
fi
echo "No compilation errors found"
63 changes: 59 additions & 4 deletions .github/workflows/verify.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,48 @@ on:
# Runs at 04:00 am
- cron: '0 4 * * *'
workflow_dispatch:
# delete this before merging the PR
pull_request:
# Generates a list of libraries that cannot be
# compiled (printed to the action stdout)
name: Verify libraries compilation
jobs:
verify:
runs-on: 'ubuntu-24.04'
continue-on-error: true
strategy:
matrix:
# We will parallelize by alphabet letter
letter: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
fail-fast: false
outputs:
# follows official example from https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/passing-information-between-jobs#using-job-outputs-in-a-matrix-job
failed_libraries_a: ${{ steps.compile.outputs.failed_libraries_a }}
failed_libraries_b: ${{ steps.compile.outputs.failed_libraries_b }}
failed_libraries_c: ${{ steps.compile.outputs.failed_libraries_c }}
failed_libraries_d: ${{ steps.compile.outputs.failed_libraries_d }}
failed_libraries_e: ${{ steps.compile.outputs.failed_libraries_e }}
failed_libraries_f: ${{ steps.compile.outputs.failed_libraries_f }}
failed_libraries_g: ${{ steps.compile.outputs.failed_libraries_g }}
failed_libraries_h: ${{ steps.compile.outputs.failed_libraries_h }}
failed_libraries_i: ${{ steps.compile.outputs.failed_libraries_i }}
failed_libraries_j: ${{ steps.compile.outputs.failed_libraries_j }}
failed_libraries_k: ${{ steps.compile.outputs.failed_libraries_k }}
failed_libraries_l: ${{ steps.compile.outputs.failed_libraries_l }}
failed_libraries_m: ${{ steps.compile.outputs.failed_libraries_m }}
failed_libraries_n: ${{ steps.compile.outputs.failed_libraries_n }}
failed_libraries_o: ${{ steps.compile.outputs.failed_libraries_o }}
failed_libraries_p: ${{ steps.compile.outputs.failed_libraries_p }}
failed_libraries_q: ${{ steps.compile.outputs.failed_libraries_q }}
failed_libraries_r: ${{ steps.compile.outputs.failed_libraries_r }}
failed_libraries_s: ${{ steps.compile.outputs.failed_libraries_s }}
failed_libraries_t: ${{ steps.compile.outputs.failed_libraries_t }}
failed_libraries_u: ${{ steps.compile.outputs.failed_libraries_u }}
failed_libraries_v: ${{ steps.compile.outputs.failed_libraries_v }}
failed_libraries_w: ${{ steps.compile.outputs.failed_libraries_w }}
failed_libraries_x: ${{ steps.compile.outputs.failed_libraries_x }}
failed_libraries_y: ${{ steps.compile.outputs.failed_libraries_y }}
failed_libraries_z: ${{ steps.compile.outputs.failed_libraries_z }}
steps:
- uses: actions/setup-java@v3
with:
Expand All @@ -17,8 +53,27 @@ jobs:
- uses: actions/checkout@v2
with:
path: google-api-java-client-services
# we install the moreutils `parallel` command
- run: sudo apt-get install moreutils
- working-directory: google-api-java-client-services
run: bash .github/workflows/verify_compilation.sh

- id: compile
working-directory: google-api-java-client-services
run: |
set -ex
bash .github/workflows/verify.sh "${{matrix.letter}}"
print_results:
runs-on: 'ubuntu-24.04'
needs: [verify]
steps:
- run: |
set -e
echo '${{ toJSON(needs.verify.outputs) }}' \
| jq -j 'to_entries[] | select(.key | startswith("failed_libraries_")) | .value' \
| sed 's/,/\n/g' > failed_libs

if [[ $(cat failed_libs | wc -l) -gt 0 ]]; then
echo "The following libraries cannot be compiled:"
cat failed_libs
exit 1
fi
echo "All libraries of the current variant are compilable!"


52 changes: 0 additions & 52 deletions .github/workflows/verify_compilation.sh

This file was deleted.

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
.gitignore

# Vim files
*.swp

# Packages
dist
build
Expand Down
Loading