From 2bdaf002731b2241106232d3230f271289464907 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=81lvaro=20Mond=C3=A9jar?= <mondejar1994@gmail.com>
Date: Sat, 28 Nov 2020 20:34:06 +0100
Subject: [PATCH] Sort inputs and remove whitespaces after exclamation at the
 beginning of lines

---
 __tests__/actionUtils.test.ts | 30 ++++++++++++++++++++++++++++++
 __tests__/restore.test.ts     |  2 +-
 src/utils/actionUtils.ts      |  5 +++--
 3 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/__tests__/actionUtils.test.ts b/__tests__/actionUtils.test.ts
index 419881e..568b947 100644
--- a/__tests__/actionUtils.test.ts
+++ b/__tests__/actionUtils.test.ts
@@ -213,6 +213,36 @@ test("getInputAsArray handles empty lines correctly", () => {
     expect(actionUtils.getInputAsArray("foo")).toEqual(["bar", "baz"]);
 });
 
+test("getInputAsArray sorts files correctly", () => {
+    testUtils.setInput("foo", "bar\n!baz\nwaldo\nqux\nquux\ncorge\ngrault\ngarply");
+    expect(actionUtils.getInputAsArray("foo")).toEqual([
+        "!baz",
+        "bar",
+        "corge",
+        "garply",
+        "grault",
+        "quux",
+        "qux",
+        "waldo"
+    ]);
+});
+
+test("getInputAsArray removes spaces after ! at the beginning", () => {
+    testUtils.setInput(
+        "foo",
+        "!   bar\n!  baz\n! qux\n!quux\ncorge\ngrault! garply\n!\r\t waldo"
+    );
+    expect(actionUtils.getInputAsArray("foo")).toEqual([
+        "!bar",
+        "!baz",
+        "!quux",
+        "!qux",
+        "!waldo",
+        "corge",
+        "grault! garply"
+    ]);
+});
+
 test("getInputAsInt returns undefined if input not set", () => {
     expect(actionUtils.getInputAsInt("undefined")).toBeUndefined();
 });
diff --git a/__tests__/restore.test.ts b/__tests__/restore.test.ts
index 446237c..9e68abe 100644
--- a/__tests__/restore.test.ts
+++ b/__tests__/restore.test.ts
@@ -97,7 +97,7 @@ test("restore with no key", async () => {
 test("restore with too many keys should fail", async () => {
     const path = "node_modules";
     const key = "node-test";
-    const restoreKeys = [...Array(20).keys()].map(x => x.toString());
+    const restoreKeys = [...Array(20).keys()].map(x => x.toString()).sort();
     testUtils.setInputs({
         path: path,
         key,
diff --git a/src/utils/actionUtils.ts b/src/utils/actionUtils.ts
index a4d712d..df0e14f 100644
--- a/src/utils/actionUtils.ts
+++ b/src/utils/actionUtils.ts
@@ -60,8 +60,9 @@ export function getInputAsArray(
     return core
         .getInput(name, options)
         .split("\n")
-        .map(s => s.trim())
-        .filter(x => x !== "");
+        .map(s => s.replace(/^\!\s+/, '!').trim())
+        .filter(x => x !== "")
+        .sort();
 }
 
 export function getInputAsInt(