Skip to content

Commit

Permalink
fix: cli, defaults
Browse files Browse the repository at this point in the history
  • Loading branch information
Maurice Faber committed Aug 10, 2021
1 parent b52e16f commit edf0f26
Show file tree
Hide file tree
Showing 31 changed files with 243 additions and 469 deletions.
2 changes: 1 addition & 1 deletion .values/env/charts/cert-manager.yaml
@@ -1,3 +1,3 @@
charts:
cert-manager:
stage: staging
stage: production
2 changes: 1 addition & 1 deletion chart/otomi/localtest.sh
@@ -1,6 +1,6 @@
set -e

export OTOMI_VALUES_INPUT=/tmp/otomi/secret/values.yaml
export VALUES_INPUT=/tmp/otomi/secret/values.yaml
export CI=1

binzx/otomi bootstrap
Expand Down
42 changes: 21 additions & 21 deletions src/ci-tests.ts
Expand Up @@ -6,8 +6,16 @@ import { hf } from './cmd/hf'
import { validateTemplates } from './cmd/validate-templates'
import { validateValues } from './cmd/validate-values'
import { x } from './cmd/x'
import { cleanupHandler } from './common/setup'
import { BasicArguments, getFilename, OtomiDebugger, setParsedArgs, startingDir, terminal } from './common/utils'
import { prepareEnvironment } from './common/setup'
import {
BasicArguments,
getFilename,
getParsedArgs,
OtomiDebugger,
setParsedArgs,
startingDir,
terminal,
} from './common/utils'
import { basicOptions } from './common/yargs-opts'

const cmdName = getFilename(import.meta.url)
Expand All @@ -18,41 +26,32 @@ process.env.IN_DOCKER = '1'

export type Arguments = BasicArguments

/* eslint-disable no-useless-return */
const cleanup = (argv: Arguments): void => {
if (argv.skipCleanup) return
}
/* eslint-enable no-useless-return */

