From c77eb708861fbe0feea07a9a0fc7c246eb7afb33 Mon Sep 17 00:00:00 2001
From: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
Date: Sat, 9 Sep 2023 15:36:47 +0200
Subject: [PATCH] Add black caching [ci] (#99967)

Co-authored-by: J. Nick Koston <nick@koston.org>
---
 .github/workflows/ci.yaml | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 2e1df49549e..c20886f2342 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -36,6 +36,7 @@ env:
   CACHE_VERSION: 5
   PIP_CACHE_VERSION: 4
   MYPY_CACHE_VERSION: 4
+  BLACK_CACHE_VERSION: 1
   HA_SHORT_VERSION: "2023.10"
   DEFAULT_PYTHON: "3.11"
   ALL_PYTHON_VERSIONS: "['3.11']"
@@ -55,6 +56,7 @@ env:
   POSTGRESQL_VERSIONS: "['postgres:12.14','postgres:15.2']"
   PRE_COMMIT_CACHE: ~/.cache/pre-commit
   PIP_CACHE: /tmp/pip-cache
+  BLACK_CACHE: /tmp/black-cache
   SQLALCHEMY_WARN_20: 1
   PYTHONASYNCIODEBUG: 1
   HASS_CI: 1
@@ -272,6 +274,13 @@ jobs:
         with:
           python-version: ${{ env.DEFAULT_PYTHON }}
           check-latest: true
+      - name: Generate partial black restore key
+        id: generate-black-key
+        run: |
+          black_version=$(cat requirements_test_pre_commit.txt | grep black | cut -d '=' -f 3)
+          echo "version=$black_version" >> $GITHUB_OUTPUT
+          echo "key=black-${{ env.BLACK_CACHE_VERSION }}-$black_version-${{
+            env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
       - name: Restore base Python virtual environment
         id: cache-venv
         uses: actions/cache/restore@v3.3.2
@@ -290,14 +299,28 @@ jobs:
           key: >-
             ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
               needs.info.outputs.pre-commit_cache_key }}
+      - name: Restore black cache
+        uses: actions/cache@v3.3.2
+        with:
+          path: ${{ env.BLACK_CACHE }}
+          key: >-
+            ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
+            steps.generate-black-key.outputs.key }}
+          restore-keys: |
+            ${{ runner.os }}-${{ steps.python.outputs.python-version }}-black-${{
+            env.BLACK_CACHE_VERSION }}-${{ steps.generate-black-key.outputs.version }}-${{
+            env.HA_SHORT_VERSION }}-
       - name: Run black (fully)
-        if: needs.info.outputs.test_full_suite == 'true'
+        env:
+          BLACK_CACHE_DIR: ${{ env.BLACK_CACHE }}
         run: |
           . venv/bin/activate
           pre-commit run --hook-stage manual black --all-files --show-diff-on-failure
       - name: Run black (partially)
         if: needs.info.outputs.test_full_suite == 'false'
         shell: bash
+        env:
+          BLACK_CACHE_DIR: ${{ env.BLACK_CACHE }}
         run: |
           . venv/bin/activate
           shopt -s globstar
-- 
GitLab