瀏覽代碼

Fix Posthog by correctly copying .env in the build process (#4049)

Chris Estreich 7 月之前
父節點
當前提交
ed24f65b30

+ 5 - 0
.changeset/thirty-cases-fail.md

@@ -0,0 +1,5 @@
+---
+"roo-cline": patch
+---
+
+Fix Posthog by correctly copying .env in the build process

+ 16 - 9
.github/workflows/marketplace-publish.yml

@@ -45,15 +45,22 @@ jobs:
         run: |
           current_package_version=$(node -p "require('./src/package.json').version")
           pnpm build
-          package=$(unzip -l bin/roo-cline-${current_package_version}.vsix)
-          echo "$package" | grep -q "extension/package.json" || exit 1
-          echo "$package" | grep -q "extension/package.nls.json" || exit 1
-          echo "$package" | grep -q "extension/dist/extension.js" || exit 1
-          echo "$package" | grep -q "extension/webview-ui/audio/celebration.wav" || exit 1
-          echo "$package" | grep -q "extension/webview-ui/build/assets/index.js" || exit 1
-          echo "$package" | grep -q "extension/assets/codicons/codicon.ttf" || exit 1
-          echo "$package" | grep -q "extension/assets/vscode-material-icons/icons/3d.svg" || exit 1
-          echo "$package" | grep -q ".env" || exit 1
+
+          # Save VSIX contents to a temporary file to avoid broken pipe issues.
+          unzip -l bin/roo-cline-${current_package_version}.vsix > /tmp/roo-code-vsix-contents.txt
+
+          # Check for required files.
+          grep -q "extension/package.json" /tmp/roo-code-vsix-contents.txt || exit 1
+          grep -q "extension/package.nls.json" /tmp/roo-code-vsix-contents.txt || exit 1
+          grep -q "extension/dist/extension.js" /tmp/roo-code-vsix-contents.txt || exit 1
+          grep -q "extension/webview-ui/audio/celebration.wav" /tmp/roo-code-vsix-contents.txt || exit 1
+          grep -q "extension/webview-ui/build/assets/index.js" /tmp/roo-code-vsix-contents.txt || exit 1
+          grep -q "extension/assets/codicons/codicon.ttf" /tmp/roo-code-vsix-contents.txt || exit 1
+          grep -q "extension/assets/vscode-material-icons/icons/3d.svg" /tmp/roo-code-vsix-contents.txt || exit 1
+          grep -q ".env" /tmp/roo-code-vsix-contents.txt || exit 1
+          
+          # Clean up temporary file.
+          rm /tmp/roo-code-vsix-contents.txt
       - name: Create and Push Git Tag
         run: |
           current_package_version=$(node -p "require('./src/package.json').version")

+ 0 - 6
.prettierignore

@@ -1,6 +0,0 @@
-dist
-build
-out
-.next
-.venv
-pnpm-lock.yaml

+ 2 - 1
.prettierrc.json

@@ -3,5 +3,6 @@
 	"useTabs": true,
 	"printWidth": 120,
 	"semi": false,
-	"bracketSameLine": true
+	"bracketSameLine": true,
+	"ignore": ["node_modules", "dist", "build", "out", ".next", ".venv", "pnpm-lock.yaml"]
 }

+ 1 - 0
apps/vscode-nightly/esbuild.mjs

@@ -67,6 +67,7 @@ async function main() {
 							["../README.md", "README.md"],
 							["../CHANGELOG.md", "CHANGELOG.md"],
 							["../LICENSE", "LICENSE"],
+							["../.env", ".env", { optional: true }],
 							[".vscodeignore", ".vscodeignore"],
 							["assets", "assets"],
 							["integrations", "integrations"],

+ 32 - 15
packages/build/src/esbuild.ts

@@ -29,7 +29,9 @@ function rmDir(dirPath: string, maxRetries: number = 3): void {
 			return
 		} catch (error) {
 			const isLastAttempt = attempt === maxRetries
-			const isEnotemptyError = error instanceof Error && "code" in error && (error.code === 'ENOTEMPTY' || error.code === 'EBUSY')
+
+			const isEnotemptyError =
+				error instanceof Error && "code" in error && (error.code === "ENOTEMPTY" || error.code === "EBUSY")
 
 			if (isLastAttempt || !isEnotemptyError) {
 				throw error // Re-throw if it's the last attempt or not a locking error.
@@ -41,27 +43,42 @@ function rmDir(dirPath: string, maxRetries: number = 3): void {
 
 			// Synchronous sleep for simplicity in build scripts.
 			const start = Date.now()
-			while (Date.now() - start < delay) { /* Busy wait */ }
+
+			while (Date.now() - start < delay) {
+				/* Busy wait */
+			}
 		}
 	}
 }
 
-export function copyPaths(copyPaths: [string, string][], srcDir: string, dstDir: string) {
-	copyPaths.forEach(([srcRelPath, dstRelPath]) => {
-		const stats = fs.lstatSync(path.join(srcDir, srcRelPath))
+type CopyPathOptions = {
+	optional?: boolean
+}
 
-		if (stats.isDirectory()) {
-			if (fs.existsSync(path.join(dstDir, dstRelPath))) {
-				rmDir(path.join(dstDir, dstRelPath))
-			}
+export function copyPaths(copyPaths: [string, string, CopyPathOptions?][], srcDir: string, dstDir: string) {
+	copyPaths.forEach(([srcRelPath, dstRelPath, options = {}]) => {
+		try {
+			const stats = fs.lstatSync(path.join(srcDir, srcRelPath))
 
-			fs.mkdirSync(path.join(dstDir, dstRelPath), { recursive: true })
+			if (stats.isDirectory()) {
+				if (fs.existsSync(path.join(dstDir, dstRelPath))) {
+					rmDir(path.join(dstDir, dstRelPath))
+				}
 
-			const count = copyDir(path.join(srcDir, srcRelPath), path.join(dstDir, dstRelPath), 0)
-			console.log(`[copyPaths] Copied ${count} files from ${srcRelPath} to ${dstRelPath}`)
-		} else {
-			fs.copyFileSync(path.join(srcDir, srcRelPath), path.join(dstDir, dstRelPath))
-			console.log(`[copyPaths] Copied ${srcRelPath} to ${dstRelPath}`)
+				fs.mkdirSync(path.join(dstDir, dstRelPath), { recursive: true })
+
+				const count = copyDir(path.join(srcDir, srcRelPath), path.join(dstDir, dstRelPath), 0)
+				console.log(`[copyPaths] Copied ${count} files from ${srcRelPath} to ${dstRelPath}`)
+			} else {
+				fs.copyFileSync(path.join(srcDir, srcRelPath), path.join(dstDir, dstRelPath))
+				console.log(`[copyPaths] Copied ${srcRelPath} to ${dstRelPath}`)
+			}
+		} catch (error) {
+			if (options.optional) {
+				console.warn(`[copyPaths] Optional file not found: ${srcRelPath}`)
+			} else {
+				throw error
+			}
 		}
 	})
 }

+ 1 - 0
src/esbuild.mjs

@@ -52,6 +52,7 @@ async function main() {
 							["../README.md", "README.md"],
 							["../CHANGELOG.md", "CHANGELOG.md"],
 							["../LICENSE", "LICENSE"],
+							["../.env", ".env", { optional: true }],
 							["node_modules/vscode-material-icons/generated", "assets/vscode-material-icons"],
 							["../webview-ui/audio", "webview-ui/audio"],
 						],