@mittwald/container-deploy
Advanced tools
| import fs from "fs/promises"; | ||
| import os from "os"; | ||
| import path from "path"; | ||
| import { checkRepository } from "../src/entities/repository"; | ||
| describe("checkRepository", () => { | ||
| const initialCwd = process.cwd(); | ||
| let testDir: string; | ||
| beforeEach(async () => { | ||
| testDir = await fs.mkdtemp(path.join(os.tmpdir(), "container-deploy-repo-test-")); | ||
| process.chdir(testDir); | ||
| }); | ||
| afterEach(async () => { | ||
| process.chdir(initialCwd); | ||
| await fs.rm(testDir, { recursive: true, force: true }); | ||
| }); | ||
| it("should prioritize environment PORT as the primary mapping", async () => { | ||
| await fs.writeFile( | ||
| path.join(testDir, "Dockerfile"), | ||
| "FROM node:20\nEXPOSE 3000 4000\n", | ||
| "utf-8", | ||
| ); | ||
| const repositoryData = await checkRepository({ PORT: "8787" }); | ||
| expect(repositoryData.ports[0]).toBe("8787:8787/tcp"); | ||
| expect(repositoryData.ports).toContain("3000:3000/tcp"); | ||
| expect(repositoryData.ports).toContain("4000:4000/tcp"); | ||
| }); | ||
| it("should not duplicate mapping when environment PORT already exists in Dockerfile ports", async () => { | ||
| await fs.writeFile( | ||
| path.join(testDir, "Dockerfile"), | ||
| "FROM node:20\nEXPOSE 8787 3000\n", | ||
| "utf-8", | ||
| ); | ||
| const repositoryData = await checkRepository({ PORT: "8787" }); | ||
| expect(repositoryData.ports).toEqual(["8787:8787/tcp", "3000:3000/tcp"]); | ||
| }); | ||
| it("should keep fallback primary port when environment PORT is invalid", async () => { | ||
| await fs.writeFile( | ||
| path.join(testDir, "Dockerfile"), | ||
| "FROM nginx:alpine\n", | ||
| "utf-8", | ||
| ); | ||
| const repositoryData = await checkRepository({ PORT: "invalid" }); | ||
| expect(repositoryData.ports[0]).toBe("80:80/tcp"); | ||
| }); | ||
| }); |
| import { RepositoryData } from "../types/index.js"; | ||
| export declare function checkRepository(): Promise<RepositoryData>; | ||
| export declare function checkRepository(environment?: Record<string, string>): Promise<RepositoryData>; | ||
| //# sourceMappingURL=repository.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/entities/repository.ts"],"names":[],"mappings":"AAaA,OAAO,EACH,cAAc,EACjB,MAAM,mBAAmB,CAAC;AA0D3B,wBAAsB,eAAe,4BA+CpC"} | ||
| {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/entities/repository.ts"],"names":[],"mappings":"AAaA,OAAO,EACH,cAAc,EACjB,MAAM,mBAAmB,CAAC;AA0D3B,wBAAsB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,2BAsDzE"} |
@@ -63,3 +63,3 @@ /* | ||
| } | ||
| export async function checkRepository() { | ||
| export async function checkRepository(environment) { | ||
| /* | ||
@@ -95,5 +95,12 @@ Check repository expected in current folder context. | ||
| // Extract ports from the Dockerfile and create proper host:container mappings | ||
| // If we created the default Dockerfile, we know it exposes port 80 | ||
| // If environment.PORT is present and valid, it is always the primary mapping. | ||
| const ports = extractPortsFromDockerfile(dockerfileContent); | ||
| if (ports.length === 0) { | ||
| const portFromEnvRaw = environment?.PORT; | ||
| const portFromEnv = portFromEnvRaw ? parseInt(portFromEnvRaw, 10) : NaN; | ||
| if (!isNaN(portFromEnv) && portFromEnv > 0) { | ||
| const primaryPortMapping = `${portFromEnv}:${portFromEnv}/tcp`; | ||
| const remainingPorts = ports.filter(port => port !== primaryPortMapping); | ||
| ports.splice(0, ports.length, primaryPortMapping, ...remainingPorts); | ||
| } | ||
| else if (ports.length === 0) { | ||
| ports.push("80:80/tcp"); | ||
@@ -100,0 +107,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/entities/repository.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,0DAA0D;AAC1D,qEAAqE;AACrE,MAAM,6BAA6B,GAAG;;CAErC,CAAC;AAEF,KAAK,UAAU,WAAW,CAAC,WAAmB;IAC1C,IAAI,CAAC;QACD,QAAQ,CAAC,gFAAgF,EAAE;YACvF,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAC9D,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC;QACpB,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,yEAAyE;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,0BAA0B,CAAC,iBAAyB;IACzD,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,cAAc,GAAgB,IAAI,GAAG,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAChD,IAAI,KAAK,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACjC,qDAAqD;YACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC1B,IAAI,IAAI,EAAE,CAAC;oBACX,wDAAwD;oBACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;wBAClD,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAChC,CAAC;gBACD,CAAC;YACL,CAAC;QACD,CAAC;IACL,CAAC;IAED,qDAAqD;IACrD,mCAAmC;IACnC,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QACnC,MAAM,QAAQ,GAAG,MAAM,CAAC;QACxB,IAAI,QAAQ,GAAG,aAAa,CAAC;QAC7B,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,aAAa,GAAG,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC;;MAEE;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC5D,IAAI,iBAAyB,CAAC;IAC9B,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAE3C,gCAAgC;IAChC,IAAI,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,uDAAuD;QACvD,iBAAiB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACJ,sEAAsE;QACtE,wFAAwF;QACxF,+CAA+C;QAC/C,gBAAgB,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QAElD,wDAAwD;QACxD,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;YAC5B,iBAAiB,GAAG,6BAA6B,CAAC;YAClD,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;YAC/D,iBAAiB,GAAG,IAAI,CAAC;QAC7B,CAAC;aAAM,CAAC;YACJ,sDAAsD;YACtD,iBAAiB,GAAG,EAAE,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,mEAAmE;IACnE,MAAM,KAAK,GAAG,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,cAAc,GAAG;QACnB,cAAc;QACd,iBAAiB;QACjB,iBAAiB;QACjB,YAAY,EAAE,WAAW;QACzB,KAAK;QACL,gBAAgB;KACnB,CAAC;IACF,OAAO,cAAgC,CAAC;AAC5C,CAAC"} | ||
| {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/entities/repository.ts"],"names":[],"mappings":"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"} |
@@ -10,3 +10,3 @@ import { setupProjectRegistry, } from "./registry_setup.js"; | ||
| const registryData = await setupProjectRegistry(opts.apiClient, opts.projectId, projectShortId, opts.waitTimeout); | ||
| let repositoryData = await checkRepository(); | ||
| let repositoryData = await checkRepository(opts.environment); | ||
| repositoryData = await buildDockerImage(registryData, repositoryData); | ||
@@ -13,0 +13,0 @@ await localDockerPush(repositoryData, registryData); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"deploy_project.js","sourceRoot":"","sources":["../../src/orchestration/deploy_project.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAOnE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB;IAErD,MAAM,cAAc,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAEvF,kBAAkB,EAAE,CAAC;IAErB,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAC7C,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,cAAc,EACd,IAAI,CAAC,WAAW,CACjB,CAAC;IAEF,IAAI,cAAc,GAAG,MAAM,eAAe,EAAE,CAAC;IAC7C,cAAc,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACtE,MAAM,eAAe,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,MAAM,aAAa,CACnC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,cAAc,EACd,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,CACjB,CAAC;IAEF,OAAO,EAAE,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;AAChG,CAAC"} | ||
| {"version":3,"file":"deploy_project.js","sourceRoot":"","sources":["../../src/orchestration/deploy_project.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAOnE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB;IAErD,MAAM,cAAc,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAEvF,kBAAkB,EAAE,CAAC;IAErB,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAC7C,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,cAAc,EACd,IAAI,CAAC,WAAW,CACjB,CAAC;IAEF,IAAI,cAAc,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7D,cAAc,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACtE,MAAM,eAAe,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,MAAM,aAAa,CACnC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,cAAc,EACd,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,CACjB,CAAC;IAEF,OAAO,EAAE,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;AAChG,CAAC"} |
+1
-1
| { | ||
| "name": "@mittwald/container-deploy", | ||
| "version": "1.2.0", | ||
| "version": "1.3.0", | ||
| "description": "Reusable orchestration and API adapters for building and deploying containerized projects.", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -74,3 +74,3 @@ /* | ||
| export async function checkRepository() { | ||
| export async function checkRepository(environment?: Record<string, string>) { | ||
| /* | ||
@@ -107,5 +107,12 @@ Check repository expected in current folder context. | ||
| // Extract ports from the Dockerfile and create proper host:container mappings | ||
| // If we created the default Dockerfile, we know it exposes port 80 | ||
| // If environment.PORT is present and valid, it is always the primary mapping. | ||
| const ports = extractPortsFromDockerfile(dockerfileContent); | ||
| if (ports.length === 0) { | ||
| const portFromEnvRaw = environment?.PORT; | ||
| const portFromEnv = portFromEnvRaw ? parseInt(portFromEnvRaw, 10) : NaN; | ||
| if (!isNaN(portFromEnv) && portFromEnv > 0) { | ||
| const primaryPortMapping = `${portFromEnv}:${portFromEnv}/tcp`; | ||
| const remainingPorts = ports.filter(port => port !== primaryPortMapping); | ||
| ports.splice(0, ports.length, primaryPortMapping, ...remainingPorts); | ||
| } else if (ports.length === 0) { | ||
| ports.push("80:80/tcp"); | ||
@@ -112,0 +119,0 @@ } |
@@ -32,3 +32,3 @@ import { | ||
| let repositoryData = await checkRepository(); | ||
| let repositoryData = await checkRepository(opts.environment); | ||
| repositoryData = await buildDockerImage(registryData, repositoryData); | ||
@@ -35,0 +35,0 @@ await localDockerPush(repositoryData, registryData); |
@@ -95,3 +95,3 @@ import { deployProject } from "../src/orchestration/deploy_project"; | ||
| const repositoryModule = require("../src/entities/repository"); | ||
| expect(repositoryModule.checkRepository).toHaveBeenCalled(); | ||
| expect(repositoryModule.checkRepository).toHaveBeenCalledWith(undefined); | ||
@@ -160,2 +160,5 @@ const serviceModule = require("../src/entities/service"); | ||
| const repositoryModule = require("../src/entities/repository"); | ||
| expect(repositoryModule.checkRepository).toHaveBeenCalledWith(customEnv); | ||
| const serviceModule = require("../src/entities/service"); | ||
@@ -183,2 +186,5 @@ expect(serviceModule.deployService).toHaveBeenCalledWith( | ||
| const repositoryModule = require("../src/entities/repository"); | ||
| expect(repositoryModule.checkRepository).toHaveBeenCalledWith(undefined); | ||
| const serviceModule = require("../src/entities/service"); | ||
@@ -185,0 +191,0 @@ expect(serviceModule.deployService).toHaveBeenCalledWith( |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
173502
2.06%62
1.64%2996
2.11%6
20%