forked from launchdarkly-labs/project-migrator-script
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmigrate-projects.ts
84 lines (71 loc) · 2.23 KB
/
migrate-projects.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
// deno-lint-ignore-file no-explicit-any
import yargs from "https://cdn.deno.land/yargs/versions/yargs-v16.2.1-deno/raw/deno.ts";
import {
buildPatch,
buildRules,
consoleLogger,
getJson,
ldAPIPatchRequest,
ldAPIPostRequest,
rateLimitRequest,
delay
} from "./utils.ts";
import * as Colors from "https://deno.land/std/fmt/colors.ts";
// Uncommented these give an import error due to axios
// import {
// EnvironmentPost,
// Project,
// ProjectPost,
// FeatureFlagBody
// } from "https://github.com/launchdarkly/api-client-typescript/raw/main/api.ts";
interface Arguments {
projKeySource: string;
projKeyDest: string;
apikey: string;
domain: string;
}
let inputArgs: Arguments = yargs(Deno.args)
.alias("p", "projKeySource")
.alias("d", "projKeyDest")
.alias("k", "apikey")
.alias("u", "domain")
.default("u", "app.launchdarkly.com").argv;
// Project Data //
const projectJson = await getJson(
`./source/project/${inputArgs.projKeySource}/project.json`,
);
const buildEnv: Array<any> = [];
projectJson.environments.items.forEach((env: any) => {
const newEnv: any = {
name: env.name,
key: env.key,
color: env.color,
};
if (env.defaultTtl) newEnv.defaultTtl = env.defaultTtl;
if (env.confirmChanges) newEnv.confirmChanges = env.confirmChanges;
if (env.secureMode) newEnv.secureMode = env.secureMode;
if (env.defaultTrackEvents) newEnv.defaultTrackEvents = env.defaultTrackEvents;
if (env.tags) newEnv.tags = env.tags;
buildEnv.push(newEnv);
});
const projRep = projectJson; //as Project
const projPost: any = {
key: inputArgs.projKeyDest,
name: inputArgs.projKeyDest, // Optional TODO: convert the target project key to a human-friendly project name
tags: projRep.tags,
environments: buildEnv,
}; //as ProjectPost
if (projRep.defaultClientSideAvailability) {
projPost.defaultClientSideAvailability = projRep.defaultClientSideAvailability;
} else {
projPost.includeInSnippetByDefault = projRep.includeInSnippetByDefault;
}
const projResp = await rateLimitRequest(
ldAPIPostRequest(inputArgs.apikey, inputArgs.domain, `projects`, projPost),
'projects'
);
consoleLogger(
projResp.status,
`Creating Project: ${inputArgs.projKeyDest} Status: ${projResp.status}`,
);
await projResp.json();