From 1f5b74032824cc91e3894f5ed19d5e63b26bac2f Mon Sep 17 00:00:00 2001 From: Pierre Martin Date: Thu, 12 Oct 2023 21:06:06 +0200 Subject: [PATCH] Fix: using a local *.tgz stack (#7649) --- .changeset/big-tigers-burn.md | 7 +++++++ docs/guides/templates.md | 1 + .../__tests__/create-remix-test.ts | 19 ++++++++++++++++++ .../create-remix/__tests__/fixtures/arc.tgz | Bin 0 -> 38912 bytes packages/create-remix/copy-template.ts | 2 +- 5 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 .changeset/big-tigers-burn.md create mode 100644 packages/create-remix/__tests__/fixtures/arc.tgz diff --git a/.changeset/big-tigers-burn.md b/.changeset/big-tigers-burn.md new file mode 100644 index 00000000000..6fa17f4713e --- /dev/null +++ b/.changeset/big-tigers-burn.md @@ -0,0 +1,7 @@ +--- +"create-remix": patch +--- + +Support local tarballs with `.tgz` extension + +It allows to directly support [`pnpm pack` tarballs](https://pnpm.io/cli/pack). \ No newline at end of file diff --git a/docs/guides/templates.md b/docs/guides/templates.md index 59eefa31da3..a4c9a875d7b 100644 --- a/docs/guides/templates.md +++ b/docs/guides/templates.md @@ -115,6 +115,7 @@ You can provide a local directory or tarball on disk to the `--template` option, ```shellscript nonumber npx create-remix@latest --template /my/remix-stack npx create-remix@latest --template /my/remix-stack.tar.gz +npx create-remix@latest --template /my/remix-stack.tgz npx create-remix@latest --template file:///Users/michael/my-remix-stack.tar.gz ``` diff --git a/packages/create-remix/__tests__/create-remix-test.ts b/packages/create-remix/__tests__/create-remix-test.ts index cb3a6762b20..2d73c904b04 100644 --- a/packages/create-remix/__tests__/create-remix-test.ts +++ b/packages/create-remix/__tests__/create-remix-test.ts @@ -426,6 +426,25 @@ describe("create-remix CLI", () => { expect(fse.existsSync(path.join(projectDir, "app/root.tsx"))).toBeTruthy(); }); + it("works for a path to a tgz tarball on disk", async () => { + let projectDir = getProjectDir("local-tarball"); + + let { status, stderr } = await execCreateRemix({ + args: [ + projectDir, + "--template", + path.join(__dirname, "fixtures", "arc.tgz"), + "--no-git-init", + "--no-install", + ], + }); + + expect(stderr.trim()).toBeFalsy(); + expect(status).toBe(0); + expect(fse.existsSync(path.join(projectDir, "package.json"))).toBeTruthy(); + expect(fse.existsSync(path.join(projectDir, "app/root.tsx"))).toBeTruthy(); + }); + it("works for a file URL to a tarball on disk", async () => { let projectDir = getProjectDir("file-url-tarball"); diff --git a/packages/create-remix/__tests__/fixtures/arc.tgz b/packages/create-remix/__tests__/fixtures/arc.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9b90ab69219f271d8c6438858cf69bb22e134a8b GIT binary patch literal 38912 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 QE7N>PlLAc&ycsF*f49gni2wiq literal 0 HcmV?d00001 diff --git a/packages/create-remix/copy-template.ts b/packages/create-remix/copy-template.ts index cf10b6b432d..3ad55c1d261 100644 --- a/packages/create-remix/copy-template.ts +++ b/packages/create-remix/copy-template.ts @@ -135,7 +135,7 @@ async function copyTemplateFromLocalFilePath( filePath: string, destPath: string ): Promise { - if (filePath.endsWith(".tar.gz")) { + if (filePath.endsWith(".tar.gz") || filePath.endsWith(".tgz")) { await extractLocalTarball(filePath, destPath); return false; }