-
Notifications
You must be signed in to change notification settings - Fork 163
/
commit.ts
116 lines (100 loc) · 3.54 KB
/
commit.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import { existsSync } from 'fs'
import { Argv } from 'yargs'
import { $, cd, nothrow } from 'zx'
import { encrypt } from '../common/crypt'
import { env } from '../common/envalid'
import { hfValues } from '../common/hf'
import { prepareEnvironment } from '../common/setup'
import { getFilename, OtomiDebugger, rootDir, setParsedArgs, terminal } from '../common/utils'
import { Arguments as HelmArgs } from '../common/yargs-opts'
import { Arguments as DroneArgs, genDrone } from './gen-drone'
import { pull } from './pull'
import { validateValues } from './validate-values'
const cmdName = getFilename(import.meta.url)
const debug: OtomiDebugger = terminal(cmdName)
interface Arguments extends HelmArgs, DroneArgs {}
export const preCommit = async (): Promise<void> => {
const pcDebug = terminal('Pre Commit')
pcDebug.info('Check for cluster diffs')
cd(env.ENV_DIR)
const settingsDiff = (await nothrow($`git diff env/settings.yaml`)).stdout.trim()
const secretDiff = (await nothrow($`git diff env/secrets.settings.yaml`)).stdout.trim()
cd(rootDir)
const versionChanges = settingsDiff.includes('+ version:')
const secretSlackChanges = secretDiff.includes('+ url: https://hooks.slack.com/')
const secretMsTeamsLowPrioChanges = secretDiff.includes('+ lowPrio: https://')
const secretMsTeamsHighPrioChanges = secretDiff.includes('+ highPrio: https://')
if (versionChanges || secretSlackChanges || secretMsTeamsLowPrioChanges || secretMsTeamsHighPrioChanges)
await genDrone()
}
export const gitPush = async (branch: string): Promise<boolean> => {
const gitDebug = terminal('gitPush')
gitDebug.info('Starting git push.')
cd(env.ENV_DIR)
try {
await $`git push -u origin ${branch} -f`
gitDebug.log('Otomi values have been pushed to git.')
return true
} catch (error) {
gitDebug.error(error)
return false
} finally {
cd(rootDir)
}
}
export const commit = async (): Promise<void> => {
await validateValues()
debug.info('Preparing values')
cd(env.ENV_DIR)
const values = await hfValues()
preCommit()
await encrypt()
debug.info('Committing values')
await $`git add -A`
try {
await $`git commit -m 'otomi commit' --no-verify`
} catch (e) {
debug.error(e.stdout)
debug.error(e.stderr)
debug.log('Something went wrong trying to commit. Did you make any changes?')
}
if (!env.CI) await pull()
let branch: string
if (values.charts?.gitea?.enabled === false) {
branch = values.charts!['otomi-api']!.git!.branch ?? 'main'
} else {
branch = 'main'
}
try {
const isCertStaging = values.charts?.['cert-manager']?.stage === 'staging'
if (isCertStaging) {
process.env.GIT_SSL_NO_VERIFY = 'true'
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
}
await $`git remote show origin`
await gitPush(branch)
debug.log('Successfully pushed the updated values')
} catch (error) {
debug.error(error.stderr)
debug.error('Pushing the values failed, please read the above error message and manually try again')
process.exit(1)
} finally {
cd(rootDir)
}
}
export const module = {
command: cmdName,
describe: 'Execute wrapper for generate pipelines -> git commit changed files',
builder: (parser: Argv): Argv => parser,
handler: async (argv: Arguments): Promise<void> => {
setParsedArgs(argv)
await prepareEnvironment({ skipKubeContextCheck: true })
if (!env.CI && existsSync(`${env.ENV_DIR}/.git`)) {
await pull()
// } else {
// await bootstrapGit()
}
await commit()
},
}
export default module