Skip to content

Commit

Permalink
Move to Bun
Browse files Browse the repository at this point in the history
  • Loading branch information
LitoMore committed Aug 12, 2024
1 parent 09a0c91 commit 759c116
Show file tree
Hide file tree
Showing 16 changed files with 309 additions and 441 deletions.
1 change: 1 addition & 0 deletions .gitattribute
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.lockb binary diff=lockb
13 changes: 13 additions & 0 deletions .github/workflows/bun.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: Bun
on: [push]
jobs:
build:
runs-on: ubuntu-latest
name: Bun
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- run: bun install --frozen-lockfile
- run: bun run lint
15 changes: 0 additions & 15 deletions .github/workflows/deno.yml

This file was deleted.

4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@

.DS_Store
.vscode
node_modules
1 change: 1 addition & 0 deletions .xo-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{ "prettier": true, "ignores": ["app/index.js"] }
49 changes: 31 additions & 18 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,26 +1,39 @@
# Based on https://github.com/denoland/deno_docker/blob/main/alpine.dockerfile
# syntax = docker/dockerfile:1

ARG BIN_IMAGE=denoland/deno:bin
FROM ${BIN_IMAGE} AS bin
# Adjust BUN_VERSION as desired
ARG BUN_VERSION=1.1.22
FROM oven/bun:${BUN_VERSION}-slim as base

FROM frolvlad/alpine-glibc:alpine-3.13
LABEL fly_launch_runtime="Bun"

RUN apk --no-cache add ca-certificates
# Bun app lives here
WORKDIR /app

RUN addgroup --gid 1000 deno \
&& adduser --uid 1000 --disabled-password deno --ingroup deno \
&& mkdir /deno-dir/ \
&& chown deno:deno /deno-dir/
# Set production environment
ENV NODE_ENV="production"

ENV DENO_DIR /deno-dir/
ENV DENO_INSTALL_ROOT /usr/local

ARG DENO_VERSION
ENV DENO_VERSION=${DENO_VERSION}
COPY --from=bin /deno /bin/deno
# Throw-away build stage to reduce size of final image
FROM base as build

WORKDIR /deno-dir
COPY . .
# 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

ENTRYPOINT ["/bin/deno"]
CMD ["run", "--allow-net", "https://deno.land/std/examples/echo_server.ts"]
# Install node modules
COPY --link bun.lockb package.json ./
RUN bun install --production

# Copy application code
COPY --link . .


# Final stage for app image
FROM base

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

