@leverege/build-tools 2.59.0-beta.4 → 2.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +8 -5
- package/src/Docker.mjs +133 -14
- package/src/Utils.mjs +7 -1
- package/src/circleate.sh +2 -2
- package/src/docker-to-registry.mjs +2 -4
- package/src/generate-docs-conf.json +41 -0
- package/src/generate-docs.mjs +51 -0
- package/src/helm-charts/cnpg-operator/helmup.plugin +7 -7
- package/src/helm-charts/elasticsearch8/helmup.plugin +1 -1
- package/src/helm-charts/prom-operator/helmup.plugin +1 -1
- package/src/helm-charts/redis/helmup.plugin +1 -1
- package/src/helm-charts/velero/helmup.plugin +1 -1
- package/src/helmup.sh +31 -4
- package/src/templates/bashrcTemplate.hbs +0 -46
- package/src/templates/cloudBuildSteps.hbs +0 -13
- package/src/templates/dockerfileTemplate.hbs +0 -86
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leverege/build-tools",
|
|
3
|
-
"version": "2.59.0
|
|
3
|
+
"version": "2.59.0",
|
|
4
4
|
"description": "A collection of build / support tools for Leverege developers",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"repository": {
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"encrypt-secrets": "src/encrypt-secrets.sh",
|
|
28
28
|
"firebaseDeploy": "src/firebaseDeploy.mjs",
|
|
29
29
|
"firebaseServe": "src/firebaseServe.mjs",
|
|
30
|
+
"generate-docs": "src/generate-docs.mjs",
|
|
30
31
|
"getfbcfg": "src/getfbcfg.mjs",
|
|
31
32
|
"getjson": "src/getjson.mjs",
|
|
32
33
|
"git-tar": "src/git-tar.sh",
|
|
@@ -59,8 +60,9 @@
|
|
|
59
60
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
60
61
|
"dependencies": {
|
|
61
62
|
"@google-cloud/artifact-registry": "^3.5.0",
|
|
63
|
+
"@leverege/jsdoc-template": "^1.0.1",
|
|
62
64
|
"ansi-colors": "^4.1.3",
|
|
63
|
-
"chalk": "^5.
|
|
65
|
+
"chalk": "^5.4.1",
|
|
64
66
|
"command-line-args": "^6.0.1",
|
|
65
67
|
"command-line-usage": "^7.0.3",
|
|
66
68
|
"deepmerge": "^4.3.1",
|
|
@@ -68,8 +70,9 @@
|
|
|
68
70
|
"execa": "^9.5.2",
|
|
69
71
|
"glob": "^11.0.0",
|
|
70
72
|
"handlebars": "^4.7.8",
|
|
71
|
-
"inquirer": "^12.
|
|
73
|
+
"inquirer": "^12.3.0",
|
|
72
74
|
"js-yaml": "^4.1.0",
|
|
75
|
+
"jsdoc": "^4.0.4",
|
|
73
76
|
"ms": "^2.1.3",
|
|
74
77
|
"npm-registry-fetch": "^18.0.2",
|
|
75
78
|
"package-up": "^5.0.0",
|
|
@@ -78,10 +81,10 @@
|
|
|
78
81
|
"readline-sync": "^1.4.10",
|
|
79
82
|
"semver": "^7.6.3",
|
|
80
83
|
"simple-git": "^3.27.0",
|
|
81
|
-
"zx": "^8.
|
|
84
|
+
"zx": "^8.3.0"
|
|
82
85
|
},
|
|
83
86
|
"devDependencies": {
|
|
84
87
|
"@leverege/eslint-config-leverege": "^5.0.1",
|
|
85
|
-
"npm": "^
|
|
88
|
+
"npm": "^11.0.0"
|
|
86
89
|
}
|
|
87
90
|
}
|
package/src/Docker.mjs
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import fs from 'node:fs'
|
|
2
|
-
import path from 'node:path'
|
|
3
|
-
import url from 'node:url'
|
|
4
2
|
|
|
5
3
|
import chalk from 'chalk'
|
|
6
4
|
import handlebars from 'handlebars'
|
|
@@ -15,15 +13,80 @@ import {
|
|
|
15
13
|
warning
|
|
16
14
|
} from './Utils.mjs'
|
|
17
15
|
|
|
18
|
-
const DIRNAME = path.dirname( url.fileURLToPath( import.meta.url ) )
|
|
19
|
-
|
|
20
16
|
// TODO: change default to node 22 (jod) after 01/01/25
|
|
21
|
-
const dockerfileNodeVersion =
|
|
17
|
+
const dockerfileNodeVersion = 'jod-alpine'
|
|
22
18
|
|
|
23
19
|
// The contents of these variables were initially located in files that live in
|
|
24
20
|
// the build-tools repository, but it just became simpler to pull the contents
|
|
25
21
|
// directly into these variables and forego the file loading.
|
|
26
22
|
//
|
|
23
|
+
const dockerfileTemplate = `
|
|
24
|
+
# Version {{regvers}} @ {{date}}
|
|
25
|
+
#
|
|
26
|
+
# The FROM directive sets the Base Image for subsequent instructions
|
|
27
|
+
FROM node:{{nodeimage}} as intermediate
|
|
28
|
+
ENV NODE_ENV production
|
|
29
|
+
ENV NPM_CONFIG_USERCONFIG /usr/src/app/.npmrc
|
|
30
|
+
|
|
31
|
+
RUN mkdir -p /usr/src/app
|
|
32
|
+
WORKDIR /usr/src/app
|
|
33
|
+
|
|
34
|
+
# Install app dependencies
|
|
35
|
+
COPY ./workspace/ /usr/src/app/
|
|
36
|
+
ENV GRPC_VERBOSITY ERROR
|
|
37
|
+
|
|
38
|
+
# --------------------------------------------------------------
|
|
39
|
+
# copy the ssh keys into place, npm install, and remove them
|
|
40
|
+
# --------------------------------------------------------------
|
|
41
|
+
|
|
42
|
+
# Install packages to install private repos with ssh keys
|
|
43
|
+
COPY ./.npmrc \${NPM_CONFIG_USERCONFIG}
|
|
44
|
+
RUN apk --no-cache add openssh-client && \
|
|
45
|
+
apk --update add --no-cache --virtual build-dep g++ gcc libgcc \\
|
|
46
|
+
libstdc++ linux-headers make {{apkadds}} && \
|
|
47
|
+
npm install -g {{npmVersion}}
|
|
48
|
+
|
|
49
|
+
{{preInstallPluginfile}}
|
|
50
|
+
|
|
51
|
+
# Use SKIP_PREPARE to disable hook-and-release from running
|
|
52
|
+
ENV SKIP_PREPARE=true
|
|
53
|
+
|
|
54
|
+
# Do the clean install and remove the npm token and ssh keys from the image
|
|
55
|
+
RUN npm ci --only=production --no-optional {{npmlogging}} && \
|
|
56
|
+
rm -f \${NPM_CONFIG_USERCONFIG} /root/.ssh/*
|
|
57
|
+
|
|
58
|
+
# --------------------------------------------------------------
|
|
59
|
+
# Docker Final Stage
|
|
60
|
+
# --------------------------------------------------------------
|
|
61
|
+
|
|
62
|
+
FROM node:{{nodeimage}}
|
|
63
|
+
ENV NPM_CONFIG_USERCONFIG /usr/src/app/.npmrc
|
|
64
|
+
|
|
65
|
+
# Copy .npmrc for private registry access for access to any @leverege packages
|
|
66
|
+
COPY ./.npmrc \${NPM_CONFIG_USERCONFIG}
|
|
67
|
+
|
|
68
|
+
# Install tini for PID 1 and replace shell with bash so we can source files
|
|
69
|
+
RUN apk update && \
|
|
70
|
+
apk add --no-cache bash curl tini vim {{apkadds}} && \
|
|
71
|
+
npm install -g {{npmVersion}} && \
|
|
72
|
+
rm /bin/sh && ln -s /bin/bash /bin/sh && \
|
|
73
|
+
mkdir -p /usr/src/app /tmp/levlog && \
|
|
74
|
+
chown node:node /usr/src/app
|
|
75
|
+
|
|
76
|
+
# Pull in the Dockerfile.plugin file here
|
|
77
|
+
{{pluginfile}}
|
|
78
|
+
|
|
79
|
+
# Eliminate the sensitive info from the final stage image
|
|
80
|
+
RUN rm -f \${NPM_CONFIG_USERCONFIG}
|
|
81
|
+
|
|
82
|
+
ENTRYPOINT [ "/sbin/tini", "--" ]
|
|
83
|
+
WORKDIR /usr/src/app
|
|
84
|
+
|
|
85
|
+
COPY --chown=node:node --from=intermediate /usr/src/app /usr/src/app
|
|
86
|
+
|
|
87
|
+
USER {{runuser}}
|
|
88
|
+
COPY ./bashrc /home/node/.bashrc
|
|
89
|
+
CMD [ "/bin/bash", "-c", "source /home/node/.bashrc && node index.js" ]`
|
|
27
90
|
|
|
28
91
|
const pluginTemplate = `
|
|
29
92
|
# Dockerfile.plugin - optionally extend the service Docker image
|
|
@@ -40,16 +103,74 @@ const pluginTemplate = `
|
|
|
40
103
|
# footprints small, so adding packages "just because" is not considered
|
|
41
104
|
# a best practice.
|
|
42
105
|
`
|
|
43
|
-
|
|
44
|
-
const bashrcTemplate =
|
|
45
|
-
|
|
106
|
+
|
|
107
|
+
const bashrcTemplate = `#!/bin/bash
|
|
108
|
+
#
|
|
109
|
+
alias h=history
|
|
110
|
+
|
|
111
|
+
alias ls='ls -CF --color=auto'
|
|
112
|
+
alias ll='ls -lh'
|
|
113
|
+
alias lla='ls -lha'
|
|
114
|
+
alias glep='grep -l -s'
|
|
115
|
+
alias m=less
|
|
116
|
+
alias menv='env | sort | less'
|
|
117
|
+
|
|
118
|
+
alias whatsmyip='wget -qO- ifconfig.co'
|
|
119
|
+
|
|
120
|
+
alias err='wget -q -O- localhost:5111/logLevel/error'
|
|
121
|
+
alias wrn='wget -q -O- localhost:5111/logLevel/warn'
|
|
122
|
+
alias inf='wget -q -O- localhost:5111/logLevel/info'
|
|
123
|
+
alias dbg='wget -q -O- localhost:5111/logLevel/debug'
|
|
124
|
+
alias trc='wget -q -O- localhost:5111/logLevel/trace'
|
|
125
|
+
|
|
126
|
+
socks()
|
|
127
|
+
{
|
|
128
|
+
netstat -ant | awk '{print }' | sort | uniq -c | sort -n
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
cmetrics()
|
|
132
|
+
{
|
|
133
|
+
wget -qO- localhost:5111/metrics
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
cmstat()
|
|
137
|
+
{
|
|
138
|
+
wget -qO- localhost:5111
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
cmclear()
|
|
142
|
+
{
|
|
143
|
+
# Future me - thinking this should call cmstat and pass in the endpoint as
|
|
144
|
+
# a parameter? Well don't do it - without escaping the dollar 1 in cmstat
|
|
145
|
+
# the port will end up being 51111, and escaping causes linting to complain
|
|
146
|
+
# about unnecessary escaping.
|
|
147
|
+
wget -qO- localhost:5111/status/clear
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
dunm() {
|
|
151
|
+
du -sh /usr/src/app/node_modules/* | sort -sh
|
|
152
|
+
}
|
|
153
|
+
`
|
|
154
|
+
const cloudBuildSteps = `
|
|
155
|
+
steps:
|
|
156
|
+
- name: 'gcr.io/cloud-builders/docker'
|
|
157
|
+
args:
|
|
158
|
+
- 'build'
|
|
159
|
+
- '--network=cloudbuild'
|
|
160
|
+
- '-t'
|
|
161
|
+
- '{{imageName}}:{{imageVersion}}'
|
|
162
|
+
- '.'
|
|
163
|
+
|
|
164
|
+
images:
|
|
165
|
+
- '{{imageName}}:{{imageVersion}}'
|
|
166
|
+
`
|
|
46
167
|
|
|
47
168
|
const defaultSettings = {
|
|
48
169
|
apkadds : '',
|
|
49
170
|
date : getDateTimestamp(),
|
|
50
|
-
nodeimage :
|
|
51
|
-
imageBase : process.env.USE_NODEJS_22 ? 'node:jod-alpine' : 'node:iron-alpine',
|
|
171
|
+
nodeimage : 'jod-alpine',
|
|
52
172
|
npmlogging : process.env.VERBOSE_NPM_LOGGING ? '--ddd' : '--silent',
|
|
173
|
+
npmVersion : 'npm@11',
|
|
53
174
|
pluginfile : '# NO PLUGIN',
|
|
54
175
|
preInstallPluginfile : '# NO PRE-INSTALL PLUGIN',
|
|
55
176
|
regvers : 'package.version',
|
|
@@ -75,7 +196,7 @@ const generateDockerfile = ( options ) => {
|
|
|
75
196
|
if ( !settings.nodeimage ) {
|
|
76
197
|
settings.nodeimage = dockerfileNodeVersion
|
|
77
198
|
}
|
|
78
|
-
|
|
199
|
+
|
|
79
200
|
// Ensure the presence of the docker dir with plugin and bashrc - this code
|
|
80
201
|
// could probably be tightened up a little.
|
|
81
202
|
try {
|
|
@@ -86,9 +207,7 @@ const generateDockerfile = ( options ) => {
|
|
|
86
207
|
}
|
|
87
208
|
|
|
88
209
|
const bashrcFile = './docker/bashrc'
|
|
89
|
-
|
|
90
|
-
// always be created or we encounter errors
|
|
91
|
-
if ( true ) { // !fs.existsSync( bashrcFile ) ) {
|
|
210
|
+
if ( !fs.existsSync( bashrcFile ) ) {
|
|
92
211
|
let bf = bashrcTemplate
|
|
93
212
|
const bashrcFilePlugin = './docker/Bashrc.plugin'
|
|
94
213
|
if ( fs.existsSync( bashrcFilePlugin ) ) {
|
package/src/Utils.mjs
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { existsSync, readdirSync, readFileSync } from 'node:fs'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import url from 'node:url'
|
|
2
4
|
|
|
3
5
|
import chalk from 'chalk'
|
|
4
6
|
import { $ } from 'execa'
|
|
@@ -7,6 +9,10 @@ import { glob } from 'glob'
|
|
|
7
9
|
import { packageUp } from 'package-up'
|
|
8
10
|
import YAML from 'js-yaml'
|
|
9
11
|
|
|
12
|
+
// __dirname goes away with ESM so we take this approach instead and
|
|
13
|
+
// this assumes this file lives in the src dir of the build-tools repo
|
|
14
|
+
export const BUILD_TOOLS_ROOT = path.dirname( url.fileURLToPath( import.meta.url ) )
|
|
15
|
+
|
|
10
16
|
let debugEnabled = process.env.BUILD_TOOLS_DEBUG === '1'
|
|
11
17
|
|
|
12
18
|
export const enableDebug = () => { debugEnabled = true }
|
|
@@ -471,7 +477,7 @@ export const analyzeRepository = async ( giveGuidance ) => {
|
|
|
471
477
|
await shellCmd( 'npm run build' )
|
|
472
478
|
}
|
|
473
479
|
|
|
474
|
-
const buildToolsVersion = closestPackageJson.devDependencies['@leverege/build-tools']
|
|
480
|
+
const buildToolsVersion = closestPackageJson.devDependencies['@leverege/build-tools'] || closestPackageJson.dependencies['@leverege/build-tools']
|
|
475
481
|
if ( !buildToolsVersion ) {
|
|
476
482
|
errorExit( 'Error: missing devDependency for @leverege/build-tools in package.json' )
|
|
477
483
|
}
|
package/src/circleate.sh
CHANGED
|
@@ -128,7 +128,7 @@ jobs:
|
|
|
128
128
|
at: ~/project
|
|
129
129
|
- run:
|
|
130
130
|
name: Generate docs
|
|
131
|
-
command:
|
|
131
|
+
command: npm run docs
|
|
132
132
|
- store_artifacts:
|
|
133
133
|
path: docs
|
|
134
134
|
prefix: docs
|
|
@@ -347,7 +347,7 @@ jobs:
|
|
|
347
347
|
at: ~/project
|
|
348
348
|
- run:
|
|
349
349
|
name: Generate docs
|
|
350
|
-
command:
|
|
350
|
+
command: npm run docs
|
|
351
351
|
- store_artifacts:
|
|
352
352
|
path: docs
|
|
353
353
|
prefix: docs
|
|
@@ -96,8 +96,6 @@ if ( semver.lt( semver.coerce( repoDescr.buildToolsVersion ), minimumBuildToolsV
|
|
|
96
96
|
|
|
97
97
|
const dockerInfo = await docker.generateDockerfile( {
|
|
98
98
|
regvers : repoDescr.packageVersion,
|
|
99
|
-
imageBase : repoDescr.closestPackageJson.leverege?.imageBase,
|
|
100
|
-
buildEnv : repoDescr.closestPackageJson.leverege?.buildEnv || 'alpine',
|
|
101
99
|
nodeimage : repoDescr.closestPackageJson.leverege?.nodeimg, // left as nodeimg in package.json for backwards compat
|
|
102
100
|
} )
|
|
103
101
|
debug( { dockerInfo }, '<==The Docker Info' )
|
|
@@ -218,13 +216,13 @@ log( `
|
|
|
218
216
|
NPM Workspace: ${chalk.green.bold( isNpmWorkspace )}
|
|
219
217
|
|
|
220
218
|
${chalk.green.bold( 'Docker Information:' )}
|
|
221
|
-
NodeImage: ${chalk.green.bold( dockerInfo.
|
|
222
|
-
Docker Env: ${chalk.green.bold( dockerInfo.buildEnv || 'alpine' )}
|
|
219
|
+
NodeImage: ${chalk.green.bold( dockerInfo.nodeimage )}
|
|
223
220
|
AddedPkgs: ${chalk.green.bold( dockerInfo.apkadds )}
|
|
224
221
|
Run User: ${chalk.green.bold( dockerInfo.runuser )}
|
|
225
222
|
Previous: ${chalk.yellow.bold( dockerInfo.previousBuild )}
|
|
226
223
|
DateStamp: ${chalk.green.bold( dockerInfo.date )}
|
|
227
224
|
NPM Logs: ${chalk.green.bold( dockerInfo.npmlogging )}
|
|
225
|
+
NPM Version: ${chalk.green.bold( dockerInfo.npmVersion )}
|
|
228
226
|
` )
|
|
229
227
|
|
|
230
228
|
if ( imageVersion !== packageVersion ) {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tags": {
|
|
3
|
+
"allowUnknownTags": false
|
|
4
|
+
},
|
|
5
|
+
"source": {
|
|
6
|
+
"includePattern": "\\.(js|mjs|jsx)$",
|
|
7
|
+
"excludePattern": "(node_modules/|docs)"
|
|
8
|
+
},
|
|
9
|
+
"plugins": [],
|
|
10
|
+
"templates": {
|
|
11
|
+
"cleverLinks": true,
|
|
12
|
+
"monospaceLinks": false,
|
|
13
|
+
"preserveDescriptions": true,
|
|
14
|
+
"default": {
|
|
15
|
+
"useLongnameInNav": true,
|
|
16
|
+
"outputSourceFiles": false
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"opts": {
|
|
20
|
+
"encoding": "utf8",
|
|
21
|
+
"lenient": false,
|
|
22
|
+
"markdown": true
|
|
23
|
+
},
|
|
24
|
+
"docdash": {
|
|
25
|
+
"static": true,
|
|
26
|
+
"sort": false,
|
|
27
|
+
"search": true,
|
|
28
|
+
"collapse": true,
|
|
29
|
+
"typedefs": true,
|
|
30
|
+
"removeQuotes": "none",
|
|
31
|
+
"scripts": [],
|
|
32
|
+
"menu":{
|
|
33
|
+
"Bitbucket": {
|
|
34
|
+
"href":"https://bitbucket.org/leverege/IF_THIS_MAKES_SENSE",
|
|
35
|
+
"target":"_blank",
|
|
36
|
+
"class":"menu-item",
|
|
37
|
+
"id":"repository"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/*
|
|
3
|
+
* Encapsulates the rather lengthy jsdoc / md docs npm script:
|
|
4
|
+
*
|
|
5
|
+
* npx jsdoc -c ./jsdoc.json -R README.md -d docs src && \
|
|
6
|
+
* mkdir -p docs/md && \
|
|
7
|
+
* npx --package=jsdoc-to-markdown jsdoc2md --files src/*.js --configure ./jsdoc.json > docs/md/API.md
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
import fs from 'node:fs'
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
BUILD_TOOLS_ROOT,
|
|
14
|
+
debug,
|
|
15
|
+
err,
|
|
16
|
+
getRepositoryDescr,
|
|
17
|
+
shellCmd,
|
|
18
|
+
} from './Utils.mjs'
|
|
19
|
+
|
|
20
|
+
const jsdocConfig = `${BUILD_TOOLS_ROOT}/generate-docs-conf.json`
|
|
21
|
+
|
|
22
|
+
// build the location of the template file from the build-tools root
|
|
23
|
+
// in order to avoid hardcoding in the jsdoc config file - this is
|
|
24
|
+
// important in order to support running generate-docs from a user's
|
|
25
|
+
// laptop or deployed to the doc-creator service on k8s
|
|
26
|
+
const jsdocTemplate = `${BUILD_TOOLS_ROOT}/../../jsdoc-template`
|
|
27
|
+
|
|
28
|
+
if ( !fs.existsSync( jsdocConfig ) ) { // eslint-disable-line security/detect-non-literal-fs-filename
|
|
29
|
+
err( `cannot find the jsdoc config file: ${jsdocConfig}` )
|
|
30
|
+
process.exit( 1 )
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const repoDescr = await getRepositoryDescr()
|
|
34
|
+
|
|
35
|
+
debug( { jsdocConfig, repoDescr }, '<==The Repo' )
|
|
36
|
+
|
|
37
|
+
// blow away any existing docs before recreating the docs dir
|
|
38
|
+
if ( fs.existsSync( 'docs' ) ) {
|
|
39
|
+
fs.rmSync( 'docs', { recursive : true } )
|
|
40
|
+
}
|
|
41
|
+
fs.mkdirSync( 'docs/md', { recursive : true } )
|
|
42
|
+
|
|
43
|
+
try {
|
|
44
|
+
await shellCmd( `npx --yes jsdoc -c ${jsdocConfig} -t ${jsdocTemplate} -R README.md -d docs src` )
|
|
45
|
+
await shellCmd(
|
|
46
|
+
`npx --yes --package=jsdoc-to-markdown jsdoc2md --files src/*.js --configure ${jsdocConfig}`,
|
|
47
|
+
{ stdout : { file : 'docs/md/API.md' } }
|
|
48
|
+
)
|
|
49
|
+
} catch ( error ) {
|
|
50
|
+
err( error )
|
|
51
|
+
}
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
#
|
|
3
3
|
# See => https://cloudnative-pg.io/documentation/current/installation_upgrade/
|
|
4
4
|
#
|
|
5
|
+
OPVER="1.25.0"
|
|
6
|
+
|
|
7
|
+
createNamespaceIfNeeded cnpg-system
|
|
8
|
+
|
|
9
|
+
kubectl apply --server-side -f \
|
|
10
|
+
https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-${OPVER%.*}/releases/cnpg-${OPVER}.yaml $K8S_WHAT
|
|
11
|
+
|
|
5
12
|
# Legacy terraformed clusters (like sandbox) may need a special firewall rule
|
|
6
13
|
# added to the network layer on k8s. It should look like this:
|
|
7
14
|
#
|
|
@@ -9,13 +16,6 @@
|
|
|
9
16
|
# Ports : 8000,9443 <= kubectl cnpg status and webhooks
|
|
10
17
|
# Filters: 172.16.0.0/28 <= k8s control plane
|
|
11
18
|
#
|
|
12
|
-
OPVER="1.24.1"
|
|
13
|
-
|
|
14
|
-
createNamespaceIfNeeded cnpg-system
|
|
15
|
-
|
|
16
|
-
kubectl apply --server-side -f \
|
|
17
|
-
https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-${OPVER%.*}/releases/cnpg-${OPVER}.yaml $K8S_WHAT
|
|
18
|
-
|
|
19
19
|
# Old approach used the helm chart.
|
|
20
20
|
#
|
|
21
21
|
#addHelmRepo cnpg https://cloudnative-pg.github.io/charts
|
|
@@ -4,7 +4,7 @@ showInstalling "The Prometheus Operator and Components"
|
|
|
4
4
|
addHelmRepo prometheus-community https://prometheus-community.github.io/helm-charts
|
|
5
5
|
|
|
6
6
|
showInstalling "The Prometheus Operator (kube-prometheus-stack)"
|
|
7
|
-
[ -z "$PROMETHEUS_STACK_CHART_VERSION" ] && PROMETHEUS_STACK_CHART_VERSION="
|
|
7
|
+
[ -z "$PROMETHEUS_STACK_CHART_VERSION" ] && PROMETHEUS_STACK_CHART_VERSION="67"
|
|
8
8
|
|
|
9
9
|
NS="--namespace prometheus"
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@ showInstalling "Redis"
|
|
|
4
4
|
|
|
5
5
|
OCI_CHART="oci://registry-1.docker.io/bitnamicharts/redis"
|
|
6
6
|
|
|
7
|
-
[ -z "$REDIS_CHART_VERSION" ] && REDIS_CHART_VERSION="20.
|
|
7
|
+
[ -z "$REDIS_CHART_VERSION" ] && REDIS_CHART_VERSION="20.6.0"
|
|
8
8
|
|
|
9
9
|
helm upgrade --install redis $OCI_CHART \
|
|
10
10
|
--values redis/redis-local.yaml \
|
|
@@ -4,7 +4,7 @@ showInstalling "Velero Backup System"
|
|
|
4
4
|
|
|
5
5
|
addHelmRepo vmware-tanzu https://vmware-tanzu.github.io/helm-charts
|
|
6
6
|
|
|
7
|
-
[ -z "$VELERO_CHART_VERSION" ] && VELERO_CHART_VERSION="
|
|
7
|
+
[ -z "$VELERO_CHART_VERSION" ] && VELERO_CHART_VERSION="8"
|
|
8
8
|
#
|
|
9
9
|
# Build the bucket, region and SA email variables and use --set to mod the
|
|
10
10
|
# chart values as opposed to using an OVH:<label> approach. This eliminates
|
package/src/helmup.sh
CHANGED
|
@@ -578,8 +578,35 @@ function installCnpgOperatorEnvironment() {
|
|
|
578
578
|
CNPG_SVC_ACCT="$CNPG_NAMESPACE-sa"
|
|
579
579
|
CNPG_SVC_EMAIL="$CNPG_SVC_ACCT@$GCP_PROJECT_ID.iam.gserviceaccount.com"
|
|
580
580
|
|
|
581
|
-
|
|
582
|
-
|
|
581
|
+
# We used to delete the SA when we were doing clean installs but that bit
|
|
582
|
+
# me in the ass the time I moved the operator dir out of the way to run
|
|
583
|
+
# helmwhat to populate with latest operator version. The result? The SA
|
|
584
|
+
# was deleted and recreated and the existing system lost the ability to
|
|
585
|
+
# write to GCS which resulted in WAL failures. The deletion / recreation
|
|
586
|
+
# logic was only useful in the early days of creating / deleting for
|
|
587
|
+
# initial development.
|
|
588
|
+
#
|
|
589
|
+
# Synopsis: deleting an SA from an actual non-test system is BAD NEWS
|
|
590
|
+
# and if it happens then you will need to rebind the SA to
|
|
591
|
+
# workload identity by hand.
|
|
592
|
+
#
|
|
593
|
+
# kubectl delete serviceaccounts -n $CNPG_NAMESPACE $CNPG_SVC_ACCT &> $DEVNULL
|
|
594
|
+
# gcloud --quiet iam service-accounts delete $CNPG_SVC_EMAIL --project $GCP_PROJECT_ID&> $DEVNULL
|
|
595
|
+
kubectl describe serviceaccounts -n $CNPG_NAMESPACE $CNPG_SVC_ACCT &> $DEVNULL
|
|
596
|
+
if [ $? -eq 0 ];
|
|
597
|
+
then
|
|
598
|
+
cat<<SKIP_CNPG_SA_CREATION
|
|
599
|
+
|
|
600
|
+
$YELO_WARN The CNPG SA $CNPG_SVC_ACCT already exists
|
|
601
|
+
|
|
602
|
+
Deleting the SA for the purposes of upgrading the operator is going to
|
|
603
|
+
wreck someone's day (probably yours) if the desire is to simply upgrade
|
|
604
|
+
in place. To force a clean reinstall, delete both the k8s and gcp SA for
|
|
605
|
+
CNPG and try again. (see comments in helmup for more info)
|
|
606
|
+
|
|
607
|
+
SKIP_CNPG_SA_CREATION
|
|
608
|
+
return
|
|
609
|
+
fi
|
|
583
610
|
|
|
584
611
|
# Create the operands namespace and annotate to allow redis access
|
|
585
612
|
createNamespaceIfNeeded $CNPG_NAMESPACE
|
|
@@ -699,10 +726,10 @@ function installVeleroEnvironment() {
|
|
|
699
726
|
gcloud config set project $GCP_PROJECT_ID
|
|
700
727
|
|
|
701
728
|
## The major chart version will determine the bucket suffix
|
|
702
|
-
[ -z "$
|
|
729
|
+
[ -z "$VELERO_CHART_VERSION" ] && VELERO_CHART_VERSION="8"
|
|
703
730
|
|
|
704
731
|
## Create a bucket
|
|
705
|
-
BUCKET="$GCP_PROJECT_ID-velero-$
|
|
732
|
+
BUCKET="$GCP_PROJECT_ID-velero-$VELERO_CHART_VERSION"
|
|
706
733
|
printf "\nCreating storage bucket `color g $BUCKET` in `color g $GCE_REGION`\n"
|
|
707
734
|
gsutil mb -l $GCE_REGION gs://$BUCKET/ &> $DEVNULL
|
|
708
735
|
warnOnError $? "Bucket failed to create or already exists - go check it\n"
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
alias h=history
|
|
4
|
-
|
|
5
|
-
alias ls='ls -CF --color=auto'
|
|
6
|
-
alias ll='ls -lh'
|
|
7
|
-
alias lla='ls -lha'
|
|
8
|
-
alias glep='grep -l -s'
|
|
9
|
-
alias m=less
|
|
10
|
-
alias menv='env | sort | less'
|
|
11
|
-
|
|
12
|
-
alias whatsmyip='wget -qO- ifconfig.co'
|
|
13
|
-
|
|
14
|
-
alias err='wget -q -O- localhost:5111/logLevel/error'
|
|
15
|
-
alias wrn='wget -q -O- localhost:5111/logLevel/warn'
|
|
16
|
-
alias inf='wget -q -O- localhost:5111/logLevel/info'
|
|
17
|
-
alias dbg='wget -q -O- localhost:5111/logLevel/debug'
|
|
18
|
-
alias trc='wget -q -O- localhost:5111/logLevel/trace'
|
|
19
|
-
|
|
20
|
-
socks()
|
|
21
|
-
{
|
|
22
|
-
netstat -ant | awk '{print }' | sort | uniq -c | sort -n
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
cmetrics()
|
|
26
|
-
{
|
|
27
|
-
wget -qO- localhost:5111/metrics
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
cmstat()
|
|
31
|
-
{
|
|
32
|
-
wget -qO- localhost:5111
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
cmclear()
|
|
36
|
-
{
|
|
37
|
-
# Future me - thinking this should call cmstat and pass in the endpoint as
|
|
38
|
-
# a parameter? Well don't do it - without escaping the dollar 1 in cmstat
|
|
39
|
-
# the port will end up being 51111, and escaping causes linting to complain
|
|
40
|
-
# about unnecessary escaping.
|
|
41
|
-
wget -qO- localhost:5111/status/clear
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
dunm() {
|
|
45
|
-
du -sh /usr/src/app/node_modules/* | sort -sh
|
|
46
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
steps:
|
|
2
|
-
- name: 'gcr.io/cloud-builders/docker'
|
|
3
|
-
args:
|
|
4
|
-
- 'build'
|
|
5
|
-
- '--network=cloudbuild'
|
|
6
|
-
- '-t'
|
|
7
|
-
- '{{imageName}}:{{imageVersion}}'
|
|
8
|
-
- '--cache-from'
|
|
9
|
-
- '{{imageName}}:{{imageVersion}}'
|
|
10
|
-
- '.'
|
|
11
|
-
|
|
12
|
-
images:
|
|
13
|
-
- '{{imageName}}:{{imageVersion}}'
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
# Version {{regvers}} @ {{date}}
|
|
2
|
-
|
|
3
|
-
# The FROM directive sets the Base Image for subsequent instructions
|
|
4
|
-
FROM {{image}} as intermediate
|
|
5
|
-
|
|
6
|
-
ARG BUILD_ENV="{{buildEnv}}"
|
|
7
|
-
|
|
8
|
-
ENV NODE_ENV production
|
|
9
|
-
ENV NPM_CONFIG_USERCONFIG /usr/src/app/.npmrc
|
|
10
|
-
|
|
11
|
-
RUN mkdir -p /usr/src/app
|
|
12
|
-
WORKDIR /usr/src/app
|
|
13
|
-
|
|
14
|
-
# Install app dependencies
|
|
15
|
-
COPY ./workspace/ /usr/src/app/
|
|
16
|
-
ENV GRPC_VERBOSITY ERROR
|
|
17
|
-
|
|
18
|
-
# --------------------------------------------------------------
|
|
19
|
-
# copy the ssh keys into place, npm install, and remove them
|
|
20
|
-
# --------------------------------------------------------------
|
|
21
|
-
|
|
22
|
-
# Install packages to install private repos with ssh keys
|
|
23
|
-
COPY ./.npmrc ${NPM_CONFIG_USERCONFIG}
|
|
24
|
-
|
|
25
|
-
RUN if [ "${BUILD_ENV}" = "debian" ]; then \
|
|
26
|
-
apt-get update && \
|
|
27
|
-
apt-get install -y openssh-client build-essential && \
|
|
28
|
-
npm install -g npm@10; \
|
|
29
|
-
else \
|
|
30
|
-
apk --no-cache add openssh-client && \
|
|
31
|
-
apk --update add --no-cache --virtual build-dep g++ gcc libgcc libstdc++ linux-headers make {{apkadds}} && \
|
|
32
|
-
npm install -g npm@10; \
|
|
33
|
-
fi
|
|
34
|
-
|
|
35
|
-
# Use SKIP_PREPARE to disable hook-and-release from running
|
|
36
|
-
ENV SKIP_PREPARE=true
|
|
37
|
-
|
|
38
|
-
{{preInstallPluginfile}}
|
|
39
|
-
|
|
40
|
-
# Do the clean install and remove the npm token and ssh keys from the image
|
|
41
|
-
RUN npm ci --only=production --no-optional {{npmlogging}} && \
|
|
42
|
-
rm -f ${NPM_CONFIG_USERCONFIG} /root/.ssh/*
|
|
43
|
-
|
|
44
|
-
# --------------------------------------------------------------
|
|
45
|
-
# Docker Final Stage
|
|
46
|
-
# --------------------------------------------------------------
|
|
47
|
-
|
|
48
|
-
FROM {{image}}
|
|
49
|
-
|
|
50
|
-
ARG BUILD_ENV="{{buildEnv}}"
|
|
51
|
-
|
|
52
|
-
ENV NPM_CONFIG_USERCONFIG /usr/src/app/.npmrc
|
|
53
|
-
|
|
54
|
-
# Copy .npmrc for private registry access for access to any @leverege packages
|
|
55
|
-
COPY ./.npmrc ${NPM_CONFIG_USERCONFIG}
|
|
56
|
-
|
|
57
|
-
# Install tini for PID 1 and replace shell with bash so we can source files
|
|
58
|
-
RUN if [ "$BUILD_ENV" = "debian" ]; then \
|
|
59
|
-
apt-get update && \
|
|
60
|
-
apt-get install -y tini bash curl vim {{apkadds}} && \
|
|
61
|
-
npm install -g npm@10 && \
|
|
62
|
-
rm /bin/sh && ln -s /bin/bash /bin/sh && \
|
|
63
|
-
mkdir -p /usr/src/app /tmp/levlog && chown node:node /usr/src/app; \
|
|
64
|
-
else \
|
|
65
|
-
apk update && \
|
|
66
|
-
apk add --no-cache bash curl tini vim {{apkadds}} && \
|
|
67
|
-
npm install -g npm@10 && \
|
|
68
|
-
rm /bin/sh && ln -s /bin/bash /bin/sh && \
|
|
69
|
-
mkdir -p /usr/src/app /tmp/levlog && chown node:node /usr/src/app; \
|
|
70
|
-
fi
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
# Pull in the Dockerfile.plugin file here
|
|
74
|
-
{{pluginfile}}
|
|
75
|
-
|
|
76
|
-
# Eliminate the sensitive info from the final stage image
|
|
77
|
-
RUN rm -f ${NPM_CONFIG_USERCONFIG}
|
|
78
|
-
|
|
79
|
-
ENTRYPOINT [ "tini", "--" ]
|
|
80
|
-
WORKDIR /usr/src/app
|
|
81
|
-
|
|
82
|
-
COPY --chown=node:node --from=intermediate /usr/src/app /usr/src/app
|
|
83
|
-
|
|
84
|
-
USER {{runuser}}
|
|
85
|
-
COPY ./bashrc /home/node/.bashrc
|
|
86
|
-
CMD [ "/bin/bash", "-c", "source /home/node/.bashrc && node index.js" ]
|