Skip to content

Commit e81e23e

Browse files
committed
fix(toolchain): mark external deps
1 parent 5db3aad commit e81e23e

File tree

3 files changed

+59
-38
lines changed

3 files changed

+59
-38
lines changed

packages/toolchain/cli/src/util/deploy.rs

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ pub async fn deploy(opts: DeployOpts<'_>) -> Result<Vec<Uuid>> {
126126

127127
// Setup Rivetkit
128128
let mut _rivet_actor_tempfiles = Vec::new();
129-
let mut _rivet_actor_tempdirs = Vec::new();
129+
// let mut _rivet_actor_tempdirs = Vec::new();
130130
if let Some(rivetkit) = &root.rivetkit {
131131
// Create service token
132132
let service_token =
@@ -174,37 +174,42 @@ pub async fn deploy(opts: DeployOpts<'_>) -> Result<Vec<Uuid>> {
174174
.await?;
175175

176176
// Determine server runtime
177-
let function_build = if rivetkit.build.image.is_some()
178-
|| rivetkit.build.dockerfile.is_some()
179-
{
180-
// Use user-provided Docker config
181-
rivetkit.build.clone()
182-
} else {
183-
// Auto-generate server Dockerfile
184-
//
185-
// Has to be in the project path in order to use NPM dependencies
186-
let dockerfile_tempdir = tempfile::Builder::new().prefix("rivet-server-").tempdir()?;
187-
let dockerfile_path = dockerfile_tempdir.path().join("Dockerfile");
188-
let dockerignore_path = dockerfile_tempdir.path().join("Dockerfile.dockerignore");
189-
_rivet_actor_tempdirs.push(dockerfile_tempdir);
190-
191-
let server_path = rivetkit.server.clone();
192-
tokio::fs::write(
193-
&dockerfile_path,
194-
generate_server_dockerfile(&project_root, server_path),
195-
)
196-
.await?;
197-
tokio::fs::write(&dockerignore_path, generate_server_dockerignore()).await?;
198-
199-
toolchain::config::build::docker::Build {
200-
dockerfile: Some(dockerfile_path.display().to_string()),
201-
build_path: Some(project_root.display().to_string()),
202-
image: None,
203-
build_target: None,
204-
build_args: None,
205-
unstable: rivetkit.build.unstable.clone(),
206-
}
207-
};
177+
let function_build =
178+
if rivetkit.build.image.is_some() || rivetkit.build.dockerfile.is_some() {
179+
// Use user-provided Docker config
180+
rivetkit.build.clone()
181+
} else {
182+
// Auto-generate server Dockerfile
183+
//
184+
// Has to be in the project path in order to use NPM dependencies
185+
//
186+
// Preserve the paths because we want to be able to let the user to test the Dockerfile
187+
// that's printed out
188+
let dockerfile_tempdir = tempfile::Builder::new()
189+
.prefix("rivet-server-")
190+
.tempdir()?
191+
.into_path();
192+
let dockerfile_path = dockerfile_tempdir.join("Dockerfile");
193+
let dockerignore_path = dockerfile_tempdir.join("Dockerfile.dockerignore");
194+
// _rivet_actor_tempdirs.push(dockerfile_tempdir);
195+
196+
let server_path = rivetkit.server.clone();
197+
tokio::fs::write(
198+
&dockerfile_path,
199+
generate_server_dockerfile(&project_root, server_path),
200+
)
201+
.await?;
202+
tokio::fs::write(&dockerignore_path, generate_server_dockerignore()).await?;
203+
204+
toolchain::config::build::docker::Build {
205+
dockerfile: Some(dockerfile_path.display().to_string()),
206+
build_path: Some(project_root.display().to_string()),
207+
image: None,
208+
build_target: None,
209+
build_args: None,
210+
unstable: rivetkit.build.unstable.clone(),
211+
}
212+
};
208213

209214
// Add function
210215
root.functions.insert(
@@ -714,8 +719,6 @@ fn generate_dockerfile_for_package_manager(
714719
package_manager: &PackageManager,
715720
server_path_js: &str,
716721
) -> String {
717-
let copy_files = package_manager.copy_files.join(" ");
718-
719722
// Determine package manager specific configurations
720723
let (base_image, setup_commands, build_cmd, runtime_cmd, add_deps_cmd) = match package_manager.name.as_str() {
721724
"yarn" => (
@@ -730,7 +733,7 @@ fn generate_dockerfile_for_package_manager(
730733
"",
731734
"bunx tsc --outDir dist/ --rootDir ./",
732735
"bun run",
733-
"bun add @hono/node-server @hono/node-ws"
736+
"echo noop"
734737
),
735738
"pnpm" => (
736739
"node:22-alpine",
@@ -751,6 +754,7 @@ fn generate_dockerfile_for_package_manager(
751754
let mut dockerfile = String::new();
752755

753756
// Builder stage
757+
let copy_files = package_manager.copy_files.join(" ");
754758
dockerfile.push_str(&format!("FROM {} AS builder\n\n", base_image));
755759
dockerfile.push_str("WORKDIR /app\n\n");
756760
dockerfile.push_str(&format!("# Copy package files\nCOPY {} ./\n\n", copy_files));
@@ -791,9 +795,14 @@ fn generate_dockerfile_for_package_manager(
791795
dockerfile.push_str("\n\n");
792796
}
793797

798+
let app_copy_files = package_manager
799+
.copy_files
800+
.iter()
801+
.map(|x| format!("/app/{x}"))
802+
.collect::<Vec<_>>()
803+
.join(" ");
794804
dockerfile.push_str(&format!(
795-
"COPY --from=builder --chown=rivet:rivet /app/{} ./\n\n",
796-
copy_files
805+
"COPY --from=builder --chown=rivet:rivet {app_copy_files} ./\n\n"
797806
));
798807

799808
// Install production dependencies

packages/toolchain/js-utils-embed/js/src/tasks/build/build.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ export async function build(input: Input): Promise<Output> {
5454
stdLibBrowser[ `node:${packageName}` ] = packagePath;
5555
}
5656

57+
console.log('foo')
58+
5759
const result = await esbuild.build({
5860
absWorkingDir: input.projectRoot,
5961
entryPoints: [input.entryPoint],
@@ -67,6 +69,11 @@ export async function build(input: Input): Promise<Output> {
6769
inject: [stdLibInject],
6870
plugins: [stdLibPlugin(stdLibBrowser)],
6971
external: [
72+
"node:*",
73+
"node:fs",
74+
"node:fs/promises",
75+
"fs",
76+
"fs/promises",
7077
// Wasm must be loaded as a separate file manually, cannot be bundled
7178
"*.wasm",
7279
"*.wasm?module",

packages/toolchain/js-utils-embed/js/src/tasks/build/preset.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ const nodeCompatModules = [
3636
//"url",
3737
//"util/types",
3838
//"zlib",
39+
"fs",
40+
"fs/promises",
3941
];
4042

4143
// Modules implemented via a mix of workerd APIs and polyfills.
@@ -48,6 +50,9 @@ const hybridNodeCompatModules = [
4850
"util",
4951
];
5052

53+
const externalModules = nodeCompatModules.flatMap((p) => [p, `node:${p}`])
54+
console.log('modules', externalModules);
55+
5156
export const rivetPreset: Preset = {
5257
meta: {
5358
name: "unenv:rivet",
@@ -86,5 +91,5 @@ export const rivetPreset: Preset = {
8691
//process: "@cloudflare/unenv-preset/runtime/node/process/index",
8792
},
8893
polyfill: [],
89-
external: nodeCompatModules.flatMap((p) => [p, `node:${p}`]),
94+
externa: nodeCompatModules.flatMap((p) => [p, `node:${p}`]),
9095
};

0 commit comments

Comments
 (0)