Skip to content

Commit 00ae8d1

Browse files
authored
feat: set 'version' of composer.json in RootComposerUpdatePackages (#2201)
* feat: set 'version' of composer.json in RootComposerUpdatePackages * remove adding 'version' to versionsMap for php strategy * merge main * fix test * fix lint * add tests for updating version in composer updater * fixlint
1 parent 32a972a commit 00ae8d1

7 files changed

+52
-23
lines changed

__snapshots__/php-composer-update-packages.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
exports['PHPComposer updateContent does not update a version when version is the same 1'] = `
2-
{"version":"1.0.0","replace":{"version":"1.0.0"}}
2+
{"version":"1.0.0","replace":{"my/package":"1.0.0"}}
33
`
44

55
exports['PHPComposer updateContent update all versions in composer.json 1'] = `
6-
{"version":"1.0.0","replace":{"version":"1.0.0"}}
6+
{"version":"1.0.0","replace":{"my/package":"1.0.0"}}
77
`
88

9-
exports['PHPComposer updateContent update replace version in composer.json when version is missing 1'] = `
10-
{"replace":{"version":"1.0.0"}}
9+
exports['PHPComposer updateContent update replace package in composer.json when package is missing 1'] = `
10+
{"replace":{"my/package":"1.0.0"}}
1111
`
1212

13-
exports['PHPComposer updateContent update replace version in composer.json when version is present 1'] = `
14-
{"replace":{"version":"1.0.0"}}
13+
exports['PHPComposer updateContent update replace package in composer.json when package is set in version map 1'] = `
14+
{"replace":{"my/package":"1.0.0"}}
1515
`
1616

1717
exports['PHPComposer updateContent update root version in composer.json 1'] = `

__snapshots__/root-composer-update-packages.js

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
exports['composer-update-package.json updateContent does not update version in composer if it does not exist 1'] = `
2+
{}
3+
`
4+
15
exports['composer-update-package.json updateContent updates all versions in root composer file 1'] = `
26
{
37
"name": "google/cloud",
@@ -256,3 +260,7 @@ exports['composer-update-package.json updateContent updates all versions in root
256260
}
257261
258262
`
263+
264+
exports['composer-update-package.json updateContent updates version in composer if it exists 1'] = `
265+
{"version":"1.0.0"}
266+
`

src/strategies/php-yoshi.ts

-3
Original file line numberDiff line numberDiff line change
@@ -172,14 +172,11 @@ export class PHPYoshi extends BaseStrategy {
172172
version,
173173
}),
174174
});
175-
const directoryVersion: VersionsMap = new Map();
176-
directoryVersion.set('version', version);
177175
updates.push({
178176
path: this.addPath(`${directory}/composer.json`),
179177
createIfMissing: false,
180178
updater: new RootComposerUpdatePackages({
181179
version,
182-
versionsMap: directoryVersion,
183180
}),
184181
});
185182
if (componentInfo.composer.extra?.component?.entry) {

src/strategies/php.ts

-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ export class PHP extends BaseStrategy {
4747
const updates: Update[] = [];
4848
const version = options.newVersion;
4949
const versionsMap: VersionsMap = new Map();
50-
versionsMap.set('version', version);
5150

5251
updates.push({
5352
path: this.addPath(this.changelogPath),

src/updaters/php/root-composer-update-packages.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,17 @@ export class RootComposerUpdatePackages extends DefaultUpdater {
2626
* @returns {string} The updated content
2727
*/
2828
updateContent(content: string, logger: Logger = defaultLogger): string {
29-
if (!this.versionsMap || this.versionsMap.size === 0) {
29+
if (!this.version && (!this.versionsMap || this.versionsMap.size === 0)) {
3030
logger.info('no updates necessary');
3131
return content;
3232
}
3333
const parsed = JSON.parse(content);
34+
if (parsed['version']) {
35+
const fromVersion: string = parsed['version'];
36+
const toVersion = this.version.toString() || '1.0.0';
37+
parsed['version'] = toVersion;
38+
logger.info(`updating "version" from ${fromVersion} to ${toVersion}`);
39+
}
3440
if (this.versionsMap) {
3541
for (const [key, version] of this.versionsMap.entries()) {
3642
const toVersion = version.toString() || '1.0.0';

test/updaters/php-composer-update-packages.ts

+14-12
Original file line numberDiff line numberDiff line change
@@ -21,40 +21,42 @@ import {Version, VersionsMap} from '../../src/version';
2121
describe('PHPComposer', () => {
2222
describe('updateContent', () => {
2323
it('does not update a version when version is the same', async () => {
24-
const oldContent = '{"version":"1.0.0","replace":{"version":"1.0.0"}}';
24+
const oldContent = '{"version":"1.0.0","replace":{"my/package":"1.0.0"}}';
2525

2626
const version = Version.parse('1.0.0');
2727

2828
const versionsMap: VersionsMap = new Map();
2929

30+
versionsMap.set('my/package', version);
31+
3032
const newContent = new RootComposerUpdatePackages({
3133
version,
3234
versionsMap,
3335
}).updateContent(oldContent);
3436

3537
expect(newContent).to.eq(
36-
'{"version":"1.0.0","replace":{"version":"1.0.0"}}'
38+
'{"version":"1.0.0","replace":{"my/package":"1.0.0"}}'
3739
);
3840

3941
snapshot(newContent);
4042
});
4143

4244
it('update all versions in composer.json', async () => {
43-
const oldContent = '{"version":"0.0.0","replace":{"version":"0.0.0"}}';
45+
const oldContent = '{"version":"0.0.0","replace":{"my/package":"0.0.0"}}';
4446

4547
const version = Version.parse('1.0.0');
4648

4749
const versionsMap: VersionsMap = new Map();
4850

49-
versionsMap.set('version', version);
51+
versionsMap.set('my/package', version);
5052

5153
const newContent = new RootComposerUpdatePackages({
5254
version,
5355
versionsMap,
5456
}).updateContent(oldContent);
5557

5658
expect(newContent).to.eq(
57-
'{"version":"1.0.0","replace":{"version":"1.0.0"}}'
59+
'{"version":"1.0.0","replace":{"my/package":"1.0.0"}}'
5860
);
5961

6062
snapshot(newContent);
@@ -79,40 +81,40 @@ describe('PHPComposer', () => {
7981
snapshot(newContent);
8082
});
8183

82-
it('update replace version in composer.json when version is present', async () => {
83-
const oldContent = '{"replace":{"version":"0.0.0"}}';
84+
it('update replace package in composer.json when package is set in version map', async () => {
85+
const oldContent = '{"replace":{"my/package":"0.0.0"}}';
8486

8587
const version = Version.parse('1.0.0');
8688

8789
const versionsMap: VersionsMap = new Map();
8890

89-
versionsMap.set('version', version);
91+
versionsMap.set('my/package', version);
9092

9193
const newContent = new RootComposerUpdatePackages({
9294
version,
9395
versionsMap,
9496
}).updateContent(oldContent);
9597

96-
expect(newContent).to.eq('{"replace":{"version":"1.0.0"}}');
98+
expect(newContent).to.eq('{"replace":{"my/package":"1.0.0"}}');
9799

98100
snapshot(newContent);
99101
});
100102

101-
it('update replace version in composer.json when version is missing', async () => {
103+
it('update replace package in composer.json when package is missing', async () => {
102104
const oldContent = '{"replace":{}}';
103105

104106
const version = Version.parse('1.0.0');
105107

106108
const versionsMap: VersionsMap = new Map();
107109

108-
versionsMap.set('version', version);
110+
versionsMap.set('my/package', version);
109111

110112
const newContent = new RootComposerUpdatePackages({
111113
version,
112114
versionsMap,
113115
}).updateContent(oldContent);
114116

115-
expect(newContent).to.eq('{"replace":{"version":"1.0.0"}}');
117+
expect(newContent).to.eq('{"replace":{"my/package":"1.0.0"}}');
116118

117119
snapshot(newContent);
118120
});

test/updaters/root-composer-update-packages.ts

+17
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {readFileSync} from 'fs';
1616
import {resolve} from 'path';
1717
import * as snapshot from 'snap-shot-it';
1818
import {describe, it} from 'mocha';
19+
import {expect} from 'chai';
1920
import {RootComposerUpdatePackages} from '../../src/updaters/php/root-composer-update-packages';
2021
import {Version} from '../../src/version';
2122

@@ -38,5 +39,21 @@ describe('composer-update-package.json', () => {
3839
const newContent = composer.updateContent(oldContent);
3940
snapshot(newContent);
4041
});
42+
it('updates version in composer if it exists', async () => {
43+
const composer = new RootComposerUpdatePackages({
44+
version: Version.parse('1.0.0'),
45+
});
46+
const newContent = composer.updateContent('{"version": "0.8.0"}');
47+
expect(newContent).to.eql('{"version":"1.0.0"}');
48+
snapshot(newContent);
49+
});
50+
it('does not update version in composer if it does not exist', async () => {
51+
const composer = new RootComposerUpdatePackages({
52+
version: Version.parse('1.0.0'),
53+
});
54+
const newContent = composer.updateContent('{}');
55+
expect(newContent).to.eql('{}');
56+
snapshot(newContent);
57+
});
4158
});
4259
});

0 commit comments

Comments
 (0)