From ba33a692f186dd93542417e5b83c8710ad54c255 Mon Sep 17 00:00:00 2001
From: Hugo van Kemenade <hugovk@users.noreply.github.com>
Date: Mon, 31 Jan 2022 12:42:08 +0200
Subject: [PATCH] Include Python version in pip cache key (#303)

---
 __tests__/cache-restore.test.ts          | 6 +-----
 dist/setup/index.js                      | 9 +++++----
 src/cache-distributions/cache-factory.ts | 2 +-
 src/cache-distributions/pip-cache.ts     | 9 ++++++---
 4 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/__tests__/cache-restore.test.ts b/__tests__/cache-restore.test.ts
index f3c5b01..d982fd0 100644
--- a/__tests__/cache-restore.test.ts
+++ b/__tests__/cache-restore.test.ts
@@ -92,13 +92,9 @@ describe('restore-cache', () => {
           dependencyFile
         );
         await cacheDistributor.restoreCache();
-        let pythonKey = '';
-        if (packageManager === 'pipenv') {
-          pythonKey = `python-${pythonVersion}-`;
-        }
 
         expect(infoSpy).toHaveBeenCalledWith(
-          `Cache restored from key: setup-python-${process.env['RUNNER_OS']}-${pythonKey}${packageManager}-${fileHash}`
+          `Cache restored from key: setup-python-${process.env['RUNNER_OS']}-python-${pythonVersion}-${packageManager}-${fileHash}`
         );
       }
     );
diff --git a/dist/setup/index.js b/dist/setup/index.js
index 321877d..ca8a37c 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -34467,8 +34467,9 @@ const path = __importStar(__webpack_require__(622));
 const os_1 = __importDefault(__webpack_require__(87));
 const cache_distributor_1 = __importDefault(__webpack_require__(435));
 class PipCache extends cache_distributor_1.default {
-    constructor(cacheDependencyPath = '**/requirements.txt') {
+    constructor(pythonVersion, cacheDependencyPath = '**/requirements.txt') {
         super('pip', cacheDependencyPath);
+        this.pythonVersion = pythonVersion;
     }
     getCacheGlobalDirectories() {
         return __awaiter(this, void 0, void 0, function* () {
@@ -34487,8 +34488,8 @@ class PipCache extends cache_distributor_1.default {
     computeKeys() {
         return __awaiter(this, void 0, void 0, function* () {
             const hash = yield glob.hashFiles(this.cacheDependencyPath);
-            const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${this.packageManager}-${hash}`;
-            const restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${this.packageManager}`;
+            const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`;
+            const restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}`;
             return {
                 primaryKey,
                 restoreKey: [restoreKey]
@@ -43888,7 +43889,7 @@ var PackageManagers;
 function getCacheDistributor(packageManager, pythonVersion, cacheDependencyPath) {
     switch (packageManager) {
         case PackageManagers.Pip:
-            return new pip_cache_1.default(cacheDependencyPath);
+            return new pip_cache_1.default(pythonVersion, cacheDependencyPath);
         case PackageManagers.Pipenv:
             return new pipenv_cache_1.default(pythonVersion, cacheDependencyPath);
         default:
diff --git a/src/cache-distributions/cache-factory.ts b/src/cache-distributions/cache-factory.ts
index 1a8a055..3e363a0 100644
--- a/src/cache-distributions/cache-factory.ts
+++ b/src/cache-distributions/cache-factory.ts
@@ -13,7 +13,7 @@ export function getCacheDistributor(
 ) {
   switch (packageManager) {
     case PackageManagers.Pip:
-      return new PipCache(cacheDependencyPath);
+      return new PipCache(pythonVersion, cacheDependencyPath);
     case PackageManagers.Pipenv:
       return new PipenvCache(pythonVersion, cacheDependencyPath);
     default:
diff --git a/src/cache-distributions/pip-cache.ts b/src/cache-distributions/pip-cache.ts
index 81b875f..f4d7c24 100644
--- a/src/cache-distributions/pip-cache.ts
+++ b/src/cache-distributions/pip-cache.ts
@@ -8,7 +8,10 @@ import os from 'os';
 import CacheDistributor from './cache-distributor';
 
 class PipCache extends CacheDistributor {
-  constructor(cacheDependencyPath: string = '**/requirements.txt') {
+  constructor(
+    private pythonVersion: string,
+    cacheDependencyPath: string = '**/requirements.txt'
+  ) {
     super('pip', cacheDependencyPath);
   }
 
@@ -36,8 +39,8 @@ class PipCache extends CacheDistributor {
 
   protected async computeKeys() {
     const hash = await glob.hashFiles(this.cacheDependencyPath);
-    const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${this.packageManager}-${hash}`;
-    const restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${this.packageManager}`;
+    const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}-${hash}`;
+    const restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-python-${this.pythonVersion}-${this.packageManager}`;
 
     return {
       primaryKey,