Skip to content

Commit

Permalink
chore: add some version e2e coverage for --conventional-prerelease an…
Browse files Browse the repository at this point in the history
…d --conventional-graduate (#3224)
  • Loading branch information
JamesHenry committed Jul 6, 2022
1 parent 0eb7f7b commit 041f581
Show file tree
Hide file tree
Showing 13 changed files with 93 additions and 26 deletions.
4 changes: 2 additions & 2 deletions e2e/jest.config.ts
Expand Up @@ -3,8 +3,8 @@ export default {
"^.+\\.[tj]sx?$": "ts-jest",
},
moduleFileExtensions: ["ts", "tsx", "js", "jsx", "html"],
maxWorkers: 1,
maxWorkers: "50%",
globals: { "ts-jest": { tsconfig: "<rootDir>/tsconfig.spec.json" } },
displayName: "e2e",
testTimeout: 30000,
testTimeout: 60000,
};
4 changes: 1 addition & 3 deletions e2e/tests/lerna-changed/lerna-changed.spec.ts
@@ -1,8 +1,6 @@
import { Fixture } from "../../utils/fixture";
import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils";

jest.setTimeout(60000);

expect.addSnapshotSerializer({
serialize(str: string) {
return normalizeEnvironment(str);
Expand All @@ -12,7 +10,7 @@ expect.addSnapshotSerializer({
},
});

describe("lerna changed", () => {
describe("lerna-changed", () => {
describe("with no prior release tags", () => {
let fixture: Fixture;

Expand Down
4 changes: 1 addition & 3 deletions e2e/tests/lerna-exec/lerna-exec.spec.ts
Expand Up @@ -2,8 +2,6 @@ import { existsSync } from "fs-extra";
import { Fixture } from "../../utils/fixture";
import { normalizeCommandOutput, normalizeEnvironment } from "../../utils/snapshot-serializer-utils";

jest.setTimeout(60000);

expect.addSnapshotSerializer({
serialize(str: string) {
return normalizeCommandOutput(normalizeEnvironment(str));
Expand All @@ -13,7 +11,7 @@ expect.addSnapshotSerializer({
},
});

describe("lerna exec", () => {
describe("lerna-exec", () => {
let fixture: Fixture;

beforeAll(async () => {
Expand Down
2 changes: 1 addition & 1 deletion e2e/tests/lerna-info/lerna-info.spec.ts
Expand Up @@ -19,7 +19,7 @@ expect.addSnapshotSerializer({
},
});

describe("lerna info", () => {
describe("lerna-info", () => {
let fixture: Fixture;

beforeAll(async () => {
Expand Down
2 changes: 1 addition & 1 deletion e2e/tests/lerna-init/lerna-init.spec.ts
@@ -1,6 +1,6 @@
import { Fixture } from "../../utils/fixture";

describe("lerna init", () => {
describe("lerna-init", () => {
let fixture: Fixture;

beforeEach(async () => {
Expand Down
4 changes: 1 addition & 3 deletions e2e/tests/lerna-list/lerna-list-filter-options.spec.ts
@@ -1,8 +1,6 @@
import { Fixture } from "../../utils/fixture";
import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils";

jest.setTimeout(60000);

expect.addSnapshotSerializer({
serialize(str: string) {
return normalizeEnvironment(str);
Expand All @@ -12,7 +10,7 @@ expect.addSnapshotSerializer({
},
});

describe("lerna list", () => {
describe("lerna-list-filter-options", () => {
let fixture: Fixture;

beforeAll(async () => {
Expand Down
4 changes: 1 addition & 3 deletions e2e/tests/lerna-list/lerna-list.spec.ts
@@ -1,8 +1,6 @@
import { Fixture } from "../../utils/fixture";
import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils";

jest.setTimeout(60000);

expect.addSnapshotSerializer({
serialize(str: string) {
return normalizeEnvironment(str);
Expand All @@ -12,7 +10,7 @@ expect.addSnapshotSerializer({
},
});

describe("lerna list", () => {
describe("lerna-list", () => {
let fixture: Fixture;

beforeAll(async () => {
Expand Down
4 changes: 1 addition & 3 deletions e2e/tests/lerna-run/lerna-run.spec.ts
Expand Up @@ -2,8 +2,6 @@ import { existsSync } from "fs-extra";
import { Fixture } from "../../utils/fixture";
import { normalizeCommandOutput, normalizeEnvironment } from "../../utils/snapshot-serializer-utils";

jest.setTimeout(60000);

expect.addSnapshotSerializer({
serialize(str: string) {
return normalizeCommandOutput(normalizeEnvironment(str));
Expand All @@ -13,7 +11,7 @@ expect.addSnapshotSerializer({
},
});

describe("lerna run", () => {
describe("lerna-run", () => {
let fixture: Fixture;

beforeAll(async () => {
Expand Down
70 changes: 67 additions & 3 deletions e2e/tests/lerna-version/conventional-commits.spec.ts
@@ -1,8 +1,6 @@
import { Fixture } from "../../utils/fixture";
import { normalizeCommitSHAs, normalizeEnvironment } from "../../utils/snapshot-serializer-utils";

jest.setTimeout(60000);

expect.addSnapshotSerializer({
serialize(str: string) {
return normalizeCommitSHAs(
Expand All @@ -14,7 +12,7 @@ expect.addSnapshotSerializer({
},
});

describe("lerna version", () => {
describe("lerna-version-conventional-commits", () => {
describe("single package", () => {
let fixture: Fixture;

Expand Down Expand Up @@ -224,6 +222,72 @@ describe("lerna version", () => {
`);
});

it("should correctly generate and promote prereleases when using --conventional-prerelease and --conventional-graduate", async () => {
await fixture.createInitialGitCommit();

await fixture.lerna("create package-a -y");
await fixture.exec("git add --all");
await fixture.exec("git commit -m 'feat: add package-a'");

await fixture.lerna("create package-b -y");
await fixture.exec("git add --all");
await fixture.exec("git commit -m 'feat: add package-b'");

await fixture.exec("git push origin test-main");

// Initial versioning with two packages created
await fixture.lerna("version --conventional-commits -y", { silenceError: true });

// Update and version just package-a
await fixture.exec("echo update_package_a > packages/package-a/new_file.txt");
await fixture.exec("git add --all");
await fixture.exec("git commit -m 'fix: update package-a'");

// Create a prerelease version
const output = await fixture.lerna("version --conventional-commits --conventional-prerelease -y", {
silenceError: true,
});

expect(output.combinedOutput).toMatchInlineSnapshot(`
Changes:
- package-a: 0.1.0 => 0.1.1-alpha.0
lerna notice cli v999.9.9-e2e.0
lerna info current version 0.1.0
lerna info Looking for changed packages since v0.1.0
lerna info getChangelogConfig Successfully resolved preset "conventional-changelog-angular"
lerna info auto-confirmed
lerna info execute Skipping releases
lerna info git Pushing tags...
lerna success version finished
`);

// Promote the prerelease version
const output2 = await fixture.lerna("version --conventional-commits --conventional-graduate -y", {
silenceError: true,
});

expect(output2.combinedOutput).toMatchInlineSnapshot(`
Changes:
- package-a: 0.1.1-alpha.0 => 0.1.1
lerna notice cli v999.9.9-e2e.0
lerna info current version 0.1.1-alpha.0
lerna WARN conventional-graduate all packages
lerna info Graduating all prereleased packages
lerna info Looking for changed packages since v0.1.1-alpha.0
lerna info getChangelogConfig Successfully resolved preset "conventional-changelog-angular"
lerna info auto-confirmed
lerna info execute Skipping releases
lerna info git Pushing tags...
lerna success version finished
`);
});

describe("independent packages", () => {
it("should correctly generate changelog and version information when releasing packages independently", async () => {
await fixture.createInitialGitCommit();
Expand Down
2 changes: 1 addition & 1 deletion e2e/tests/lerna-version/errors.spec.ts
Expand Up @@ -10,7 +10,7 @@ expect.addSnapshotSerializer({
},
});

describe("lerna version", () => {
describe("lerna-version-errors", () => {
let fixture: Fixture;

beforeEach(async () => {
Expand Down
2 changes: 1 addition & 1 deletion e2e/tests/lerna-version/positional-arguments.spec.ts
Expand Up @@ -10,7 +10,7 @@ expect.addSnapshotSerializer({
},
});

describe("lerna version", () => {
describe("lerna-version-positional-arguments", () => {
let fixture: Fixture;

beforeEach(async () => {
Expand Down
10 changes: 9 additions & 1 deletion e2e/utils/fixture.ts
Expand Up @@ -54,7 +54,11 @@ export class Fixture {
initializeGit,
installDependencies,
}: FixtureCreateOptions): Promise<Fixture> {
const fixture = new Fixture(name, packageManager);
const fixture = new Fixture(
// Make the underlying name include the package manager and be globally unique
uniq(`${name}-${packageManager}`),
packageManager
);

fixture.createFixtureRoot();
await fixture.createGitOrigin();
Expand Down Expand Up @@ -314,3 +318,7 @@ function getPublishedVersion(): string {
"latest";
return process.env.PUBLISHED_VERSION;
}

function uniq(prefix: string) {
return `${prefix}-${Math.floor(Math.random() * 10000000)}`;
}
7 changes: 6 additions & 1 deletion e2e/utils/snapshot-serializer-utils.ts
Expand Up @@ -14,12 +14,17 @@ export function normalizeCommitSHAs(str: string): string {
/**
* As well as normalizing paths across environments, we need to strip a CI specific log from the
* output to ensure that snapshots are consistent between local and CI runs.
*
* We also need to replace the unique namespacing of the fixtures based on package manager and a
* random number.
*/
export function normalizeEnvironment(str: string): string {
const normalized = str
.replaceAll(/\/private\/tmp\//g, "/tmp/")
.replaceAll(E2E_ROOT, "/tmp/lerna-e2e")
.replaceAll(/lerna info ci enabled\n/g, "");
.replaceAll(/lerna info ci enabled\n/g, "")
// Replace fixture namespacing
.replaceAll(/-npm-\d+/g, "");

/**
* In the case of generated CHANGELOGs we will currently end up with a variant of E2E_ROOT without
Expand Down

0 comments on commit 041f581

Please sign in to comment.