Compare commits

...
Author SHA1 Message Date
Dominik Sokal da82a524ff clean up repository from redundant scripts 2019-07-04 13:31:53 +02:00
8 changed files with 20 additions and 145 deletions

No files matched your search

-1
View File
@@ -13,7 +13,6 @@
- `:local` creates symlinks to the shell apps in `expo` repository (_unfortunately this is currently broken_)
- `:remote` downloads precompiled shell apps
- Run `yarn` to install node modules.
- Run `yarn set-priorities:local` to set priorities configuration. This is not mandatory, but you'll get a lot of annoying messages without this.
- Run `yarn start:ios` or `yarn start:android` to run Turtle.
## Updating shell apps
+1 -10
View File
@@ -24,16 +24,7 @@
"test:smoke:android": "PLATFORM=android yarn test:smoke --testNamePattern=android",
"test:smoke:ios": "PLATFORM=ios yarn test:smoke --testNamePattern=iOS",
"release": "./scripts/release.sh",
"release:beta": "./scripts/releaseBeta.sh",
"set-priorities": "yarn set-priorities:local",
"set-priorities:default": "expenv ts-node -r tsconfig-paths/register --files src/scripts/setConfigurations.ts",
"set-priorities:local": "EXPENV_OVERRIDES=local-common,local,local-queue yarn set-priorities:default",
"set-priorities:staging": "yarn set-priorities:default",
"set-priorities:production": "EXPENV_OVERRIDES=prod yarn set-priorities:default",
"set-replica-count:default": "expenv ts-node -r tsconfig-paths/register --files src/scripts/setReplicaCount.ts | bunyan -o short -l debug",
"set-replica-count:local": "EXPENV_OVERRIDES=local-common,local,local-queue yarn set-replica-count:default",
"set-replica-count:staging": "yarn set-replica-count:default",
"set-replica-count:production": "EXPENV_OVERRIDES=prod yarn set-replica-count:default"
"release:beta": "./scripts/releaseBeta.sh"
},
"husky": {
"hooks": {
+8 -1
View File
@@ -12,7 +12,14 @@ const createModeMetricName = (mode: TurtleModeLabels) => `${createMetricName()}.
const createModeTag = (mode: TurtleModeLabels) => `mode:${mode}`;
export default async function sendConfigToDatadog() {
const configuration = await getLabeledConfiguration();
let configuration;
try {
configuration = await getLabeledConfiguration();
} catch (err) {
logger.warn('Failed to send the builders configuration to Datadog because it couldn\'t be fetched from Redis');
return;
}
const replicaCount = await getReplicaCount();
const currentReplicaCount = replicaCount === null ? configuration.length : replicaCount;
-80
View File
@@ -1,80 +0,0 @@
import { PLATFORMS } from 'turtle/constants';
import logger from 'turtle/logger';
import {
createConfigurationsKey,
createDefaultConfigurationKey,
HIGH_CONFIGURATION,
HIGH_ONLY_CONFIGURATION,
} from 'turtle/utils/priorities';
import { connect, RedisClient } from 'turtle/utils/redis';
const TIMEOUT = 3000;
// Turtle before doing anything (and after every build) checks for the first config
// (an element in config table with key=i) that is not taken (config.i is null/outdated)
// or is taken by this process itself.
// If Turtle dies unexpectedly the configuration will become free after TTL expires,
// so the state (number of HP/NP turtles) should come back to normal soon.
// For example, if a configuration table looks like this:
// [ HIGH_CONFIGURATION, NORMAL_CONFIGURATION, HIGH_CONFIGURATION ]
// If there is one turtle it runs with High Priority first.
// If there are two turtles, one runs with High Priority first, the second one with Normal Priority first.
// If the first dies, and the third is started in his place, it gets 3rd config (again HP-first),
// but after some time, because of TTL for config reservations,
// they should come back to using configurations no. 1 and 2.
// If there are no more available configurations from the table, the default configuration is used.
const AVAILABLE_CONFIGURATIONS_IOS = [
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_ONLY_CONFIGURATION,
HIGH_ONLY_CONFIGURATION,
HIGH_ONLY_CONFIGURATION,
// there are 5 iOS builders at the moment
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
];
const AVAILABLE_CONFIGURATIONS_ANDROID = [
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
// there are 15 Android builders at the moment
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
HIGH_CONFIGURATION,
];
const DEFAULT_CONFIGURATION = HIGH_CONFIGURATION;
async function run() {
const redis = await connect(TIMEOUT, RedisClient.Configuration);
await redis.set(createConfigurationsKey(PLATFORMS.IOS), JSON.stringify(AVAILABLE_CONFIGURATIONS_IOS));
await redis.set(createConfigurationsKey(PLATFORMS.ANDROID), JSON.stringify(AVAILABLE_CONFIGURATIONS_ANDROID));
await redis.set(createDefaultConfigurationKey(PLATFORMS.IOS), JSON.stringify(DEFAULT_CONFIGURATION));
await redis.set(createDefaultConfigurationKey(PLATFORMS.ANDROID), JSON.stringify(DEFAULT_CONFIGURATION));
redis.disconnect();
}
if (require.main === module) {
run()
.then(() => logger.info('All done'))
.catch((err) => logger.error('Error:', err));
}
-38
View File
@@ -1,38 +0,0 @@
import isNaN from 'lodash/isNaN';
import { PLATFORMS } from 'turtle/constants';
import logger from 'turtle/logger';
import { setReplicaCount } from 'turtle/utils/metadata';
import { getRedisClient, RedisClient } from 'turtle/utils/redis';
async function run() {
const platform = process.env.SCRIPT_PLATFORM;
const replicaCountRaw = process.env.SCRIPT_REPLICA_COUNT;
const replicaCount = Number(replicaCountRaw);
if (!platform || !replicaCountRaw) {
throw new Error('You must set both SCRIPT_PLATFORM and SCRIPT_REPLICA_COUNT env variables.');
}
if (!Object.values(PLATFORMS).includes(platform)) {
throw new Error(`Unsupported platform: ${platform}`);
}
if (isNaN(replicaCount)) {
throw new Error(`Wrong value for replica count: ${replicaCountRaw}`);
}
const redis = await getRedisClient(RedisClient.Configuration);
logger.info(`[${platform}] Setting replica count in redis to ${replicaCount}`);
await setReplicaCount(platform as PLATFORMS, replicaCount);
redis.disconnect();
}
if (require.main === module) {
run()
.then(() => logger.info('All done'))
.catch((err) => {
logger.error('Error:', err);
process.exit(1);
});
}
+9 -5
View File
@@ -38,11 +38,15 @@ async function main() {
try {
const redis = await getRedisClient();
await redis.set(REDIS_TURTLE_VERSION_KEY, turtleVersion);
logger.info(`Registered Turtle version (${turtleVersion}) in Redis`);
const sdkVersions = (await findSupportedSdkVersions(config.platform)).join(',');
await redis.set(REDIS_TURTLE_SUPPORTED_SDK_VERSIONS_KEY, sdkVersions);
logger.info(`Registered supported SDK versions (${sdkVersions}) in Redis`);
if (redis) {
await redis.set(REDIS_TURTLE_VERSION_KEY, turtleVersion);
logger.info(`Registered Turtle version (${turtleVersion}) in Redis`);
const sdkVersions = (await findSupportedSdkVersions(config.platform)).join(',');
await redis.set(REDIS_TURTLE_SUPPORTED_SDK_VERSIONS_KEY, sdkVersions);
logger.info(`Registered supported SDK versions (${sdkVersions}) in Redis`);
} else {
logger.warn('Couldn\'t set supported SDK versions in Redis (failed to connect to Redis)');
}
} catch (err) {
logger.error({ err }, 'Failed to set versions in Redis');
}
-8
View File
@@ -5,14 +5,6 @@ import { getRedisClient, RedisClient } from 'turtle/utils/redis';
const createKeyPrefix = (platform: PLATFORMS) => `${config.deploymentEnv}:${platform}`;
const createReplicaCountKey = (platform: PLATFORMS) => `${createKeyPrefix(platform)}:replicaCount`;
export async function setReplicaCount(platform: PLATFORMS, replicaCount: number) {
const redis = await getRedisClient(RedisClient.Configuration);
await redis.set(
createReplicaCountKey(platform),
replicaCount,
);
}
export async function getReplicaCount(maybePlatform?: PLATFORMS) {
const platform = maybePlatform || config.platform;
const redis = await getRedisClient(RedisClient.Configuration);
+2 -2
View File
@@ -49,7 +49,7 @@ export function createDefaultConfigurationKey(platform = config.platform) {
}
export async function getPriorities() {
if (config.env === 'test') {
if (config.env === 'test' || config.deploymentEnv === 'development') {
return NORMAL_CONFIGURATION;
}
@@ -93,7 +93,7 @@ export async function getPriorities() {
}
}
export async function getConfiguration(currentRedisClient: any) {
async function getConfiguration(currentRedisClient: any) {
const redis = currentRedisClient || await getRedisClient(RedisClient.Configuration);
return JSON.parse(await redis.get(createConfigurationsKey()));
}