From b9d232c78f5c1cd6f857b3c1e141985a5f827361 Mon Sep 17 00:00:00 2001 From: Eva Decker Date: Sun, 22 Dec 2024 00:59:06 -0500 Subject: [PATCH 1/3] Fix .env.local additions in .gitignore --- src/cli/lib/deployment.test.ts | 15 ++++++++++++--- src/cli/lib/deployment.ts | 25 +++++++++++++++++-------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/cli/lib/deployment.test.ts b/src/cli/lib/deployment.test.ts index 1d6bd97..7cfb888 100644 --- a/src/cli/lib/deployment.test.ts +++ b/src/cli/lib/deployment.test.ts @@ -52,17 +52,26 @@ test("env var changes", () => { }); test("git ignore changes", () => { + // Handle additions expect(changesToGitIgnore(null)).toEqual(".env.local\n"); - expect(changesToGitIgnore("")).toEqual("\n.env.local\n"); - expect(changesToGitIgnore(".env")).toEqual(".env\n.env.local\n"); + // Handle existing expect(changesToGitIgnore(".env.local")).toEqual(null); expect(changesToGitIgnore(".env.*")).toEqual(null); expect(changesToGitIgnore(".env*")).toEqual(null); - // This is wonky, but will guide the user to solve the problem + // Handle inline comments + expect(changesToGitIgnore(".env.local # convex env")).toEqual(null); + + // Handle Windows + expect(changesToGitIgnore(".env.local\r")).toEqual(null); + + // Handle whitespace + expect(changesToGitIgnore(".env.local ")).toEqual(null); + + // Add .env.local (even if it's negated) to instruct user to solve problem expect(changesToGitIgnore("!.env.local")).toEqual( "!.env.local\n.env.local\n", ); diff --git a/src/cli/lib/deployment.ts b/src/cli/lib/deployment.ts index 56cd68d..86406dc 100644 --- a/src/cli/lib/deployment.ts +++ b/src/cli/lib/deployment.ts @@ -146,14 +146,23 @@ export function changesToGitIgnore(existingFile: string | null): string | null { return `${ENV_VAR_FILE_PATH}\n`; } const gitIgnoreLines = existingFile.split("\n"); - const envVarFileIgnored = gitIgnoreLines.some( - (line) => - line === ".env.local" || - line === ".env.*" || - line === ".env*" || - line === "*.local" || - line === ".env*.local", - ); + const envVarFileIgnored = gitIgnoreLines.some((line) => { + // Remove any inline comments + const trimmedLine = line.split("#")[0].trim(); + + // Ignore negated patterns + if (trimmedLine.startsWith("!")) return false; + + const envIgnorePatterns = [ + /^\.env\.local$/, + /^\.env\.\*$/, + /^\.env\*$/, + /^.*\.local$/, + /^\.env\*\.local$/, + ]; + + return envIgnorePatterns.some((pattern) => pattern.test(trimmedLine)); + }); if (!envVarFileIgnored) { return `${existingFile}\n${ENV_VAR_FILE_PATH}\n`; } else { From f9efc5eb9345be40048227941b6be254ca400db2 Mon Sep 17 00:00:00 2001 From: Eva Decker Date: Sun, 22 Dec 2024 01:03:25 -0500 Subject: [PATCH 2/3] Comments --- src/cli/lib/deployment.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/lib/deployment.test.ts b/src/cli/lib/deployment.test.ts index 7cfb888..3323c43 100644 --- a/src/cli/lib/deployment.test.ts +++ b/src/cli/lib/deployment.test.ts @@ -71,7 +71,7 @@ test("git ignore changes", () => { // Handle whitespace expect(changesToGitIgnore(".env.local ")).toEqual(null); - // Add .env.local (even if it's negated) to instruct user to solve problem + // Add .env.local (even if it's negated) to guide the user to solve the problem expect(changesToGitIgnore("!.env.local")).toEqual( "!.env.local\n.env.local\n", ); From c853fccb12421a2a104a71cff559b739713f77c6 Mon Sep 17 00:00:00 2001 From: Eva Decker Date: Sun, 22 Dec 2024 13:33:52 -0500 Subject: [PATCH 3/3] Modify regex --- src/cli/lib/deployment.test.ts | 11 +++++++---- src/cli/lib/deployment.ts | 18 +++++++++--------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/cli/lib/deployment.test.ts b/src/cli/lib/deployment.test.ts index 3323c43..656d829 100644 --- a/src/cli/lib/deployment.test.ts +++ b/src/cli/lib/deployment.test.ts @@ -56,20 +56,23 @@ test("git ignore changes", () => { expect(changesToGitIgnore(null)).toEqual(".env.local\n"); expect(changesToGitIgnore("")).toEqual("\n.env.local\n"); expect(changesToGitIgnore(".env")).toEqual(".env\n.env.local\n"); + expect(changesToGitIgnore("# .env.local")).toEqual( + "# .env.local\n.env.local\n", + ); // Handle existing expect(changesToGitIgnore(".env.local")).toEqual(null); expect(changesToGitIgnore(".env.*")).toEqual(null); expect(changesToGitIgnore(".env*")).toEqual(null); - - // Handle inline comments - expect(changesToGitIgnore(".env.local # convex env")).toEqual(null); + expect(changesToGitIgnore(".env*.local")).toEqual(null); + expect(changesToGitIgnore("*.local")).toEqual(null); + expect(changesToGitIgnore("# convex env\n.env.local")).toEqual(null); // Handle Windows expect(changesToGitIgnore(".env.local\r")).toEqual(null); // Handle whitespace - expect(changesToGitIgnore(".env.local ")).toEqual(null); + expect(changesToGitIgnore(" .env.local ")).toEqual(null); // Add .env.local (even if it's negated) to guide the user to solve the problem expect(changesToGitIgnore("!.env.local")).toEqual( diff --git a/src/cli/lib/deployment.ts b/src/cli/lib/deployment.ts index 86406dc..a36b226 100644 --- a/src/cli/lib/deployment.ts +++ b/src/cli/lib/deployment.ts @@ -147,18 +147,18 @@ export function changesToGitIgnore(existingFile: string | null): string | null { } const gitIgnoreLines = existingFile.split("\n"); const envVarFileIgnored = gitIgnoreLines.some((line) => { - // Remove any inline comments - const trimmedLine = line.split("#")[0].trim(); + // Remove extra whitespace + const trimmedLine = line.trim(); - // Ignore negated patterns - if (trimmedLine.startsWith("!")) return false; + // Ignore negated patterns and comments + if (trimmedLine.startsWith("!") || trimmedLine.startsWith("#")) + return false; const envIgnorePatterns = [ - /^\.env\.local$/, - /^\.env\.\*$/, - /^\.env\*$/, - /^.*\.local$/, - /^\.env\*\.local$/, + // .env.local, .env.*, .env* + /^\.env(\.local|\.\*|\*)$/, + // .env*.local, *.local + /^(\.env)?\*\.local$/, ]; return envIgnorePatterns.some((pattern) => pattern.test(trimmedLine));