Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 2 additions & 1 deletion generators/pkg-core/templates/.genyg.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"translations": false,
"mongodb": false,
"cognito": false,
"cookieAuth": false
"cookieAuth": false,
"cypress": false
}
}
109 changes: 109 additions & 0 deletions generators/pkg-cypress/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
"use strict";
const Generator = require("yeoman-generator");
const chalk = require("chalk");
const yosay = require("yosay");
const fs = require("fs");
const jsYaml = require("js-yaml");
const {
getGenygConfigFile,
extendConfigFile,
requirePackages,
} = require("../../common");
const {JSON_SCHEMA} = require("js-yaml");

module.exports = class extends Generator {
async prompting() {
// Config checks
requirePackages(this, ["core"]);

this.log(
yosay(
`Hi! Welcome to the official ${chalk.blue(
"Getapper NextJS Yeoman Generator (GeNYG)"
)}. ${chalk.red(
"This command will install Cypress, this must be executed only once"
)}`
)
);

// Config checks
const configFile = getGenygConfigFile(this);
if (configFile.packages.cypress) {
this.log(
yosay(
chalk.red("It looks like Cypress were already installed!")
)
);
process.exit(0);
}

this.answers = await this.prompt([
{
type: "confirm",
name: "accept",
message: "Are you sure to proceed?",
},
]);

if (!this.answers.accept) {
process.exit(0);
}
}

writing() {

this.packageJson.merge({
scripts: {
"cypress:open": "cypress open",
"cypress:dev": "env-cmd --verbose -f .env.cypress.test next dev",
"cypress:build": "env-cmd --verbose -f .env.cypress.test next build",
"cypress:start": "env-cmd --verbose -f .env.cypress.test next start",
"e2e-test": "cypress run",
},
devDependencies: {
"cypress": "12.6.0",
},
});

this.fs.copy(this.templatePath(".*"), this.destinationRoot());
this.fs.copy(this.templatePath("."), this.destinationPath());

extendConfigFile(this, {
packages: {
cypress: true,
},
});

//Fix TS in order to not create collision with jest
const _extendTsConfigFile = (ts, json) => {
ts.fs.extendJSON(ts.destinationPath("tsconfig.json"), json);
};

_extendTsConfigFile(this, {
exclude: [
"node_modules",
"cypress",
"cypress.config.ts",
]
});


//Update Circleci config file
const _extendCiConfigFile = (config) => {
const localCiConfigFile = this.fs.readJSON(this.templatePath("config.json"));

config.jobs.deps = localCiConfigFile.jobs.deps;
config.jobs["e2e-tests"] = localCiConfigFile.jobs["e2e-tests"];
config.workflows["code-checks"]["jobs"].push(localCiConfigFile.workflows["code-checks"]["jobs"]);

fs.writeFileSync(this.destinationPath(".circleci/config.yml"), jsYaml.dump(config));
}

if(fs.existsSync(this.destinationPath(".circleci/config.yml"))){
const destCiConfigFile = jsYaml.load(fs.readFileSync(this.destinationPath(".circleci/config.yml")),
{ schema: JSON_SCHEMA, json: true});
_extendCiConfigFile(destCiConfigFile);

}
}
};
1 change: 1 addition & 0 deletions generators/pkg-cypress/templates/.env.cypress.test
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
NEXT_PUBLIC_TEST_CYPRESS=true
118 changes: 118 additions & 0 deletions generators/pkg-cypress/templates/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
{
"jobs": {
"deps": {
"working_directory": "~/project",
"environment": {
"CYPRESS_CACHE_FOLDER": "~/project/.cache/Cypress"
},
"docker": [
{
"image": "circleci/node:14.18.1"
}
],
"steps": [
"checkout",
{
"restore_cache": {
"keys": [
"v2-deps-{{ .Branch }}-{{ checksum \"package-lock.json\" }}",
"v2-deps-{{ .Branch }}-",
"v2-deps-"
]
}
},
{
"run": {
"name": "Install dependencies",
"command": "npm ci"
}
},
{
"save_cache": {
"key": "v2-deps-{{ .Branch }}-{{ checksum \"package-lock.json\" }}",
"paths": [
"~/.npm",
"~/.cache"
]
}
},
{
"persist_to_workspace": {
"root": "~/project",
"paths": "."
}
}
]
},

"e2e-tests": {
"working_directory": "~/project",
"environment": {
"CYPRESS_CACHE_FOLDER": "~/project/.cache/Cypress"
},
"docker": [
{
"image": "cypress/base:14.18.1"
},
{
"image": "circleci/mongo:3.6",
"command": "[mongod, --smallfiles]"
}
],
"steps": [
{
"attach_workspace": {
"at": "~/project"
}
},
{
"restore_cache": {
"keys": [
"v2-deps-{{ .Branch }}-{{ checksum \"package-lock.json\" }}",
"v2-deps-{{ .Branch }}-",
"v2-deps-"
]
}
},
{
"run": {
"name": "build",
"command": "npm run cypress:build"
}
},
{
"run": {
"name": "start-server",
"command": "npm run cypress:start",
"background": true
}
},
{
"run": {
"name": "e2e-tests",
"command": "npm run e2e-test"
}
},
{
"store_artifacts": {
"path": "cypress/videos"
}
},
{
"store_artifacts": {
"path": "cypress/screenshots"
}
}
]
}
},
"workflows": {
"code-checks": {
"jobs": {
"e2e-tests": {
"requires": ["deps"]
}
}
}
}
}
17 changes: 17 additions & 0 deletions generators/pkg-cypress/templates/cypress/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"types": ["cypress", "node"]
},
"include": [
"next-env.d.ts",
"**/*.ts",
"cypress.config.ts"
],
"exclude": []
}
62 changes: 62 additions & 0 deletions package-lock.json

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

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"camel-case": "4.1.2",
"chalk": "2.1.0",
"inquirer-directory": "2.2.0",
"js-yaml": "4.1.0",
"kebab-case": "1.0.1",
"pascal-case": "3.1.2",
"pluralize": "8.0.0",
Expand All @@ -31,6 +32,7 @@
"yosay": "2.0.2"
},
"devDependencies": {
"merge-yaml": "1.1.0",
"prettier": "2.5.1"
}
}