Skip to content
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

feat: package manager support create amplify #793

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
ca8fa66
chore: update package.lock
0618 Dec 6, 2023
3b737a5
init
0618 Dec 6, 2023
fdc9016
feat: dynamically get package manager
0618 Dec 7, 2023
dfeb8a9
chore: change workflow trigger
0618 Dec 7, 2023
614abb8
chore: change workflow trigger
0618 Dec 7, 2023
54647a1
chore: rename npm functions
0618 Dec 7, 2023
5ebbbc2
chore: update output log
0618 Dec 7, 2023
df057c8
fix: pnpm cache clear command
0618 Dec 7, 2023
61e5f23
chore: refactor packageManager
0618 Dec 7, 2023
ffa1e83
fix: remove pnpm store
0618 Dec 7, 2023
e6c099c
chore: create package_manager file
0618 Dec 7, 2023
a3a54c3
chore: change workflow trigger
0618 Dec 7, 2023
40f3590
chore: refactor PackageManager Controller and Initializer
0618 Dec 11, 2023
b491902
fix: update types
0618 Dec 11, 2023
9e3837c
chore: refactor to use factory
0618 Dec 12, 2023
b5665ec
chore: remove try catch from the controllers
0618 Dec 12, 2023
3a50376
chore: change type
0618 Dec 12, 2023
7ec208b
chore: use abstract class
0618 Dec 13, 2023
5fdea3c
fix tests
0618 Dec 13, 2023
ab8409a
fix: PackageManagerBase
0618 Dec 13, 2023
4f03950
chore: refactor PackageManagerControllerFactory
0618 Dec 14, 2023
f451b90
chore: refactor packageJsonExists
0618 Dec 14, 2023
0063cb7
chore: cleanup code
0618 Dec 14, 2023
5f0a964
fix: projectJsonExists
0618 Dec 14, 2023
c550391
remove package_manager file
0618 Dec 14, 2023
11796e3
chore: refactor package_manager props into package manager controllers
0618 Dec 15, 2023
e22c524
chore: rename packageManagerControllerFactory
0618 Dec 15, 2023
f95f9b9
chore: make projectRoot, userAgent, getPackageManagerName private
0618 Dec 15, 2023
90866db
chore: refactor ensureInitialized
0618 Dec 17, 2023
7ddc64f
chore: refactor PackageManagerController to extend PackageManagerCont…
0618 Dec 17, 2023
01aaa73
Revert "chore: refactor PackageManagerController to extend PackageMan…
0618 Dec 17, 2023
8fe4d9b
chore: refactor to inject PackageManagerControllerFactory to xPackage…
0618 Dec 17, 2023
1b31bb3
chore: move initialProjectFileGenerator to packageManagerController
0618 Dec 17, 2023
3af168d
fix: initializeAMplifyFolder
0618 Dec 17, 2023
437c515
fix: generateInitialProjectFiles
0618 Dec 17, 2023
24e17eb
fix: template path
0618 Dec 17, 2023
28da8a9
chore: refactor getPackageManagerController yarn-modern
0618 Dec 18, 2023
a383845
chore: create getWelcomeMessage
0618 Dec 18, 2023
3b2b688
Revert "chore: refactor getPackageManagerController yarn-modern"
0618 Dec 18, 2023
6ce2668
chore: refactor generateInitialProjectFiles for yarn-modern
0618 Dec 18, 2023
e061e57
chore: cleanup code
0618 Dec 18, 2023
3be7e85
chore: remove PackageManagerControllerFactory index
0618 Dec 18, 2023
96483ce
chore: remove ensureInitialized
0618 Dec 18, 2023
7c59c80
Revert "chore: remove ensureInitialized"
0618 Dec 18, 2023
4eabb36
Revert "Revert "chore: remove ensureInitialized""
0618 Dec 19, 2023
a212df8
temp: add initializeProject to PackageManagerController
0618 Dec 19, 2023
13a14af
temp: revert InitialProjectFileGenerator
0618 Dec 19, 2023
33ddcc4
fix: InitialProjectFileGenerator
0618 Dec 19, 2023
c1699e5
test: restore initial_project_file_generator
0618 Dec 19, 2023
8ac0f17
move installDependencies and getWelcomeMessage to PackageManagerContr…
0618 Dec 19, 2023
37f07f2
add addLockFile
0618 Dec 19, 2023
474a559
Merge branch 'poc/package-manager-support' into poc/pms-create-amplify
0618 Dec 20, 2023
b19a209
add JSDocs and resolve some review comments
0618 Dec 20, 2023
3e45a49
fix: create_amplify.test
0618 Dec 20, 2023
9d5bf7e
chore: add addTypescript
0618 Dec 20, 2023
f385510
chore: refactor generateInitialProjectFiles
0618 Dec 20, 2023
c5150db
Update packages/create-amplify/src/package-manager-controller/package…
0618 Dec 20, 2023
29c0505
chore: refactor generateInitialProjectFiles again
0618 Dec 20, 2023
3667fd2
chore: refactor welcomeMessage
0618 Dec 20, 2023
cb32ec7
test: add package_manager_controller_factory
0618 Dec 21, 2023
0acb711
test: fix test types
0618 Dec 21, 2023
7d6a6d6
chore: comments update
0618 Dec 21, 2023
a6b0cf1
chore: handle process.env.npm_config_user_agent undefined
0618 Dec 22, 2023
def594d
chore: move addLockFile and addTypescript into initializeTsConfig
0618 Dec 22, 2023
e98dbb2
test: refactor packageManagerControllerFactory
0618 Dec 22, 2023
9e3a8b6
fix: yarn initializeTsConfig
0618 Dec 26, 2023
33a5961
fix: yarn modern initializeTsConfig
0618 Dec 26, 2023
46c2f89
fix: amplify_project_creator test
0618 Dec 26, 2023
73b881a
chore: refactor contructor
0618 Dec 27, 2023
08a09a2
Merge branch 'poc/package-manager-support' into poc/pms-create-amplify
0618 Dec 27, 2023
4bca631
chore: update package.lock
0618 Dec 27, 2023
489e84f
fix: pnpm init, remove --debug, etc
0618 Dec 27, 2023
a83349d
test: add test for NpmPackageManagerController
0618 Dec 27, 2023
6ce0e18
fix build error
0618 Dec 27, 2023
0b3eb4d
chore: refactor NpmPackageManagerController
0618 Dec 27, 2023
eeb8622
test: add test for xPackageManagerController
0618 Dec 27, 2023
a146fa1
chore: convert fs to fsp
0618 Dec 27, 2023
a8e38af
fix yarn modern
0618 Dec 27, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .eslint_dictionary.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@
"passthrough",
"pathname",
"pipelined",
"pnpm",
"posix",
"readdir",
"readline",
Expand Down
86 changes: 43 additions & 43 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 19 additions & 17 deletions packages/create-amplify/src/amplify_project_creator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,23 @@ void describe('AmplifyProjectCreator', () => {
startAnimatingEllipsis: mock.fn(),
stopAnimatingEllipsis: mock.fn(),
};
const packageManagerControllerMock = { installDependencies: mock.fn() };
const packageManagerControllerMock = {
installDependencies: mock.fn(),
initializeProject: mock.fn(),
getWelcomeMessage: mock.fn(() => '`npx amplify help`'),
initializeTsConfig: mock.fn(),
projectRoot: '/testProjectRoot',
};
const projectRootValidatorMock = { validate: mock.fn() };
const initialProjectFileGeneratorMock = {
generateInitialProjectFiles: mock.fn(),
};
const npmInitializedEnsurerMock = { ensureInitialized: mock.fn() };
const gitIgnoreInitializerMock = { ensureInitialized: mock.fn() };
const amplifyProjectCreator = new AmplifyProjectCreator(
packageManagerControllerMock as never,
projectRootValidatorMock as never,
initialProjectFileGeneratorMock as never,
npmInitializedEnsurerMock as never,
gitIgnoreInitializerMock as never,
process.cwd()
initialProjectFileGeneratorMock as never
);
mock.method(logger, 'log', logMock.log);
await amplifyProjectCreator.create();
Expand All @@ -37,13 +40,9 @@ void describe('AmplifyProjectCreator', () => {
initialProjectFileGeneratorMock.generateInitialProjectFiles.mock.callCount(),
1
);
assert.equal(
npmInitializedEnsurerMock.ensureInitialized.mock.callCount(),
1
);
assert.equal(
logMock.log.mock.calls[4].arguments[0],
'Welcome to AWS Amplify! \nRun `npx amplify help` for a list of available commands. \nGet started by running `npx amplify sandbox`.'
"Welcome to AWS Amplify!\nNavigate to your project directory using\n'cd ./testProjectRoot'.\nThen get started with the following commands:\n\n`npx amplify help`\n"
);
assert.equal(
logMock.log.mock.calls[5].arguments[0],
Expand All @@ -58,27 +57,30 @@ void describe('AmplifyProjectCreator', () => {
startAnimatingEllipsis: mock.fn(),
stopAnimatingEllipsis: mock.fn(),
};
const packageManagerControllerMock = { installDependencies: mock.fn() };
const packageManagerControllerMock = {
installDependencies: mock.fn(),
initializeProject: mock.fn(),
getWelcomeMessage: mock.fn(() => '`npx amplify help`'),
initializeTsConfig: mock.fn(),
projectRoot: '/testProjectRoot',
};
const projectRootValidatorMock = { validate: mock.fn() };
const gitIgnoreInitializerMock = { ensureInitialized: mock.fn() };
const initialProjectFileGeneratorMock = {
generateInitialProjectFiles: mock.fn(),
};
const npmInitializedEnsurerMock = { ensureInitialized: mock.fn() };
const gitIgnoreInitializerMock = { ensureInitialized: mock.fn() };
const amplifyProjectCreator = new AmplifyProjectCreator(
packageManagerControllerMock as never,
projectRootValidatorMock as never,
initialProjectFileGeneratorMock as never,
npmInitializedEnsurerMock as never,
gitIgnoreInitializerMock as never,
'/project/root'
initialProjectFileGeneratorMock as never
);
mock.method(logger, 'log', logMock.log);
await amplifyProjectCreator.create();

assert.equal(
logMock.log.mock.calls[4].arguments[0],
'Welcome to AWS Amplify! \nRun `npx amplify help` for a list of available commands. \nGet started by running `cd ./project/root; npx amplify sandbox`.'
"Welcome to AWS Amplify!\nNavigate to your project directory using\n'cd ./testProjectRoot'.\nThen get started with the following commands:\n\n`npx amplify help`\n"
);
assert.equal(
logMock.log.mock.calls[5].arguments[0],
Expand Down
31 changes: 15 additions & 16 deletions packages/create-amplify/src/amplify_project_creator.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { PackageManagerController } from './package_manager_controller.js';
import { PackageManagerController } from './package-manager-controller/package_manager_controller.js';
import { ProjectRootValidator } from './project_root_validator.js';
import { InitialProjectFileGenerator } from './initial_project_file_generator.js';
import { NpmProjectInitializer } from './npm_project_initializer.js';
import { GitIgnoreInitializer } from './gitignore_initializer.js';
import { logger } from './logger.js';
import { InitialProjectFileGenerator } from './initial_project_file_generator.js';

const LEARN_MORE_USAGE_DATA_TRACKING_LINK = `https://docs.amplify.aws/gen2/reference/telemetry`;

Expand All @@ -26,10 +25,8 @@ export class AmplifyProjectCreator {
constructor(
private readonly packageManagerController: PackageManagerController,
private readonly projectRootValidator: ProjectRootValidator,
private readonly initialProjectFileGenerator: InitialProjectFileGenerator,
private readonly npmInitializedEnsurer: NpmProjectInitializer,
private readonly gitIgnoreInitializer: GitIgnoreInitializer,
private readonly projectRoot: string
private readonly initialProjectFileGenerator: InitialProjectFileGenerator
) {}

/**
Expand All @@ -39,7 +36,7 @@ export class AmplifyProjectCreator {
logger.debug(`Validating current state of target directory...`);
await this.projectRootValidator.validate();

await this.npmInitializedEnsurer.ensureInitialized();
await this.packageManagerController.initializeProject();

await logger.indicateProgress(
`Installing required dependencies`,
Expand All @@ -64,16 +61,18 @@ export class AmplifyProjectCreator {

logger.log('Successfully created a new project!');

const cdCommand =
process.cwd() === this.projectRoot
const cdPreamble =
process.cwd() === this.packageManagerController.projectRoot
? ''
: `cd .${this.projectRoot.replace(process.cwd(), '')}; `;

logger.log(
`Welcome to AWS Amplify!
Run \`npx amplify help\` for a list of available commands.
Get started by running \`${cdCommand}npx amplify sandbox\`.`
);
: `Navigate to your project directory using
'cd .${this.packageManagerController.projectRoot.replace(process.cwd(), '')}'.
Then get started with the following commands:
`;

logger.log(`Welcome to AWS Amplify!
${cdPreamble}
${this.packageManagerController.getWelcomeMessage()}
`);

logger.log(
`Amplify (Gen 2) collects anonymous telemetry data about general usage of the CLI.
Expand Down
Loading