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",
 | 
			
		||||
  "version": "0.0.0-development",
 | 
			
		||||
  "version": "1.0.12",
 | 
			
		||||
  "description": "The Legendary Phoenix Boilerplate.",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
| 
						 | 
				
			
			@ -18,7 +18,10 @@
 | 
			
		|||
  "homepage": "https://gitlab.com/mythic-insight/legendary#readme",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@semantic-release/commit-analyzer": "^6.1.0",
 | 
			
		||||
    "@semantic-release/exec": "^5.0.0",
 | 
			
		||||
    "@semantic-release/git": "^7.0.8",
 | 
			
		||||
    "@semantic-release/npm": "^7.0.9",
 | 
			
		||||
    "dot": "^1.1.3",
 | 
			
		||||
    "semantic-release": "^15.14.0",
 | 
			
		||||
    "semantic-release-docker": "^2.2.0"
 | 
			
		||||
  },
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +31,20 @@
 | 
			
		|||
      [
 | 
			
		||||
        "@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