const setup = (argv: Arguments): void => {
if (argv._[0] === cmdName) cleanupHandler(() => cleanup(argv))
const setup = (): void => {
debug = terminal(cmdName)
process.env.AZURE_CLIENT_ID = 'somevalue'
process.env.AZURE_CLIENT_SECRET = 'somesecret'
}

export const ciTests = async (argv: Arguments): Promise<void> => {
const args = { ...argv }
setup(args)
export const ciTests = async (): Promise<void> => {
const argv: Arguments = getParsedArgs()
if (!existsSync(`${startingDir}/env`)) symlinkSync(`${startingDir}/tests/fixtures`, `${startingDir}/env`)
debug.log(`Validating ${`${startingDir}/env`} values`)

const xCommand = 'opa test policies -v'
debug.info(xCommand)
const opaExitCode = await x({ ...argv, _: ['x', ...xCommand.split(' ')] }, { skipAllPreChecks: true })
const opaExitCode = await x({ ...argv, _: ['x', ...xCommand.split(' ')] })
if (opaExitCode !== 0) {
debug.error('Opa policies failed')
process.exit(1)
}

debug.info('Validate values')

await validateValues(argv, { skipAllPreChecks: true })
await validateValues()

debug.info('hf lint')
await hf({ ...argv, args: ['lint'] }, { skipAllPreChecks: true })
await hf({ ...argv, args: ['lint'] })

debug.info('Validate templates')
await validateTemplates(argv, { skipAllPreChecks: true })
await validateTemplates()

// TODO: checkPolicies is disabled on old CLI bin/ci-tests.sh
// debug.info('Check policies')
Expand All @@ -65,10 +64,11 @@ export const module = {
builder: (parser: Argv): Argv => parser,
handler: async (argv: Arguments): Promise<void> => {
setParsedArgs(argv)
debug = terminal(cmdName)
await prepareEnvironment({ skipAllPreChecks: true })
setup()

try {
await ciTests(argv)
await ciTests()
} catch (error) {
debug.error(error)
process.exit(1)
Expand Down
15 changes: 7 additions & 8 deletions src/cmd/apply.ts
Expand Up @@ -2,7 +2,7 @@ import { mkdirSync, rmdirSync, writeFileSync } from 'fs'
import { Argv, CommandModule } from 'yargs'
import { $ } from 'zx'
import { hf, hfStream } from '../common/hf'
import { cleanupHandler, prepareEnvironment, PrepareEnvironmentOptions } from '../common/setup'
import { cleanupHandler } from '../common/setup'
import { getFilename, getParsedArgs, logLevelString, OtomiDebugger, setParsedArgs, terminal } from '../common/utils'
import { Arguments as HelmArgs, helmOptions } from '../common/yargs-opts'
import { ProcessOutputTrimmed } from '../common/zx-enhance'
Expand All @@ -15,22 +15,21 @@ let debug: OtomiDebugger

interface Arguments extends HelmArgs, DroneArgs {}

/* eslint-disable no-useless-return */
const cleanup = (argv: Arguments): void => {
if (argv.skipCleanup) return
rmdirSync(dir, { recursive: true })
}
/* eslint-enable no-useless-return */

const setup = async (argv: Arguments, options?: PrepareEnvironmentOptions): Promise<void> => {
const setup = (): void => {
const argv: Arguments = getParsedArgs()
if (argv._[0] === cmdName) cleanupHandler(() => cleanup(argv))
debug = terminal(cmdName)

if (options) await prepareEnvironment(options)
mkdirSync(dir, { recursive: true })
}

const applyAll = async (argv: Arguments) => {
const applyAll = async () => {
const argv: Arguments = getParsedArgs()
debug.info('Start apply all')
const output: ProcessOutputTrimmed = await hf(
{ fileOpts: 'helmfile.tpl/helmfile-init.yaml', args: 'template' },
Expand Down Expand Up @@ -60,7 +59,7 @@ const applyAll = async (argv: Arguments) => {
export const apply = async (): Promise<void> => {
const argv: Arguments = getParsedArgs()
if (!argv.label && !argv.file) {
await applyAll(argv)
await applyAll()
return
}
debug.info('Start apply')
Expand All @@ -83,7 +82,7 @@ export const module: CommandModule = {

handler: async (argv: Arguments): Promise<void> => {
setParsedArgs(argv)
await setup(argv, {})
setup()
await apply()
},
}
Expand Down
34 changes: 15 additions & 19 deletions src/cmd/bash.ts
@@ -1,26 +1,21 @@
import { Argv, CommandModule } from 'yargs'
import { $, nothrow } from 'zx'
import { cleanupHandler, prepareEnvironment, PrepareEnvironmentOptions } from '../common/setup'
import { BasicArguments, getFilename, OtomiDebugger, parser, setParsedArgs, terminal } from '../common/utils'
import { prepareEnvironment } from '../common/setup'
import {
BasicArguments,
getFilename,
getParsedArgs,
OtomiDebugger,
parser,
setParsedArgs,
terminal,
} from '../common/utils'

const cmdName = getFilename(import.meta.url)
let debug: OtomiDebugger
const debug: OtomiDebugger = terminal(cmdName)

/* eslint-disable no-useless-return */
const cleanup = (argv: BasicArguments): void => {
if (argv.skipCleanup) return
}
/* eslint-enable no-useless-return */

const setup = async (argv: BasicArguments, options?: PrepareEnvironmentOptions): Promise<void> => {
if (argv._[0] === cmdName) cleanupHandler(() => cleanup(argv))
debug = terminal(cmdName)

if (options) await prepareEnvironment(options)
}

export const bash = async (argv: BasicArguments, options?: PrepareEnvironmentOptions): Promise<void> => {
await setup(argv, options)
export const bash = async (): Promise<void> => {
const argv: BasicArguments = getParsedArgs()
if (argv._[0] === 'bash') parser.showHelp()
else {
const command = argv._.slice(1).join(' ')
Expand All @@ -46,7 +41,8 @@ export const module: CommandModule = {

handler: async (argv: BasicArguments): Promise<void> => {
setParsedArgs(argv)
await bash(argv, { skipKubeContextCheck: true, skipDecrypt: true })
await prepareEnvironment({ skipKubeContextCheck: true, skipDecrypt: true })
await bash()
},
}

Expand Down
6 changes: 3 additions & 3 deletions src/cmd/bootstrap.ts
Expand Up @@ -83,7 +83,7 @@ export const bootstrapGit = async (): Promise<void> => {
}
}

export const bootstrapValues = async (argv: Arguments): Promise<void> => {
export const bootstrapValues = async (): Promise<void> => {
const cwd = await currDir()

const hasOtomi = existsSync(`${env.ENV_DIR}/bin/otomi`)
Expand Down Expand Up @@ -142,7 +142,7 @@ export const bootstrapValues = async (argv: Arguments): Promise<void> => {
if (env.VALUES_INPUT) await mergeChartValues()

try {
await genSops({ ...argv, dryRun: false }, { skipAllPreChecks: true })
await genSops()
} catch (error) {
debug.error(error.message)
}
Expand Down Expand Up @@ -171,7 +171,7 @@ export const module = {
3. cli install: n-th time (.git exists), so pull > bootstrap values
*/
if (env.VALUES_INPUT) await bootstrapGit()
await bootstrapValues(argv)
await bootstrapValues()
},
}
export default module
27 changes: 18 additions & 9 deletions src/cmd/check-policies.ts
Expand Up @@ -3,27 +3,34 @@ import { Argv } from 'yargs'
import { $, nothrow } from 'zx'
import { env } from '../common/envalid'
import { hfTemplate } from '../common/hf'
import { cleanupHandler, prepareEnvironment, PrepareEnvironmentOptions } from '../common/setup'
import { getFilename, loadYaml, logLevel, logLevels, OtomiDebugger, setParsedArgs, terminal } from '../common/utils'
import { cleanupHandler, prepareEnvironment } from '../common/setup'
import {
getFilename,
getParsedArgs,
loadYaml,
logLevel,
logLevels,
OtomiDebugger,
setParsedArgs,
terminal,
} from '../common/utils'
import { Arguments, helmOptions } from '../common/yargs-opts'

const cmdName = getFilename(import.meta.url)
const outDir = '/tmp/otomi/conftest'
let debug: OtomiDebugger
const debug: OtomiDebugger = terminal(cmdName)

const cleanup = (argv: Arguments): void => {
if (argv.skipCleanup) return
rmSync(outDir, { force: true, recursive: true })
}

const setup = async (argv: Arguments, options?: PrepareEnvironmentOptions): Promise<void> => {
const setup = (argv: Arguments): void => {
if (argv._[0] === cmdName) cleanupHandler(() => cleanup(argv))
debug = terminal(cmdName)
if (options) await prepareEnvironment(options)
}

export const checkPolicies = async (argv: Arguments, options?: PrepareEnvironmentOptions): Promise<void> => {
await setup(argv, options)
export const checkPolicies = async (): Promise<void> => {
const argv: Arguments = getParsedArgs()
debug.info('Policy checking STARTED')

const policiesFile = `${env.ENV_DIR}/env/policies.yaml`
Expand Down Expand Up @@ -63,7 +70,9 @@ export const module = {

handler: async (argv: Arguments): Promise<void> => {
setParsedArgs(argv)
await checkPolicies(argv, { skipKubeContextCheck: true })
setup(argv)
await prepareEnvironment({ skipKubeContextCheck: true })
await checkPolicies()
},
}

Expand Down
27 changes: 13 additions & 14 deletions src/cmd/commit.ts
Expand Up @@ -4,7 +4,7 @@ import { $, cd, nothrow } from 'zx'
import { encrypt } from '../common/crypt'
import { env } from '../common/envalid'
import { hfValues } from '../common/hf'
import { exitIfInCore, prepareEnvironment, PrepareEnvironmentOptions } from '../common/setup'
import { exitIfInCore, prepareEnvironment } from '../common/setup'
import { currDir, getFilename, OtomiDebugger, setParsedArgs, terminal, waitTillAvailable } from '../common/utils'
import { Arguments as HelmArgs } from '../common/yargs-opts'
import { bootstrapGit } from './bootstrap'
Expand All @@ -18,12 +18,11 @@ const debug: OtomiDebugger = terminal(cmdName)

interface Arguments extends HelmArgs, DroneArgs {}

const setup = async (argv: Arguments, options?: PrepareEnvironmentOptions): Promise<void> => {
if (options) await prepareEnvironment(options)
const setup = (): void => {
exitIfInCore(cmdName)
}

export const preCommit = async (argv: DroneArgs): Promise<void> => {
export const preCommit = async (): Promise<void> => {
const pcDebug = terminal('Pre Commit')
pcDebug.info('Check for cluster diffs')
await nothrow($`git config --local diff.sopsdiffer.textconv "sops -d"`)
Expand All @@ -35,7 +34,7 @@ export const preCommit = async (argv: DroneArgs): Promise<void> => {
const secretMsTeamsLowPrioChanges = secretDiff.includes('+ lowPrio: https://')
const secretMsTeamsHighPrioChanges = secretDiff.includes('+ highPrio: https://')
if (versionChanges || secretSlackChanges || secretMsTeamsLowPrioChanges || secretMsTeamsHighPrioChanges)
await genDrone(argv)
await genDrone()
}

export const gitPush = async (
Expand Down Expand Up @@ -65,10 +64,8 @@ export const gitPush = async (
}
}

export const commit = async (argv: Arguments, options?: PrepareEnvironmentOptions): Promise<void> => {
await setup(argv, options)

await validateValues(argv)
export const commit = async (): Promise<void> => {
await validateValues()

debug.info('Preparing values')

Expand All @@ -78,13 +75,13 @@ export const commit = async (argv: Arguments, options?: PrepareEnvironmentOption
const values = getChartValues() ?? (await hfValues())
const clusterDomain = values?.cluster.domainSuffix ?? values?.cluster.apiName

preCommit(argv)
preCommit()
await encrypt()
debug.info('Committing values')
await $`git add -A`
await $`git commit -m 'otomi commit' --no-verify`

if (!env.CI) await pull(argv, options)
if (!env.CI) await pull()
let healthUrl
let branch
if (!values.charts?.gitea?.enabled) {
Expand Down Expand Up @@ -116,14 +113,16 @@ export const module = {

handler: async (argv: Arguments): Promise<void> => {
setParsedArgs(argv)
const options = { skipKubeContextCheck: true }
await prepareEnvironment({ skipKubeContextCheck: true })
setup()

if (!env.CI && existsSync(`${env.ENV_DIR}/.git`)) {
debug.info('Values repo already git initialized.')
await pull(argv, options)
await pull()
} else {
await bootstrapGit()
}
await commit(argv, options)
await commit()
},
}

Expand Down

0 comments on commit edf0f26

Please sign in to comment.