-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: experimental cdk migrate command #25859
Changes from 1 commit
b53855e
b3dc8e1
1801196
e71d63e
483c431
5b5afee
ad081a0
089df4f
d57c47c
8060c44
e50a4ef
84b10c4
a2a26f3
0bdd473
94687d8
d51b074
2a85864
dbde5b7
00eeede
4ca5d2e
95cf39c
7444399
a8665cd
b3ab9f8
a2fd134
1727e02
afbe3b3
da4280b
2efd438
e15f084
6e06664
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
import * as fs from 'fs'; | ||
import * as path from 'path'; | ||
import { initializeProject, availableInitTemplates } from '../../lib/init'; | ||
import { warning } from '../logging'; | ||
|
||
// replace this string with the path to your own noctilucent pkg | ||
import * as nocti from '/Users/bobertzh/work/noctilucent/noctilucent/pkg/noctilucent'; | ||
|
||
export async function cliMigrate( | ||
inputpath: string = process.cwd() + '/../temp.txt', | ||
language?: string, | ||
generateOnly = false, | ||
outputpath = process.cwd(), | ||
) { | ||
const type = 'default'; // "default" is the default type (and maps to 'app') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I had to double-take: why is this an option here, but not exposed as an argument? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah so this is basically just to get the init funcitonality to work. I'm happy to just pass the hardcoded string into the initliazeproject but I thought I'd be explicit about wat the default meant. |
||
const template = (await availableInitTemplates()).find(t => t.hasName(type!)); | ||
if (!template) { | ||
throw new Error(`couldn't find template for ${type} app type, this should never happen`); | ||
} | ||
|
||
if (!language) { | ||
language = 'typescript'; | ||
warning(`No --language was provided, defaulting to --language=${language}`); | ||
} | ||
|
||
await initializeProject(template, language, true, generateOnly, outputpath); | ||
const template_file = fs.readFileSync(inputpath, 'utf8'); | ||
const generated_app = nocti.transmute(template_file, language); | ||
|
||
// clear out the init'd bin/lib files to replace with our own | ||
delete_files(outputpath + '/lib/'); | ||
|
||
// we hardcode everything to be called noctstack still so this works for now. | ||
// Will change this to be much smarter once we can change stack name in noct | ||
const bin_app = `#!/usr/bin/env node | ||
import 'source-map-support/register'; | ||
import * as cdk from 'aws-cdk-lib'; | ||
import { NoctStack } from '../lib/generated_stack'; | ||
|
||
const app = new cdk.App(); | ||
new NoctStack(app, 'NoctStack', { | ||
/* If you don't specify 'env', this stack will be environment-agnostic. | ||
* Account/Region-dependent features and context lookups will not work, | ||
* but a single synthesized template can be deployed anywhere. */ | ||
|
||
/* Uncomment the next line to specialize this stack for the AWS Account | ||
* and Region that are implied by the current CLI configuration. */ | ||
// env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION }, | ||
|
||
/* Uncomment the next line if you know exactly what Account and Region you | ||
* want to deploy the stack to. */ | ||
// env: { account: '123456789012', region: 'us-east-1' }, | ||
|
||
/* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */ | ||
});`; | ||
const myname = path.basename(outputpath); | ||
warning(`path name = ${myname}`) | ||
fs.writeFileSync(outputpath + '/lib/' + 'generated_stack.ts', generated_app); | ||
fs.writeFileSync(outputpath + '/bin/' + `${myname}.ts`, bin_app); | ||
} | ||
|
||
function delete_files(filepath: string) { | ||
fs.readdir(filepath, (err, files) => { | ||
if (err) throw err; | ||
for (const file of files) { | ||
fs.unlink(filepath + file, (err) => { | ||
if (err) throw err; | ||
}); | ||
} | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the chance of (eventual) name collision?This hardcodes a bunch of input that should be accepted from the command line. Will this actually output things in "~/my-dir" if the cli comand was
cdk migrate -l java -inputpath ~/template.json -outputpath ~/my-dir
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yup it works, these are just setting the default. We could just delete the /../temp.txt default for the input path if we wanted, I just left it in there for now