Skip to content

Commit ba6c104

Browse files
feat(wpUpdate): ✨ standardize composer.json settings - minimum-stability, prefer-stable - skip php extensions (#73)
* set minimum-stability to dev minimum-stability (root-only)# This defines the default behavior for filtering packages by stability. This defaults to stable, so if you rely on a dev package, you should specify it in your file to avoid surprises. All versions of each package are checked for stability, and those that are less stable than the minimum-stability setting will be ignored when resolving your project dependencies. (Note that you can also specify stability requirements on a per-package basis using stability flags in the version constraints that you specify in a require block (see package links for more details). Available options (in order of stability) are dev, alpha, beta, RC, and stable. set prefer-stable true prefer-stable (root-only)# When this is enabled, Composer will prefer more stable packages over unstable ones when finding compatible stable packages is possible. If you require a dev version or only alphas are available for a package, those will still be selected granted that the minimum-stability allows for it. Use "prefer-stable": true to enable. skip ext- dependencies Note: It is important to list PHP extensions your project requires. Not all PHP installations are created equal: some may miss extensions you may consider as standard (such as ext-mysqli which is not installed by default in Fedora/CentOS minimal installation systems). Failure to list required PHP extensions may lead to a bad user experience: Composer will install your package without any errors but it will then fail at run-time. The composer show --platform command lists all PHP extensions available on your system. You may use it to help you compile the list of extensions you use and require. Alternatively you may use third party tools to analyze your project for the list of extensions used. * Update commands/wordpressComposerUpdate.js Co-authored-by: Axel Engström <axel.engstrom@triggerfish.se> * Update commands/wordpressComposerUpdate.js Co-authored-by: Axel Engström <axel.engstrom@triggerfish.se> * Prettified Code! * remove dependencies in functions (make it simpler) --------- Co-authored-by: Axel Engström <axel.engstrom@triggerfish.se> Co-authored-by: chrillep <chrillep@users.noreply.github.com>
1 parent 15ee842 commit ba6c104

File tree

2 files changed

+116
-39
lines changed

2 files changed

+116
-39
lines changed

commands/wordpressComposerUpdate.js

Lines changed: 115 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -10,52 +10,129 @@ import {
1010
writeWarning,
1111
} from "../lib/write.js"
1212

13-
export async function wpUpdate() {
14-
const asyncExecOptions = {
15-
stdio: "inherit",
16-
cwd: process.env.PWD,
13+
/**
14+
* @param {string} minimumStability
15+
* @returns {void}
16+
*/
17+
function setMinimumStability(minimumStability) {
18+
const composerJson = getComposerJson()
19+
20+
if (composerJson["minimum-stability"] !== minimumStability) {
21+
const updatedComposerJson = composerJson
22+
updatedComposerJson["minimum-stability"] = minimumStability
23+
fs.writeFileSync(
24+
`${process.env.PWD}/composer.json`,
25+
JSON.stringify(updatedComposerJson, null, 2),
26+
)
1727
}
28+
}
1829

19-
const parsedPhpVersion = semver.parse(versions.php, {})
20-
const phpVersion = `>=${parsedPhpVersion.major}.${parsedPhpVersion.minor}`
30+
/**
31+
* @param {boolean} preferStable
32+
* @returns {void}
33+
*/
34+
function setPreferredStability(preferStable) {
35+
const composerJson = getComposerJson()
2136

22-
try {
23-
const composerValidateOutput = await asyncExec(
24-
"composer validate --no-check-all --strict --no-interaction --ansi",
25-
asyncExecOptions,
37+
if (composerJson["prefer-stable"] !== preferStable) {
38+
const updatedComposerJson = composerJson
39+
updatedComposerJson["prefer-stable"] = preferStable
40+
fs.writeFileSync(
41+
`${process.env.PWD}/composer.json`,
42+
JSON.stringify(updatedComposerJson, null, 2),
2643
)
27-
console.log(composerValidateOutput.stdout)
44+
}
45+
}
2846

29-
const composerJson = JSON.parse(
30-
fs.readFileSync(process.env.PWD + "/composer.json", "utf8"),
31-
)
47+
/**
48+
* @param {string} phpVersion
49+
* @returns {Promise<void>}
50+
*/
51+
async function updateRequirePackages(phpVersion) {
52+
const composerJson = getComposerJson()
3253

33-
for (const [requiredComposerPackage] of Object.entries(
34-
composerJson.require,
35-
)) {
36-
let requireCommand = ""
37-
if (requiredComposerPackage === "php") {
38-
requireCommand = `composer require "${requiredComposerPackage}:${phpVersion}" --with-all-dependencies --no-interaction --ansi`
39-
}
40-
if (requiredComposerPackage !== "php") {
41-
requireCommand = `composer require ${requiredComposerPackage} --with-all-dependencies --no-interaction --no-progress --ansi`
42-
}
43-
let requiredOutput = await asyncExec(requireCommand, asyncExecOptions)
44-
writeInfo("running: " + requireCommand)
45-
console.log(requiredOutput.stdout || requiredOutput.stderr)
54+
for (const requiredComposerPackage of Object.keys(composerJson.require)) {
55+
let requireCommand = ""
56+
if (requiredComposerPackage.startsWith("ext-")) {
57+
continue
4658
}
47-
48-
for (const [requiredDevComposerPackage] of Object.entries(
49-
composerJson["require-dev"],
50-
)) {
51-
const requireCommand = `composer require ${requiredDevComposerPackage} --dev --with-all-dependencies --no-interaction --no-progress --ansi`
52-
let requiredOutput = await asyncExec(
53-
`composer require ${requiredDevComposerPackage} --dev --with-all-dependencies --no-interaction --no-progress --ansi`,
54-
asyncExecOptions,
55-
)
56-
writeInfo("running: " + requireCommand)
57-
console.log(requiredOutput.stdout || requiredOutput.stderr)
59+
if (requiredComposerPackage === "php") {
60+
requireCommand = `composer require "${requiredComposerPackage}:${phpVersion}" --with-all-dependencies --no-interaction --ansi`
5861
}
62+
if (requiredComposerPackage !== "php") {
63+
requireCommand = `composer require ${requiredComposerPackage} --with-all-dependencies --no-interaction --no-progress --ansi`
64+
}
65+
const requiredOutput = await asyncExec(
66+
requireCommand,
67+
getAsyncExecOptionsForPWD(),
68+
)
69+
writeInfo(`running: ${requireCommand}`)
70+
console.log(requiredOutput.stdout || requiredOutput.stderr)
71+
}
72+
}
73+
74+
/**
75+
* @returns {Promise<void>}
76+
*/
77+
async function updateRequireDevPackages() {
78+
const composerJson = getComposerJson()
79+
80+
for (const requiredDevComposerPackage of Object.keys(
81+
composerJson["require-dev"],
82+
)) {
83+
const requireCommand = `composer require ${requiredDevComposerPackage} --dev --with-all-dependencies --no-interaction --no-progress --ansi`
84+
const requiredOutput = await asyncExec(
85+
`composer require ${requiredDevComposerPackage} --dev --with-all-dependencies --no-interaction --no-progress --ansi`,
86+
getAsyncExecOptionsForPWD(),
87+
)
88+
writeInfo(`running: ${requireCommand}`)
89+
console.log(requiredOutput.stdout || requiredOutput.stderr)
90+
}
91+
}
92+
93+
/**
94+
* @return {Promise<void>}
95+
*/
96+
async function validateComposerFile() {
97+
const composerValidateOutput = await asyncExec(
98+
"composer validate --no-check-all --strict --no-interaction --ansi",
99+
getAsyncExecOptionsForPWD(),
100+
)
101+
console.log(composerValidateOutput.stdout)
102+
}
103+
104+
/**
105+
* @returns {object}
106+
*/
107+
function getComposerJson() {
108+
return JSON.parse(fs.readFileSync(`${process.env.PWD}/composer.json`, "utf8"))
109+
}
110+
111+
/**
112+
* @return {{cwd: string, stdio: string}}
113+
*/
114+
function getAsyncExecOptionsForPWD() {
115+
return {
116+
stdio: "inherit",
117+
cwd: process.env.PWD,
118+
}
119+
}
120+
121+
/**
122+
* @returns {Promise<void>}
123+
*/
124+
export default async function wpUpdate() {
125+
const parsedPhpVersion = semver.parse(versions.php, {})
126+
const phpVersion = `>=${parsedPhpVersion.major}.${parsedPhpVersion.minor}`
127+
const minimumStability = "dev"
128+
const preferStable = true
129+
130+
try {
131+
await validateComposerFile()
132+
setMinimumStability(minimumStability)
133+
setPreferredStability(preferStable)
134+
await updateRequirePackages(phpVersion)
135+
await updateRequireDevPackages()
59136

60137
writeWarning("Don't forget to Check your Major Updates.")
61138
writeSuccess("Composer update completed")

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { createPageComponent } from "./commands/pageComponent.js"
1717
import setupPath from "./commands/path.js"
1818
import { createSendGrid } from "./commands/sendgrid.js"
1919
import writeLisaStatusSummary from "./commands/status.js"
20-
import { wpUpdate } from "./commands/wordpressComposerUpdate.js"
20+
import wpUpdate from "./commands/wordpressComposerUpdate.js"
2121
import { resetConf } from "./lib/conf.js"
2222
import { checkDependencies, checkNodeVersion } from "./lib/dependencies.js"
2323
import exec from "./lib/exec.js"

0 commit comments

Comments
 (0)