# Start the server by default, this can be overwritten at runtime
EXPOSE 8080
CMD [ "bun", "source/app.js" ]
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<p align="center">
<a href="https://github.com/LitoMore/simple-icons-cdn/actions">
<img src="https://img.shields.io/github/actions/workflow/status/LitoMore/simple-icons-cdn/deno.yml?branch=main&logo=deno&logoColor=000&label=Deno&labelColor=fff"/>
<img src="https://img.shields.io/github/actions/workflow/status/LitoMore/simple-icons-cdn/bun.yml?branch=main&logo=bun&logoColor=fff&label=Bun&labelColor=333"/>
</a>
<a href="https://fly.io">
<img src="https://img.shields.io/badge/Powered_by_Fly.io-fff?logo=data:image/svg%2bxml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+Rmx5LmlvPC90aXRsZT48cGF0aCBmaWxsPSIjMkExODYzIiBkPSJtMTEuOTkzIDAtLjIxNC4wMDMtLjU0Ny4wMjgtLjI3Ni4wMjUtLjQwNC4wNS0uMjY0LjA0LS4zOTcuMDgtLjI5NC4wNjZMOC45LjQ5NWwtLjA3Mi4wMjgtLjc4My4zMjUtLjAyNy4wMTMtLjU1Mi4yOS0uMjkuMTg2LS4zNjcuMjQ4LS4wMjMuMDE4LS4zMS4yNTMtLjQyMy4zNzItLjE3NC4xNzQtLjIwMi4yMjQtLjE4NS4yMjItLjE2LjIxLS4yMjQuMzMxLS4yMjUuMzcxLS4xNjIuMzA1LS4yMzQuNTE0LS4wNDcuMTEtLjE0Ni40MjgtLjA0NS4xNDYtLjE5Ny44NzUtLjAyOC4xNTQtLjA4Ny44NzYtLjAxMi4yNC0uMDAxLjA4Ni4wMDkuNDAyLjAyLjIzNUw0IDguNWwuMDYyLjMzMi4wNzQuMzA2LjA5NS4zMy4yNS43MDIuMDgyLjIxLjQzMy45MTQuMTUzLjI4Mi41Ljg2LjE5Mi4zMS43IDEuMDMxLjEwMS4xMzYuOTEgMS4xODQuMjk0LjM2NSAxLjA0IDEuMjE0LjIxMy4yMzUuODU2LjkyLjM0LjM1Mi41Ni41NTctLjExMi4wOTQtLjA3LjA2M3EtLjI4Ni4yNjctLjU0LjU2NGE1IDUgMCAwIDAtLjIzMy4yOTdxLS4xNjguMjM0LS4zLjQ5LS4wNjcuMTMzLS4xMi4yNzNhMi41IDIuNSAwIDAgMC0uMTYzLjc0bC0uMDAzLjIyYy4wMDguMzA4LjA3LjYxMi4xODUuOWEyLjUgMi41IDAgMCAwIDEuMDI4IDEuMjE1cS4yNS4xNTIuNTI2LjI0OGEyLjk1IDIuOTUgMCAwIDAgMS4yNDEuMTQxaC4wMDNhMi44IDIuOCAwIDAgMCAxLjAyMy0uMzA0cS4yMDYtLjEwOS4zOS0uMjUzYTIuNSAyLjUgMCAwIDAgLjc5LTEuMDQ4Yy4xMjgtLjMyMi4xOTEtLjY2Ni4xODYtMS4wMTNsLS4wMS0uMTgyYTIuNSAyLjUgMCAwIDAtLjE3LS42OTcgMyAzIDAgMCAwLS4xMzItLjI4NiA0IDQgMCAwIDAtLjMwOS0uNDg3IDUgNSAwIDAgMC0uMTYzLS4yMSA3IDcgMCAwIDAtLjYwMy0uNjMxbC0uMTUxLS4xMy4yNTctLjI1MyAxLjEwMy0xLjE1My4zODItLjQxOS41OTMtLjY2Ny4zODYtLjQ1Mi41NTEtLjY3LjM3Mi0uNDY4LjU0Ny0uNzMxLjI3Ny0uMzc5LjM5LS41ODYuMzI4LS41LjYxNC0xLjA3LjM1My0uNzAyLjAxLS4wMjIuMjY5LS42NTIuMDA5LS4wMjYuMjktLjkwNC4wMy0uMTMyLjEyNy0uNzIuMDI0LS4xOTUuMDA3LS4xMi4wMS0uNDUxLS4wMDQtLjA4NC0uMDIzLS40MDMtLjAyOC0uMzE0LS4xNDMtLjkwNC0uMDA4LS4wMzUtLjE4NC0uNjY5LS4wNjMtLjE4Ni0uMTc5LS40NDQtLjE3LS4zOC0uMDktLjE3NS0uMzAyLS41MS0uMDc3LS4xMi0uMzgtLjUwNi0uMTEyLS4xMjUtLjMyNC0uMzQ4LS4wMi0uMDItLjM4MS0uMzQ3LS4xNTgtLjEzNy0uNTQ3LS40LS4xNS0uMDkyLS40MDItLjIzNi0uMjIzLS4xMTQtLjM1Ni0uMTY4LS4yNDItLjEwMy0uMzA1LS4xMTYtLjI1MS0uMDg2LS4yMjYtLjA2OC0uNzctLjE5LS4wOS0uMDItLjc3Ni0uMTA5LS41ODktLjA1TDEyLjQuMDA5Wm0tLjIzNiAxLjU3NnYxNS41MmwtLjAzOS0uMDcxYTQzIDQzIDAgMCAxLTEuNDI1LTIuODkgMzEgMzEgMCAwIDEtLjk2OC0yLjQyMyAxOSAxOSAwIDAgMS0uNTg0LTEuOTk0IDExIDExIDAgMCAxLS4yNTUtMS42MyA4IDggMCAwIDEtLjAxMy0uNzA1cS4wMDYtLjMwNi4wMjUtLjYxMy4wMy0uNDgxLjEtLjk1OWExMCAxMCAwIDAgMSAuMTQtLjc0NnEuMDY4LS4yOTQuMTU4LS41ODEuMTMtLjQxNS4zMS0uODExLjA2Ny0uMTQzLjE0My0uMjgzYy4zLS41NTUuNzA1LTEuMDY1IDEuMjM4LTEuNDA3YTIuNiAyLjYgMCAwIDEgMS4xNTEtLjQwNnptMS45OTQuMDQgMS4wNDUuMjk3Yy40ODQuMTc5Ljk0OS40MTIgMS4zNzcuNzAyYTUuNSA1LjUgMCAwIDEgMS40ODEgMS40NzggNS41IDUuNSAwIDAgMSAuNTczIDEuMTA0IDYuNSA2LjUgMCAwIDEgLjQgMS43OXEuMDIuMjQxLjAyNC40ODIuMDA2LjIyNS0uMDEuNDUtLjA0NC41MDItLjE4Ny45ODVhOCA4IDAgMCAxLS4yNy43NzcgMTEgMTEgMCAwIDEtLjQzLjkyOCAxOCAxOCAwIDAgMS0xLjE3NyAxLjkzNyAzMCAzMCAwIDAgMS0xLjY5OCAyLjIxNiA0MiA0MiAwIDAgMS0yLjAzNyAyLjI1NiA0MyA0MyAwIDAgMCAxLjM0LTIuNzQxcS4zNDYtLjc3OC42NTItMS41NzEuMzM3LS44NzIuNjA3LTEuNzY2LjIwMy0uNjcuMzUtMS4zNTVBMTEgMTEgMCAwIDAgMTUuOTggOC40cS4wNTEtLjQ5OC4wMzktLjk5OGExNCAxNCAwIDAgMC0uMDIzLS42MTEgMTAuNCAxMC40IDAgMCAwLS40MTMtMi40MiA3IDcgMCAwIDAtLjMzLS44NzJjLS4zMDUtLjY2Ni0uNzMtMS4yODctMS4zMDgtMS43NDFabS0xLjc3NCAxOC40N2guMDQ3bC4wNDQuMDEzcS4wMi4wMTEuMDQuMDI1bC4wMzcuMDM0cS4xMzcuMTI1LjI2NS4yNjEuMDkuMDk2LjE3NC4xOTkuMTA3LjEzLjIuMjcuMDM4LjA2My4wNzMuMTI4LjAzLjA1Ny4wNTQuMTE3LjA0NC4xMDQuMDU1LjIxNmwtLjAwMi4xMzhhLjguOCAwIDAgMS0uMzc2LjYyIDEuMDYgMS4wNiAwIDAgMS0uNDU5LjE1bC0uMTcyLjAwNi0uMTQ0LS4wMTNhMSAxIDAgMCAxLS4yLS4wNDkgMSAxIDAgMCAxLS4xOS0uMDg4bC0uMTEzLS4wODRhLjguOCAwIDAgMS0uMjU4LS40NDJsLS4wMTMtLjA4Ny0uMDA0LS4xMzNhMSAxIDAgMCAxIC4wMTUtLjEwOHEuMDMtLjExNi4wODUtLjIyMy4wNy0uMTM1LjE1OC0uMjU4LjE0OC0uMi4zMTktLjM3OC4xMS0uMTE3LjIyNy0uMjI1bC4wNTUtLjA1MWMuMDM5LS4wMjUuMDM5LS4wMjUuMDgzLS4wMzgiLz48L3N2Zz4=" />
Expand Down
Binary file added bun.lockb
Binary file not shown.
12 changes: 0 additions & 12 deletions deno.json

