supabase / cli

Supabase CLI. Manage postgres migrations, run Supabase locally, deploy edge functions. Postgres backups. Generating types from your database schema.
https://supabase.com/docs/reference/cli/about
MIT License
1.06k stars 207 forks source link

Edge function bundling fails if code is loaded from private source (DENO_AUTH_TOKENS) #959

Open evelant opened 1 year ago

evelant commented 1 year ago

Bug report

Describe the bug

Loading dependencies from a private source fails when bundling edge functions. I've got an auth token for the private code in env.DENO_AUTH_TOKENS (per deno docs) and Deno can download and cache the code without issue. The function runs fine locally but bunding fails as soon as I attempt to deploy.

error: Uncaught (in promise) Error: Module not found "https://raw.githubusercontent.com/path/to/my/private/code/privateModule.ts".
      const ret = new Error(getStringFromWasm0(arg0, arg1));
                  ^
    at __wbg_new_8d2af00bc1e329ee (https://deno.land/x/eszip@v0.30.0/eszip_wasm.generated.js:312:19)
    at <anonymous> (https://deno.land/x/eszip@v0.30.0/eszip_wasm_bg.wasm:1:79439)
    at <anonymous> (https://deno.land/x/eszip@v0.30.0/eszip_wasm_bg.wasm:1:1388039)
    at <anonymous> (https://deno.land/x/eszip@v0.30.0/eszip_wasm_bg.wasm:1:1862894)
    at __wbg_adapter_18 (https://deno.land/x/eszip@v0.30.0/eszip_wasm.generated.js:146:6)
    at real (https://deno.land/x/eszip@v0.30.0/eszip_wasm.generated.js:130:14)

To Reproduce

  1. Create a new edge function
  2. Add a dependency to the edge function that requires DENO_AUTH_TOKENS to access (such as a private github repo)
  3. Verify that DENO_AUTH_TOKENS is correct then observe that deno cache -r index.ts caches the files without problem. Also observe that supabase functions serve my-function works without issue.
  4. Run supabase functions deploy my-function and observe the crash during bundling when it cannot access the files in the private repository

Expected behavior

Anything that works locally should successfully bundle and deploy.

Screenshots

N/A

System information

Additional context

This is blocking me from progressing in my migration from firebase to supabase. Everything works locally but I can't deploy due to this bug.

evelant commented 1 year ago

This appears to be an issue with eszip https://github.com/denoland/eszip/issues/121

Another problem here is that when the bundling process fails it does not give any useful debug output. I think this is due to the code here https://github.com/supabase/cli/blob/main/internal/utils/denos/build.ts where it just throws a useless error such as "file not found" without logging what file it was trying to read.

I also can't find https://github.com/supabase/cli/blob/main/internal/utils/denos/build.ts anywhere in my node_modules, is it compiled directly into the supabase binary? I wanted to patch it to get more useful output but am unable to find it.

laktek commented 1 year ago

@evelant Will take a look at this issue next week.

I also can't find https://github.com/supabase/cli/blob/main/internal/utils/denos/build.ts anywhere in my node_modules, is it compiled directly into the supabase binary? I wanted to patch it to get more useful output but am unable to find it.

You can clone the Supabase CLI repo and run it with a patched version of the file locally. Instructions on how to run it locally should be available in the repo.

soedirgo commented 1 year ago

Just a note for the fix

Let us know if that works!

evelant commented 1 year ago

@soedirgo @laktek it works now, thank you!