diff --git a/.forgejo/workflows/build-release-container.yaml b/.forgejo/workflows/build-release-container.yaml new file mode 100644 index 0000000..304cf2d --- /dev/null +++ b/.forgejo/workflows/build-release-container.yaml @@ -0,0 +1,38 @@ +name: build-container + +on: + push: + tags: + - release-* + workflow_dispatch: + +jobs: + build: + runs-on: docker + steps: + - name: Checkout the repo + uses: actions/checkout@v4 + + - name: Use Node.JS 20.x + uses: actions/setup-node@v1 + with: + node-version: 20.x + - name: Install dependencies + run: npm ci + - name: Run build + run: npm run build + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to Container Registry + uses: docker/login-action@v3 + with: + registry: hub.docker.com + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Build and Push + uses: docker/build-push-action@v6 + with: + push: true + tags: neintonine/pnp-scheduler:release + context: . diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c415253 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM node:20 + +COPY ./dist /app/dist +COPY ./node_modules /app/node_modules +COPY ./public /app/public + +WORKDIR /app + +CMD sh -c "node /app/dist/deploy.js && node /app/dist/main.js" \ No newline at end of file diff --git a/examples/docker-compose.yml b/examples/docker-compose.yml new file mode 100644 index 0000000..dd1f95d --- /dev/null +++ b/examples/docker-compose.yml @@ -0,0 +1,9 @@ +services: + bot: + container_name: "pnp_scheduler_bot" + image: + restart: unless-stopped + volumes: + - ./data:/app/data + env_file: + - ../.env.example \ No newline at end of file diff --git a/package.json b/package.json index d3b34fc..2d514a6 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "main": "main.ts", "scripts": { "build": "node ./build/build-cli.mjs", + "build:docker": "sudo docker build .", "watch": "node ./build/watch.mjs", "deploy": "node ./dist/deploy.js", "start": "node ./dist/main.js", diff --git a/source/Container/Services.ts b/source/Container/Services.ts index 81ee210..129e857 100644 --- a/source/Container/Services.ts +++ b/source/Container/Services.ts @@ -30,6 +30,7 @@ export class Services { container.set(logger, 'logger'); const database = new DatabaseConnection(env.database); + database.connect() container.set(database); const eventHandler = new EventHandler(); diff --git a/source/Database/DatabaseConnection.ts b/source/Database/DatabaseConnection.ts index cfef193..e860936 100644 --- a/source/Database/DatabaseConnection.ts +++ b/source/Database/DatabaseConnection.ts @@ -3,12 +3,22 @@ import Sqlite3 from "better-sqlite3"; import Database from "better-sqlite3"; import {Container} from "../Container/Container"; import {Logger} from "log4js"; +import path from "node:path"; +import * as fs from "node:fs"; export class DatabaseConnection { private database: Sqlite3.Database; - constructor(env: DatabaseEnvironment) { - this.database = new Database(env.path, { + constructor(private readonly env: DatabaseEnvironment) { + } + + public connect() { + const directory = path.dirname(this.env.path); + fs.mkdirSync(directory, { + recursive: true + }) + + this.database = new Database(this.env.path, { nativeBinding: "node_modules/better-sqlite3/build/Release/better_sqlite3.node", }) this.database.pragma('journal_mode = WAL'); diff --git a/source/Environment.ts b/source/Environment.ts index d16b971..a6dfa99 100644 --- a/source/Environment.ts +++ b/source/Environment.ts @@ -1,5 +1,7 @@ import dotenv from "dotenv"; import path from "node:path"; +import * as fs from "node:fs"; +import {dot} from "node:test/reporters"; type DiscordEnvironment = { token: string; @@ -27,8 +29,14 @@ export class Environment { } public setup() { + const dotenvPath = path.resolve(__dirname, "../environment/.env"); + + if (!fs.existsSync(dotenvPath)) { + return; + } + dotenv.config({ - path: path.resolve(__dirname, "../environment/.env"), + path: dotenvPath, }); } } \ No newline at end of file