diff --git a/.dev.env b/.dev.env index 14ad89c..46544de 100644 --- a/.dev.env +++ b/.dev.env @@ -16,6 +16,8 @@ BOT_ENV=4 ABOUT_FUNDING= ABOUT_REPO= +DATA_DIR= + DB_HOST=127.0.0.1 DB_PORT=3301 DB_NAME=carddrop diff --git a/.drone.yml b/.drone.yml index 8fb77fd..962eb6c 100644 --- a/.drone.yml +++ b/.drone.yml @@ -4,16 +4,36 @@ kind: pipeline name: deployment steps: -- name: deploy - image: appleboy/drone-ssh +- name: build + image: node + commands: + - npm ci + - npm run build +- name: test + image: node + commands: + - npm test +- name: deploy to prod + image: drillster/drone-rsync + secrets: [ ssh_key, bot_token_prod ] settings: - host: 192.168.68.120 - username: vylpes - password: - from_secret: ssh_password - port: 22 + hosts: + - 192.168.68.120 + user: vylpes + key: + from_secret: ssh_key + source: . + target: ~/apps/card-drop/card-drop_prod + recursive: true script: - - sh /home/vylpes/scripts/card-drop/deploy_prod.sh + - export PATH="$HOME/.yarn/bin:$PATH" + - export PATH="$HOME/.nodeuse/bin:$PATH" + - export BOT_TOKEN="$BOT_TOKEN_PROD" + - cd ~/apps/card-drop/card-drop_prod + - docker compose --file docker-compose.prod.yml up -d + - sleep 10 + - cp .prod.env .env + - pm2 restart card-drop_prod || pm2 start --name card-drop_prod dist/bot.js trigger: event: @@ -25,16 +45,36 @@ kind: pipeline name: staging steps: -- name: stage - image: appleboy/drone-ssh +- name: build + image: node + commands: + - npm ci + - npm run build +- name: test + image: node + commands: + - npm test +- name: deploy to stage + image: drillster/drone-rsync + secrets: [ ssh_key, bot_token_stage ] settings: - host: 192.168.68.120 - username: vylpes - password: - from_secret: ssh_password - port: 22 + hosts: + - 192.168.68.120 + user: vylpes + key: + from_secret: ssh_key + source: . + target: ~/apps/card-drop/card-drop_stage + recursive: true script: - - sh /home/vylpes/scripts/card-drop/deploy_stage.sh + - export PATH="$HOME/.yarn/bin:$PATH" + - export PATH="$HOME/.nodeuse/bin:$PATH" + - export BOT_TOKEN="$BOT_TOKEN_STAGE" + - cd ~/apps/card-drop/card-drop_stage + - docker compose --file docker-compose.stage.yml up -d + - sleep 10 + - cp .stage.env .env + - pm2 restart card-drop_stage || pm2 start --name card-drop_stage dist/bot.js trigger: branch: @@ -62,13 +102,10 @@ steps: - name: test image: node commands: - - npm ci - npm test trigger: branch: - - main - - develop - hotfix/* - feature/* - renovate/* diff --git a/.prod.env b/.prod.env index df28009..d252f1f 100644 --- a/.prod.env +++ b/.prod.env @@ -16,6 +16,8 @@ BOT_ENV=1 ABOUT_FUNDING= ABOUT_REPO= +DATA_DIR=/home/vylpes/appdata/card-drop/card-drop_prod + DB_HOST=127.0.0.1 DB_PORT=3321 DB_NAME=carddrop diff --git a/.stage.env b/.stage.env index 79dcc48..3ffed38 100644 --- a/.stage.env +++ b/.stage.env @@ -16,6 +16,8 @@ BOT_ENV=2 ABOUT_FUNDING= ABOUT_REPO= +DATA_DIR=/home/vylpes/appdata/card-drop/card-drop_stage + DB_HOST=127.0.0.1 DB_PORT=3311 DB_NAME=carddrop diff --git a/package-lock.json b/package-lock.json index 01fe08c..c8b0b7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1884,9 +1884,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", - "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "version": "20.10.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz", + "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==", "dependencies": { "undici-types": "~5.26.4" } diff --git a/package.json b/package.json index 18f9505..1dbe07e 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,6 @@ "typeorm": "0.3.17" }, "resolutions": { - "**/undici": "^5.26.2" }, "devDependencies": { "@types/node": "^20.0.0", diff --git a/renovate.json b/renovate.json index e36bf04..7fa351c 100644 --- a/renovate.json +++ b/renovate.json @@ -1,4 +1,5 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "baseBranches": ["develop"] + "baseBranches": ["develop"], + "labels": ["type/dependencies"] } diff --git a/src/Functions/CardMetadataFunction.ts b/src/Functions/CardMetadataFunction.ts index 5a62bfa..c54ff40 100644 --- a/src/Functions/CardMetadataFunction.ts +++ b/src/Functions/CardMetadataFunction.ts @@ -26,7 +26,7 @@ export default class CardMetadataFunction { private static async FindMetadataJSONs(): Promise { const res: SeriesMetadata[] = []; - const seriesJSONs = await glob(path.join(process.cwd(), "cards", "/**/*.json")); + const seriesJSONs = await glob(path.join(process.env.DATA_DIR!, 'cards', '/**/*.json')); for (const jsonPath of seriesJSONs) { console.log(`Reading file ${jsonPath}`); diff --git a/src/bot.ts b/src/bot.ts index aea4ffc..03d4b92 100644 --- a/src/bot.ts +++ b/src/bot.ts @@ -14,6 +14,7 @@ const requiredConfigs: string[] = [ "BOT_OWNERID", "BOT_CLIENTID", "BOT_ENV", + "DATA_DIR", "DB_HOST", "DB_PORT", "DB_AUTH_USER", @@ -39,7 +40,7 @@ Registry.RegisterCommands(); Registry.RegisterEvents(); Registry.RegisterButtonEvents(); -if (!existsSync(`${process.cwd()}/cards`) && process.env.GDRIVESYNC_AUTO && process.env.GDRIVESYNC_AUTO == "true") { +if (!existsSync(`${process.env.DATA_DIR}/cards`) && process.env.GDRIVESYNC_AUTO && process.env.GDRIVESYNC_AUTO == 'true') { console.log("Card directory not found, syncing..."); CoreClient.AllowDrops = false; diff --git a/src/buttonEvents/Reroll.ts b/src/buttonEvents/Reroll.ts index fa60c97..a647acd 100644 --- a/src/buttonEvents/Reroll.ts +++ b/src/buttonEvents/Reroll.ts @@ -28,7 +28,7 @@ export default class Reroll extends ButtonEvent { } try { - const image = readFileSync(path.join(process.cwd(), "cards", randomCard.card.path)); + const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path)); const imageFileName = randomCard.card.path.split("/").pop()!; await interaction.deferReply(); diff --git a/src/commands/drop.ts b/src/commands/drop.ts index 4fd1ddb..3e7101b 100644 --- a/src/commands/drop.ts +++ b/src/commands/drop.ts @@ -36,7 +36,7 @@ export default class Drop extends Command { } try { - const image = readFileSync(path.join(process.cwd(), "cards", randomCard.card.path)); + const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path)); const imageFileName = randomCard.card.path.split("/").pop()!; await interaction.deferReply(); diff --git a/src/commands/gdrivesync.ts b/src/commands/gdrivesync.ts index 697e492..2429b4d 100644 --- a/src/commands/gdrivesync.ts +++ b/src/commands/gdrivesync.ts @@ -29,7 +29,7 @@ export default class Gdrivesync extends Command { CoreClient.AllowDrops = false; - exec(`rclone sync card-drop-gdrive: ${process.cwd()}/cards`, async (error: ExecException | null) => { + exec(`rclone sync card-drop-gdrive: ${process.env.DATA_DIR}/cards`, async (error: ExecException | null) => { if (error) { await interaction.editReply(`Error while running sync command. Safe Mode has been activated. Code: ${error.code}`); await Config.SetValue("safemode", "true"); diff --git a/src/commands/stage/dropnumber.ts b/src/commands/stage/dropnumber.ts index 2306ed9..4fb83d4 100644 --- a/src/commands/stage/dropnumber.ts +++ b/src/commands/stage/dropnumber.ts @@ -47,7 +47,7 @@ export default class Dropnumber extends Command { const imageFileName = card.path.split("/").pop()!; try { - image = readFileSync(path.join(process.cwd(), "cards", card.path)); + image = readFileSync(path.join(process.env.DATA_DIR!, 'cards', card.path)); } catch { await interaction.reply(`Unable to fetch image for card ${card.id}`); return; diff --git a/src/commands/stage/droprarity.ts b/src/commands/stage/droprarity.ts index 5247546..a11aebd 100644 --- a/src/commands/stage/droprarity.ts +++ b/src/commands/stage/droprarity.ts @@ -50,7 +50,7 @@ export default class Droprarity extends Command { const imageFileName = card.card.path.split("/").pop()!; try { - image = readFileSync(path.join(process.cwd(), "cards", card.card.path)); + image = readFileSync(path.join(process.env.DATA_DIR!, 'cards', card.card.path)); } catch { await interaction.reply(`Unable to fetch image for card ${card.card.id}`); return;