From b66777b3305b314ea2d8dd890f64e9bd99e545a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Fri, 13 Nov 2026 22:08:57 +0100 Subject: [PATCH] Speed up the Build workflow - Pass the MariaDB client library to mysqlclient-sys through its environment variables, so a cached build no longer recompiles mysqlclient-sys, diesel and diesel_migrations in every MySQL build. The cache prefix changes once, because the old caches would keep rebuilding it. - Drop the sqlite,mysql,postgresql,enable_mimalloc test: enable_mimalloc is still tested on and off. - Only save caches on main, so pull requests and branches no longer push main's caches out of the 10 GB limit. --- .github/workflows/build.yml | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 71ec8625..b2d29992 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -57,7 +57,25 @@ jobs: steps: # Install dependencies - name: "Install dependencies Ubuntu" - run: sudo apt-get update && sudo apt-get install -y --no-install-recommends openssl build-essential libmariadb-dev-compat libpq-dev libssl-dev pkg-config + run: | + # Separate commands, so a failing update fails the step. The image already has Oracle's MySQL client + # library, so a skipped install would otherwise go unnoticed and build against that one. + sudo apt-get update + sudo apt-get install -y --no-install-recommends openssl build-essential libmariadb-dev-compat libpq-dev libssl-dev pkg-config + + # Pass the MariaDB client library to mysqlclient-sys through its environment variables. + # When it finds the library with pkg-config, its build script makes cargo rerun it whenever + # anything in the library directory changes, and the install above changes that directory on + # every run. So every MySQL build recompiled mysqlclient-sys, diesel and diesel_migrations, + # even with a cached build. Cargo compares environment variables by their value instead. + lib_dir="$(pkg-config --variable=libdir mysqlclient)" + version="$(pkg-config --modversion mysqlclient)" + { + echo "MYSQLCLIENT_NO_PKG_CONFIG=1" + echo "LIBMARIADB_NO_PKG_CONFIG=1" + echo "MYSQLCLIENT_LIB_DIR=${lib_dir}" + echo "MYSQLCLIENT_VERSION=${version}" + } | tee -a "${GITHUB_ENV}" # End Install dependencies # Checkout the repo @@ -118,23 +136,21 @@ jobs: # Use a custom prefix-key to force a fresh start. This is sometimes needed with bigger changes. # Like changing the build host from Ubuntu 20.04 to 22.04 for example. # Only update when really needed! Use a .[.] format. - prefix-key: "v2025.09-rust" + prefix-key: "v2026.11-rust" + # Only main saves caches. The repository can keep 10 GB of caches, and the ones saved by pull + # requests and other branches were mostly copies of main's that pushed other caches out. + save-if: ${{ github.ref == 'refs/heads/main' }} # End Enable Rust Caching # Run cargo tests # First test all features together, afterwards test them separately. + # enable_mimalloc only selects the allocator, so it is tested on and off, not with every combination. - name: "test features: sqlite,mysql,postgresql,enable_mimalloc,s3" id: test_sqlite_mysql_postgresql_mimalloc_s3 if: ${{ !cancelled() }} run: | cargo test --profile ci --features sqlite,mysql,postgresql,enable_mimalloc,s3 - - name: "test features: sqlite,mysql,postgresql,enable_mimalloc" - id: test_sqlite_mysql_postgresql_mimalloc - if: ${{ !cancelled() }} - run: | - cargo test --profile ci --features sqlite,mysql,postgresql,enable_mimalloc - - name: "test features: sqlite,mysql,postgresql" id: test_sqlite_mysql_postgresql if: ${{ !cancelled() }} @@ -198,7 +214,6 @@ jobs: if: ${{ failure() }} env: TEST_DB_M_S3: ${{ steps.test_sqlite_mysql_postgresql_mimalloc_s3.outcome }} - TEST_DB_M: ${{ steps.test_sqlite_mysql_postgresql_mimalloc.outcome }} TEST_DB: ${{ steps.test_sqlite_mysql_postgresql.outcome }} TEST_SQLITE: ${{ steps.test_sqlite.outcome }} TEST_MYSQL: ${{ steps.test_mysql.outcome }} @@ -213,7 +228,6 @@ jobs: echo "|Job|Status|" >> "${GITHUB_STEP_SUMMARY}" echo "|---|------|" >> "${GITHUB_STEP_SUMMARY}" echo "|test (sqlite,mysql,postgresql,enable_mimalloc,s3)|${TEST_DB_M_S3}|" >> "${GITHUB_STEP_SUMMARY}" - echo "|test (sqlite,mysql,postgresql,enable_mimalloc)|${TEST_DB_M}|" >> "${GITHUB_STEP_SUMMARY}" echo "|test (sqlite,mysql,postgresql)|${TEST_DB}|" >> "${GITHUB_STEP_SUMMARY}" echo "|test (sqlite)|${TEST_SQLITE}|" >> "${GITHUB_STEP_SUMMARY}" echo "|test (mysql)|${TEST_MYSQL}|" >> "${GITHUB_STEP_SUMMARY}"