Skip to content

Commit

Permalink
Bun / SvelteKit support
Browse files Browse the repository at this point in the history
* don't install node to make build work, instead use --bun
* only copy build directory, and run ./build/index.js
  • Loading branch information
rubys committed Apr 12, 2024
1 parent 9620cfe commit e1c45e2
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 11 deletions.
20 changes: 15 additions & 5 deletions gdf.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,10 @@ export class GDF {
return this.astro && !this.astroSSR
}

get svelte() {
return !!(this.#pj.devDependencies?.['@sveltejs/kit'])
}

get vite() {
return !!(this.#pj.scripts?.dev === 'vite')
}
Expand Down Expand Up @@ -240,8 +244,6 @@ export class GDF {

if (!this.bun) {
packages.push('node-gyp')
} else if (this.bunNode) {
packages.push('ca-certificates', 'curl')
}

// https://docs.npmjs.com/cli/v10/configuring-npm/package-json#git-urls-as-dependencies
Expand Down Expand Up @@ -269,8 +271,8 @@ export class GDF {

const build = this.#pj.scripts?.build

if (build && fs.existsSync(`node_modules/.bin/${build.split(' ')[0]}`)) {
const script = fs.readFileSync(`node_modules/.bin/${build.split(' ')[0]}`, 'utf-8')
if (build && fs.existsSync(path.join(this._appdir, `node_modules/.bin/${build.split(' ')[0]}`))) {
const script = fs.readFileSync(path.join(this._appdir, `node_modules/.bin/${build.split(' ')[0]}`), 'utf-8')
return /^#!.*node/.test(script)
}

Expand Down Expand Up @@ -662,7 +664,13 @@ export class GDF {
// Is there a build script?
get build() {
if (this.options.build) return this.options.build
if (this.#pj.scripts?.build) return `${this.packager} run build`
if (this.#pj.scripts?.build) {
if (this.packager === 'bun' && this.bunNode) {
return 'bun --bun run build'
} else {
return `${this.packager} run build`
}
}
}

// Descriptive form of detected runtime
Expand Down Expand Up @@ -731,6 +739,8 @@ export class GDF {
return [this.packager === 'bun' ? 'bun' : 'node', this.#pj.module]
} else if (this.#pj.main) {
return [this.packager === 'bun' ? 'bun' : 'node', this.#pj.main]
} else if (this.svelte) {
return ['bun', './build/index.js']
} else if (this.packager === 'bun') {
return ['bun', 'index.ts']
} else {
Expand Down
8 changes: 2 additions & 6 deletions templates/Dockerfile.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,6 @@ RUN <% if (options.cache) { %><%= pkg_cache %>
<% } %><%= pkg_update %> && \
<%= pkg_install %> <%= buildPackages.join(' ') %>

<% if (bunNode) { -%>
# Install Node.js
RUN curl -fsSL https://deb.nodesource.com/setup_<%= nodeVersion.split('.')[0] %>.x | bash - && \
apt-get install -y nodejs
<% } -%>
# Install node modules
COPY<% if (options.link) { %> --link<% } %> <%= packageFiles.join(' ') %> ./
RUN <%- buildCache %><%= packagerInstall %>
Expand Down Expand Up @@ -146,6 +140,8 @@ COPY --from=build /app/dist /app/dist
ENV PORT=4321
ENV HOST=0.0.0.0
<% } else if (svelte) { -%>
COPY --from=build /app/build /app/build
<% } else { -%>
COPY --from=build /app /app
<% } -%>
Expand Down
6 changes: 6 additions & 0 deletions test/frameworks/svelte-bun/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/.git
/node_modules
.dockerignore
.env
Dockerfile
fly.toml
46 changes: 46 additions & 0 deletions test/frameworks/svelte-bun/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# syntax = docker/dockerfile:1

# Adjust BUN_VERSION as desired
ARG BUN_VERSION=xxx
FROM oven/bun:${BUN_VERSION}-slim as base

LABEL fly_launch_runtime="Bun"

# Bun app lives here
WORKDIR /app

# Set production environment
ENV NODE_ENV="production"


# Throw-away build stage to reduce size of final image
FROM base as build

# Install packages needed to build node modules
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y build-essential pkg-config python-is-python3

# Install node modules
COPY --link bun.lockb package.json ./
RUN bun install

# Copy application code
COPY --link . .

# Build application
RUN bun --bun run build

# Remove development dependencies
RUN rm -rf node_modules && \
bun install --ci


# Final stage for app image
FROM base

# Copy built application
COPY --from=build /app/build /app/build

# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD [ "bun", "./build/index.js" ]
Binary file added test/frameworks/svelte-bun/bun.lockb
Binary file not shown.
25 changes: 25 additions & 0 deletions test/frameworks/svelte-bun/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "my-app",
"version": "0.0.1",
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch"
},
"devDependencies": {
"@flydotio/dockerfile": "^0.5.4",
"@fontsource/fira-mono": "^4.5.10",
"@neoconfetti/svelte": "^1.0.0",
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"svelte": "^4.2.7",
"svelte-adapter-bun": "^0.5.2",
"svelte-check": "^3.6.0",
"typescript": "^5.0.0",
"vite": "^5.0.3"
},
"type": "module"
}

0 comments on commit e1c45e2

Please sign in to comment.