From 76c6ad55866fb868697bd658edf46b1a2845023c Mon Sep 17 00:00:00 2001 From: Debdut Chakraborty Date: Mon, 27 Jan 2025 16:04:16 +0530 Subject: [PATCH 1/2] tests in bun --- .gitignore | 1 + tests/.gitignore | 175 ++++++++++++++++++++++++++++++++++++++++++ tests/README.md | 15 ++++ tests/bun.lockb | Bin 0 -> 3139 bytes tests/docker_tests.ts | 73 ++++++++++++++++++ tests/helpers.ts | 5 ++ tests/index.ts | 1 + tests/package.json | 11 +++ tests/tsconfig.json | 27 +++++++ 9 files changed, 308 insertions(+) create mode 100644 tests/.gitignore create mode 100644 tests/README.md create mode 100755 tests/bun.lockb create mode 100644 tests/docker_tests.ts create mode 100644 tests/helpers.ts create mode 100644 tests/index.ts create mode 100644 tests/package.json create mode 100644 tests/tsconfig.json diff --git a/.gitignore b/.gitignore index 4e4ff47..d37a8fe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .env compose.yml Dockerfile +**/node_modules/ diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..9b1ee42 --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..f99f4c1 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,15 @@ +# deployment-tests + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.ts +``` + +This project was created using `bun init` in bun v1.1.0. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/tests/bun.lockb b/tests/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..1a9d553861aaab6067f4af90f737f844b2558b18 GIT binary patch literal 3139 zcmd5;eN0ZkIJZtZm>+nF~wm=+Va{x`i1X3z9TCF z8&kIwgUFN&C&MX3H<&D8WTKgajgM^^3*nD#1cK2~MsO;U0L6RDyRDW>s+J7v( z<%O8_R%OR%@~3Te-PQTEnYYN=XKmZJl@VGFz(0<_C_o7VLk9eUeCQc`zMLRiEijCI z4E#A3|1{7bZmt2;vV#795?HFh|E~i&U|E#g0O1v2<5GZ!8D0yzad)H0??~|Mk?R9Gqp3YV?0#A2wGsa_Y1>MfQ=u_Q_JrYy4k>Ut`{Y-TYC+rQ~Zrp5&ZxR8{sD z`flh^=-xH~9=tr{EYLg! zZa3(3ZD!Hsl#1X7cPC|*QEt)D1E;tvv+ZK0e?{MYqkqzyA=5+l>TgrjqVV4IHHpQJ zghQWvGh4T>`+d0wFRTkBJoDf{K+E^ZfvTP><7Y#DPThRGZH(SKc-qROeeO7*whg8^ zj8j$n|LSX&>#j;w#j{`05luMVb*H`jxzi__UiIKbbq2Y4zn46f6vf*-SEllRc<z1#~j*`R!+#(DxU+{c@?=s9gd`F^LY|6jnK<6tu zdl47ZWIy)NdO1|Jz80rkrP4C4uX&8cL zFbwqy=Jzw}2tvdoz@Zlw$&w~}!IJ0F?8IWtAeLbBumXJ0SSXQzT*D7=DBF@j>d0k% z@-zc9o=f3;9YC_>-N>Z@I+qr@>P_m3h%1%z>01Kt&Hx~AFN88&fk#0eSAF~szy1c6 Ce^Xrm literal 0 HcmV?d00001 diff --git a/tests/docker_tests.ts b/tests/docker_tests.ts new file mode 100644 index 0000000..1583e27 --- /dev/null +++ b/tests/docker_tests.ts @@ -0,0 +1,73 @@ +import { $ } from "bun"; +import { expect, describe, it, beforeAll } from "bun:test"; +import { basename } from "node:path"; + +import { assertEnvironmentVariableNotEmpty } from "./helpers"; + +const { env } = process; + +describe("Compose", () => { + beforeAll(() => { + assertEnvironmentVariableNotEmpty(["ROCKETCHAT_TAG", "COMPOSE_FILE"]); + }); + + it("should be a valid compose file", async () => { + try { + const { exitCode } = + await $`docker compose -f ${process.env.COMPOSE_FILE} config -q`.quiet(); + expect(exitCode).toBe(0); + } catch (e) { + console.error(String(e)); + throw e; + } + }); + + it("should deploy fine with an empty .env", async () => { + // const project_name = basename(env.PWD as string) + // .replaceAll(".", "") + // .toLowerCase(); + + const structure = + await $`docker compose -f ${env.COMPOSE_FILE} config --format json`.json(); + + const expected = { + mongodb: { + MONGODB_ADVERTISED_HOSTNAME: "mongodb", + MONGODB_INITIAL_PRIMARY_HOST: "mongodb", + MONGODB_INITIAL_PRIMARY_PORT_NUMBER: "27017", + }, + rocketchat: { + MONGO_URL: "mongodb://mongodb:27017/rocketchat?replicaSet=rs0", + ROOT_URL: "http://localhost:3000", + }, + }; + + const assertVariable = (service: string, variable: string, value: string) => + expect(structure.services[service].environment[variable]).toBe(value); + + Object.entries(expected).map(([service, environment]) => + Object.entries(environment).map(([variable, value]) => + assertVariable(service, variable, value) + ) + ); + }); + + it("should generate the right config after modifying environment variables", async () => { + const _env = { + PORT: 3001, + BIND_IP: "127.0.0.1", + HOST_PORT: 80, + MONGODB_REPLICA_SET_NAME: "rocket_rs0", + MONGODB_PORT_NUMBER: 27018, + MONGODB_INITIAL_PRIMARY_PORT_NUMBER: 27018, + RELEASE: env.ROCKETCHAT_TAG, + }; + + let envStr = ""; + Object.entries(_env).map( + ([variable, value]) => (envStr += `${variable}=${value}\n`) + ); + + await $`echo ${envStr} > .env`; + }); +}); diff --git a/tests/helpers.ts b/tests/helpers.ts new file mode 100644 index 0000000..887c37a --- /dev/null +++ b/tests/helpers.ts @@ -0,0 +1,5 @@ +import { expect } from 'bun:test' + +export function assertEnvironmentVariableNotEmpty(variables: string[]) { + variables.forEach(variable => expect(variable).not.toBeUndefined()) +} \ No newline at end of file diff --git a/tests/index.ts b/tests/index.ts new file mode 100644 index 0000000..f67b2c6 --- /dev/null +++ b/tests/index.ts @@ -0,0 +1 @@ +console.log("Hello via Bun!"); \ No newline at end of file diff --git a/tests/package.json b/tests/package.json new file mode 100644 index 0000000..bfb5f33 --- /dev/null +++ b/tests/package.json @@ -0,0 +1,11 @@ +{ + "name": "deployment-tests", + "module": "index.ts", + "type": "module", + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } +} \ No newline at end of file diff --git a/tests/tsconfig.json b/tests/tsconfig.json new file mode 100644 index 0000000..238655f --- /dev/null +++ b/tests/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + // Enable latest features + "lib": ["ESNext", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} From 56a8289c830f758e9e5f9361c88620218a22ffb3 Mon Sep 17 00:00:00 2001 From: Debdut Chakraborty Date: Mon, 27 Jan 2025 21:54:02 +0530 Subject: [PATCH 2/2] . --- tests/bun.lockb | Bin 3139 -> 17415 bytes tests/{docker_tests.ts => docker_test.ts} | 23 ++++++++------- tests/helpers.ts | 33 ++++++++++++++++++++-- tests/package.json | 5 +++- 4 files changed, 47 insertions(+), 14 deletions(-) rename tests/{docker_tests.ts => docker_test.ts} (80%) diff --git a/tests/bun.lockb b/tests/bun.lockb index 1a9d553861aaab6067f4af90f737f844b2558b18..bbac42cccb7374fca2f8095e2a68e9e8dc84c645 100755 GIT binary patch literal 17415 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 YaO$lN2pS(?1hZ*aQZ&3Q{{Q>?f4?nX_y7O^ delta 623 zcmZqgU_2}_K~GaH_rjkmXY{VkH}_jD$K-3>;P}CAr{jEvOcnQI_Lfe^H*+(90sF*o zd9Q4C2nRw6FfcSo0hwGtIub~80_mkd8mOb;6_Dlu(sQ8VK(%0XwU%aj8MFVhOuoQW z!)gjtz&JUO)toa4C~XDfF>PR&%*A8J^o?P%7mzY%oZJPZ${8o0;<1|Sz|4}!1XRrk z#LPepVzWZ|Y(N?WKr~1m*|i{bMC+Se$zL+rRoZ*9g#hp5xzgT@%#&YAhfjV1&l%dSW1l zvj8#3;T9Y~0tiAtQfg{2x5NAeQwpLxpi1pHC*RWw { }); it("should be a valid compose file", async () => { - try { - const { exitCode } = - await $`docker compose -f ${process.env.COMPOSE_FILE} config -q`.quiet(); - expect(exitCode).toBe(0); - } catch (e) { - console.error(String(e)); - throw e; + const { stderr, exitCode } = + await $`docker compose -f ${process.env.COMPOSE_FILE} config -q` + .nothrow() + .quiet(); + + if (exitCode) { + console.error(stderr.toString()) } + + expect(exitCode).toBe(0); }); it("should deploy fine with an empty .env", async () => { @@ -69,5 +70,7 @@ describe("Compose", () => { ); await $`echo ${envStr} > .env`; + + console.log(await findLastVersion()) }); }); diff --git a/tests/helpers.ts b/tests/helpers.ts index 887c37a..bb0085d 100644 --- a/tests/helpers.ts +++ b/tests/helpers.ts @@ -1,5 +1,32 @@ -import { expect } from 'bun:test' +import { expect } from "bun:test"; +import { Octokit } from "octokit"; export function assertEnvironmentVariableNotEmpty(variables: string[]) { - variables.forEach(variable => expect(variable).not.toBeUndefined()) -} \ No newline at end of file + variables.forEach((variable) => expect(variable).not.toBeUndefined()); +} + +async function* _releases() { + let page = 1; + while (true) { + yield new Octokit({}).rest.repos.listReleases({ + owner: "RocketChat", + repo: "Rocket.Chat", + page: page, + }); + page++; + } +} + +// @ts-ignore-error +export async function findLastVersion(): Promise { + let next = false; + for await (const release of _releases()) { + if (release.data.tag_name == process.env.ROCKETCHAT_TAG) { + next = true; + } + + if (next && !release.data.prerelease) { + return release.data.tag_name; + } + } +} diff --git a/tests/package.json b/tests/package.json index bfb5f33..8856c36 100644 --- a/tests/package.json +++ b/tests/package.json @@ -3,9 +3,12 @@ "module": "index.ts", "type": "module", "devDependencies": { - "@types/bun": "latest" + "@types/bun": "^1.2.0" }, "peerDependencies": { "typescript": "^5.0.0" + }, + "dependencies": { + "octokit": "^4.1.0" } } \ No newline at end of file