Skip to content

Commit 8bbab5a

Browse files
authored
Merge pull request #293 from impresscms-dev/feat/resolve-php-version-from-composer
feat: detect needed PHP version from composer metadata
2 parents 859cfd9 + 6a4da36 commit 8bbab5a

2 files changed

Lines changed: 103 additions & 15 deletions

File tree

bin/resolve-php-version.sh

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
#!/usr/bin/env bash
2+
3+
ENGINE="$1"
4+
5+
has_node() {
6+
command -v node > /dev/null 2>&1
7+
}
8+
9+
get_default_version() {
10+
case "$1" in
11+
"evert/phpdoc-md")
12+
echo "7.4"
13+
;;
14+
"clean/phpdoc-md")
15+
echo "8.1"
16+
;;
17+
*)
18+
echo "ERROR: unknown engine" >&2
19+
return 1
20+
;;
21+
esac
22+
}
23+
24+
get_constraint_from_composer_json() {
25+
if [ ! -f "composer.json" ] || ! has_node; then
26+
return 0
27+
fi
28+
29+
node -e "
30+
const fs = require('fs');
31+
try {
32+
const data = JSON.parse(fs.readFileSync('composer.json', 'utf8'));
33+
const requirePhp = data?.require?.php;
34+
if (typeof requirePhp === 'string' && requirePhp.trim() !== '') {
35+
process.stdout.write(requirePhp.trim());
36+
process.exit(0);
37+
}
38+
const platformPhp = data?.config?.platform?.php;
39+
if (typeof platformPhp === 'string' && platformPhp.trim() !== '') {
40+
process.stdout.write(platformPhp.trim());
41+
}
42+
} catch (_) {}
43+
"
44+
}
45+
46+
get_constraint_from_composer_lock() {
47+
if [ ! -f "composer.lock" ] || ! has_node; then
48+
return 0
49+
fi
50+
51+
node -e "
52+
const fs = require('fs');
53+
try {
54+
const data = JSON.parse(fs.readFileSync('composer.lock', 'utf8'));
55+
const platformPhp = data?.platform?.php;
56+
if (typeof platformPhp === 'string' && platformPhp.trim() !== '') {
57+
process.stdout.write(platformPhp.trim());
58+
process.exit(0);
59+
}
60+
const overriddenPhp = data?.['platform-overrides']?.php;
61+
if (typeof overriddenPhp === 'string' && overriddenPhp.trim() !== '') {
62+
process.stdout.write(overriddenPhp.trim());
63+
}
64+
} catch (_) {}
65+
"
66+
}
67+
68+
normalize_constraint_to_version() {
69+
local php_constraint
70+
php_constraint="$1"
71+
72+
if [[ "$php_constraint" =~ ([0-9]+)\.([0-9]+) ]]; then
73+
local major
74+
local minor
75+
major="${BASH_REMATCH[1]}"
76+
minor="${BASH_REMATCH[2]}"
77+
echo "$((10#$major)).$((10#$minor))"
78+
fi
79+
}
80+
81+
DEFAULT_VERSION=$(get_default_version "$ENGINE") || exit 1
82+
DETECTED_CONSTRAINT=$(get_constraint_from_composer_json)
83+
84+
if [ -z "$DETECTED_CONSTRAINT" ]; then
85+
DETECTED_CONSTRAINT=$(get_constraint_from_composer_lock)
86+
fi
87+
88+
if [ -n "$DETECTED_CONSTRAINT" ]; then
89+
DETECTED_VERSION=$(normalize_constraint_to_version "$DETECTED_CONSTRAINT")
90+
fi
91+
92+
if [ -n "$DETECTED_VERSION" ]; then
93+
echo "$DETECTED_VERSION"
94+
else
95+
echo "$DEFAULT_VERSION"
96+
fi

bin/setup.sh

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,15 @@ NEW_WIKI_CHECKOUT_PATH="${RUNNER_TEMP}/new-wiki-${ACTION_SUFFIX}"
88
TMP_BRANCH_MAP_FILE="${RUNNER_TEMP}/branches-map-${ACTION_SUFFIX}"
99
ACTION_BIN_PATH="${GITHUB_ACTION_PATH}/bin"
1010

11-
if [ "$ENGINE" == "evert/phpdoc-md" ]; then
12-
NEEDED_PHP_VERSION=7.4
13-
elif [ "$ENGINE" == "clean/phpdoc-md" ]; then
14-
NEEDED_PHP_VERSION=8.1
15-
else
16-
echo 'ERROR: unknown engine'
11+
NEEDED_PHP_VERSION=$(bash "$ACTION_BIN_PATH/resolve-php-version.sh" "$ENGINE") || exit 1
1712

18-
exit 1
19-
fi;
20-
21-
echo "OLD_WIKI_CHECKOUT_PATH=$OLD_WIKI_CHECKOUT_PATH" >> $GITHUB_ENV
22-
echo "NEW_WIKI_CHECKOUT_PATH=$NEW_WIKI_CHECKOUT_PATH" >> $GITHUB_ENV
23-
echo "NEEDED_PHP_VERSION=$NEEDED_PHP_VERSION" >> $GITHUB_ENV
24-
echo "ACTION_BIN_PATH=$ACTION_BIN_PATH" >> $GITHUB_ENV
25-
echo "TMP_BRANCH_MAP_FILE=$TMP_BRANCH_MAP_FILE" >> $GITHUB_ENV
13+
echo "OLD_WIKI_CHECKOUT_PATH=$OLD_WIKI_CHECKOUT_PATH" >> "$GITHUB_ENV"
14+
echo "NEW_WIKI_CHECKOUT_PATH=$NEW_WIKI_CHECKOUT_PATH" >> "$GITHUB_ENV"
15+
echo "NEEDED_PHP_VERSION=$NEEDED_PHP_VERSION" >> "$GITHUB_ENV"
16+
echo "ACTION_BIN_PATH=$ACTION_BIN_PATH" >> "$GITHUB_ENV"
17+
echo "TMP_BRANCH_MAP_FILE=$TMP_BRANCH_MAP_FILE" >> "$GITHUB_ENV"
2618

2719
rm -rf "$OLD_WIKI_CHECKOUT_PATH" || true
2820
rm -rf "$NEW_WIKI_CHECKOUT_PATH" || true
2921

30-
mkdir -p "$NEW_WIKI_CHECKOUT_PATH"
22+
mkdir -p "$NEW_WIKI_CHECKOUT_PATH"

0 commit comments

Comments
 (0)