From c7f520c9b7cdf80540d40e577b4d275dec225d7c Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Tue, 5 Oct 2021 22:40:04 -0500 Subject: [PATCH 01/12] Add Dockerfile --- Dockerfile | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e85eed0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +FROM node:16 + +RUN git config --global url."https://github.com/".insteadOf ssh://git@github.com: + +WORKDIR /kill-the-newsletter + +COPY package*.json ./ +RUN npm ci +RUN npm dedupe --production +COPY . . + +VOLUME /kill-the-newsletter/static/feeds/ +VOLUME /kill-the-newsletter/static/alternate/ + +ENV WEB_PORT=8000 +ENV EMAIL_PORT=2525 +ENV BASE_URL=http://localhost:8000 +ENV EMAIL_DOMAIN=localhost +ENV ISSUE_REPORT=mailto:kill-the-newsletter@leafac.com + +EXPOSE 8000 +EXPOSE 2525 + +CMD npx ts-node . \ No newline at end of file From 33de8f9be6a88e3e7c508d66edf2ce7ef5ba4695 Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Tue, 5 Oct 2021 23:54:28 -0500 Subject: [PATCH 02/12] Make ts-node a production dependency and use environment variables for configuration --- Dockerfile | 6 +++--- package.json | 4 ++-- source/index.ts | 24 +++++++++++++++++------- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index e85eed0..767b061 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,13 +12,13 @@ COPY . . VOLUME /kill-the-newsletter/static/feeds/ VOLUME /kill-the-newsletter/static/alternate/ -ENV WEB_PORT=8000 +ENV WEB_PORT=4000 ENV EMAIL_PORT=2525 -ENV BASE_URL=http://localhost:8000 +ENV BASE_URL=http://localhost:4000 ENV EMAIL_DOMAIN=localhost ENV ISSUE_REPORT=mailto:kill-the-newsletter@leafac.com -EXPOSE 8000 +EXPOSE 4000 EXPOSE 2525 CMD npx ts-node . \ No newline at end of file diff --git a/package.json b/package.json index 6c71a1f..2bdc0ea 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,8 @@ "fs-extra": "^9.1.0", "mailparser": "^3.1.0", "smtp-server": "^3.8.0", - "tagged-template-noop": "^2.1.1" + "tagged-template-noop": "^2.1.1", + "ts-node": "^9.1.1" }, "devDependencies": { "@types/express": "^4.17.11", @@ -52,7 +53,6 @@ "nodemailer": "^6.4.18", "prettier": "^2.2.1", "ts-jest": "^27.0.5", - "ts-node": "^9.1.1", "typescript": "^4.2.3" }, "jest": { diff --git a/source/index.ts b/source/index.ts index cfc3ca9..634597a 100644 --- a/source/index.ts +++ b/source/index.ts @@ -19,9 +19,15 @@ export default function killTheNewsletter( ): { webApplication: express.Express; emailApplication: SMTPServer } { const webApplication = express(); - webApplication.set("url", "http://localhost:4000"); - webApplication.set("email", "smtp://localhost:2525"); - webApplication.set("administrator", "mailto:kill-the-newsletter@leafac.com"); + const baseUrl = process.env.BASE_URL ?? "http://localhost:4000"; + webApplication.set("url", baseUrl); + + const smtpUrl = process.env.SMTP_URL ?? "smtp://localhost:2525"; + webApplication.set("email", smtpUrl); + + const issueReportEmail = + process.env.ISSUE_REPORT_EMAIL ?? "kill-the-newsletter@leafac.com"; + webApplication.set("administrator", `mailto:${issueReportEmail}`); fs.ensureDirSync(rootDirectory); const database = new Database( @@ -503,11 +509,15 @@ if (require.main === module) { const { webApplication, emailApplication } = killTheNewsletter( path.join(process.cwd(), "data") ); - webApplication.listen(new URL(webApplication.get("url")).port, () => { - console.log(`Web server started at ${webApplication.get("url")}`); + const webPort = + process.env.WEB_PORT ?? new URL(webApplication.get("url")).port; + webApplication.listen(webPort, () => { + console.log(`Web server started at port ${webPort}}`); }); - emailApplication.listen(new URL(webApplication.get("email")).port, () => { - console.log(`Email server started at ${webApplication.get("email")}`); + const emailPort = + process.env.EMAIL_PORT ?? new URL(webApplication.get("email")).port; + emailApplication.listen(emailPort, () => { + console.log(`Email server started at port ${emailPort}`); }); } else { const configurationFile = path.resolve(process.argv[2]); From 9fb9523be677565834841eb6d9368ae1490b445e Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Wed, 6 Oct 2021 01:08:05 -0500 Subject: [PATCH 03/12] Fix issue with tsc --- Dockerfile | 3 +-- package-lock.json | 3 +++ package.json | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 767b061..3c2ff7a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,10 +4,9 @@ RUN git config --global url."https://github.com/".insteadOf ssh://git@github.com WORKDIR /kill-the-newsletter -COPY package*.json ./ +COPY . . RUN npm ci RUN npm dedupe --production -COPY . . VOLUME /kill-the-newsletter/static/feeds/ VOLUME /kill-the-newsletter/static/alternate/ diff --git a/package-lock.json b/package-lock.json index f70b8e3..df94006 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "kill-the-newsletter", "version": "1.0.1", "license": "MIT", "dependencies": { @@ -1021,6 +1022,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@leafac/sqlite-migration/-/sqlite-migration-1.0.3.tgz", "integrity": "sha512-oTfynjzKSFH3tc0M4sISheaZ4go1/3Wr9knGHuq66rFfgqblfgWh6RMG8V3dAiZI0U4PBidOAKzt2AYefXjHNQ==", + "deprecated": "Deprecated in favor of [@leafac/sqlite@1.4.0’s `.migrate()` method](https://github.com/leafac/sqlite/tree/25f792a98c154990119e6f2776811ebd074d4a77#a-lightweight-migration-system)", "peerDependencies": { "@leafac/sqlite": "^1.1.2" } @@ -1810,6 +1812,7 @@ "node_modules/bent": { "version": "7.0.3", "resolved": "git+ssh://git@github.com/aral/bent.git#16a959683c6916204c28a1c870cb7b399c9215a9", + "integrity": "sha512-chqIf23RhvbSoWyBqnLvti3MbZ1IOFFnj5q1qk5onVhTWI62WEuvfsjiX7dQcu35oCsamQlKP6RkBzsecSYcAw==", "license": "Apache-2.0", "dependencies": { "bytesish": "^0.4.1", diff --git a/package.json b/package.json index 2bdc0ea..6c71a1f 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,7 @@ "fs-extra": "^9.1.0", "mailparser": "^3.1.0", "smtp-server": "^3.8.0", - "tagged-template-noop": "^2.1.1", - "ts-node": "^9.1.1" + "tagged-template-noop": "^2.1.1" }, "devDependencies": { "@types/express": "^4.17.11", @@ -53,6 +52,7 @@ "nodemailer": "^6.4.18", "prettier": "^2.2.1", "ts-jest": "^27.0.5", + "ts-node": "^9.1.1", "typescript": "^4.2.3" }, "jest": { From c6d7bd9e37d9101cd74d662e26386fa58564322a Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Wed, 6 Oct 2021 01:09:34 -0500 Subject: [PATCH 04/12] Update env var --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3c2ff7a..ebf17d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,8 +14,8 @@ VOLUME /kill-the-newsletter/static/alternate/ ENV WEB_PORT=4000 ENV EMAIL_PORT=2525 ENV BASE_URL=http://localhost:4000 -ENV EMAIL_DOMAIN=localhost -ENV ISSUE_REPORT=mailto:kill-the-newsletter@leafac.com +ENV SMTP_URL=smtp://localhost +ENV ISSUE_REPORT_EMAIL=kill-the-newsletter@leafac.com EXPOSE 4000 EXPOSE 2525 From ae4db54ad5fac3784e628d84adca4ec9406671f3 Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Wed, 6 Oct 2021 01:15:36 -0500 Subject: [PATCH 05/12] Prevent ts-node from being reinstalled on launch of Dockerfile --- package-lock.json | 45 ++++++++++++++------------------------------- package.json | 4 ++-- source/index.ts | 2 +- 3 files changed, 17 insertions(+), 34 deletions(-) diff --git a/package-lock.json b/package-lock.json index df94006..ab8bbc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,8 @@ "fs-extra": "^9.1.0", "mailparser": "^3.1.0", "smtp-server": "^3.8.0", - "tagged-template-noop": "^2.1.1" + "tagged-template-noop": "^2.1.1", + "ts-node": "^9.1.1" }, "bin": { "kill-the-newsletter": "distribution/index.js" @@ -39,7 +40,6 @@ "nodemailer": "^6.4.18", "prettier": "^2.2.1", "ts-jest": "^27.0.5", - "ts-node": "^9.1.1", "typescript": "^4.2.3" } }, @@ -1619,8 +1619,7 @@ "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "node_modules/argparse": { "version": "1.0.10", @@ -1998,8 +1997,7 @@ "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "node_modules/bytes": { "version": "3.1.0", @@ -2407,8 +2405,7 @@ "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -2605,7 +2602,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, "engines": { "node": ">=0.3.1" } @@ -4848,8 +4844,7 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/makeerror": { "version": "1.0.11", @@ -6014,7 +6009,6 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -6398,7 +6392,6 @@ "version": "9.1.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, "dependencies": { "arg": "^4.1.0", "create-require": "^1.1.0", @@ -6484,7 +6477,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6867,7 +6859,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, "engines": { "node": ">=6" } @@ -8184,8 +8175,7 @@ "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "argparse": { "version": "1.0.10", @@ -8332,6 +8322,7 @@ }, "bent": { "version": "git+ssh://git@github.com/aral/bent.git#16a959683c6916204c28a1c870cb7b399c9215a9", + "integrity": "sha512-chqIf23RhvbSoWyBqnLvti3MbZ1IOFFnj5q1qk5onVhTWI62WEuvfsjiX7dQcu35oCsamQlKP6RkBzsecSYcAw==", "from": "bent@github:aral/bent#errors-with-response-headers", "requires": { "bytesish": "^0.4.1", @@ -8479,8 +8470,7 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "bytes": { "version": "3.1.0", @@ -8804,8 +8794,7 @@ "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "cross-spawn": { "version": "7.0.3", @@ -8955,8 +8944,7 @@ "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, "diff-sequences": { "version": "27.0.6", @@ -10669,8 +10657,7 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "makeerror": { "version": "1.0.11", @@ -11543,7 +11530,6 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11830,7 +11816,6 @@ "version": "9.1.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, "requires": { "arg": "^4.1.0", "create-require": "^1.1.0", @@ -11888,8 +11873,7 @@ "typescript": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", - "dev": true + "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==" }, "uc.micro": { "version": "1.0.6", @@ -12178,8 +12162,7 @@ "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" }, "zip-stream": { "version": "4.1.0", diff --git a/package.json b/package.json index 6c71a1f..2bdc0ea 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,8 @@ "fs-extra": "^9.1.0", "mailparser": "^3.1.0", "smtp-server": "^3.8.0", - "tagged-template-noop": "^2.1.1" + "tagged-template-noop": "^2.1.1", + "ts-node": "^9.1.1" }, "devDependencies": { "@types/express": "^4.17.11", @@ -52,7 +53,6 @@ "nodemailer": "^6.4.18", "prettier": "^2.2.1", "ts-jest": "^27.0.5", - "ts-node": "^9.1.1", "typescript": "^4.2.3" }, "jest": { diff --git a/source/index.ts b/source/index.ts index 634597a..1b8870c 100644 --- a/source/index.ts +++ b/source/index.ts @@ -512,7 +512,7 @@ if (require.main === module) { const webPort = process.env.WEB_PORT ?? new URL(webApplication.get("url")).port; webApplication.listen(webPort, () => { - console.log(`Web server started at port ${webPort}}`); + console.log(`Web server started at port ${webPort}`); }); const emailPort = process.env.EMAIL_PORT ?? new URL(webApplication.get("email")).port; From 0700b927aae2933f0c29130efadc6a2645aeb894 Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Thu, 7 Oct 2021 00:25:32 -0500 Subject: [PATCH 06/12] Use node instead of ts-node as Dockerfile entrypoint --- Dockerfile | 6 +++--- package.json | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index ebf17d3..0cb58db 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,11 +13,11 @@ VOLUME /kill-the-newsletter/static/alternate/ ENV WEB_PORT=4000 ENV EMAIL_PORT=2525 -ENV BASE_URL=http://localhost:4000 -ENV SMTP_URL=smtp://localhost +ENV BASE_URL=https://kill-the-newsletter.retronym.us +ENV SMTP_URL=smtp://kill-the-newsletter.retronym.us ENV ISSUE_REPORT_EMAIL=kill-the-newsletter@leafac.com EXPOSE 4000 EXPOSE 2525 -CMD npx ts-node . \ No newline at end of file +CMD node . \ No newline at end of file diff --git a/package.json b/package.json index 2bdc0ea..6c71a1f 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,7 @@ "fs-extra": "^9.1.0", "mailparser": "^3.1.0", "smtp-server": "^3.8.0", - "tagged-template-noop": "^2.1.1", - "ts-node": "^9.1.1" + "tagged-template-noop": "^2.1.1" }, "devDependencies": { "@types/express": "^4.17.11", @@ -53,6 +52,7 @@ "nodemailer": "^6.4.18", "prettier": "^2.2.1", "ts-jest": "^27.0.5", + "ts-node": "^9.1.1", "typescript": "^4.2.3" }, "jest": { From f75f39a6ada28a9008c49801879e7673132dfcc1 Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Thu, 7 Oct 2021 00:26:20 -0500 Subject: [PATCH 07/12] Update package-lock.json --- package-lock.json | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index ab8bbc2..2fcc9e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,8 +19,7 @@ "fs-extra": "^9.1.0", "mailparser": "^3.1.0", "smtp-server": "^3.8.0", - "tagged-template-noop": "^2.1.1", - "ts-node": "^9.1.1" + "tagged-template-noop": "^2.1.1" }, "bin": { "kill-the-newsletter": "distribution/index.js" @@ -40,6 +39,7 @@ "nodemailer": "^6.4.18", "prettier": "^2.2.1", "ts-jest": "^27.0.5", + "ts-node": "^9.1.1", "typescript": "^4.2.3" } }, @@ -1619,7 +1619,8 @@ "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "node_modules/argparse": { "version": "1.0.10", @@ -1997,7 +1998,8 @@ "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "node_modules/bytes": { "version": "3.1.0", @@ -2405,7 +2407,8 @@ "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -2602,6 +2605,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, "engines": { "node": ">=0.3.1" } @@ -4844,7 +4848,8 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "node_modules/makeerror": { "version": "1.0.11", @@ -6009,6 +6014,7 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -6392,6 +6398,7 @@ "version": "9.1.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, "dependencies": { "arg": "^4.1.0", "create-require": "^1.1.0", @@ -6477,6 +6484,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6859,6 +6867,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "engines": { "node": ">=6" } @@ -8175,7 +8184,8 @@ "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "argparse": { "version": "1.0.10", @@ -8470,7 +8480,8 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "bytes": { "version": "3.1.0", @@ -8794,7 +8805,8 @@ "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, "cross-spawn": { "version": "7.0.3", @@ -8944,7 +8956,8 @@ "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true }, "diff-sequences": { "version": "27.0.6", @@ -10657,7 +10670,8 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "makeerror": { "version": "1.0.11", @@ -11530,6 +11544,7 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11816,6 +11831,7 @@ "version": "9.1.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, "requires": { "arg": "^4.1.0", "create-require": "^1.1.0", @@ -11873,7 +11889,8 @@ "typescript": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", - "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==" + "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "dev": true }, "uc.micro": { "version": "1.0.6", @@ -12162,7 +12179,8 @@ "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true }, "zip-stream": { "version": "4.1.0", From 244a19bbe7e7c539701280427d6400004126bf82 Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Thu, 7 Oct 2021 00:29:38 -0500 Subject: [PATCH 08/12] Fix example environment vars in Dockerfile --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0cb58db..52d3fe0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,8 +13,8 @@ VOLUME /kill-the-newsletter/static/alternate/ ENV WEB_PORT=4000 ENV EMAIL_PORT=2525 -ENV BASE_URL=https://kill-the-newsletter.retronym.us -ENV SMTP_URL=smtp://kill-the-newsletter.retronym.us +ENV BASE_URL=http://localhost:4000 +ENV SMTP_URL=smtp://localhost ENV ISSUE_REPORT_EMAIL=kill-the-newsletter@leafac.com EXPOSE 4000 From f51294e364b7bd3f89243f3b2a8816aa5af6d494 Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Thu, 7 Oct 2021 00:39:06 -0500 Subject: [PATCH 09/12] Update data volume path in Dockerfile --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 52d3fe0..c84ad5d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,8 +8,7 @@ COPY . . RUN npm ci RUN npm dedupe --production -VOLUME /kill-the-newsletter/static/feeds/ -VOLUME /kill-the-newsletter/static/alternate/ +VOLUME /kill-the-newsletter/data ENV WEB_PORT=4000 ENV EMAIL_PORT=2525 From 954dee948904e7a3cd357449ccca5a4eeb202b78 Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Thu, 7 Oct 2021 01:08:35 -0500 Subject: [PATCH 10/12] Add .dockerignore --- .dockerignore | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3e9c7d3 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +# Prevent Git history from leaking +**/.git + +# Force fresh build +**/node_modules \ No newline at end of file From 69ec9649d7b10a7fdb5331c446b25951c73066a2 Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Thu, 7 Oct 2021 01:29:33 -0500 Subject: [PATCH 11/12] Update .dockerignore comment --- .dockerignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index 3e9c7d3..d11b9a6 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,5 @@ # Prevent Git history from leaking **/.git -# Force fresh build +# `npm ci` makes this redundant, but it's a good practice **/node_modules \ No newline at end of file From 60fdc259270780ac78bbf9ca91f48e2821579ddd Mon Sep 17 00:00:00 2001 From: Nehal Patel Date: Thu, 7 Oct 2021 01:39:45 -0500 Subject: [PATCH 12/12] Allow custom data volume and port arguments in Dockerfile --- Dockerfile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index c84ad5d..edd41b1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,15 +8,10 @@ COPY . . RUN npm ci RUN npm dedupe --production -VOLUME /kill-the-newsletter/data - ENV WEB_PORT=4000 ENV EMAIL_PORT=2525 ENV BASE_URL=http://localhost:4000 ENV SMTP_URL=smtp://localhost ENV ISSUE_REPORT_EMAIL=kill-the-newsletter@leafac.com -EXPOSE 4000 -EXPOSE 2525 - CMD node . \ No newline at end of file