mirror of
https://github.com/graycoreio/github-actions-magento2.git
synced 2026-06-08 19:46:41 +00:00
8d00f8149a
Adds an opt-in `stamp` mode that caches the extracted `vendor/` directory in addition to the Composer download cache. On a warm hit, `composer install` is effectively a no-op and shaves 2–5 minutes off a full Magento install.
117 lines
4.6 KiB
Bash
117 lines
4.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SCRIPT="$SCRIPT_DIR/compute-cache-keys.sh"
|
|
SCRIPT_STAMP="$SCRIPT_DIR/compute-stamp-paths.sh"
|
|
LOCK_HASH=$(sha256sum "$SCRIPT_DIR/fixtures/composer.lock" | cut -d' ' -f1)
|
|
PASS=0
|
|
FAIL=0
|
|
|
|
assert_eq() {
|
|
local label="$1" expected="$2" actual="$3"
|
|
if [ "$expected" = "$actual" ]; then
|
|
echo "PASS: $label"
|
|
PASS=$((PASS + 1))
|
|
else
|
|
echo "FAIL: $label"
|
|
echo " expected: $expected"
|
|
echo " actual: $actual"
|
|
FAIL=$((FAIL + 1))
|
|
fi
|
|
}
|
|
|
|
field() {
|
|
echo "$1" | grep "^${2}=" | cut -d= -f2-
|
|
}
|
|
|
|
# Extension mode: no project resolved, mode derived as "extension", no lock suffix
|
|
OUT=$(bash "$SCRIPT" "_mageos" "Linux" "8.3.0" "2.2.6" "" "")
|
|
assert_eq "extension: download-key" \
|
|
"composer | v5.8 | Linux | extension | _mageos | 2.2.6 | 8.3.0" \
|
|
"$(field "$OUT" download-key)"
|
|
assert_eq "extension: download-restore-key" \
|
|
"composer | v5.8 | Linux | extension | _mageos | 2.2.6 | 8.3.0" \
|
|
"$(field "$OUT" download-restore-key)"
|
|
assert_eq "extension: stamp-key" \
|
|
"composer | stamp | v5.8 | Linux | extension | _mageos | 2.2.6 | 8.3.0" \
|
|
"$(field "$OUT" stamp-key)"
|
|
|
|
# Store mode: project resolved, mode derived as "store", lock hash appended (restore-key drops lock for prefix match)
|
|
OUT=$(bash "$SCRIPT" "_mageos" "Linux" "8.3.0" "2.2.6" "magento/project-community-edition" "$LOCK_HASH")
|
|
assert_eq "store: download-key" \
|
|
"composer | v5.8 | Linux | store | _mageos | 2.2.6 | 8.3.0 | $LOCK_HASH" \
|
|
"$(field "$OUT" download-key)"
|
|
assert_eq "store: download-restore-key" \
|
|
"composer | v5.8 | Linux | store | _mageos | 2.2.6 | 8.3.0" \
|
|
"$(field "$OUT" download-restore-key)"
|
|
assert_eq "store: stamp-key" \
|
|
"composer | stamp | v5.8 | Linux | store | _mageos | 2.2.6 | 8.3.0 | $LOCK_HASH" \
|
|
"$(field "$OUT" stamp-key)"
|
|
|
|
# Store mode without composer.lock (e.g. stamp=false on a store before `composer install`):
|
|
# lock_hash is empty, so keys must not carry a trailing " | " with an empty hash slot.
|
|
OUT=$(bash "$SCRIPT" "_mageos" "Linux" "8.3.0" "2.2.6" "magento/project-community-edition" "")
|
|
assert_eq "store no-lock: download-key" \
|
|
"composer | v5.8 | Linux | store | _mageos | 2.2.6 | 8.3.0" \
|
|
"$(field "$OUT" download-key)"
|
|
assert_eq "store no-lock: download-restore-key" \
|
|
"composer | v5.8 | Linux | store | _mageos | 2.2.6 | 8.3.0" \
|
|
"$(field "$OUT" download-restore-key)"
|
|
assert_eq "store no-lock: stamp-key" \
|
|
"composer | stamp | v5.8 | Linux | store | _mageos | 2.2.6 | 8.3.0" \
|
|
"$(field "$OUT" stamp-key)"
|
|
|
|
# Custom composer_cache_key, no project resolved
|
|
OUT=$(bash "$SCRIPT" "custom-v2" "Linux" "8.1.5" "2.4.2" "" "")
|
|
assert_eq "custom key: download-key" \
|
|
"composer | v5.8 | Linux | extension | custom-v2 | 2.4.2 | 8.1.5" \
|
|
"$(field "$OUT" download-key)"
|
|
assert_eq "custom key: download-restore-key" \
|
|
"composer | v5.8 | Linux | extension | custom-v2 | 2.4.2 | 8.1.5" \
|
|
"$(field "$OUT" download-restore-key)"
|
|
assert_eq "custom key: stamp-key" \
|
|
"composer | stamp | v5.8 | Linux | extension | custom-v2 | 2.4.2 | 8.1.5" \
|
|
"$(field "$OUT" stamp-key)"
|
|
|
|
# Stamp paths: no excludes — base paths only, with magento2-base always excluded
|
|
OUT=$(bash "$SCRIPT_STAMP" "/work" "")
|
|
EXPECTED="/work/vendor/**
|
|
!/work/vendor/**/
|
|
!/work/vendor/magento/magento2-base
|
|
!/work/vendor/magento/magento2-base/**
|
|
!/work/vendor/mage-os/magento2-base
|
|
!/work/vendor/mage-os/magento2-base/**"
|
|
assert_eq "stamp paths: no excludes" "$EXPECTED" "$OUT"
|
|
|
|
# Stamp paths: single exclude appended after the always-excluded base entries
|
|
OUT=$(bash "$SCRIPT_STAMP" "/work" "magento/module-foo")
|
|
EXPECTED="/work/vendor/**
|
|
!/work/vendor/**/
|
|
!/work/vendor/magento/magento2-base
|
|
!/work/vendor/magento/magento2-base/**
|
|
!/work/vendor/mage-os/magento2-base
|
|
!/work/vendor/mage-os/magento2-base/**
|
|
!/work/vendor/magento/module-foo
|
|
!/work/vendor/magento/module-foo/**"
|
|
assert_eq "stamp paths: single exclude" "$EXPECTED" "$OUT"
|
|
|
|
# Stamp paths: multiple excludes, with whitespace and blank lines tolerated
|
|
OUT=$(bash "$SCRIPT_STAMP" "/work" "$(printf 'magento/module-foo\n magento/module-bar \n\nvendor/pkg-baz\n')")
|
|
EXPECTED="/work/vendor/**
|
|
!/work/vendor/**/
|
|
!/work/vendor/magento/magento2-base
|
|
!/work/vendor/magento/magento2-base/**
|
|
!/work/vendor/mage-os/magento2-base
|
|
!/work/vendor/mage-os/magento2-base/**
|
|
!/work/vendor/magento/module-foo
|
|
!/work/vendor/magento/module-foo/**
|
|
!/work/vendor/magento/module-bar
|
|
!/work/vendor/magento/module-bar/**
|
|
!/work/vendor/vendor/pkg-baz
|
|
!/work/vendor/vendor/pkg-baz/**"
|
|
assert_eq "stamp paths: multiple excludes with whitespace and blank lines" "$EXPECTED" "$OUT"
|
|
|
|
echo ""
|
|
echo "$PASS passed, $FAIL failed"
|
|
[ "$FAIL" -eq 0 ]
|