This file was deleted.

148 changes: 0 additions & 148 deletions deno.lock

This file was deleted.

4 changes: 2 additions & 2 deletions fly.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ primary_region = 'sjc'
PORT = '8080'

[processes]
app = 'run --allow-net ./source/app.js'
app = 'bun source/app.js'

[http_service]
internal_port = 8080
force_https = true
auto_stop_machines = false
auto_stop_machines = 'off'
auto_start_machines = true
min_machines_running = 3
processes = ['app']
Expand Down
14 changes: 14 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"dependencies": {
"@oakserver/oak": "^14.1.0",
"simple-icons": "^13.5.0",
"svg-path-commander": "^2.0.9"
},
"devDependencies": {
"xo": "^0.59.3"
},
"scripts": {
"start": "bun source/app.js",
"lint": "xo"
}
}
68 changes: 33 additions & 35 deletions source/app.js
Original file line number Diff line number Diff line change
@@ -1,49 +1,47 @@
import { getIconSvg, getSimpleIcon } from "./icon.js";
import { Application } from "jsr:@oak/oak/application";
import { Router } from "jsr:@oak/oak/router";
import {Application, Router} from '@oakserver/oak';
import {getIconSvg, getSimpleIcon} from './icon.js';

const router = new Router();

router.get("/", (ctx) => {
ctx.response.headers.set(
"Cache-Control",
"public, max-age=86400, s-maxage=31536000, stale-while-revalidate=604800",
);
ctx.response.status = 307;
ctx.response.redirect("https://github.com/LitoMore/simple-icons-cdn");
router.get('/', (context) => {
context.response.headers.set(
'Cache-Control',
'public, max-age=86400, s-maxage=31536000, stale-while-revalidate=604800',
);
context.response.status = 307;
context.response.redirect('https://github.com/LitoMore/simple-icons-cdn');
});
router.get("/favicon.ico", (ctx) => {
ctx.response.headers.set(
"Cache-Control",
"public, max-age=31536000, s-maxage=31536000, immutable",
);
ctx.response.status = 204;
router.get('/favicon.ico', (context) => {
context.response.headers.set(
'Cache-Control',
'public, max-age=31536000, s-maxage=31536000, immutable',
);
context.response.status = 204;
});
router.get("/:iconSlug/:color?/:darkModeColor?", (ctx) => {
ctx.response.headers.set("Access-Control-Allow-Origin", "*");
ctx.response.headers.set(
"Cache-Control",
"public, max-age=86400, s-maxage=31536000, stale-while-revalidate=604800",
);
router.get('/:iconSlug/:color?/:darkModeColor?', (context) => {
context.response.headers.set('Access-Control-Allow-Origin', '*');
context.response.headers.set(
'Cache-Control',
'public, max-age=86400, s-maxage=31536000, stale-while-revalidate=604800',
);

const { iconSlug, color, darkModeColor } = ctx.params;
const viewbox = ctx.request.url.searchParams.get("viewbox");
const icon = getSimpleIcon(iconSlug);
const {iconSlug, color, darkModeColor} = context.params;
const viewbox = context.request.url.searchParams.get('viewbox');
const icon = getSimpleIcon(iconSlug);

if (icon) {
const iconSvg = getIconSvg(icon, color, darkModeColor, viewbox);
ctx.response.headers.set("Content-Type", "image/svg+xml");
ctx.response.body = iconSvg;
return;
}
if (icon) {
const iconSvg = getIconSvg(icon, color, darkModeColor, viewbox);
context.response.headers.set('Content-Type', 'image/svg+xml');
context.response.body = iconSvg;
return;
}

ctx.response.status = 404;
return;
context.response.status = 404;
});

const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());
app.listen({ port: 8080 });
app.listen({port: 8080});

console.log("Server running at http://localhost:8080/simpleicons");
console.log('Server running at http://localhost:8080/simpleicons');
Loading

0 comments on commit 759c116

Please sign in to comment.