Kubernetes use env var based secrets

pull/310/head
Frostebite 2021-12-29 23:42:06 +00:00
parent b847c60ab0
commit 4c923c5609
8 changed files with 190 additions and 174 deletions

321
dist/index.js vendored
View File

@ -2506,6 +2506,168 @@ class CloudRunnerNamespace {
exports.default = CloudRunnerNamespace;
/***/ }),
/***/ 35346:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.TaskParameterSerializer = void 0;
const __1 = __webpack_require__(41359);
const image_environment_factory_1 = __importDefault(__webpack_require__(25145));
const cloud_runner_state_1 = __webpack_require__(70912);
const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855));
class TaskParameterSerializer {
static readBuildEnvironmentVariables() {
return [
{
name: 'ContainerMemory',
value: cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerMemory,
},
{
name: 'ContainerCpu',
value: cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerCpu,
},
{
name: 'GITHUB_WORKSPACE',
value: `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}/${cloud_runner_state_1.CloudRunnerState.buildGuid}/${cloud_runner_state_1.CloudRunnerState.repositoryFolder}/`,
},
{
name: 'PROJECT_PATH',
value: cloud_runner_state_1.CloudRunnerState.buildParams.projectPath,
},
{
name: 'BUILD_PATH',
value: cloud_runner_state_1.CloudRunnerState.buildParams.buildPath,
},
{
name: 'BUILD_FILE',
value: cloud_runner_state_1.CloudRunnerState.buildParams.buildFile,
},
{
name: 'BUILD_NAME',
value: cloud_runner_state_1.CloudRunnerState.buildParams.buildName,
},
{
name: 'BUILD_METHOD',
value: cloud_runner_state_1.CloudRunnerState.buildParams.buildMethod,
},
{
name: 'CUSTOM_PARAMETERS',
value: cloud_runner_state_1.CloudRunnerState.buildParams.customParameters,
},
{
name: 'BUILD_TARGET',
value: cloud_runner_state_1.CloudRunnerState.buildParams.platform,
},
{
name: 'ANDROID_VERSION_CODE',
value: cloud_runner_state_1.CloudRunnerState.buildParams.androidVersionCode.toString(),
},
{
name: 'ANDROID_KEYSTORE_NAME',
value: cloud_runner_state_1.CloudRunnerState.buildParams.androidKeystoreName,
},
{
name: 'ANDROID_KEYALIAS_NAME',
value: cloud_runner_state_1.CloudRunnerState.buildParams.androidKeyaliasName,
},
...TaskParameterSerializer.serializeBuildParamsAndInput,
];
}
static get serializeBuildParamsAndInput() {
let array = new Array();
array = TaskParameterSerializer.readBuildParameters(array);
array = TaskParameterSerializer.readInput(array);
return array;
}
static readBuildParameters(array) {
const keys = Object.keys(cloud_runner_state_1.CloudRunnerState.buildParams);
for (const element of keys) {
array.push({
name: element,
value: `${cloud_runner_state_1.CloudRunnerState.buildParams[element]}`,
});
}
array.push({ name: 'buildParameters', value: JSON.stringify(cloud_runner_state_1.CloudRunnerState.buildParams) });
return array;
}
static readInput(array) {
const input = Object.getOwnPropertyNames(__1.Input);
for (const element of input) {
cloud_runner_logger_1.default.log(JSON.stringify({
type: `${typeof __1.Input[element]}`,
name: __1.Input[element],
}, undefined, 4));
if (typeof __1.Input[element] !== 'function') {
array.push({
name: element,
value: `${__1.Input[element]}`,
});
}
}
return array;
}
static setupDefaultSecrets() {
cloud_runner_state_1.CloudRunnerState.defaultSecrets = [
{
ParameterKey: 'GithubToken',
EnvironmentVariable: 'GITHUB_TOKEN',
ParameterValue: cloud_runner_state_1.CloudRunnerState.buildParams.githubToken,
},
{
ParameterKey: 'branch',
EnvironmentVariable: 'branch',
ParameterValue: cloud_runner_state_1.CloudRunnerState.branchName,
},
{
ParameterKey: 'buildPathFull',
EnvironmentVariable: 'buildPathFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.buildPathFull,
},
{
ParameterKey: 'projectPathFull',
EnvironmentVariable: 'projectPathFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.projectPathFull,
},
{
ParameterKey: 'libraryFolderFull',
EnvironmentVariable: 'libraryFolderFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.libraryFolderFull,
},
{
ParameterKey: 'builderPathFull',
EnvironmentVariable: 'builderPathFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.builderPathFull,
},
{
ParameterKey: 'repoPathFull',
EnvironmentVariable: 'repoPathFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.repoPathFull,
},
{
ParameterKey: 'steamPathFull',
EnvironmentVariable: 'steamPathFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.steamPathFull,
},
];
cloud_runner_state_1.CloudRunnerState.defaultSecrets.push(...image_environment_factory_1.default.getEnvironmentVariables(cloud_runner_state_1.CloudRunnerState.buildParams).map((x) => {
return {
ParameterKey: x.name,
EnvironmentVariable: x.name,
ParameterValue: x.value,
};
}));
}
}
exports.TaskParameterSerializer = TaskParameterSerializer;
/***/ }),
/***/ 70912:
@ -2520,7 +2682,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CloudRunnerState = void 0;
const path_1 = __importDefault(__webpack_require__(85622));
const cloud_runner_namespace_1 = __importDefault(__webpack_require__(63287));
const task_parameter_serializer_1 = __webpack_require__(43247);
const task_parameter_serializer_1 = __webpack_require__(35346);
class CloudRunnerState {
static setup(buildParameters) {
CloudRunnerState.buildParams = buildParameters;
@ -2614,163 +2776,6 @@ class CloudRunnerStepState {
exports.CloudRunnerStepState = CloudRunnerStepState;
/***/ }),
/***/ 43247:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.TaskParameterSerializer = void 0;
const __1 = __webpack_require__(41359);
const image_environment_factory_1 = __importDefault(__webpack_require__(25145));
const cloud_runner_state_1 = __webpack_require__(70912);
class TaskParameterSerializer {
static readBuildEnvironmentVariables() {
return [
{
name: 'ContainerMemory',
value: cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerMemory,
},
{
name: 'ContainerCpu',
value: cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerCpu,
},
{
name: 'GITHUB_WORKSPACE',
value: `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}/${cloud_runner_state_1.CloudRunnerState.buildGuid}/${cloud_runner_state_1.CloudRunnerState.repositoryFolder}/`,
},
{
name: 'PROJECT_PATH',
value: cloud_runner_state_1.CloudRunnerState.buildParams.projectPath,
},
{
name: 'BUILD_PATH',
value: cloud_runner_state_1.CloudRunnerState.buildParams.buildPath,
},
{
name: 'BUILD_FILE',
value: cloud_runner_state_1.CloudRunnerState.buildParams.buildFile,
},
{
name: 'BUILD_NAME',
value: cloud_runner_state_1.CloudRunnerState.buildParams.buildName,
},
{
name: 'BUILD_METHOD',
value: cloud_runner_state_1.CloudRunnerState.buildParams.buildMethod,
},
{
name: 'CUSTOM_PARAMETERS',
value: cloud_runner_state_1.CloudRunnerState.buildParams.customParameters,
},
{
name: 'BUILD_TARGET',
value: cloud_runner_state_1.CloudRunnerState.buildParams.platform,
},
{
name: 'ANDROID_VERSION_CODE',
value: cloud_runner_state_1.CloudRunnerState.buildParams.androidVersionCode.toString(),
},
{
name: 'ANDROID_KEYSTORE_NAME',
value: cloud_runner_state_1.CloudRunnerState.buildParams.androidKeystoreName,
},
{
name: 'ANDROID_KEYALIAS_NAME',
value: cloud_runner_state_1.CloudRunnerState.buildParams.androidKeyaliasName,
},
...TaskParameterSerializer.serializeBuildParamsAndInput,
];
}
static get serializeBuildParamsAndInput() {
let array = new Array();
array = TaskParameterSerializer.readBuildParameters(array);
TaskParameterSerializer.readInput(array);
return array;
}
static readBuildParameters(array) {
const keys = Object.keys(cloud_runner_state_1.CloudRunnerState.buildParams);
for (const element of keys) {
array.push({
name: element,
value: `${cloud_runner_state_1.CloudRunnerState.buildParams[element]}`,
});
}
array.push({ name: 'buildParameters', value: JSON.stringify(cloud_runner_state_1.CloudRunnerState.buildParams) });
return array;
}
static readInput(array) {
const input = Object.getOwnPropertyNames(__1.Input);
for (const element of input) {
if (typeof __1.Input[element] !== 'function') {
array.push({
name: element,
value: `${__1.Input[element]}`,
});
}
}
return array;
}
static setupDefaultSecrets() {
cloud_runner_state_1.CloudRunnerState.defaultSecrets = [
{
ParameterKey: 'GithubToken',
EnvironmentVariable: 'GITHUB_TOKEN',
ParameterValue: cloud_runner_state_1.CloudRunnerState.buildParams.githubToken,
},
{
ParameterKey: 'branch',
EnvironmentVariable: 'branch',
ParameterValue: cloud_runner_state_1.CloudRunnerState.branchName,
},
{
ParameterKey: 'buildPathFull',
EnvironmentVariable: 'buildPathFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.buildPathFull,
},
{
ParameterKey: 'projectPathFull',
EnvironmentVariable: 'projectPathFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.projectPathFull,
},
{
ParameterKey: 'libraryFolderFull',
EnvironmentVariable: 'libraryFolderFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.libraryFolderFull,
},
{
ParameterKey: 'builderPathFull',
EnvironmentVariable: 'builderPathFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.builderPathFull,
},
{
ParameterKey: 'repoPathFull',
EnvironmentVariable: 'repoPathFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.repoPathFull,
},
{
ParameterKey: 'steamPathFull',
EnvironmentVariable: 'steamPathFull',
ParameterValue: cloud_runner_state_1.CloudRunnerState.steamPathFull,
},
];
cloud_runner_state_1.CloudRunnerState.defaultSecrets.push(...image_environment_factory_1.default.getEnvironmentVariables(cloud_runner_state_1.CloudRunnerState.buildParams).map((x) => {
return {
ParameterKey: x.name,
EnvironmentVariable: x.name,
ParameterValue: x.value,
};
}));
}
}
exports.TaskParameterSerializer = TaskParameterSerializer;
/***/ }),
/***/ 91491:

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
import * as SDK from 'aws-sdk';
import CloudRunnerTaskDef from '../services/cloud-runner-task-def';
import CloudRunnerAWSTaskDef from './cloud-runner-aws-task-def';
import CloudRunnerSecret from '../services/cloud-runner-secret';
import { AWSTemplates } from './aws-templates';
import CloudRunnerLogger from '../services/cloud-runner-logger';
@ -21,7 +21,7 @@ export class AWSJobStack {
mountdir: string,
workingdir: string,
secrets: CloudRunnerSecret[],
): Promise<CloudRunnerTaskDef> {
): Promise<CloudRunnerAWSTaskDef> {
const taskDefStackName = `${this.baseStackName}-${buildGuid}`;
let taskDefCloudFormation = AWSTemplates.readTaskCloudFormationTemplate();
const cleanupTaskDefStackName = `${taskDefStackName}-cleanup`;

View File

@ -1,7 +1,7 @@
import * as AWS from 'aws-sdk';
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
import * as core from '@actions/core';
import CloudRunnerTaskDef from '../services/cloud-runner-task-def';
import CloudRunnerAWSTaskDef from './cloud-runner-aws-task-def';
import * as zlib from 'zlib';
import CloudRunnerLogger from '../services/cloud-runner-logger';
import { Input } from '../..';
@ -12,7 +12,7 @@ import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build
class AWSTaskRunner {
static async runTask(
taskDef: CloudRunnerTaskDef,
taskDef: CloudRunnerAWSTaskDef,
ECS: AWS.ECS,
CF: AWS.CloudFormation,
environment: CloudRunnerEnvironmentVariable[],
@ -104,7 +104,7 @@ class AWSTaskRunner {
static async streamLogsUntilTaskStops(
ECS: AWS.ECS,
CF: AWS.CloudFormation,
taskDef: CloudRunnerTaskDef,
taskDef: CloudRunnerAWSTaskDef,
clusterName: string,
taskArn: string,
kinesisStreamName: string,
@ -138,7 +138,7 @@ class AWSTaskRunner {
kinesis: AWS.Kinesis,
iterator: string,
shouldReadLogs: boolean,
taskDef: CloudRunnerTaskDef,
taskDef: CloudRunnerAWSTaskDef,
) {
const records = await kinesis
.getRecords({
@ -165,7 +165,7 @@ class AWSTaskRunner {
return { timestamp, shouldReadLogs };
}
private static logRecords(records, iterator: string, taskDef: CloudRunnerTaskDef, shouldReadLogs: boolean) {
private static logRecords(records, iterator: string, taskDef: CloudRunnerAWSTaskDef, shouldReadLogs: boolean) {
if (records.Records.length > 0 && iterator) {
for (let index = 0; index < records.Records.length; index++) {
const json = JSON.parse(

View File

@ -1,6 +1,6 @@
import * as AWS from 'aws-sdk';
class CloudRunnerTaskDef {
class CloudRunnerAWSTaskDef {
public taskDefStackName!: string;
public taskDefCloudFormation!: string;
public taskDefStackNameTTL!: string;
@ -8,4 +8,4 @@ class CloudRunnerTaskDef {
public taskDefResources: AWS.CloudFormation.StackResources | undefined;
public baseResources: AWS.CloudFormation.StackResources | undefined;
}
export default CloudRunnerTaskDef;
export default CloudRunnerAWSTaskDef;

View File

@ -1,7 +1,7 @@
import * as SDK from 'aws-sdk';
import CloudRunnerSecret from '../services/cloud-runner-secret';
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
import CloudRunnerTaskDef from '../services/cloud-runner-task-def';
import CloudRunnerAWSTaskDef from './cloud-runner-aws-task-def';
import AWSTaskRunner from './aws-task-runner';
import { CloudRunnerProviderInterface } from '../services/cloud-runner-provider-interface';
import BuildParameters from '../../build-parameters';
@ -80,7 +80,7 @@ class AWSBuildEnvironment implements CloudRunnerProviderInterface {
}
}
async cleanupResources(CF: SDK.CloudFormation, taskDef: CloudRunnerTaskDef) {
async cleanupResources(CF: SDK.CloudFormation, taskDef: CloudRunnerAWSTaskDef) {
CloudRunnerLogger.log('Cleanup starting');
await CF.deleteStack({
StackName: taskDef.taskDefStackName,

View File

@ -1,7 +1,8 @@
import { Input } from '../..';
import ImageEnvironmentFactory from '../../image-environment-factory';
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
import { CloudRunnerState } from './cloud-runner-state';
import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
import { CloudRunnerState } from '../state/cloud-runner-state';
import CloudRunnerLogger from './cloud-runner-logger';
export class TaskParameterSerializer {
public static readBuildEnvironmentVariables(): CloudRunnerEnvironmentVariable[] {
@ -64,7 +65,7 @@ export class TaskParameterSerializer {
private static get serializeBuildParamsAndInput() {
let array = new Array();
array = TaskParameterSerializer.readBuildParameters(array);
TaskParameterSerializer.readInput(array);
array = TaskParameterSerializer.readInput(array);
return array;
}
@ -83,6 +84,16 @@ export class TaskParameterSerializer {
private static readInput(array: any[]) {
const input = Object.getOwnPropertyNames(Input);
for (const element of input) {
CloudRunnerLogger.log(
JSON.stringify(
{
type: `${typeof Input[element]}`,
name: Input[element],
},
undefined,
4,
),
);
if (typeof Input[element] !== 'function') {
array.push({
name: element,

View File

@ -4,7 +4,7 @@ import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment
import CloudRunnerNamespace from '../services/cloud-runner-namespace';
import { CloudRunnerProviderInterface } from '../services/cloud-runner-provider-interface';
import CloudRunnerSecret from '../services/cloud-runner-secret';
import { TaskParameterSerializer } from './task-parameter-serializer';
import { TaskParameterSerializer } from '../services/task-parameter-serializer';
export class CloudRunnerState {
public static CloudRunnerProviderPlatform: CloudRunnerProviderInterface;