Add build and deploy workflow
Build and Deploy / build-deploy (push) Failing after 49s

This commit is contained in:
2026-02-21 23:45:35 +00:00
parent a327e87ac9
commit e2be7ade30
4 changed files with 105 additions and 1 deletions
+48
View File
@@ -0,0 +1,48 @@
name: Build and Deploy
on:
push:
branches: [master]
jobs:
build-deploy:
runs-on: ubuntu-latest
container:
image: docker:latest
volumes:
- /opt/todo3:/deploy
steps:
- name: Install git
run: apk add --no-cache git
- uses: actions/setup-node@v4
- uses: actions/checkout@v4
- name: Copy source to deploy directory
run: |
rm -rf /deploy/build
cp -r . /deploy/build
- name: Create .env file
working-directory: /deploy/build
run: |
cat > .env << 'EOF'
PUBLIC_WS_URL=${{ vars.PUBLIC_WS_URL }}
HOST=${{ vars.HOST }}
FE_PORT=${{ vars.FE_PORT }}
BE_PORT=${{ vars.BE_PORT }}
JWT_SECRET=${{ secrets.JWT_SECRET }}
SIGNUP_SECRET=${{ secrets.SIGNUP_SECRET }}
ADMIN_EMAIL=${{ vars.ADMIN_EMAIL }}
DATA_DIR=/opt/todo3/data
EOF
- name: Build and deploy
working-directory: /deploy/build
run: |
docker compose build
docker compose up -d
- name: Cleanup
run: rm -rf /deploy/build
+29
View File
@@ -0,0 +1,29 @@
FROM oven/bun:latest AS base
WORKDIR /app
FROM base AS deps
COPY package.json bun.lockb ./
COPY packages/fe/package.json packages/fe/
COPY packages/be/package.json packages/be/
RUN bun install --frozen-lockfile
FROM deps AS fe-build
COPY packages/fe packages/fe
COPY packages/be/src/websocket/types.ts packages/be/src/websocket/types.ts
COPY tsconfig.json .
ARG PUBLIC_WS_URL
ENV PUBLIC_WS_URL=$PUBLIC_WS_URL
RUN bun run --filter fe build
FROM base AS frontend
WORKDIR /app/packages/fe
COPY --from=deps /app/node_modules /app/node_modules
COPY --from=fe-build /app/packages/fe/dist ./dist
COPY packages/fe/package.json packages/fe/vite.config.ts ./
CMD ["bun", "run", "start"]
FROM base AS backend
WORKDIR /app/packages/be
COPY --from=deps /app/node_modules /app/node_modules
COPY packages/be ./
CMD ["bun", "run", "start"]
+27
View File
@@ -0,0 +1,27 @@
services:
fe:
build:
context: .
target: frontend
args:
PUBLIC_WS_URL: ${PUBLIC_WS_URL}
ports:
- "${FE_PORT}:4173"
environment:
HOST: ${HOST}
restart: unless-stopped
be:
build:
context: .
target: backend
ports:
- "${BE_PORT}:3000"
environment:
JWT_SECRET: ${JWT_SECRET}
SIGNUP_SECRET: ${SIGNUP_SECRET}
ADMIN_EMAIL: ${ADMIN_EMAIL}
DB_PATH: /data/db.sqlite
volumes:
- ${DATA_DIR:-./data}:/data
restart: unless-stopped
+1 -1
View File
@@ -1,3 +1,3 @@
import { Database } from 'bun:sqlite';
export const db = new Database('db.sqlite');
export const db = new Database(process.env.DB_PATH ?? 'db.sqlite');