feat: Automate generation of kube manifests
This commit is contained in:
		
							parent
							
								
									f1b089eb8a
								
							
						
					
					
						commit
						5bdd4f2b52
					
				
					 5 changed files with 583 additions and 10550 deletions
				
			
		
							
								
								
									
										69
									
								
								infrastructure/kube.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								infrastructure/kube.yml
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,69 @@
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					kind: Namespace
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: legendary
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					apiVersion: apps/v1
 | 
				
			||||||
 | 
					kind: Deployment
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: legendary
 | 
				
			||||||
 | 
					  namespace: legendary
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  replicas: 2
 | 
				
			||||||
 | 
					  selector:
 | 
				
			||||||
 | 
					    matchLabels:
 | 
				
			||||||
 | 
					      app: legendary
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    metadata:
 | 
				
			||||||
 | 
					      labels:
 | 
				
			||||||
 | 
					        app: legendary
 | 
				
			||||||
 | 
					    spec:
 | 
				
			||||||
 | 
					      containers:
 | 
				
			||||||
 | 
					        - name: app
 | 
				
			||||||
 | 
					          image: registry.gitlab.com/mythic-insight/legendary:1.0.12
 | 
				
			||||||
 | 
					          ports:
 | 
				
			||||||
 | 
					            - containerPort: 4000
 | 
				
			||||||
 | 
					          env:
 | 
				
			||||||
 | 
					            - name: DATABASE_URL
 | 
				
			||||||
 | 
					              valueFrom:
 | 
				
			||||||
 | 
					                secretKeyRef:
 | 
				
			||||||
 | 
					                  name: database
 | 
				
			||||||
 | 
					                  key: url
 | 
				
			||||||
 | 
					            - name: SECRET_KEY_BASE
 | 
				
			||||||
 | 
					              valueFrom:
 | 
				
			||||||
 | 
					                secretKeyRef:
 | 
				
			||||||
 | 
					                  name: legendary
 | 
				
			||||||
 | 
					                  key: secret-key-base
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					kind: Service
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: legendary
 | 
				
			||||||
 | 
					  namespace: legendary
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  selector:
 | 
				
			||||||
 | 
					    app: legendary
 | 
				
			||||||
 | 
					  ports:
 | 
				
			||||||
 | 
					    - protocol: TCP
 | 
				
			||||||
 | 
					      port: 80
 | 
				
			||||||
 | 
					      targetPort: 4000
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					apiVersion: networking.k8s.io/v1
 | 
				
			||||||
 | 
					kind: Ingress
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: legendary
 | 
				
			||||||
 | 
					  namespace: legendary
 | 
				
			||||||
 | 
					  annotations:
 | 
				
			||||||
 | 
					    kubernetes.io/ingress.class: nginx
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  rules:
 | 
				
			||||||
 | 
					  - host: legendary-demo.mythicinsight.com
 | 
				
			||||||
 | 
					    http:
 | 
				
			||||||
 | 
					      paths:
 | 
				
			||||||
 | 
					      - backend:
 | 
				
			||||||
 | 
					          service:
 | 
				
			||||||
 | 
					            name: legendary
 | 
				
			||||||
 | 
					            port:
 | 
				
			||||||
 | 
					              number: 80
 | 
				
			||||||
 | 
					        path: /
 | 
				
			||||||
 | 
					        pathType: Prefix
 | 
				
			||||||
							
								
								
									
										69
									
								
								infrastructure/kube.yml.dot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								infrastructure/kube.yml.dot
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,69 @@
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					kind: Namespace
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: legendary
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					apiVersion: apps/v1
 | 
				
			||||||
 | 
					kind: Deployment
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: legendary
 | 
				
			||||||
 | 
					  namespace: legendary
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  replicas: 2
 | 
				
			||||||
 | 
					  selector:
 | 
				
			||||||
 | 
					    matchLabels:
 | 
				
			||||||
 | 
					      app: legendary
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    metadata:
 | 
				
			||||||
 | 
					      labels:
 | 
				
			||||||
 | 
					        app: legendary
 | 
				
			||||||
 | 
					    spec:
 | 
				
			||||||
 | 
					      containers:
 | 
				
			||||||
 | 
					        - name: app
 | 
				
			||||||
 | 
					          image: registry.gitlab.com/mythic-insight/legendary:{{=it.version}}
 | 
				
			||||||
 | 
					          ports:
 | 
				
			||||||
 | 
					            - containerPort: 4000
 | 
				
			||||||
 | 
					          env:
 | 
				
			||||||
 | 
					            - name: DATABASE_URL
 | 
				
			||||||
 | 
					              valueFrom:
 | 
				
			||||||
 | 
					                secretKeyRef:
 | 
				
			||||||
 | 
					                  name: database
 | 
				
			||||||
 | 
					                  key: url
 | 
				
			||||||
 | 
					            - name: SECRET_KEY_BASE
 | 
				
			||||||
 | 
					              valueFrom:
 | 
				
			||||||
 | 
					                secretKeyRef:
 | 
				
			||||||
 | 
					                  name: legendary
 | 
				
			||||||
 | 
					                  key: secret-key-base
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					kind: Service
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: legendary
 | 
				
			||||||
 | 
					  namespace: legendary
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  selector:
 | 
				
			||||||
 | 
					    app: legendary
 | 
				
			||||||
 | 
					  ports:
 | 
				
			||||||
 | 
					    - protocol: TCP
 | 
				
			||||||
 | 
					      port: 80
 | 
				
			||||||
 | 
					      targetPort: 4000
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					apiVersion: networking.k8s.io/v1
 | 
				
			||||||
 | 
					kind: Ingress
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: legendary
 | 
				
			||||||
 | 
					  namespace: legendary
 | 
				
			||||||
 | 
					  annotations:
 | 
				
			||||||
 | 
					    kubernetes.io/ingress.class: nginx
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  rules:
 | 
				
			||||||
 | 
					  - host: legendary-demo.mythicinsight.com
 | 
				
			||||||
 | 
					    http:
 | 
				
			||||||
 | 
					      paths:
 | 
				
			||||||
 | 
					      - backend:
 | 
				
			||||||
 | 
					          service:
 | 
				
			||||||
 | 
					            name: legendary
 | 
				
			||||||
 | 
					            port:
 | 
				
			||||||
 | 
					              number: 80
 | 
				
			||||||
 | 
					        path: /
 | 
				
			||||||
 | 
					        pathType: Prefix
 | 
				
			||||||
							
								
								
									
										10960
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										10960
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										20
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								package.json
									
									
									
									
									
								
							| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  "name": "@mythic-insight/legendary",
 | 
					  "name": "@mythic-insight/legendary",
 | 
				
			||||||
  "version": "0.0.0-development",
 | 
					  "version": "1.0.12",
 | 
				
			||||||
  "description": "The Legendary Phoenix Boilerplate.",
 | 
					  "description": "The Legendary Phoenix Boilerplate.",
 | 
				
			||||||
  "main": "index.js",
 | 
					  "main": "index.js",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,10 @@
 | 
				
			||||||
  "homepage": "https://gitlab.com/mythic-insight/legendary#readme",
 | 
					  "homepage": "https://gitlab.com/mythic-insight/legendary#readme",
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@semantic-release/commit-analyzer": "^6.1.0",
 | 
					    "@semantic-release/commit-analyzer": "^6.1.0",
 | 
				
			||||||
 | 
					    "@semantic-release/exec": "^5.0.0",
 | 
				
			||||||
    "@semantic-release/git": "^7.0.8",
 | 
					    "@semantic-release/git": "^7.0.8",
 | 
				
			||||||
 | 
					    "@semantic-release/npm": "^7.0.9",
 | 
				
			||||||
 | 
					    "dot": "^1.1.3",
 | 
				
			||||||
    "semantic-release": "^15.14.0",
 | 
					    "semantic-release": "^15.14.0",
 | 
				
			||||||
    "semantic-release-docker": "^2.2.0"
 | 
					    "semantic-release-docker": "^2.2.0"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -28,7 +31,20 @@
 | 
				
			||||||
      [
 | 
					      [
 | 
				
			||||||
        "@semantic-release/git",
 | 
					        "@semantic-release/git",
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "message": "chore(release): ${nextRelease.version}\n\n${nextRelease.notes}"
 | 
					          "message": "chore(release): ${nextRelease.version}\n\n${nextRelease.notes}",
 | 
				
			||||||
 | 
					          "assets": [
 | 
				
			||||||
 | 
					            "package.json",
 | 
				
			||||||
 | 
					            "infrastructure/kube.yml"
 | 
				
			||||||
 | 
					          ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "prepare": [
 | 
				
			||||||
 | 
					      "@semantic-release/npm",
 | 
				
			||||||
 | 
					      [
 | 
				
			||||||
 | 
					        "@semantic-release/exec",
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "prepareCmd": "scripts/generate-kube"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										15
									
								
								script/generate-kube
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								script/generate-kube
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const fs = require("fs");
 | 
				
			||||||
 | 
					const doT = require("dot");
 | 
				
			||||||
 | 
					doT.templateSettings = {...doT.templateSettings, strip: false};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const dots = doT.process({path: "./infrastructure"});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var packageText = fs.readFileSync("package.json", {encoding: "utf8"});
 | 
				
			||||||
 | 
					var packageConfig = JSON.parse(packageText);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const {version} = packageConfig;
 | 
				
			||||||
 | 
					const manifestText = dots.kube({version: version});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fs.writeFileSync("infrastructure/kube.yml", manifestText);
 | 
				
			||||||
		Loading…
	
		Reference in a new issue