From 02bc520a7fb71af45426f6176e40b238e78f3ff7 Mon Sep 17 00:00:00 2001 From: Lukas | AstroGD Date: Sat, 16 Sep 2023 12:30:28 +0200 Subject: [PATCH] Update template to own needs --- .devcontainer.json | 1 - .drone.yml | 180 -------------------------------------- .env.template | 5 +- .eslintrc.json | 1 - .npmrc | 4 - Dockerfile | 14 --- docker-compose.yml | 33 ------- index.test.ts | 17 ---- index.ts | 10 +-- package.json | 58 ++---------- src/db/dataSource.test.ts | 57 ------------ src/db/dataSource.ts | 37 -------- tsconfig.json | 4 +- 13 files changed, 9 insertions(+), 412 deletions(-) delete mode 100644 .devcontainer.json delete mode 100644 .drone.yml delete mode 100644 .npmrc delete mode 100644 Dockerfile delete mode 100644 docker-compose.yml delete mode 100644 index.test.ts delete mode 100644 src/db/dataSource.test.ts delete mode 100644 src/db/dataSource.ts diff --git a/.devcontainer.json b/.devcontainer.json deleted file mode 100644 index 8a7df48..0000000 --- a/.devcontainer.json +++ /dev/null @@ -1 +0,0 @@ -{"image":"mcr.microsoft.com/devcontainers/javascript-node","build":{}} \ No newline at end of file diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 7753a79..0000000 --- a/.drone.yml +++ /dev/null @@ -1,180 +0,0 @@ ---- -kind: pipeline -type: docker -name: pr -trigger: - event: - - pull_request - -steps: - - name: restore-cache - image: drillster/drone-volume-cache - settings: - restore: true - mount: - - ./node_modules - volumes: - - name: cache - path: /cache - - name: dependencies - image: node:lts-alpine - environment: - CI: true - commands: - - npm install - depends_on: - - restore-cache - - name: tests - image: node:lts-alpine - environment: - CI: true - commands: - - npm test - depends_on: - - dependencies - - name: format - image: node:lts-alpine - environment: - CI: true - commands: - - npm run format - depends_on: - - tests - - name: push-changes - image: appleboy/drone-git-push - environment: - CI: true - CI_USERNAME: - from_secret: ci_username - CI_PASSWORD: - from_secret: ci_password - GIT_COMMITTER_NAME: - from_secret: ci_username - GIT_COMMITTER_EMAIL: - from_secret: ci_email - PLUGIN_AUTHOR_NAME: - from_secret: ci_username - PLUGIN_AUTHOR_EMAIL: - from_secret: ci_email - PLUGIN_USERNAME: - from_secret: ci_username - PLUGIN_PASSWORD: - from_secret: ci_password - settings: - branch: "${DRONE_SOURCE_BRANCH}" - remote: https://${CI_USERNAME}:${CI_PASSWORD}@git.astrogd.cloud/internal/template-typescript.git - force: false - commit: true - commit_message: "[CI] Ensure code style on ${DRONE_COMMIT_SHA:0:7}" - author_name: "${GIT_COMMITTER_NAME}" - author_email: "${GIT_COMMITTER_EMAIL}" - depends_on: - - format - - name: rebuild-cache - image: drillster/drone-volume-cache - settings: - rebuild: true - mount: - - ./node_modules - volumes: - - name: cache - path: /cache - depends_on: - - dependencies - -volumes: -- name: cache - host: - path: /tmp/drone/ci/cache - ---- -kind: pipeline -type: docker -name: push -trigger: - event: - - push - branch: - - main - - dev - -steps: - - name: restore-cache - image: drillster/drone-volume-cache - settings: - restore: true - mount: - - ./node_modules - volumes: - - name: cache - path: /cache - - name: dependencies - image: node:lts-alpine - environment: - CI: true - commands: - - npm install - depends_on: - - restore-cache - - name: tests - image: node:lts-alpine - environment: - CI: true - commands: - - npm test - depends_on: - - dependencies - - name: format - image: node:lts-alpine - environment: - CI: true - commands: - - npm run format - depends_on: - - tests - - name: push-changes - image: appleboy/drone-git-push - environment: - CI: true - CI_USERNAME: - from_secret: ci_username - CI_PASSWORD: - from_secret: ci_password - GIT_COMMITTER_NAME: - from_secret: ci_username - GIT_COMMITTER_EMAIL: - from_secret: ci_email - PLUGIN_AUTHOR_NAME: - from_secret: ci_username - PLUGIN_AUTHOR_EMAIL: - from_secret: ci_email - PLUGIN_USERNAME: - from_secret: ci_username - PLUGIN_PASSWORD: - from_secret: ci_password - settings: - branch: "${DRONE_SOURCE_BRANCH}" - remote: https://${CI_USERNAME}:${CI_PASSWORD}@git.astrogd.cloud/internal/template-typescript.git - force: false - commit: true - commit_message: "[CI] Ensure code style on ${DRONE_COMMIT_SHA:0:7}" - author_name: "${GIT_COMMITTER_NAME}" - author_email: "${GIT_COMMITTER_EMAIL}" - depends_on: - - format - - name: rebuild-cache - image: drillster/drone-volume-cache - settings: - rebuild: true - mount: - - ./node_modules - volumes: - - name: cache - path: /cache - depends_on: - - dependencies - -volumes: -- name: cache - host: - path: /tmp/drone/ci/cache diff --git a/.env.template b/.env.template index 7974d00..7cdfe0a 100644 --- a/.env.template +++ b/.env.template @@ -1,4 +1 @@ -DB_USER=user -DB_PASS=PASSWORD -DB_HOST=localhost -DB_NAME=template \ No newline at end of file +NPM_TOKEN=TOKEN_HERE \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 307ceec..89cad21 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -13,7 +13,6 @@ "plugins": ["@typescript-eslint"], "rules": { "indent": ["error", 4], - "linebreak-style": ["error", "unix"], "quotes": ["error", "double"] } } diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 158d142..0000000 --- a/.npmrc +++ /dev/null @@ -1,4 +0,0 @@ -@astrogd:registry=https://git.astrogd.cloud/api/packages/packages/npm/ -//git.astrogd.cloud/api/packages/packages/npm/:_authToken=${NPM_TOKEN} -@internal:registry=https://git.astrogd.cloud/api/packages/internal/npm/ -//git.astrogd.cloud/api/packages/internal/npm/:_authToken=${NPM_TOKEN} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 71ad7a4..0000000 --- a/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM node:lts-alpine AS builder -ENV NODE_ENV=production -# RUN apk add --no-cache python3 make g++ -COPY dist/package*.json ./ -RUN npm install --omit=dev - -FROM node:lts-alpine AS app -WORKDIR /usr/src/app -ENV NODE_ENV=production -COPY --from=builder node_modules ./node_modules -COPY dist/ . -VOLUME [ "/usr/src/app/save" ] -EXPOSE 80 -CMD ["node", "--enable-source-maps", "index.js"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 7632b35..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,33 +0,0 @@ -version: "3.9" -services: - app: - image: astrogd/template-typescript:latest - build: ./ - ports: - - 80:80 - tty: true - stdin_open: true - depends_on: - - db - restart: unless-stopped - environment: - - TOKEN=$TOKEN - - DB_HOST=database - - DB_USERNAME=$DB_USER - - DB_PASSWORD=$DB_PASS - - DB_DATABASE=$DB_NAME - volumes: - - ./data/app:/usr/src/app/save - db: - image: postgres:latest - restart: unless-stopped - ports: - - 5432:5432 - environment: - - POSTGRES_USER=$DB_USER - - POSTGRES_PASSWORD=$DB_PASS - - POSTGRES_DB=$DB_NAME - expose: - - 5432 - volumes: - - ./data/db:/var/lib/postgresql/data \ No newline at end of file diff --git a/index.test.ts b/index.test.ts deleted file mode 100644 index d8e4824..0000000 --- a/index.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -jest.spyOn(console, "log"); - -describe("index", () => { - beforeEach(() => { - jest.clearAllMocks(); - }); - - it("should log hello world", async () => { - (console.log as jest.MockedFn).mockImplementation(() => { - return; - }); - await import("./index"); - - expect(console.log).toHaveBeenCalledTimes(1); - expect(console.log).toHaveBeenLastCalledWith("Hello world!"); - }); -}); diff --git a/index.ts b/index.ts index c0f6da6..f777eb1 100644 --- a/index.ts +++ b/index.ts @@ -1,11 +1,3 @@ -import { initPromise } from "./src/db/dataSource"; - -async function run() { - await initPromise; - - console.log("Hello world"); -} - -run(); +console.log("Hello world"); export {}; diff --git a/package.json b/package.json index da1133d..d52ec0b 100644 --- a/package.json +++ b/package.json @@ -1,86 +1,38 @@ { - "name": "@internal/template-typescript", + "name": "@astrogd/eu.astrogd.uptime-kuma-push-monitor", "version": "1.0.0-dev.1", - "description": "Just another cool typescript project", + "description": "Handles uptime kuma push monitor uptime requests", "main": "dist/index.js", "types": "dist/types/", - "directories": { - "bin": "dist/bin/" - }, "scripts": { "start": "npm run build && node --enable-source-maps .", - "test": "npm run build && npm run test:jest && npm run test:style", + "test": "npm run build && npm run test:style", "format": "prettier --write .", "build": "tsc", "deploy:npm": "npm publish", - "deploy:docker": "npm run prepack && docker build -t astrogd/template-typescript:latest .", "version:dev": "npm version prerelease --preid dev --no-commit-hooks --no-git-tag-version", "version:patch": "npm version prepatch --preid dev --no-commit-hooks --no-git-tag-version", "version:minor": "npm version preminor --preid dev --no-commit-hooks --no-git-tag-version", "version:major": "npm version premajor --preid dev --no-commit-hooks --no-git-tag-version", "version:release": "npm version patch --no-commit-hooks --no-git-tag-version", - "ci:sign": "drone sign internal/template-typescript --save", - "test:jest": "jest --coverage", "test:style": "eslint **.ts --fix", - "postinstall": "jest --clearCache", - "prepack": "npx rimraf dist && npm run test && npm run build", - "migration:create": "node --require ts-node/register ./node_modules/typeorm/cli.js migration:generate -d src/db/dataSource.ts -p src/db/migrations/data", - "migration:run": "node --require ts-node/register ./node_modules/typeorm/cli.js migration:run -d src/db/dataSource.ts", - "migration:revert": "node --require ts-node/register ./node_modules/typeorm/cli.js migration:revert -d src/db/dataSource.ts", - "migration:show": "node --require ts-node/register ./node_modules/typeorm/cli.js migration:show -d src/db/dataSource.ts", - "migration:check": "node --require ts-node/register ./node_modules/typeorm/cli.js migration:generate --check -d src/db/dataSource.ts src/db/migrations/data" + "prepack": "npx rimraf dist && npm run test && npm run build" }, "author": "AstroGD Lukas Weber (https://www.astrogd.eu/)", "license": "UNLICENSED", "repository": { "type": "git", - "url": "https://git.astrogd.cloud/internal/template-typescript.git" - }, - "jest": { - "preset": "ts-jest", - "testEnvironment": "node", - "coverageThreshold": { - "global": { - "branches": 80, - "functions": 80, - "lines": 80, - "statements": -20 - }, - "**/*.{ts,tsx}": { - "branches": 95, - "functions": 95, - "lines": 95, - "statements": -5 - } - }, - "collectCoverageFrom": [ - "**/*.ts", - "!**/*.d.ts", - "!**/node_modules /**", - "!**/coverage /**" - ], - "testPathIgnorePatterns": [ - "/node_modules/", - "/*.d.ts" - ] + "url": "https://git.astrogd.cloud/packages/eu.astrogd.uptime-kuma-push-monitor.git" }, "devDependencies": { - "@types/jest": "^29.4.0", "@types/node": "^18.16.19", "@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/parser": "^6.7.0", "eslint": "^8.33.0", - "jest": "^29.4.2", "prettier": "^3.0.0", "rimraf": "^5.0.1", - "ts-jest": "^29.0.5", - "ts-node": "^10.9.1", "typescript": "^5.1.6" }, "dependencies": { - "dotenv": "^16.3.1", - "dotenv-expand": "^10.0.0", - "pg": "^8.11.1", - "typeorm": "^0.3.17" } } diff --git a/src/db/dataSource.test.ts b/src/db/dataSource.test.ts deleted file mode 100644 index c98f434..0000000 --- a/src/db/dataSource.test.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { randomUUID } from "crypto"; - -jest.mock("typeorm"); - -describe("src/db:dataSource", () => { - beforeEach(() => { - jest.resetModules(); - jest.clearAllMocks(); - - process.env["DB_HOST"] = randomUUID(); - process.env["DB_USER"] = randomUUID(); - process.env["DB_PASS"] = randomUUID(); - process.env["DB_NAME"] = randomUUID(); - }); - - it("throws an error if an environment variable is missing", async () => { - delete process.env["DB_HOST"]; - process.env["DB_USER"] = randomUUID(); - process.env["DB_PASS"] = randomUUID(); - process.env["DB_NAME"] = randomUUID(); - - await expect(async () => await import("./dataSource")).rejects.toThrowError(ReferenceError); - - jest.resetModules(); - - process.env["DB_HOST"] = randomUUID(); - delete process.env["DB_USER"]; - - await expect(async () => await import("./dataSource")).rejects.toThrowError(ReferenceError); - - jest.resetModules(); - - process.env["DB_USER"] = randomUUID(); - delete process.env["DB_PASS"]; - - await expect(async () => await import("./dataSource")).rejects.toThrowError(ReferenceError); - - jest.resetModules(); - - process.env["DB_PASS"] = randomUUID(); - delete process.env["DB_NAME"]; - - await expect(async () => await import("./dataSource")).rejects.toThrowError(ReferenceError); - - jest.resetModules(); - - process.env["DB_NAME"] = randomUUID(); - - expect(async () => await import("./dataSource")).not.toThrow(); - }); - - it("exports an initialized dataSource", async () => { - const dut = (await import("./dataSource")).default; - - expect(dut.initialize).toHaveBeenCalled(); - }); -}); \ No newline at end of file diff --git a/src/db/dataSource.ts b/src/db/dataSource.ts deleted file mode 100644 index aaa25b2..0000000 --- a/src/db/dataSource.ts +++ /dev/null @@ -1,37 +0,0 @@ -import path from "path"; -import { DataSource } from "typeorm"; -import { config } from "dotenv"; -import dotenvExpand from "dotenv-expand"; - -const env = config(); -dotenvExpand.expand(env); - -const host = process.env["DB_HOST"]; -const username = process.env["DB_USER"]; -const password = process.env["DB_PASS"]; -const database = process.env["DB_NAME"]; - -if (!host) throw new ReferenceError("Environment variable DB_HOST is missing"); -if (!password) throw new ReferenceError("Environment variable DB_PASS is missing"); -if (!username) throw new ReferenceError("Environment variable DB_USER is missing"); -if (!database) throw new ReferenceError("Environment variable DB_NAME is missing"); - -const dataSource = new DataSource({ - type: "postgres", - host: host, - port: 5432, - username: username, - password: password, - database: database, - migrationsRun: true, - migrations: [path.join(__dirname, "/migrations/*")], - entities: [], - migrationsTransactionMode: "each", -}); - -const initPromise = dataSource.initialize(); - -export default dataSource; -export { - initPromise -} diff --git a/tsconfig.json b/tsconfig.json index 74f7a49..8186fe9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,8 +14,8 @@ "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ - "experimentalDecorators": true /* Enable experimental support for TC39 stage 2 draft decorators. */, - "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */, + // "experimentalDecorators": true /* Enable experimental support for TC39 stage 2 draft decorators. */, + // "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */, // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */