mirror of
https://github.com/graycoreio/github-actions-magento2.git
synced 2026-06-13 13:14:53 +00:00
Compare commits
96 Commits
v5.1.0
...
v8.0.0-rc.2
| Author | SHA1 | Date | |
|---|---|---|---|
| 8c4fefd979 | |||
| d1a31d260d | |||
| d37f001ab6 | |||
| c5221f0d68 | |||
| 1fcb3618c0 | |||
| 4fc491bc1a | |||
| 5df6c1a0bd | |||
| ff5f76339b | |||
| 0df8ac6e57 | |||
| ef06f4566b | |||
| 4c9a28930b | |||
| 22627e1000 | |||
| b0131f0fa0 | |||
| 23c77e10c8 | |||
| 5fb823da94 | |||
| 38423ddb9b | |||
| d7959941c6 | |||
| 74f1e3ec39 | |||
| d38c375b83 | |||
| dcbd219ac1 | |||
| 761188e82f | |||
| aa1b545010 | |||
| 45d1df0162 | |||
| baef64bc0a | |||
| 59f87b6b2e | |||
| 0cbc4297b1 | |||
| c78e635688 | |||
| 5c04c25fe8 | |||
| 8d00f8149a | |||
| 2d7238de14 | |||
| 44e7c34892 | |||
| c53607cca8 | |||
| a729f8b2fd | |||
| f6a7355bd9 | |||
| 307f527997 | |||
| 85b7909eb1 | |||
| 837f1da96b | |||
| d311df7966 | |||
| a7e327d44f | |||
| c786530c3e | |||
| 483ec3ac17 | |||
| a1c6246c78 | |||
| 87989bb250 | |||
| bdb9528f8c | |||
| 6a520d49fd | |||
| 212f9a8e86 | |||
| 0808fab9c3 | |||
| bbd830745f | |||
| e31f6f656a | |||
| 198bc1072a | |||
| 3c0a90f92b | |||
| c115395583 | |||
| 20cbf5d06a | |||
| ff6279a518 | |||
| b74bdcde41 | |||
| 1c312fe567 | |||
| 62d2aec976 | |||
| 771dd05439 | |||
| f8036173e1 | |||
| bbecc7f5f9 | |||
| db1267a94b | |||
| 90babb16bf | |||
| 93c0b480e2 | |||
| 28f9e498aa | |||
| 4001e8118b | |||
| b90317db60 | |||
| ef5e69859c | |||
| 1f4db0036c | |||
| e1a8a81488 | |||
| 3fad3a8995 | |||
| f8eff3c183 | |||
| ac4d16919b | |||
| 5009cbf6da | |||
| 4a0dcce0c9 | |||
| 5989e53c34 | |||
| 7a3a4fdb6d | |||
| d4f4f9f468 | |||
| 702ab13a0a | |||
| 070b7b9901 | |||
| 7e828eef67 | |||
| dd543ffdea | |||
| a2a45eb2fe | |||
| fa5620fc05 | |||
| d80befbe9b | |||
| d5c744e155 | |||
| 953de845eb | |||
| de415eaff5 | |||
| 8f3c6eb927 | |||
| 98923b24c5 | |||
| a92fe04503 | |||
| b510ea21e3 | |||
| 7799f0f9bf | |||
| 2ef157ef8a | |||
| 7e40a62efa | |||
| b4526dbb52 | |||
| e6be791eed |
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
name: grill-me
|
||||||
|
description: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me".
|
||||||
|
---
|
||||||
|
|
||||||
|
Interview me relentlessly about every aspect of this plan until
|
||||||
|
we reach a shared understanding. Walk down each branch of the design
|
||||||
|
tree resolving dependencies between decisions one by one.
|
||||||
|
|
||||||
|
If a question can be answered by exploring the codebase, explore
|
||||||
|
the codebase instead.
|
||||||
|
|
||||||
|
For each question, provide your recommended answer.
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
---
|
||||||
|
name: new-versions
|
||||||
|
description: Check magento/magento2 for newly published tags and add any missing entries to supported-version/src/versions/magento-open-source/{individual,composite}.json using Adobe's system requirements docs. Use when user wants to refresh Magento Open Source version data, mentions "new versions", or asks to check for new Magento releases.
|
||||||
|
---
|
||||||
|
|
||||||
|
Refresh the Magento Open Source version data in this repo by adding any tags that have shipped recently but are not yet recorded.
|
||||||
|
|
||||||
|
## 1. Find new tags
|
||||||
|
|
||||||
|
List tags from `magento/magento2` via the GitHub API:
|
||||||
|
|
||||||
|
```
|
||||||
|
gh api -X GET repos/magento/magento2/tags --paginate -q '.[].name' | head -50
|
||||||
|
```
|
||||||
|
|
||||||
|
Focus on tags from the last several weeks. Tags look like `2.4.8-p4`, `2.4.7-p9`, etc. Ignore preview/RC tags unless the user asks otherwise.
|
||||||
|
|
||||||
|
For each candidate tag, get its publish date (needed for the `release` field):
|
||||||
|
|
||||||
|
```
|
||||||
|
gh api repos/magento/magento2/git/refs/tags/<tag> -q '.object.url' | xargs -I{} gh api {} -q '.tagger.date // .author.date'
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Diff against the JSON files
|
||||||
|
|
||||||
|
The two files to check:
|
||||||
|
|
||||||
|
- `supported-version/src/versions/magento-open-source/individual.json` — one entry per concrete tag, keyed `magento/project-community-edition:<tag>`
|
||||||
|
- `supported-version/src/versions/magento-open-source/composite.json` — range entries keyed `magento/project-community-edition:>=X.Y.Z <X.Y.(Z+1)`, plus the rolling entries `magento/project-community-edition` and `magento/project-community-edition:next`
|
||||||
|
|
||||||
|
A tag is "missing" if the `magento/project-community-edition:<tag>` key is absent from `individual.json`.
|
||||||
|
|
||||||
|
## 3. Fetch system requirements
|
||||||
|
|
||||||
|
For the minor version that the missing tag belongs to (e.g. `2.4.8` for `2.4.8-p4`), pull Adobe's system requirements page:
|
||||||
|
|
||||||
|
- https://experienceleague.adobe.com/en/docs/commerce-operations/installation-guide/system-requirements
|
||||||
|
|
||||||
|
Use `WebFetch` and extract: PHP, Composer, MySQL/MariaDB, Elasticsearch/OpenSearch, RabbitMQ, Redis/Valkey, Varnish, Nginx, supported OS. If a component (e.g. `elasticsearch`) is no longer listed for that minor version, omit the field from the new entry — do not carry it over from the previous patch. Compare the new entry against the most recent prior patch in `individual.json` to sanity-check which fields should be present.
|
||||||
|
|
||||||
|
For each service field, pin the **latest currently-published tag within the line Adobe lists**, derived from Docker Hub — not whatever the prior patch happened to carry.
|
||||||
|
|
||||||
|
- Adobe lists a major+minor (e.g. "Elasticsearch 8.19"): use the highest published `8.19.x` tag.
|
||||||
|
- Adobe lists only a major (e.g. "Elasticsearch 8"): use the highest published `8.y.z` across all `8.x` minors (today: `8.19.15`).
|
||||||
|
- Adobe lists multiple majors/lines (e.g. "OpenSearch 2.19, 3"): pick the newest line (`3`).
|
||||||
|
|
||||||
|
Query Docker Hub for the latest patch:
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s "https://hub.docker.com/v2/repositories/library/elasticsearch/tags?page_size=100&name=8.19" \
|
||||||
|
| python3 -c "import json,sys; d=json.load(sys.stdin); tags=[t['name'] for t in d['results'] if t['name'].startswith('8.19.') and t['name'].split('.')[2].isdigit()]; print(max(tags, key=lambda t:[int(x) for x in t.split('.')]))"
|
||||||
|
```
|
||||||
|
|
||||||
|
For OpenSearch swap `library/elasticsearch` → `opensearchproject/opensearch`. Services already using rolling minor tags (`redis:7.2`, `varnish:7.7`, `nginx:1.28`, `rabbitmq:4.1-management`) are already "latest of the line" and need no bump.
|
||||||
|
|
||||||
|
Also fetch Adobe's lifecycle policy page for the line's EOL date:
|
||||||
|
|
||||||
|
- https://experienceleague.adobe.com/en/docs/commerce-operations/release/planning/lifecycle-policy
|
||||||
|
|
||||||
|
## 4. Write the entries
|
||||||
|
|
||||||
|
### individual.json
|
||||||
|
|
||||||
|
Append the new patch entry preserving file ordering (group by minor version, ascending patch number). Schema:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"magento/project-community-edition:<tag>": {
|
||||||
|
"magento": "magento/project-community-edition:<tag>",
|
||||||
|
"php": <number>,
|
||||||
|
"composer": "<string>",
|
||||||
|
"mysql": "mysql:<ver>" | "mariadb:<ver>",
|
||||||
|
"opensearch": "opensearchproject/opensearch:<ver>",
|
||||||
|
"elasticsearch": "elasticsearch:<ver>",
|
||||||
|
"rabbitmq": "rabbitmq:<ver>-management",
|
||||||
|
"redis": "redis:<ver>",
|
||||||
|
"valkey": "valkey/valkey:<ver>",
|
||||||
|
"varnish": "varnish:<ver>",
|
||||||
|
"nginx": "nginx:<ver>",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "<ISO8601 from tag date>",
|
||||||
|
"eol": "<ISO8601 — see EOL rules below>"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### EOL rules
|
||||||
|
|
||||||
|
- The newest patch on a line gets `eol` set to the line's EOL date from Adobe's lifecycle policy page.
|
||||||
|
- When a newer patch on the same line releases, overwrite the previous patch's `eol` with the newer patch's `release` date. So when adding a new patch, also update the prior patch's `eol` accordingly.
|
||||||
|
- Net effect: at any moment only the latest patch on a line carries the line's lifecycle EOL; every older patch's `eol` equals the release date of its successor.
|
||||||
|
|
||||||
|
### composite.json
|
||||||
|
|
||||||
|
The composite range entry for the affected minor (e.g. `magento/project-community-edition:>=2.4.8 <2.4.9`) should reflect the highest patch's stack. Update its fields to match the new entry if the new tag is now the highest in that minor.
|
||||||
|
|
||||||
|
The rolling entries `magento/project-community-edition` and `magento/project-community-edition:next` must always mirror the system requirements of the highest tag across all minors (i.e. the absolute newest patch you just added, if it is the newest overall). Update PHP, Composer, MySQL, OpenSearch, RabbitMQ, Valkey, Varnish, Nginx, OS, release, eol on both. The `magento` field on `:next` stays `magento/project-community-edition:@alpha`.
|
||||||
|
|
||||||
|
## 5. Verify
|
||||||
|
|
||||||
|
After edits:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd supported-version && npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
All tests must pass before declaring done.
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Do not remove existing entries — only add or update.
|
||||||
|
- Use the tag's actual publish timestamp from the GitHub API for `release`, not today's date.
|
||||||
|
- If Adobe's docs are ambiguous for a given component, ask the user before guessing.
|
||||||
|
- Preserve the file's existing key ordering and indentation (4 spaces).
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
name: Cache Magento Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
paths:
|
||||||
|
- "cache-magento/**"
|
||||||
|
- ".github/workflows/_internal-cache-magento.yaml"
|
||||||
|
- "!**/*.md"
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
paths:
|
||||||
|
- "cache-magento/**"
|
||||||
|
- ".github/workflows/_internal-cache-magento.yaml"
|
||||||
|
- "!**/*.md"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
unit:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- run: bash cache-magento/test.sh
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
name: Check Store Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch: {}
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/_internal-check-store.yaml"
|
||||||
|
- ".github/workflows/check-store.yaml"
|
||||||
|
- "supported-version/**"
|
||||||
|
- "get-magento-version/**"
|
||||||
|
- "!**/*.md"
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/_internal-check-store.yaml"
|
||||||
|
- ".github/workflows/check-store.yaml"
|
||||||
|
- "supported-version/**"
|
||||||
|
- "get-magento-version/**"
|
||||||
|
- "!**/*.md"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compute_matrix:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- uses: ./supported-version
|
||||||
|
id: supported-version
|
||||||
|
with:
|
||||||
|
kind: currently-supported
|
||||||
|
|
||||||
|
prepare-fixture:
|
||||||
|
needs: compute_matrix
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
|
||||||
|
fail-fast: false
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- uses: ./setup-magento
|
||||||
|
id: setup-magento
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v${{ matrix.composer }}
|
||||||
|
magento_version: ${{ matrix.magento }}
|
||||||
|
mode: extension
|
||||||
|
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- run: composer update --no-install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- uses: ./cache-magento
|
||||||
|
with:
|
||||||
|
composer_cache_key: ${{ matrix.magento }}
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
stamp: true
|
||||||
|
|
||||||
|
- name: Inspect stamp cache contents
|
||||||
|
if: always()
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
run: |
|
||||||
|
echo "=== top-level vendor/magento ==="
|
||||||
|
ls vendor/magento/ 2>/dev/null | head -30 || echo "(no vendor/magento)"
|
||||||
|
echo
|
||||||
|
echo "=== magento2-base presence ==="
|
||||||
|
if [ -d vendor/magento/magento2-base ]; then
|
||||||
|
echo "PRESENT — file count: $(find vendor/magento/magento2-base -type f | wc -l)"
|
||||||
|
else
|
||||||
|
echo "ABSENT (negation worked)"
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
echo "=== installed.json mentions magento/magento2-base ==="
|
||||||
|
grep -c '"name": "magento/magento2-base"' vendor/composer/installed.json 2>/dev/null || echo 0
|
||||||
|
|
||||||
|
- run: composer install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: store-fixture-${{ matrix.version }}
|
||||||
|
path: |
|
||||||
|
${{ steps.setup-magento.outputs.path }}
|
||||||
|
!${{ steps.setup-magento.outputs.path }}/vendor
|
||||||
|
retention-days: 3
|
||||||
|
|
||||||
|
check-store:
|
||||||
|
needs: [compute_matrix, prepare-fixture]
|
||||||
|
strategy:
|
||||||
|
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
|
||||||
|
fail-fast: false
|
||||||
|
uses: ./.github/workflows/check-store.yaml
|
||||||
|
with:
|
||||||
|
store_artifact_name: store-fixture-${{ matrix.version }}
|
||||||
|
path: "_ghamagento/"
|
||||||
|
composer_cache_key: ${{ matrix.magento }}
|
||||||
|
stamp: true
|
||||||
|
secrets:
|
||||||
|
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
||||||
@@ -8,7 +8,7 @@ on:
|
|||||||
- "_test/demo-package/**"
|
- "_test/demo-package/**"
|
||||||
- ".github/workflows/_internal-coding-standard.yaml"
|
- ".github/workflows/_internal-coding-standard.yaml"
|
||||||
- "coding-standard/**"
|
- "coding-standard/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
@@ -16,7 +16,7 @@ on:
|
|||||||
- "_test/demo-package/**"
|
- "_test/demo-package/**"
|
||||||
- ".github/workflows/_internal-coding-standard.yaml"
|
- ".github/workflows/_internal-coding-standard.yaml"
|
||||||
- "coding-standard/**"
|
- "coding-standard/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
version:
|
version:
|
||||||
@@ -32,6 +32,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
compute_matrix:
|
compute_matrix:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
@@ -51,9 +52,14 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v${{ matrix.composer }}
|
||||||
|
coverage: none
|
||||||
|
|
||||||
- uses: './coding-standard'
|
- uses: './coding-standard'
|
||||||
with:
|
with:
|
||||||
version: ${{ github.event.inputs.version || '*' }}
|
version: ${{ github.event.inputs.version || '*' }}
|
||||||
path: ${{ github.event.inputs.path || '_test/demo-package' }}
|
path: ${{ github.event.inputs.path || '_test/demo-package' }}
|
||||||
composer_version: ${{ matrix.composer }}
|
|
||||||
php_version: ${{ matrix.php }}
|
|
||||||
@@ -8,17 +8,18 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- ".github/workflows/_internal-get-composer-version.yaml"
|
- ".github/workflows/_internal-get-composer-version.yaml"
|
||||||
- "get-composer-version/**"
|
- "get-composer-version/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
paths:
|
paths:
|
||||||
- ".github/workflows/_internal-get-composer-version.yaml"
|
- ".github/workflows/_internal-get-composer-version.yaml"
|
||||||
- "get-composer-version/**"
|
- "get-composer-version/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-composer-version:
|
get-composer-version:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|||||||
@@ -7,17 +7,18 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- ".github/workflows/_internal-get-magento-version.yaml"
|
- ".github/workflows/_internal-get-magento-version.yaml"
|
||||||
- "get-magento-version/**"
|
- "get-magento-version/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
paths:
|
paths:
|
||||||
- ".github/workflows/_internal-get-magento-version.yaml"
|
- ".github/workflows/_internal-get-magento-version.yaml"
|
||||||
- "get-magento-version/**"
|
- "get-magento-version/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-magento-version:
|
get-magento-version:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
@@ -30,14 +31,42 @@ jobs:
|
|||||||
- run: composer create-project --repository-url="https://mirror.mage-os.org" "magento/project-community-edition:2.4.5-p1" ../magento2 --no-install
|
- run: composer create-project --repository-url="https://mirror.mage-os.org" "magento/project-community-edition:2.4.5-p1" ../magento2 --no-install
|
||||||
shell: bash
|
shell: bash
|
||||||
name: Create Magento ${{ matrix.magento }} Project
|
name: Create Magento ${{ matrix.magento }} Project
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
- uses: ./get-magento-version
|
- uses: ./get-magento-version
|
||||||
id: magento-version
|
id: magento-version
|
||||||
with:
|
with:
|
||||||
working-directory: ../magento2
|
working-directory: ../magento2
|
||||||
|
|
||||||
- name: Fail if key does not match
|
- name: Fail if version does not match
|
||||||
if: steps.magento-version.outputs.version != '"2.4.5-p1"'
|
if: steps.magento-version.outputs.version != '"2.4.5-p1"'
|
||||||
shell: bash
|
shell: bash
|
||||||
run: echo "${{ steps.magento-version.outputs.version }}" && exit 1
|
run: echo "${{ steps.magento-version.outputs.version }}" && exit 1
|
||||||
|
|
||||||
|
- name: Fail if project does not match
|
||||||
|
if: steps.magento-version.outputs.project != 'magento/project-community-edition'
|
||||||
|
shell: bash
|
||||||
|
run: echo "${{ steps.magento-version.outputs.project }}" && exit 1
|
||||||
|
|
||||||
|
get-magento-version-extension:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Create mock extension composer.json
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/test-extension
|
||||||
|
echo '{"name":"vendor/module","type":"magento2-module","require":{}}' > /tmp/test-extension/composer.json
|
||||||
|
|
||||||
|
- uses: ./get-magento-version
|
||||||
|
id: ext-version
|
||||||
|
with:
|
||||||
|
working-directory: /tmp/test-extension
|
||||||
|
|
||||||
|
- name: Fail if project is not empty
|
||||||
|
if: steps.ext-version.outputs.project != ''
|
||||||
|
shell: bash
|
||||||
|
run: echo "Expected empty project, got '${{ steps.ext-version.outputs.project }}'" && exit 1
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
name: Installation Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch: {}
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "_test/demo-package/**"
|
|
||||||
- "installation-test/**"
|
|
||||||
- ".github/workflows/_internal-install.yaml"
|
|
||||||
- "supported-version/**"
|
|
||||||
- "!(**/*.md)"
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "_test/demo-package/**"
|
|
||||||
- "installation-test/**"
|
|
||||||
- ".github/workflows/_internal-install.yaml"
|
|
||||||
- "supported-version/**"
|
|
||||||
- "!(**/*.md)"
|
|
||||||
|
|
||||||
env:
|
|
||||||
MAGENTO_COMPOSER_REPO: "https://mirror.mage-os.org/"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
compute_matrix:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./supported-version
|
|
||||||
with:
|
|
||||||
kind: currently-supported
|
|
||||||
id: supported-version
|
|
||||||
- run: echo ${{ steps.supported-version.outputs.matrix }}
|
|
||||||
|
|
||||||
install-test:
|
|
||||||
needs: compute_matrix
|
|
||||||
strategy:
|
|
||||||
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
|
|
||||||
fail-fast: false
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./installation-test
|
|
||||||
with:
|
|
||||||
composer_version: ${{ matrix.composer }}
|
|
||||||
php_version: ${{ matrix.php }}
|
|
||||||
magento_version: ${{ matrix.magento }}
|
|
||||||
package_name: mage-os/magento2-demo-package
|
|
||||||
source_folder: $GITHUB_WORKSPACE/_test/demo-package
|
|
||||||
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
|
||||||
magento_repository: ${{ env.MAGENTO_COMPOSER_REPO }}
|
|
||||||
@@ -10,7 +10,7 @@ on:
|
|||||||
- ".github/workflows/_internal-integration.yaml"
|
- ".github/workflows/_internal-integration.yaml"
|
||||||
- ".github/workflows/integration.yaml"
|
- ".github/workflows/integration.yaml"
|
||||||
- "supported-version/**"
|
- "supported-version/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
@@ -19,10 +19,11 @@ on:
|
|||||||
- ".github/workflows/_internal-integration.yaml"
|
- ".github/workflows/_internal-integration.yaml"
|
||||||
- ".github/workflows/integration.yaml"
|
- ".github/workflows/integration.yaml"
|
||||||
- "supported-version/**"
|
- "supported-version/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
compute_matrix:
|
compute_matrix:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
@@ -31,7 +32,6 @@ jobs:
|
|||||||
- uses: ./supported-version
|
- uses: ./supported-version
|
||||||
with:
|
with:
|
||||||
kind: currently-supported
|
kind: currently-supported
|
||||||
include_services: true
|
|
||||||
id: supported-version
|
id: supported-version
|
||||||
integration-workflow:
|
integration-workflow:
|
||||||
needs: compute_matrix
|
needs: compute_matrix
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
name: Sansec eComscan Security Scan
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/_internal-sansec-ecomscan.yaml"
|
||||||
|
- "sansec-ecomscan/**"
|
||||||
|
- "!**/*.md"
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/_internal-sansec-ecomscan.yaml"
|
||||||
|
- "sansec-ecomscan/**"
|
||||||
|
- "!**/*.md"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
MAGENTO_COMPOSER_REPO: "https://mirror.mage-os.org/"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compute_matrix:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- uses: ./supported-version
|
||||||
|
with:
|
||||||
|
kind: currently-supported
|
||||||
|
id: supported-version
|
||||||
|
|
||||||
|
run-ecomscan:
|
||||||
|
needs: compute_matrix
|
||||||
|
strategy:
|
||||||
|
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
|
||||||
|
fail-fast: false
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- uses: ./setup-magento
|
||||||
|
id: setup-magento
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v${{ matrix.composer }}
|
||||||
|
mode: extension
|
||||||
|
magento_repository: ${{ env.MAGENTO_COMPOSER_REPO }}
|
||||||
|
magento_version: ${{ matrix.magento }}
|
||||||
|
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- run: composer update --no-install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- uses: ./cache-magento
|
||||||
|
with:
|
||||||
|
composer_cache_key: ${{ matrix.magento }}
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
stamp: true
|
||||||
|
|
||||||
|
- name: Composer install
|
||||||
|
shell: bash
|
||||||
|
run: composer install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- uses: ./sansec-ecomscan
|
||||||
|
with:
|
||||||
|
license: ${{ secrets.SANSEC_LICENSE_KEY }}
|
||||||
|
path: ${{ steps.setup-magento.outputs.path }}
|
||||||
@@ -7,17 +7,18 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- ".github/workflows/_internal-semver-compare.yaml"
|
- ".github/workflows/_internal-semver-compare.yaml"
|
||||||
- "semver-compare/**"
|
- "semver-compare/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
paths:
|
paths:
|
||||||
- ".github/workflows/_internal-semver-compare.yaml"
|
- ".github/workflows/_internal-semver-compare.yaml"
|
||||||
- "semver-compare/**"
|
- "semver-compare/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
semver-compare:
|
semver-compare:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|||||||
@@ -0,0 +1,91 @@
|
|||||||
|
name: Setup Install Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch: {}
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "_test/demo-package/**"
|
||||||
|
- "setup-install/**"
|
||||||
|
- ".github/workflows/_internal-setup-install.yaml"
|
||||||
|
- "supported-version/**"
|
||||||
|
- "!**/*.md"
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "_test/demo-package/**"
|
||||||
|
- "setup-install/**"
|
||||||
|
- ".github/workflows/_internal-setup-install.yaml"
|
||||||
|
- "supported-version/**"
|
||||||
|
- "!**/*.md"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compute_matrix:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- uses: ./supported-version
|
||||||
|
id: supported-version
|
||||||
|
with:
|
||||||
|
kind: currently-supported
|
||||||
|
include_services: true
|
||||||
|
|
||||||
|
setup-install:
|
||||||
|
needs: compute_matrix
|
||||||
|
strategy:
|
||||||
|
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
|
||||||
|
fail-fast: false
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
services: ${{ matrix.services }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- uses: ./setup-magento
|
||||||
|
id: setup-magento
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v${{ matrix.composer }}
|
||||||
|
mode: extension
|
||||||
|
magento_version: ${{ matrix.magento }}
|
||||||
|
magento_repository: "https://mirror.mage-os.org/"
|
||||||
|
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- run: composer update --no-install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- uses: ./cache-magento
|
||||||
|
with:
|
||||||
|
composer_cache_key: ${{ matrix.magento }}
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
stamp: true
|
||||||
|
|
||||||
|
- name: Add extension repository
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
run: composer config repositories.local path ${{ github.workspace }}/_test/demo-package
|
||||||
|
|
||||||
|
- name: Get package name
|
||||||
|
id: package
|
||||||
|
run: echo "name=$(jq -r .name ${{ github.workspace }}/_test/demo-package/composer.json)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Require extension
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
run: composer require "${{ steps.package.outputs.name }}:@dev" --no-install
|
||||||
|
|
||||||
|
- name: Composer install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
run: composer install
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
COMPOSER_MIRROR_PATH_REPOS: 1
|
||||||
|
|
||||||
|
- uses: ./setup-install
|
||||||
|
with:
|
||||||
|
services: ${{ toJSON(matrix.services) }}
|
||||||
|
path: ${{ steps.setup-magento.outputs.path }}
|
||||||
@@ -9,7 +9,7 @@ on:
|
|||||||
- "setup-magento/**"
|
- "setup-magento/**"
|
||||||
- ".github/workflows/_internal-setup-magento.yaml"
|
- ".github/workflows/_internal-setup-magento.yaml"
|
||||||
- "supported-version/**"
|
- "supported-version/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
@@ -17,15 +17,15 @@ on:
|
|||||||
- "setup-magento/**"
|
- "setup-magento/**"
|
||||||
- ".github/workflows/_internal-setup-magento.yaml"
|
- ".github/workflows/_internal-setup-magento.yaml"
|
||||||
- "supported-version/**"
|
- "supported-version/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
|
|
||||||
env:
|
env:
|
||||||
PSEUDO_REPO_FOLDER: ../magento_repo
|
magento_folder: _ghamagento
|
||||||
magento_folder: ../magento2
|
|
||||||
MAGENTO_COMPOSER_REPO: "https://mirror.mage-os.org/"
|
MAGENTO_COMPOSER_REPO: "https://mirror.mage-os.org/"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
compute_matrix:
|
compute_matrix:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
@@ -37,6 +37,18 @@ jobs:
|
|||||||
id: supported-version
|
id: supported-version
|
||||||
- run: echo ${{ steps.supported-version.outputs.matrix }}
|
- run: echo ${{ steps.supported-version.outputs.matrix }}
|
||||||
|
|
||||||
|
compute_matrix_latest:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- uses: ./supported-version
|
||||||
|
with:
|
||||||
|
kind: latest
|
||||||
|
id: supported-version
|
||||||
|
|
||||||
setup-magento-store:
|
setup-magento-store:
|
||||||
needs: compute_matrix
|
needs: compute_matrix
|
||||||
strategy:
|
strategy:
|
||||||
@@ -46,51 +58,124 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- run: |
|
|
||||||
PSEUDO_STORE_FULL_PATH=$(realpath "${{ env.PSEUDO_REPO_FOLDER }}")
|
|
||||||
echo "PSEUDO_STORE_FULL_PATH=$PSEUDO_STORE_FULL_PATH" >> $GITHUB_ENV
|
|
||||||
name: Generate Full Pseudo Store Path
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Set PHP Version
|
- name: Set PHP Version
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php }}
|
php-version: ${{ matrix.php }}
|
||||||
tools: composer:v${{ matrix.composer }}
|
tools: composer:v${{ matrix.composer }}
|
||||||
|
|
||||||
- uses: actions/cache@v5
|
- run: composer create-project --repository-url="${{ env.MAGENTO_COMPOSER_REPO }}" "${{ matrix.magento }}" "${{ env.magento_folder }}" --no-install
|
||||||
id: setup-magento-store-cache
|
|
||||||
with:
|
|
||||||
key: setup-magento-ci | ${{ runner.os }} | ${{ matrix.magento }}
|
|
||||||
path: ${{ env.PSEUDO_STORE_FULL_PATH }}
|
|
||||||
|
|
||||||
- run: composer create-project --repository-url="${{ env.MAGENTO_COMPOSER_REPO }}" "${{ matrix.magento }}" "${{ env.PSEUDO_REPO_FOLDER }}" --no-install
|
|
||||||
name: Create Store to simulate a real Magento store in a real repo.
|
name: Create Store to simulate a real Magento store in a real repo.
|
||||||
if: steps.setup-magento-store-cache.outputs.cache-hit != 'true'
|
|
||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
- uses: ./fix-magento-install
|
- uses: ./fix-magento-install
|
||||||
name: Fix Magento Out of Box Install Issues
|
name: Fix Magento Out of Box Install Issues
|
||||||
with:
|
with:
|
||||||
magento_directory: ${{ env.PSEUDO_REPO_FOLDER }}
|
magento_directory: ${{ env.magento_folder }}
|
||||||
if: steps.setup-magento-store-cache.outputs.cache-hit != 'true'
|
|
||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- run: composer update --no-install
|
||||||
|
working-directory: ${{ env.magento_folder }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- uses: ./cache-magento
|
||||||
|
with:
|
||||||
|
composer_cache_key: ${{ matrix.magento }}
|
||||||
|
working-directory: ${{ env.magento_folder }}
|
||||||
|
stamp: true
|
||||||
|
|
||||||
- run: composer install
|
- run: composer install
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: "${{ env.PSEUDO_REPO_FOLDER }}"
|
working-directory: "${{ env.magento_folder }}"
|
||||||
if: steps.setup-magento-store-cache.outputs.cache-hit != 'true'
|
|
||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
- run: git init && git config user.email "you@example.com" && git config user.name "Your Name" && git add . && git commit -m "init" && git clean -fdx
|
- name: Write Magento .gitignore so git clean strips vendor/generated/var from the cached tree
|
||||||
working-directory: "${{ env.PSEUDO_REPO_FOLDER }}"
|
working-directory: "${{ env.magento_folder }}"
|
||||||
if: steps.setup-magento-store-cache.outputs.cache-hit != 'true'
|
|
||||||
|
|
||||||
- run: cp -R ${{ env.PSEUDO_REPO_FOLDER }} ${{ env.magento_folder }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cat > .gitignore <<'EOF'
|
||||||
|
/.buildpath
|
||||||
|
/.cache
|
||||||
|
/.metadata
|
||||||
|
/.project
|
||||||
|
/.settings
|
||||||
|
/.vscode
|
||||||
|
atlassian*
|
||||||
|
/nbproject
|
||||||
|
/robots.txt
|
||||||
|
/pub/robots.txt
|
||||||
|
/sitemap
|
||||||
|
/sitemap.xml
|
||||||
|
/pub/sitemap
|
||||||
|
/pub/sitemap.xml
|
||||||
|
/.idea
|
||||||
|
/.gitattributes
|
||||||
|
/app/config_sandbox
|
||||||
|
/app/etc/config.php
|
||||||
|
/app/etc/env.php
|
||||||
|
/app/code/Magento/TestModule*
|
||||||
|
/lib/internal/flex/uploader/.actionScriptProperties
|
||||||
|
/lib/internal/flex/uploader/.flexProperties
|
||||||
|
/lib/internal/flex/uploader/.project
|
||||||
|
/lib/internal/flex/uploader/.settings
|
||||||
|
/lib/internal/flex/varien/.actionScriptProperties
|
||||||
|
/lib/internal/flex/varien/.flexLibProperties
|
||||||
|
/lib/internal/flex/varien/.project
|
||||||
|
/lib/internal/flex/varien/.settings
|
||||||
|
/node_modules
|
||||||
|
/.grunt
|
||||||
|
/Gruntfile.js
|
||||||
|
/package.json
|
||||||
|
/.php_cs
|
||||||
|
/.php_cs.cache
|
||||||
|
/.php-cs-fixer.php
|
||||||
|
/.php-cs-fixer.cache
|
||||||
|
/grunt-config.json
|
||||||
|
/pub/media/*.*
|
||||||
|
!/pub/media/.htaccess
|
||||||
|
/pub/media/attribute/*
|
||||||
|
!/pub/media/attribute/.htaccess
|
||||||
|
/pub/media/analytics/*
|
||||||
|
/pub/media/catalog/*
|
||||||
|
!/pub/media/catalog/.htaccess
|
||||||
|
/pub/media/customer/*
|
||||||
|
!/pub/media/customer/.htaccess
|
||||||
|
/pub/media/downloadable/*
|
||||||
|
!/pub/media/downloadable/.htaccess
|
||||||
|
/pub/media/favicon/*
|
||||||
|
/pub/media/import/*
|
||||||
|
!/pub/media/import/.htaccess
|
||||||
|
/pub/media/logo/*
|
||||||
|
/pub/media/custom_options/*
|
||||||
|
!/pub/media/custom_options/.htaccess
|
||||||
|
/pub/media/theme/*
|
||||||
|
/pub/media/theme_customization/*
|
||||||
|
!/pub/media/theme_customization/.htaccess
|
||||||
|
/pub/media/wysiwyg/*
|
||||||
|
!/pub/media/wysiwyg/.htaccess
|
||||||
|
/pub/media/tmp/*
|
||||||
|
!/pub/media/tmp/.htaccess
|
||||||
|
/pub/media/captcha/*
|
||||||
|
/pub/media/sitemap/*
|
||||||
|
!/pub/media/sitemap/.htaccess
|
||||||
|
/pub/static/*
|
||||||
|
!/pub/static/.htaccess
|
||||||
|
|
||||||
|
/var/*
|
||||||
|
!/var/.htaccess
|
||||||
|
/vendor/*
|
||||||
|
!/vendor/.htaccess
|
||||||
|
/generated/*
|
||||||
|
!/generated/.htaccess
|
||||||
|
.DS_Store
|
||||||
|
EOF
|
||||||
|
|
||||||
|
- run: git init && git config user.email "you@example.com" && git config user.name "Your Name" && git add . && git commit -m "init" && git clean -fdx
|
||||||
|
working-directory: "${{ env.magento_folder }}"
|
||||||
|
|
||||||
- uses: ./setup-magento
|
- uses: ./setup-magento
|
||||||
id: setup-magento
|
id: setup-magento
|
||||||
@@ -101,10 +186,11 @@ jobs:
|
|||||||
working-directory: ${{ env.magento_folder }}
|
working-directory: ${{ env.magento_folder }}
|
||||||
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/cache-magento@main
|
- uses: ./cache-magento
|
||||||
with:
|
with:
|
||||||
mode: 'store'
|
composer_cache_key: ${{ matrix.magento }}
|
||||||
composer_cache_key: '${{ matrix.magento }}'
|
working-directory: ${{ env.magento_folder }}
|
||||||
|
stamp: true
|
||||||
|
|
||||||
- run: composer install
|
- run: composer install
|
||||||
name: Composer install
|
name: Composer install
|
||||||
@@ -114,6 +200,10 @@ jobs:
|
|||||||
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
setup-magento-extension:
|
setup-magento-extension:
|
||||||
|
needs: compute_matrix_latest
|
||||||
|
strategy:
|
||||||
|
matrix: ${{ fromJSON(needs.compute_matrix_latest.outputs.matrix) }}
|
||||||
|
fail-fast: false
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
@@ -121,17 +211,23 @@ jobs:
|
|||||||
- uses: ./setup-magento
|
- uses: ./setup-magento
|
||||||
id: setup-magento
|
id: setup-magento
|
||||||
with:
|
with:
|
||||||
php-version: 8.4
|
php-version: ${{ matrix.php }}
|
||||||
tools: composer:v2.8
|
tools: composer:v${{ matrix.composer }}
|
||||||
mode: extension
|
mode: extension
|
||||||
magento_repository: ${{ env.MAGENTO_COMPOSER_REPO }}
|
magento_repository: ${{ env.MAGENTO_COMPOSER_REPO }}
|
||||||
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
||||||
magento_version: magento/project-community-edition:2.4.8-p3
|
magento_version: ${{ matrix.magento }}
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/cache-magento@main
|
- run: composer update --no-install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- uses: ./cache-magento
|
||||||
with:
|
with:
|
||||||
mode: 'extension'
|
composer_cache_key: ${{ matrix.magento }}
|
||||||
composer_cache_key: 'magento/project-community-edition:2.4.8-p3'
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
stamp: true
|
||||||
|
|
||||||
- run: composer install
|
- run: composer install
|
||||||
name: Composer install
|
name: Composer install
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
name: Unit Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "_test/demo-package/**"
|
|
||||||
- ".github/workflows/_internal-unit.yaml"
|
|
||||||
- "unit-test/**"
|
|
||||||
- "!(**/*.md)"
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "_test/demo-package/**"
|
|
||||||
- ".github/workflows/_internal-unit.yaml"
|
|
||||||
- "unit-test/**"
|
|
||||||
- "!(**/*.md)"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
unit-test:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
php_version:
|
|
||||||
- 8.2
|
|
||||||
- 8.3
|
|
||||||
- 8.4
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./unit-test
|
|
||||||
with:
|
|
||||||
source_folder: _test/demo-package
|
|
||||||
php_version: ${{ matrix.php_version }}
|
|
||||||
@@ -10,7 +10,7 @@ on:
|
|||||||
- ".github/workflows/_internal_check_extension.yaml"
|
- ".github/workflows/_internal_check_extension.yaml"
|
||||||
- ".github/workflows/check-extension.yaml"
|
- ".github/workflows/check-extension.yaml"
|
||||||
- "supported-version/**"
|
- "supported-version/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
@@ -19,9 +19,10 @@ on:
|
|||||||
- ".github/workflows/_internal_check_extension.yaml"
|
- ".github/workflows/_internal_check_extension.yaml"
|
||||||
- ".github/workflows/check-extension.yaml"
|
- ".github/workflows/check-extension.yaml"
|
||||||
- "supported-version/**"
|
- "supported-version/**"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
jobs:
|
jobs:
|
||||||
compute_matrix:
|
compute_matrix:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
@@ -38,3 +39,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: _test/demo-package
|
path: _test/demo-package
|
||||||
matrix: ${{ needs.compute_matrix.outputs.matrix }}
|
matrix: ${{ needs.compute_matrix.outputs.matrix }}
|
||||||
|
stamp: true
|
||||||
|
secrets:
|
||||||
|
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ on:
|
|||||||
- ".github/workflows/_internal-supported-version.yaml"
|
- ".github/workflows/_internal-supported-version.yaml"
|
||||||
- "supported-version/**"
|
- "supported-version/**"
|
||||||
- "package-lock.json"
|
- "package-lock.json"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
@@ -16,10 +16,11 @@ on:
|
|||||||
- ".github/workflows/_internal-supported-version.yaml"
|
- ".github/workflows/_internal-supported-version.yaml"
|
||||||
- "supported-version/**"
|
- "supported-version/**"
|
||||||
- "package-lock.json"
|
- "package-lock.json"
|
||||||
- "!(**/*.md)"
|
- "!**/*.md"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
unit-test:
|
unit-test:
|
||||||
|
if: "!startsWith(github.head_ref, 'release-please')"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|||||||
@@ -27,9 +27,15 @@ on:
|
|||||||
composer_cache_key:
|
composer_cache_key:
|
||||||
type: string
|
type: string
|
||||||
required: false
|
required: false
|
||||||
default: "_mageos"
|
default: ""
|
||||||
description: A key to version the composer cache. Can be incremented if you need to bust the cache.
|
description: A key to version the composer cache. Can be incremented if you need to bust the cache.
|
||||||
|
|
||||||
|
stamp:
|
||||||
|
type: boolean
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
description: "Cache the vendor/ directory in addition to the Composer download cache."
|
||||||
|
|
||||||
secrets:
|
secrets:
|
||||||
composer_auth:
|
composer_auth:
|
||||||
required: false
|
required: false
|
||||||
@@ -44,7 +50,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/setup-magento@main
|
- uses: graycoreio/github-actions-magento2/setup-magento@v8.0.0-rc.2
|
||||||
id: setup-magento
|
id: setup-magento
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php }}
|
php-version: ${{ matrix.php }}
|
||||||
@@ -54,11 +60,6 @@ jobs:
|
|||||||
magento_repository: ${{ inputs.magento_repository }}
|
magento_repository: ${{ inputs.magento_repository }}
|
||||||
composer_auth: ${{ secrets.composer_auth }}
|
composer_auth: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/cache-magento@main
|
|
||||||
with:
|
|
||||||
mode: extension
|
|
||||||
composer_cache_key: ${{ inputs.composer_cache_key }}
|
|
||||||
|
|
||||||
- name: Add extension repository
|
- name: Add extension repository
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
run: composer config repositories.local path ${{ github.workspace }}/${{ inputs.path }}
|
run: composer config repositories.local path ${{ github.workspace }}/${{ inputs.path }}
|
||||||
@@ -70,12 +71,26 @@ jobs:
|
|||||||
- name: Require extension
|
- name: Require extension
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
run: composer require "${{ steps.package.outputs.name }}:@dev" --no-install
|
run: composer require "${{ steps.package.outputs.name }}:@dev" --no-install
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
|
- run: composer update --no-install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/cache-magento@v8.0.0-rc.2
|
||||||
|
with:
|
||||||
|
composer_cache_key: ${{ inputs.composer_cache_key && format('{0} | {1}', inputs.composer_cache_key, matrix.magento) || matrix.magento }}
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
stamp: ${{ inputs.stamp }}
|
||||||
|
|
||||||
- name: Composer install
|
- name: Composer install
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
run: composer install
|
run: composer install
|
||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
COMPOSER_MIRROR_PATH_REPOS: 1
|
||||||
|
|
||||||
- name: Configure phpunit.xml.dist
|
- name: Configure phpunit.xml.dist
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
@@ -104,7 +119,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/setup-magento@main
|
- uses: graycoreio/github-actions-magento2/setup-magento@v8.0.0-rc.2
|
||||||
id: setup-magento
|
id: setup-magento
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php }}
|
php-version: ${{ matrix.php }}
|
||||||
@@ -114,11 +129,6 @@ jobs:
|
|||||||
magento_repository: ${{ inputs.magento_repository }}
|
magento_repository: ${{ inputs.magento_repository }}
|
||||||
composer_auth: ${{ secrets.composer_auth }}
|
composer_auth: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/cache-magento@main
|
|
||||||
with:
|
|
||||||
mode: extension
|
|
||||||
composer_cache_key: ${{ inputs.composer_cache_key }}
|
|
||||||
|
|
||||||
- name: Add extension repository
|
- name: Add extension repository
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
run: composer config repositories.local path ${{ github.workspace }}/${{ inputs.path }}
|
run: composer config repositories.local path ${{ github.workspace }}/${{ inputs.path }}
|
||||||
@@ -133,19 +143,27 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
|
- run: composer update --no-install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/cache-magento@v8.0.0-rc.2
|
||||||
|
with:
|
||||||
|
composer_cache_key: ${{ inputs.composer_cache_key && format('{0} | {1}', inputs.composer_cache_key, matrix.magento) || matrix.magento }}
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
stamp: ${{ inputs.stamp }}
|
||||||
|
|
||||||
- name: Composer install
|
- name: Composer install
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
run: composer install
|
run: composer install
|
||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
COMPOSER_MIRROR_PATH_REPOS: 1
|
||||||
|
|
||||||
- name: Enable all modules
|
- uses: graycoreio/github-actions-magento2/setup-di-compile@v8.0.0-rc.2
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
with:
|
||||||
run: php bin/magento module:enable --all
|
path: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
|
||||||
- name: Compile
|
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
|
||||||
run: php bin/magento setup:di:compile
|
|
||||||
|
|
||||||
coding-standard:
|
coding-standard:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
@@ -155,44 +173,20 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Get Composer Version
|
- uses: shivammathur/setup-php@v2
|
||||||
uses: graycoreio/github-actions-magento2/get-composer-version@main
|
|
||||||
id: get-composer-version
|
|
||||||
|
|
||||||
- name: Check if allow-plugins option is available for this version of composer
|
|
||||||
uses: graycoreio/github-actions-magento2/semver-compare@main
|
|
||||||
with:
|
with:
|
||||||
version: 2.2
|
php-version: ${{ matrix.php }}
|
||||||
compare_against: ${{ steps.get-composer-version.outputs.version }}
|
tools: composer:v${{ matrix.composer }}
|
||||||
id: is-allow-plugins-available
|
coverage: none
|
||||||
|
|
||||||
- name: Enable dealerdirect/phpcodesniffer-composer-installer plugin
|
- uses: graycoreio/github-actions-magento2/cache-magento@v8.0.0-rc.2
|
||||||
shell: bash
|
with:
|
||||||
working-directory: ${{ inputs.path }}
|
composer_cache_key: ${{ inputs.composer_cache_key && format('{0} | {1}', inputs.composer_cache_key, matrix.magento) || matrix.magento }}
|
||||||
run: composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true --global
|
|
||||||
if: steps.is-allow-plugins-available.outputs.result < 1
|
|
||||||
|
|
||||||
- name: Install Coding Standard
|
- uses: graycoreio/github-actions-magento2/coding-standard@v8.0.0-rc.2
|
||||||
shell: bash
|
with:
|
||||||
working-directory: ${{ inputs.path }}
|
path: ${{ inputs.path }}
|
||||||
run: composer require "magento/magento-coding-standard" "magento/php-compatibility-fork"
|
composer_auth: ${{ secrets.composer_auth }}
|
||||||
env:
|
|
||||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
|
||||||
|
|
||||||
- name: Register Coding Standard
|
|
||||||
shell: bash
|
|
||||||
working-directory: ${{ inputs.path }}
|
|
||||||
run: vendor/bin/phpcs --config-set installed_paths vendor/magento/magento-coding-standard,vendor/magento/php-compatibility-fork
|
|
||||||
|
|
||||||
- name: Coding Standard Check
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [ -f .phpcs.xml ] || [ -f phpcs.xml ] || [ -f .phpcs.xml.dist ] || [ -f phpcs.xml.dist ]; then
|
|
||||||
./vendor/bin/phpcs .
|
|
||||||
else
|
|
||||||
./vendor/bin/phpcs --standard=Magento2 --ignore=*vendor/* .
|
|
||||||
fi
|
|
||||||
working-directory: ${{ inputs.path }}
|
|
||||||
|
|
||||||
integration_test:
|
integration_test:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
@@ -203,7 +197,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/setup-magento@main
|
- uses: graycoreio/github-actions-magento2/setup-magento@v8.0.0-rc.2
|
||||||
id: setup-magento
|
id: setup-magento
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php }}
|
php-version: ${{ matrix.php }}
|
||||||
@@ -213,11 +207,6 @@ jobs:
|
|||||||
magento_repository: ${{ inputs.magento_repository }}
|
magento_repository: ${{ inputs.magento_repository }}
|
||||||
composer_auth: ${{ secrets.composer_auth }}
|
composer_auth: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/cache-magento@main
|
|
||||||
with:
|
|
||||||
mode: extension
|
|
||||||
composer_cache_key: ${{ inputs.composer_cache_key }}
|
|
||||||
|
|
||||||
- name: Add extension repository
|
- name: Add extension repository
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
run: composer config repositories.local path ${{ github.workspace }}/${{ inputs.path }}
|
run: composer config repositories.local path ${{ github.workspace }}/${{ inputs.path }}
|
||||||
@@ -232,13 +221,25 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
|
- run: composer update --no-install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/cache-magento@v8.0.0-rc.2
|
||||||
|
with:
|
||||||
|
composer_cache_key: ${{ inputs.composer_cache_key && format('{0} | {1}', inputs.composer_cache_key, matrix.magento) || matrix.magento }}
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
stamp: ${{ inputs.stamp }}
|
||||||
|
|
||||||
- name: Composer install
|
- name: Composer install
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
run: composer install
|
run: composer install
|
||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
COMPOSER_MIRROR_PATH_REPOS: 1
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/get-magento-version@main
|
- uses: graycoreio/github-actions-magento2/get-magento-version@v8.0.0-rc.2
|
||||||
id: magento-version
|
id: magento-version
|
||||||
with:
|
with:
|
||||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
|||||||
@@ -0,0 +1,175 @@
|
|||||||
|
name: MageCheck Store
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
path:
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
default: "."
|
||||||
|
description: "The folder of the Magento store that you are testing."
|
||||||
|
|
||||||
|
composer_cache_key:
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
default: "_mageos"
|
||||||
|
description: A key to version the composer cache. Can be incremented if you need to bust the cache.
|
||||||
|
|
||||||
|
store_artifact_name:
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
description: "If provided, download store files from this artifact instead of using actions/checkout."
|
||||||
|
|
||||||
|
stamp:
|
||||||
|
type: boolean
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
description: "Cache the vendor/ directory in addition to the Composer download cache."
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
composer_auth:
|
||||||
|
required: false
|
||||||
|
description: "Your composer credentials (typically a stringified json object of the contents of your auth.json)"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compute_matrix:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
if: inputs.store_artifact_name == ''
|
||||||
|
|
||||||
|
- uses: actions/download-artifact@v8
|
||||||
|
if: inputs.store_artifact_name != ''
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.store_artifact_name }}
|
||||||
|
path: ${{ inputs.path }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/get-magento-version@v8.0.0-rc.2
|
||||||
|
id: get-magento-version
|
||||||
|
with:
|
||||||
|
working-directory: ${{ inputs.path }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/supported-version@v8.0.0-rc.2
|
||||||
|
id: supported-version
|
||||||
|
with:
|
||||||
|
kind: custom
|
||||||
|
custom_versions: ${{ steps.get-magento-version.outputs.project }}:${{ fromJSON(steps.get-magento-version.outputs.version) }}
|
||||||
|
|
||||||
|
unit-test:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
needs: compute_matrix
|
||||||
|
strategy:
|
||||||
|
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
if: inputs.store_artifact_name == ''
|
||||||
|
|
||||||
|
- uses: actions/download-artifact@v8
|
||||||
|
if: inputs.store_artifact_name != ''
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.store_artifact_name }}
|
||||||
|
path: ${{ inputs.path }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/setup-magento@v8.0.0-rc.2
|
||||||
|
id: setup-magento
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v${{ matrix.composer }}
|
||||||
|
mode: store
|
||||||
|
working-directory: ${{ inputs.path }}
|
||||||
|
composer_auth: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/cache-magento@v8.0.0-rc.2
|
||||||
|
with:
|
||||||
|
composer_cache_key: ${{ inputs.composer_cache_key }}
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
stamp: ${{ inputs.stamp }}
|
||||||
|
|
||||||
|
- name: Composer install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
run: composer install
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
|
- name: Configure phpunit.xml.dist
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
run: |
|
||||||
|
mkdir -p app/code
|
||||||
|
|
||||||
|
cat > /tmp/testsuite.xml << 'EOF'
|
||||||
|
<testsuite name="Store_Unit_Tests">
|
||||||
|
<directory>../../../app/code/*/*/Test/Unit</directory>
|
||||||
|
</testsuite>
|
||||||
|
EOF
|
||||||
|
sed -i '/<testsuites>/r /tmp/testsuite.xml' dev/tests/unit/phpunit.xml.dist
|
||||||
|
|
||||||
|
## PHPUnit 12 (Magento 2.4.9) implicitly enables failOnEmptyTestSuite when --testsuite is passed.
|
||||||
|
## Default it off only when the consumer hasn't set it themselves, so we don't clobber explicit configuration.
|
||||||
|
if ! grep -q 'failOnEmptyTestSuite=' dev/tests/unit/phpunit.xml.dist; then
|
||||||
|
sed -i 's|<phpunit |<phpunit failOnEmptyTestSuite="false" |' dev/tests/unit/phpunit.xml.dist
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Disable allure (See https://github.com/magento/magento2/issues/36702 )
|
||||||
|
sed -i '/<extensions>/,/<\/extensions>/d' dev/tests/unit/phpunit.xml.dist
|
||||||
|
|
||||||
|
- name: Run unit tests
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
run: vendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist --testsuite Store_Unit_Tests
|
||||||
|
|
||||||
|
coding-standard:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
needs: compute_matrix
|
||||||
|
strategy:
|
||||||
|
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
if: inputs.store_artifact_name == ''
|
||||||
|
|
||||||
|
- uses: actions/download-artifact@v8
|
||||||
|
if: inputs.store_artifact_name != ''
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.store_artifact_name }}
|
||||||
|
path: ${{ inputs.path }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/setup-magento@v8.0.0-rc.2
|
||||||
|
id: setup-magento
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v${{ matrix.composer }}
|
||||||
|
mode: store
|
||||||
|
working-directory: ${{ inputs.path }}
|
||||||
|
composer_auth: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/cache-magento@v8.0.0-rc.2
|
||||||
|
with:
|
||||||
|
composer_cache_key: ${{ inputs.composer_cache_key }}
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
stamp: ${{ inputs.stamp }}
|
||||||
|
|
||||||
|
- name: Composer install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
run: composer install
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
|
||||||
|
- name: Create default phpcs.xml if none exists
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
run: |
|
||||||
|
mkdir -p app/code
|
||||||
|
if [ ! -f .phpcs.xml ] && [ ! -f phpcs.xml ] && [ ! -f .phpcs.xml.dist ] && [ ! -f phpcs.xml.dist ]; then
|
||||||
|
cat > phpcs.xml << 'EOF'
|
||||||
|
<ruleset name="Store">
|
||||||
|
<rule ref="Magento2"/>
|
||||||
|
<file>app/code</file>
|
||||||
|
</ruleset>
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/coding-standard@v8.0.0-rc.2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
composer_auth: ${{ secrets.composer_auth }}
|
||||||
@@ -82,7 +82,7 @@ jobs:
|
|||||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
name: Create Magento ${{ matrix.magento }} Project
|
name: Create Magento ${{ matrix.magento }} Project
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/get-magento-version@main
|
- uses: graycoreio/github-actions-magento2/get-magento-version@v8.0.0-rc.2
|
||||||
id: magento-version
|
id: magento-version
|
||||||
with:
|
with:
|
||||||
working-directory: ${{ inputs.magento_directory }}
|
working-directory: ${{ inputs.magento_directory }}
|
||||||
@@ -140,6 +140,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
COMPOSER_CACHE_DIR: ${{ steps.composer-cache.outputs.dir }}
|
COMPOSER_CACHE_DIR: ${{ steps.composer-cache.outputs.dir }}
|
||||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||||
|
COMPOSER_MIRROR_PATH_REPOS: 1
|
||||||
|
|
||||||
- name: Replace Configuration Settings for env
|
- name: Replace Configuration Settings for env
|
||||||
working-directory: ${{ inputs.magento_directory }}/dev/tests/integration
|
working-directory: ${{ inputs.magento_directory }}/dev/tests/integration
|
||||||
|
|||||||
@@ -4,11 +4,142 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
release-candidate:
|
||||||
|
description: 'Cut a release-candidate (prerelease) instead of a normal release.'
|
||||||
|
type: boolean
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
|
||||||
|
env:
|
||||||
|
RELEASE_BRANCH: release-please--branches--main--components--github-actions-magento2
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release-please:
|
release-please:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
outputs:
|
||||||
|
releases_created: ${{ steps.release.outputs.releases_created }}
|
||||||
steps:
|
steps:
|
||||||
- uses: googleapis/release-please-action@v4
|
- id: release
|
||||||
|
uses: googleapis/release-please-action@v4
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GRAYCORE_GITHUB_TOKEN }}
|
token: ${{ secrets.GRAYCORE_GITHUB_TOKEN }}
|
||||||
|
config-file: ${{ inputs.release-candidate && 'release-please-config.rc.json' || 'release-please-config.json' }}
|
||||||
|
|
||||||
|
- name: Check if release branch exists
|
||||||
|
id: branch-check
|
||||||
|
if: steps.release.outputs.releases_created != 'true'
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GRAYCORE_GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
if gh api "repos/${{ github.repository }}/git/refs/heads/${{ env.RELEASE_BRANCH }}" --silent 2>/dev/null; then
|
||||||
|
echo "EXISTS=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "EXISTS=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Checkout release PR branch
|
||||||
|
if: steps.branch-check.outputs.EXISTS == 'true'
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
ref: ${{ env.RELEASE_BRANCH }}
|
||||||
|
token: ${{ secrets.GRAYBOT_PIN_BACK_PAT }}
|
||||||
|
|
||||||
|
- name: Pin refs on release PR branch
|
||||||
|
id: pin-refs
|
||||||
|
if: steps.branch-check.outputs.EXISTS == 'true'
|
||||||
|
run: |
|
||||||
|
VERSION="v$(jq -r '."."' .release-please-manifest.json)"
|
||||||
|
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
sed -i "s|uses: graycoreio/github-actions-magento2/\([^@]*\)@main|uses: graycoreio/github-actions-magento2/\1@${VERSION}|g" \
|
||||||
|
*/action.yml \
|
||||||
|
$(find .github/workflows \( -name "*.yml" -o -name "*.yaml" \) ! -name "release-*" ! -name "_internal*")
|
||||||
|
|
||||||
|
if git diff --quiet; then
|
||||||
|
echo "HAS_CHANGES=false" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "HAS_CHANGES=true" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Commit pinned refs
|
||||||
|
if: steps.pin-refs.outputs.HAS_CHANGES == 'true'
|
||||||
|
env:
|
||||||
|
GRAYBOT_GPG_KEY: ${{ secrets.GRAYBOT_GPG_KEY }}
|
||||||
|
run: |
|
||||||
|
echo "$GRAYBOT_GPG_KEY" | gpg --batch --import
|
||||||
|
export GPG_KEY_ID=$(gpg --list-secret-keys --keyid-format LONG | grep sec | awk '{print $2}' | cut -d/ -f2)
|
||||||
|
git config --global user.signingkey $GPG_KEY_ID
|
||||||
|
git config --global commit.gpgSign true
|
||||||
|
git config --global user.email "automation@graycore.io"
|
||||||
|
git config --global user.name "Beep Boop"
|
||||||
|
git add .
|
||||||
|
git commit -m "chore: pin internal action refs to ${{ steps.pin-refs.outputs.VERSION }}"
|
||||||
|
git push origin ${{ env.RELEASE_BRANCH }}
|
||||||
|
|
||||||
|
pinback:
|
||||||
|
needs: release-please
|
||||||
|
if: needs.release-please.outputs.releases_created == 'true'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
ref: main
|
||||||
|
token: ${{ secrets.GRAYBOT_PIN_BACK_PAT }}
|
||||||
|
|
||||||
|
- name: Extract version
|
||||||
|
id: version
|
||||||
|
run: |
|
||||||
|
VERSION="v$(jq -r '."."' .release-please-manifest.json)"
|
||||||
|
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Restore @main refs
|
||||||
|
run: |
|
||||||
|
sed -i "s|uses: graycoreio/github-actions-magento2/\([^@]*\)@[^ #]*|uses: graycoreio/github-actions-magento2/\1@main|g" \
|
||||||
|
*/action.yml \
|
||||||
|
$(find .github/workflows \( -name "*.yml" -o -name "*.yaml" \) ! -name "release-please.yml")
|
||||||
|
|
||||||
|
- name: Show changed files
|
||||||
|
run: git diff
|
||||||
|
|
||||||
|
- name: Check for changes
|
||||||
|
id: changes
|
||||||
|
run: |
|
||||||
|
if git diff --quiet; then
|
||||||
|
echo "HAS_CHANGES=false" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "HAS_CHANGES=true" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Commit and open pinback PR
|
||||||
|
if: steps.changes.outputs.HAS_CHANGES == 'true'
|
||||||
|
env:
|
||||||
|
GRAYBOT_GPG_KEY: ${{ secrets.GRAYBOT_GPG_KEY }}
|
||||||
|
GH_TOKEN: ${{ secrets.GRAYBOT_PIN_BACK_PAT }}
|
||||||
|
run: |
|
||||||
|
echo "$GRAYBOT_GPG_KEY" | gpg --batch --import
|
||||||
|
export GPG_KEY_ID=$(gpg --list-secret-keys --keyid-format LONG | grep sec | awk '{print $2}' | cut -d/ -f2)
|
||||||
|
git config --global user.signingkey $GPG_KEY_ID
|
||||||
|
git config --global commit.gpgSign true
|
||||||
|
git config --global user.email "automation@graycore.io"
|
||||||
|
git config --global user.name "Beep Boop"
|
||||||
|
BRANCH="chore/pinback-${{ steps.version.outputs.VERSION }}"
|
||||||
|
git checkout -b "$BRANCH"
|
||||||
|
git add .
|
||||||
|
git commit -m "chore: restore internal action refs to @main"
|
||||||
|
git push --force origin "$BRANCH"
|
||||||
|
EXISTING=$(gh pr list --head "$BRANCH" --json number --jq '.[0].number // empty')
|
||||||
|
if [ -z "$EXISTING" ]; then
|
||||||
|
gh pr create \
|
||||||
|
--base main \
|
||||||
|
--head "$BRANCH" \
|
||||||
|
--title "chore: restore internal action refs to @main after ${{ steps.version.outputs.VERSION }}" \
|
||||||
|
--body "Restores all internal \`graycoreio/github-actions-magento2\` action refs from \`${{ steps.version.outputs.VERSION }}\` back to \`@main\`."
|
||||||
|
else
|
||||||
|
echo "PR #$EXISTING already exists for $BRANCH — skipping creation"
|
||||||
|
fi
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
.idea/
|
.idea/
|
||||||
|
tmp
|
||||||
@@ -1 +1 @@
|
|||||||
{".":"5.1.0"}
|
{".":"8.0.0-rc.2"}
|
||||||
|
|||||||
@@ -0,0 +1,111 @@
|
|||||||
|
# AGENTS.md
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
`github-actions-magento2` — a GitHub Actions toolkit for Magento 2 development. Provides reusable composite actions and reusable workflows that Magento module and store developers call from their own CI pipelines.
|
||||||
|
|
||||||
|
## Repository Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
.github/workflows/ # Reusable workflows and internal CI workflows
|
||||||
|
_test/demo-package/ # Test fixture used by internal CI workflows
|
||||||
|
docs/ # General documentation
|
||||||
|
other-root-level-folders # Individual GitHub Actions (all are external/public)
|
||||||
|
```
|
||||||
|
|
||||||
|
Most actions are **composite** (bash scripts in `action.yml`). Two are **TypeScript bundled**: `supported-version` and `setup-install`.
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run all tests
|
||||||
|
npm ci
|
||||||
|
npm test
|
||||||
|
|
||||||
|
# Run tests for a single package
|
||||||
|
cd actionName && npm test
|
||||||
|
|
||||||
|
# Build a TypeScript action (must be committed after source changes)
|
||||||
|
cd supported-version && npm run build
|
||||||
|
cd setup-install && npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
Build uses `esbuild` and outputs `dist/index.js`. The `dist/` file **must be committed** — GitHub Actions runs the bundled output directly.
|
||||||
|
|
||||||
|
## Code Style
|
||||||
|
|
||||||
|
- TypeScript with strict settings
|
||||||
|
- ESLint: `eslint:recommended` + `@typescript-eslint/recommended`
|
||||||
|
- No comments unless the "why" is non-obvious
|
||||||
|
- Conventional commits
|
||||||
|
|
||||||
|
## Hard Rules (all agents)
|
||||||
|
|
||||||
|
- Never edit `CHANGELOG.md` — managed by release-please
|
||||||
|
- Never commit TypeScript source changes without also committing the rebuilt `dist/index.js`
|
||||||
|
- Never add external runtime dependencies to TypeScript actions without flagging bundle size impact
|
||||||
|
- Never call `_internal-*` workflows from external repositories
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## @test-agent
|
||||||
|
|
||||||
|
Writes and updates Jest specs for TypeScript actions (`supported-version`, `setup-install`). Scope is limited to `**/*.spec.ts` files.
|
||||||
|
|
||||||
|
### Style
|
||||||
|
|
||||||
|
Test observable behavior, not implementation details. No filesystem mocks — use real temp dirs if needed. No network access.
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { validateKind } from "./validate-kinds";
|
||||||
|
|
||||||
|
describe('validateKind', () => {
|
||||||
|
it('returns `true` if its a valid kind', () => {
|
||||||
|
expect(validateKind("latest")).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws a helpful exception if its an invalid kind', () => {
|
||||||
|
expect(() => validateKind(<any>"taco")).toThrowError();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### Never
|
||||||
|
|
||||||
|
- Test implementation details
|
||||||
|
- Mock the filesystem
|
||||||
|
- Write tests that require network access
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## @supported-version-agent
|
||||||
|
|
||||||
|
Manages the Magento/Mage-OS version compatibility data in `supported-version/src/versions/`. Scope is limited to those JSON files.
|
||||||
|
|
||||||
|
### After every edit
|
||||||
|
|
||||||
|
Run `npm test` inside `supported-version/` before declaring done.
|
||||||
|
|
||||||
|
### Never
|
||||||
|
|
||||||
|
- Remove a version entry — only add or mark end-of-life
|
||||||
|
- Guess version compatibility — only use data from official Magento/Mage-OS release notes
|
||||||
|
- Edit TypeScript source in `supported-version/src/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## @workflow-agent
|
||||||
|
|
||||||
|
Owns all externally-facing aspects of the repo: every root-level composite action and the three public reusable workflows (`integration.yaml`, `check-extension.yaml`, `check-store.yaml`). Changes here affect downstream callers.
|
||||||
|
|
||||||
|
### Boundaries
|
||||||
|
|
||||||
|
**Free to act** — implementation changes that do not alter the public interface (inputs, outputs, default behavior)
|
||||||
|
|
||||||
|
**Ask first** — any change to inputs, outputs, or default behavior of an external action or reusable workflow
|
||||||
|
|
||||||
|
**Never**
|
||||||
|
- Remove or rename an existing input/output without a major version bump
|
||||||
|
- Change the default value of an existing input
|
||||||
|
- Modify `_internal-*` workflows (out of scope)
|
||||||
|
- Add a runtime dependency to a TypeScript action without flagging bundle size impact
|
||||||
+125
@@ -2,6 +2,131 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||||
|
|
||||||
|
## [8.0.0-rc.2](https://github.com/graycoreio/github-actions-magento2/compare/v8.0.0-rc.1...v8.0.0-rc.2) (2026-05-13)
|
||||||
|
|
||||||
|
|
||||||
|
### ⚠ BREAKING CHANGES
|
||||||
|
|
||||||
|
* **supported-versions:** forcibly bump all packages to the latest relevant release line of composer for LogLeak
|
||||||
|
* **supported-versions:** This release brings support for the v2.4.9 version of Magento. This also brings backwards-incompatible infrastructure changes for the patch versions of Magento. See https://github.com/graycoreio/github-actions-magento2/pull/258 for more information.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **check-extension:** pass along COMPOSER_AUTH where needed ([#258](https://github.com/graycoreio/github-actions-magento2/issues/258)) ([c5221f0](https://github.com/graycoreio/github-actions-magento2/commit/c5221f0d68b7ecc892b7718326eabc6f093c108f))
|
||||||
|
* **supported-versions:** forcibly bump all packages to the latest relevant release line of composer for LogLeak ([d1a31d2](https://github.com/graycoreio/github-actions-magento2/commit/d1a31d260dc54556ebd1ea4fb2e1764ad637694a))
|
||||||
|
* **supported-versions:** updates for 2.4.9, 2.4.8-p5, 2.4.7-p19, 2.4.6-p15 ([#258](https://github.com/graycoreio/github-actions-magento2/issues/258)) ([d37f001](https://github.com/graycoreio/github-actions-magento2/commit/d37f001ab6607d2c23751db12d21a7a9e69543f3))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **check-store:** prevent error in phpunit 12 if no tests exists ([#258](https://github.com/graycoreio/github-actions-magento2/issues/258)) ([4fc491b](https://github.com/graycoreio/github-actions-magento2/commit/4fc491bc1a26b7b7089b562db5d4e4a89b6d0744))
|
||||||
|
|
||||||
|
## [8.0.0-rc.1](https://github.com/graycoreio/github-actions-magento2/compare/v8.0.0-rc.0...v8.0.0-rc.1) (2026-05-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **setup-magento:** prevent Magento dir from being mirrored into vendor ([22627e1](https://github.com/graycoreio/github-actions-magento2/commit/22627e100059b090adaf2484a09db2d5568492ce))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **check-extension:** prevent recursively mirroring _ghamagento into _ghamagento ([b0131f0](https://github.com/graycoreio/github-actions-magento2/commit/b0131f0fa08dae3b41c6ae476ae5f81ac654c68b))
|
||||||
|
* **check-store:** only run unit tests for unit tests ([ef06f45](https://github.com/graycoreio/github-actions-magento2/commit/ef06f4566ba2bd9e132d0fe85becb5a96b58aa38))
|
||||||
|
|
||||||
|
## [8.0.0-rc.0](https://github.com/graycoreio/github-actions-magento2/compare/v7.0.0...v8.0.0-rc.0) (2026-05-10)
|
||||||
|
|
||||||
|
|
||||||
|
### ⚠ BREAKING CHANGES
|
||||||
|
|
||||||
|
* **setup-magento:** Previously, when using setup-magento in extension mode, the magento 2 repo root was ../magento2 (outside of the extension folder). Due to interactions with `cache-magento` we need to keep magento inside the GITHUB_WORKSPACE (the root repo). We now do this in the `_ghamagento` folder. If you rely on the `steps.setup-magento.outputs.path` nothing changes for you. But, if you hardcoded the path, it's likely broken.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **cache-magento:** add stamp caching for vendor/ directory ([#245](https://github.com/graycoreio/github-actions-magento2/issues/245)) ([8d00f81](https://github.com/graycoreio/github-actions-magento2/commit/8d00f8149abb5fe9dc9cc87775b108f30284cf21))
|
||||||
|
* **cache-magento:** include runner.os in the cache key ([#245](https://github.com/graycoreio/github-actions-magento2/issues/245)) ([2d7238d](https://github.com/graycoreio/github-actions-magento2/commit/2d7238de14a6ce3657b430ebd89f60b4cc341a09))
|
||||||
|
* **check-extension:** enable stamp caching ([#248](https://github.com/graycoreio/github-actions-magento2/issues/248)) ([baef64b](https://github.com/graycoreio/github-actions-magento2/commit/baef64bc0a235dc92cb81c10afbd22e70e6623f2))
|
||||||
|
* **check-extension:** use setup-di-compile action in compile-extension job ([#240](https://github.com/graycoreio/github-actions-magento2/issues/240)) ([6a520d4](https://github.com/graycoreio/github-actions-magento2/commit/6a520d49fd4ba3f33151dbb8c12dfd3be47630ab))
|
||||||
|
* **check-store:** enable stamp caching ([#247](https://github.com/graycoreio/github-actions-magento2/issues/247)) ([59f87b6](https://github.com/graycoreio/github-actions-magento2/commit/59f87b6b2e4e0007e041c82329291012ee95ce61))
|
||||||
|
* **check-store:** introduce new check-store workflow ([#241](https://github.com/graycoreio/github-actions-magento2/issues/241)) ([d311df7](https://github.com/graycoreio/github-actions-magento2/commit/d311df79661d13ab252eb681600608ed821c78fd))
|
||||||
|
* **get-magento-version:** pull version from lockfile if it exists ([#242](https://github.com/graycoreio/github-actions-magento2/issues/242)) ([87989bb](https://github.com/graycoreio/github-actions-magento2/commit/87989bb250aab72274ad9f71481f70f0a8d8ac1e))
|
||||||
|
* **sansec-ecomscan:** add sansec ecomscan feature ([#235](https://github.com/graycoreio/github-actions-magento2/issues/235)) ([3c0a90f](https://github.com/graycoreio/github-actions-magento2/commit/3c0a90f92ba4e3aaa6854bc98d451fde7340877d))
|
||||||
|
* **sansec-ecomscan:** skip server checks by default ([#238](https://github.com/graycoreio/github-actions-magento2/issues/238)) ([bbd8307](https://github.com/graycoreio/github-actions-magento2/commit/bbd830745f9b752d308f4ef1b8fdc48cea10e5ba))
|
||||||
|
* **setup-di-compile:** restore setup-di-compile as a lean action ([#239](https://github.com/graycoreio/github-actions-magento2/issues/239)) ([212f9a8](https://github.com/graycoreio/github-actions-magento2/commit/212f9a8e86e2c214910e26c3ea19eb90b9aafc4b))
|
||||||
|
* **setup-install:** add new setup-install action ([#237](https://github.com/graycoreio/github-actions-magento2/issues/237)) ([e31f6f6](https://github.com/graycoreio/github-actions-magento2/commit/e31f6f656a2e24afcb95dcc1b4c4dc51e73d00f7))
|
||||||
|
* **setup-magento:** extension working dir changed to _ghamagento folder ([#246](https://github.com/graycoreio/github-actions-magento2/issues/246)) ([a729f8b](https://github.com/graycoreio/github-actions-magento2/commit/a729f8b2fda45af7c4a4cd0bbe32bdf5151bf125))
|
||||||
|
* **setup-magento:** mkdir app/etc in extension mode ([#246](https://github.com/graycoreio/github-actions-magento2/issues/246)) ([c53607c](https://github.com/graycoreio/github-actions-magento2/commit/c53607cca85b77c08a9ae826e5f1365f2b7b9ace))
|
||||||
|
* **supported-version:** dynamically append "version" to matrix ([a7e327d](https://github.com/graycoreio/github-actions-magento2/commit/a7e327d44f6dbca270be5f5c5488498f8ba27b2b))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **coding-standard:** use exactly phpcs.xml if exists ([#243](https://github.com/graycoreio/github-actions-magento2/issues/243)) ([a1c6246](https://github.com/graycoreio/github-actions-magento2/commit/a1c6246c7834203379f25acb03ba8ad7ad42c859))
|
||||||
|
* **fix-magento-install:** remove deprecated set-output ([c115395](https://github.com/graycoreio/github-actions-magento2/commit/c115395583913b1beb539aa514a305d8dcbb9364))
|
||||||
|
|
||||||
|
## [7.0.0](https://github.com/graycoreio/github-actions-magento2/compare/v7.0.0-rc.0...v7.0.0) (2026-04-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **supported-version:** update for Mage-OS 2.2.2 ([#317](https://github.com/graycoreio/github-actions-magento2/issues/317)) ([bbecc7f](https://github.com/graycoreio/github-actions-magento2/commit/bbecc7f5f9e4ddfdf5b41eb17fac6db1b30b56f0))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **cache-magento:** address `set-output` deprecation ([#231](https://github.com/graycoreio/github-actions-magento2/issues/231)) ([771dd05](https://github.com/graycoreio/github-actions-magento2/commit/771dd054395a0e0a33e2d712d9793ca8322173e9))
|
||||||
|
* **supported-version:** filter uninstallable versions from usable kind ([#319](https://github.com/graycoreio/github-actions-magento2/issues/319)) ([f803617](https://github.com/graycoreio/github-actions-magento2/commit/f8036173e143ab5d13147c136e0d9e0c6bbb829b))
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* promote release 7.0.0 ([90babb1](https://github.com/graycoreio/github-actions-magento2/commit/90babb16bfb28ca1953c95edb2301c9090b52f67))
|
||||||
|
|
||||||
|
## [7.0.0-rc.0](https://github.com/graycoreio/github-actions-magento2/compare/v6.0.0...v7.0.0-rc.0) (2026-04-28)
|
||||||
|
|
||||||
|
|
||||||
|
### ⚠ BREAKING CHANGES
|
||||||
|
|
||||||
|
* **coding-standard:** Much of the "setup" that's built-into the command is removed in favor of a leaner action. This also includes the "on PR, only diff PR contents" behavior. This can be restored, but it shouldn't be the default and should be done as an input.
|
||||||
|
* **coding-standard-baseline:** remove coding-standard-baseline action ([#223](https://github.com/graycoreio/github-actions-magento2/issues/223))
|
||||||
|
* **install-test:** You should rely on [Check Extension](https://github.com/graycoreio/github-actions-magento2/blob/main/.github/workflows/check-extension-README.md) instead.
|
||||||
|
* **unit-test:** remove unit-test action ([#221](https://github.com/graycoreio/github-actions-magento2/issues/221))
|
||||||
|
* **supported-version:** `include_services` now defaults to `true`. Callers that strictly validate the matrix schema and do not expect a `services` key must explicitly pass `include_services: false`.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **coding-standard-baseline:** remove coding-standard-baseline action ([#223](https://github.com/graycoreio/github-actions-magento2/issues/223)) ([953de84](https://github.com/graycoreio/github-actions-magento2/commit/953de845ebf7b5d2c9a24670b380c016bd6efdcd))
|
||||||
|
* **coding-standard:** add missing composer_auth to require of magento-coding-standard ([3fad3a8](https://github.com/graycoreio/github-actions-magento2/commit/3fad3a89954be09a0f11f04a6c1c7d927fc872eb))
|
||||||
|
* **coding-standard:** remove pr-diff feature and built-in php setup ([#224](https://github.com/graycoreio/github-actions-magento2/issues/224)) ([d5c744e](https://github.com/graycoreio/github-actions-magento2/commit/d5c744e15544e249f79fa486a073d7020635e48a))
|
||||||
|
* **coding-standard:** skip composer install if the coding is already installed ([e1a8a81](https://github.com/graycoreio/github-actions-magento2/commit/e1a8a81488c77144786427ff63a99f93cd17b897))
|
||||||
|
* **install-test:** remove install test ([#222](https://github.com/graycoreio/github-actions-magento2/issues/222)) ([de415ea](https://github.com/graycoreio/github-actions-magento2/commit/de415eaff54507ca24cbecf8916fd1526beb0186))
|
||||||
|
* **unit-test:** remove unit-test action ([#221](https://github.com/graycoreio/github-actions-magento2/issues/221)) ([98923b2](https://github.com/graycoreio/github-actions-magento2/commit/98923b24c58899779a6a6367e3863d718b09bb8d))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **check-extension:** mirror path repos to prevent symlink errors with template files ([#218](https://github.com/graycoreio/github-actions-magento2/issues/218)) ([d80befb](https://github.com/graycoreio/github-actions-magento2/commit/d80befbe9b26dfa37af117775544c85ea36b7127)), closes [#217](https://github.com/graycoreio/github-actions-magento2/issues/217)
|
||||||
|
* **check-extension:** probe vendor dir for MageOS/Magento standards when running phpcs ([#216](https://github.com/graycoreio/github-actions-magento2/issues/216)) ([7799f0f](https://github.com/graycoreio/github-actions-magento2/commit/7799f0f9bf788545bc36924b6528c09c6a8bb09a)), closes [#213](https://github.com/graycoreio/github-actions-magento2/issues/213)
|
||||||
|
* **supported-version:** default include_services to true ([#215](https://github.com/graycoreio/github-actions-magento2/issues/215)) ([b510ea2](https://github.com/graycoreio/github-actions-magento2/commit/b510ea21e38c97a4852776fc4e57fbcf9917fa9f)), closes [#214](https://github.com/graycoreio/github-actions-magento2/issues/214)
|
||||||
|
|
||||||
|
|
||||||
|
### Miscellaneous Chores
|
||||||
|
|
||||||
|
* release 7.0.0-rc.0 ([4001e81](https://github.com/graycoreio/github-actions-magento2/commit/4001e8118b6da28d7c9fd18d3ab127cee03681d3))
|
||||||
|
|
||||||
|
## [6.0.0](https://github.com/graycoreio/github-actions-magento2/compare/v5.1.0...v6.0.0) (2026-03-11)
|
||||||
|
|
||||||
|
|
||||||
|
### ⚠ BREAKING CHANGES
|
||||||
|
|
||||||
|
* **supported-version:** Adobe has dropped support for elasticsearch and redis in their latest releases of v2.4.8.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **supported-version:** add support for MageOS 2.2.0 ([b4526db](https://github.com/graycoreio/github-actions-magento2/commit/b4526dbb52f59ad79b07fedb5fe487424c0b4dea))
|
||||||
|
* **supported-version:** update for Magento v2.4.8-p4 release ([e6be791](https://github.com/graycoreio/github-actions-magento2/commit/e6be791eed5d2b4f83bb56391e7eab39c52eed59))
|
||||||
|
* **supported-version:** upgrade opensearch to 2.19.5 ([7e40a62](https://github.com/graycoreio/github-actions-magento2/commit/7e40a62efaff0c31fab1284980fc5400997b211f))
|
||||||
|
|
||||||
## [5.1.0](https://github.com/graycoreio/github-actions-magento2/compare/v5.0.0...v5.1.0) (2026-02-19)
|
## [5.1.0](https://github.com/graycoreio/github-actions-magento2/compare/v5.0.0...v5.1.0) (2026-02-19)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||

|

|
||||||
[](https://github.com/graycoreio/github-actions-magento2/actions/workflows/_internal-unit.yaml)
|
[](https://github.com/graycoreio/github-actions-magento2/actions/workflows/_internal-integration.yaml)
|
||||||
[](https://github.com/graycoreio/github-actions-magento2/actions/workflows/_internal-integration.yaml)
|
[](https://github.com/graycoreio/github-actions-magento2/actions/workflows/_internal_check_extension.yaml)
|
||||||
[](https://github.com/graycoreio/github-actions-magento2/actions/workflows/_internal-install.yaml)
|
[](https://github.com/graycoreio/github-actions-magento2/actions/workflows/_internal-check-store.yaml)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -17,20 +17,29 @@ Opinionated Github Actions and Workflows to make building, testing, and maintain
|
|||||||
|
|
||||||
## Workflows
|
## Workflows
|
||||||
|
|
||||||
|
If you are new here, start with a reusable workflow. They are pre-built CI pipelines that you can adopt in minutes — no deep knowledge of the individual actions required. Pick the one that matches your project type and call it from your own workflow file.
|
||||||
|
|
||||||
| Workflow Name | Description |
|
| Workflow Name | Description |
|
||||||
| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
|
| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
|
||||||
| [Integration Test](./.github/workflows/integration-README.md) | A Github Workflow that runs the Integration Tests of a Magento Package |
|
| [Integration Test](./docs/workflows/integration.md) | **Deprecated** — use MageCheck Extension instead. A Github Workflow that runs the Integration Tests of a Magento Package. |
|
||||||
| [MageCheck Extension](./.github/workflows/check-extension-README.md) | A Github Workflow that runs various kinds of quality checks for a Magento Extension. |
|
| [MageCheck Extension](./docs/workflows/check-extension.md) | A Github Workflow that runs various kinds of quality checks for a Magento Extension. |
|
||||||
|
| [MageCheck Store](./docs/workflows/check-store.md) | A Github Workflow that runs various kinds of quality checks for a Magento Store. |
|
||||||
|
|
||||||
## Actions
|
## Actions
|
||||||
|
|
||||||
|
If the reusable workflows do not fit your needs, the individual actions are the building blocks they are composed from. Use these when you need full control over your pipeline.
|
||||||
|
|
||||||
|
|
||||||
| Action Name | Description |
|
| Action Name | Description |
|
||||||
| ------------------------------------------------------ | ----------------------------------------------------------------------------------------- |
|
| ------------------------------------------------------------ | ----------------------------------------------------------------------------------------- |
|
||||||
| [Unit Test](./unit-test/README.md) | A Github Action that runs the Unit Tests a Magento Package |
|
|
||||||
| [Fix Magento Install](./fix-magento-install/README.md) | A Github Action that fixes Magento before `composer install` |
|
| [Fix Magento Install](./fix-magento-install/README.md) | A Github Action that fixes Magento before `composer install` |
|
||||||
| [Cache Magento](./cache-magento/README.md) | A Github Action that creates a composer cache for a Magento extension or store. |
|
| [Cache Magento](./cache-magento/README.md) | A Github Action that creates a composer cache for a Magento extension or store. |
|
||||||
| [Setup Magento](./setup-magento/README.md) | A Github Action that sets up Magento before `composer install` for an extension or store. |
|
| [Setup Magento](./setup-magento/README.md) | A Github Action that sets up Magento before `composer install` for an extension or store. |
|
||||||
| [Get Magento Version](./get-magento-version/README.md) | A Github Action that computes the installed Magento version. |
|
| [Get Magento Version](./get-magento-version/README.md) | A Github Action that computes the installed Magento version. |
|
||||||
| [Installation Test](./installation-test/README.md) | A Github Action that tests the installability of a Magento Package |
|
| [Get Composer Version](./get-composer-version/README.md) | A Github Action that computes an installed Composer version. |
|
||||||
|
| [Coding Standard](./coding-standard/README.md) | A Github Action that runs the Magento Coding Standard. |
|
||||||
| [Semver Compare](./semver-compare/README.md) | A Github Action that semantically compares two versions |
|
| [Semver Compare](./semver-compare/README.md) | A Github Action that semantically compares two versions |
|
||||||
| [Supported Version](./supported-version/README.md) | A Github Action that computes the currently supported Github Actions Matrix for Magento 2 |
|
| [Supported Version](./supported-version/README.md) | A Github Action that computes the currently supported Github Actions Matrix for Magento 2 |
|
||||||
|
| [Setup Install](./setup-install/README.md) | A Github Action that runs `bin/magento setup:install` from the supported-version services matrix |
|
||||||
|
| [Setup DI Compile](./setup-di-compile/README.md) | A Github Action that enables all modules and runs `bin/magento setup:di:compile` |
|
||||||
|
| [Sansec eComscan](./sansec-ecomscan/README.md) | A Github Action that runs the Sansec eComscan security scanner. |
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Graycore\DemoPackage\Test\Integration;
|
||||||
|
|
||||||
|
use Magento\Framework\View\Element\Template;
|
||||||
|
use Magento\TestFramework\Helper\Bootstrap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fails when the extension is installed as a symlink (default Composer path repo behavior)
|
||||||
|
* because Magento's template engine cannot resolve .phtml files through symlinks.
|
||||||
|
* Requires COMPOSER_MIRROR_PATH_REPOS=1 during composer install.
|
||||||
|
*/
|
||||||
|
class TemplateRenderTest extends \PHPUnit\Framework\TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @magentoAppArea frontend
|
||||||
|
*/
|
||||||
|
public function testTemplateRendersWithoutSymlinkError()
|
||||||
|
{
|
||||||
|
$block = Bootstrap::getObjectManager()->create(Template::class);
|
||||||
|
$block->setTemplate('Graycore_DemoPackage::demo.phtml');
|
||||||
|
$this->assertNotEmpty($block->toHtml());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
<?php /** @var \Magento\Framework\View\Element\Template $block */ ?>
|
||||||
|
<div>demo</div>
|
||||||
+61
-25
@@ -4,38 +4,74 @@ A Github Action that creates a composer cache for a Magento extension or store.
|
|||||||
|
|
||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
|
|
||||||
See the [action.yml](./action.yml)
|
See the [action.yml](./action.yml)
|
||||||
|
|
||||||
| Input | Description | Required | Default |
|
| Input | Description | Required | Default |
|
||||||
| ------------------ | -------------------------------------------------------------------------------------- | -------- | ------------ |
|
| -------------------- | -------------------------------------------------------------------------------------- | -------- | ---------- |
|
||||||
| composer_cache_key | A key to version the composer cache. Can be incremented if you need to bust the cache. | false | '__mageos' |
|
| `composer_cache_key` | A key to version the composer cache. Can be incremented if you need to bust the cache. | false | `__mageos` |
|
||||||
| mode | "The mode for setup, one of: `extension` or `store`." | true | N/A |
|
| `working-directory` | The directory where Magento is installed (location of `vendor/` and `composer.lock`). | false | `.` |
|
||||||
|
| `stamp` | Cache the `vendor/` directory in addition to the Composer download cache. | false | `false` |
|
||||||
|
|
||||||
### Usage
|
## Cache keys
|
||||||
|
|
||||||
|
The download cache key has the format:
|
||||||
|
|
||||||
|
```
|
||||||
|
composer | v5.8 | <os> | <composer_cache_key> | <composer-version> | <php-version>
|
||||||
|
```
|
||||||
|
|
||||||
|
When `stamp: true`, the `vendor/` cache key has the format:
|
||||||
|
|
||||||
|
```
|
||||||
|
composer | stamp | v5.8 | <os> | <composer_cache_key> | <composer-version> | <php-version> | <composer.lock-hash>
|
||||||
|
```
|
||||||
|
|
||||||
|
The `composer.lock` hash is derived from `working-directory/composer.lock` using `hashFiles`. The download key also gains the hash suffix when a Magento product package is detected at `working-directory`.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Extension (download cache only)
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
name: Magento Cache
|
- uses: graycoreio/github-actions-magento2/cache-magento@v7.0.0 # x-release-please-version
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
showcase_cache:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: graycoreio/github-actions-magento2/cache-magento@main
|
|
||||||
with:
|
with:
|
||||||
mode: 'store'
|
composer_cache_key: ${{ inputs.composer_cache_key }}
|
||||||
id: cache-magento
|
```
|
||||||
|
|
||||||
|
### Extension or store (download + vendor stamp cache)
|
||||||
|
|
||||||
|
```yml
|
||||||
|
- uses: graycoreio/github-actions-magento2/setup-magento@v7.0.0 # x-release-please-version
|
||||||
|
id: setup-magento
|
||||||
|
with:
|
||||||
|
mode: extension # or store
|
||||||
|
# ...
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/cache-magento@v7.0.0 # x-release-please-version
|
||||||
|
with:
|
||||||
|
composer_cache_key: ${{ inputs.composer_cache_key }}
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
stamp: true
|
||||||
|
|
||||||
- run: composer install
|
- run: composer install
|
||||||
shell: bash
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
name: Composer install
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Stamp Mode
|
||||||
|
|
||||||
|
On a warm cache hit, `composer install` completes in ~0s because `vendor/` is already present — Composer sees everything installed and exits immediately. For a full Magento install this saves 2–5 minutes of package extraction per job.
|
||||||
|
|
||||||
|
The trade-off is size. The `vendor/` directory for a Magento project runs 300–600 MB, so a frequent cache miss means you are consistently paying the upload cost without recouping it on the next run.
|
||||||
|
|
||||||
|
As such, use `stamp: true` when `composer.lock` is stable across most runs — a store on a release branch, or extension CI against a pinned Magento version. Skip it when the lock changes often or when runner storage is constrained.
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> **Dependabot / Renovate:** Each time a Dependabot or Renovate PR is merged, the remaining open PRs rebase and each produces a new `composer.lock`. This cascades into a large number of unique cache entries, inflating storage costs without delivering proportional compute savings — because automated PRs are not waiting on fast feedback. The fix is to disable stamp caching for automated dependency PRs entirely:
|
||||||
|
>
|
||||||
|
> ```yml
|
||||||
|
> - uses: graycoreio/github-actions-magento2/cache-magento@v7.0.0 # x-release-please-version
|
||||||
|
> with:
|
||||||
|
> stamp: ${{ github.actor != 'dependabot[bot]' }}
|
||||||
|
> ```
|
||||||
|
>
|
||||||
|
> If you use Renovate, check its bot account name and adjust the condition accordingly. Dependabot PRs will pay full `composer install` time on every run, which is acceptable — nobody is waiting on them.
|
||||||
|
|||||||
@@ -7,15 +7,31 @@ inputs:
|
|||||||
required: false
|
required: false
|
||||||
default: "__mageos"
|
default: "__mageos"
|
||||||
description: A key to version the composer cache. Can be incremented if you need to bust the cache.
|
description: A key to version the composer cache. Can be incremented if you need to bust the cache.
|
||||||
|
working-directory:
|
||||||
mode:
|
required: false
|
||||||
required: true
|
default: "."
|
||||||
description: "The mode for setup, one of: `extension` or `store`."
|
description: "The working directory where Magento is installed (location of vendor/ and composer.lock)"
|
||||||
|
stamp:
|
||||||
|
required: false
|
||||||
|
default: "false"
|
||||||
|
description: "Cache the vendor/ directory in addition to the Composer download cache"
|
||||||
|
exclude-from-stamp:
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
description: |
|
||||||
|
Newline-separated list of Composer package names to exclude from the stamp cache (e.g. magento/module-foo).
|
||||||
|
magento/magento2-base and mage-os/magento2-base are always excluded regardless of this input.
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
cache-hit:
|
cache-hit:
|
||||||
description: "A boolean value to indicate an exact match was found for the key"
|
description: "A boolean value to indicate an exact match was found for the key"
|
||||||
value: ${{ steps.cache-magento-cache.outputs.cache-hit }}
|
value: ${{ steps.cache-magento-cache.outputs.cache-hit }}
|
||||||
|
key:
|
||||||
|
description: "The cache key used for the Composer download cache"
|
||||||
|
value: ${{ steps.cache-magento-keys.outputs.download-key }}
|
||||||
|
stamp-key:
|
||||||
|
description: "The cache key used for the vendor/ stamp cache (only set when stamp: true)"
|
||||||
|
value: ${{ steps.cache-magento-keys.outputs.stamp-key }}
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
@@ -26,22 +42,85 @@ runs:
|
|||||||
run: |
|
run: |
|
||||||
echo "dir=$(composer config cache-files-dir --global)" >> $GITHUB_OUTPUT
|
echo "dir=$(composer config cache-files-dir --global)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- run: echo "::set-output name=version::$(php -v | awk 'NR==1{print $2}')"
|
- run: echo "version=$(php -v | awk 'NR==1{print $2}')" >> "$GITHUB_OUTPUT"
|
||||||
shell: bash
|
shell: bash
|
||||||
id: cache-magento-get-php-version
|
id: cache-magento-get-php-version
|
||||||
|
|
||||||
- run: echo "::set-output name=version::$(composer --version | awk '{print $3}')"
|
- run: echo "version=$(composer --version | awk '{print $3}')" >> "$GITHUB_OUTPUT"
|
||||||
shell: bash
|
shell: bash
|
||||||
name: Compute Composer Version
|
name: Compute Composer Version
|
||||||
id: cache-magento-get-composer-version
|
id: cache-magento-get-composer-version
|
||||||
|
|
||||||
|
- name: Validate working-directory is inside GITHUB_WORKSPACE
|
||||||
|
if: inputs.stamp == 'true'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
WORKING_DIR="$(realpath '${{ inputs.working-directory }}')"
|
||||||
|
WORKSPACE="$(realpath '${{ github.workspace }}')"
|
||||||
|
if [[ "$WORKING_DIR" != "$WORKSPACE"* ]]; then
|
||||||
|
echo "::error::cache-magento: working-directory '${{ inputs.working-directory }}' resolves outside GITHUB_WORKSPACE. You cannot use the `stamp` cache in folders outside the workspace."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/get-magento-version@v8.0.0-rc.2
|
||||||
|
id: cache-magento-get-magento-version
|
||||||
|
with:
|
||||||
|
working-directory: ${{ inputs.working-directory }}
|
||||||
|
|
||||||
|
- name: Validate composer.lock exists for stamp cache (store mode)
|
||||||
|
if: inputs.stamp == 'true' && steps.cache-magento-get-magento-version.outputs.project != ''
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if [[ ! -f "${{ inputs.working-directory }}/composer.lock" ]]; then
|
||||||
|
echo "::error::cache-magento: stamp: true on a store requires a '${{ inputs.working-directory }}/composer.lock' to exist."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Compute cache keys
|
||||||
|
id: cache-magento-keys
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
bash "${{ github.action_path }}/compute-cache-keys.sh" \
|
||||||
|
"${{ inputs.composer_cache_key }}" \
|
||||||
|
"${{ runner.os }}" \
|
||||||
|
"${{ steps.cache-magento-get-php-version.outputs.version }}" \
|
||||||
|
"${{ steps.cache-magento-get-composer-version.outputs.version }}" \
|
||||||
|
"${{ steps.cache-magento-get-magento-version.outputs.project }}" \
|
||||||
|
"${{ hashFiles(format('{0}/composer.lock', inputs.working-directory)) }}" \
|
||||||
|
>> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: "Cache Composer Packages"
|
- name: "Cache Composer Packages"
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v5
|
||||||
id: cache-magento-cache
|
id: cache-magento-cache
|
||||||
with:
|
with:
|
||||||
key: "composer | v5.8 | ${{ inputs.composer_cache_key }} | ${{ steps.cache-magento-get-composer-version.outputs.version }} | ${{ steps.cache-magento-get-php-version.outputs.version }}"
|
key: ${{ steps.cache-magento-keys.outputs.download-key }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ steps.cache-magento-keys.outputs.download-restore-key }}
|
||||||
path: ${{ steps.cache-magento-composer-cache.outputs.dir }}
|
path: ${{ steps.cache-magento-composer-cache.outputs.dir }}
|
||||||
|
|
||||||
|
- name: Compute stamp paths
|
||||||
|
id: cache-magento-stamp-paths
|
||||||
|
if: inputs.stamp == 'true'
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
EXCLUDE_FROM_STAMP: ${{ inputs.exclude-from-stamp }}
|
||||||
|
WORKING_DIR: ${{ inputs.working-directory }}
|
||||||
|
run: |
|
||||||
|
PATHS=$(bash "${{ github.action_path }}/compute-stamp-paths.sh" "$(realpath "$WORKING_DIR")" "$EXCLUDE_FROM_STAMP")
|
||||||
|
{
|
||||||
|
echo "paths<<EOF"
|
||||||
|
echo "$PATHS"
|
||||||
|
echo "EOF"
|
||||||
|
} >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: "Cache Vendor (Stamp)"
|
||||||
|
uses: actions/cache@v5
|
||||||
|
if: inputs.stamp == 'true'
|
||||||
|
with:
|
||||||
|
key: ${{ steps.cache-magento-keys.outputs.stamp-key }}
|
||||||
|
path: |
|
||||||
|
${{ steps.cache-magento-stamp-paths.outputs.paths }}
|
||||||
|
|
||||||
branding:
|
branding:
|
||||||
icon: "code"
|
icon: "code"
|
||||||
color: "green"
|
color: "green"
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Args: composer_cache_key os php_version composer_version project lock_hash
|
||||||
|
COMPOSER_CACHE_KEY="$1"
|
||||||
|
OS="$2"
|
||||||
|
PHP_VERSION="$3"
|
||||||
|
COMPOSER_VERSION="$4"
|
||||||
|
PROJECT="$5"
|
||||||
|
LOCK_HASH="${6:-}"
|
||||||
|
|
||||||
|
MODE="extension"
|
||||||
|
SUFFIX=""
|
||||||
|
if [ -n "$PROJECT" ]; then
|
||||||
|
MODE="store"
|
||||||
|
[ -n "$LOCK_HASH" ] && SUFFIX=" | $LOCK_HASH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
BASE="composer | v5.8 | ${OS} | ${MODE} | ${COMPOSER_CACHE_KEY} | ${COMPOSER_VERSION} | ${PHP_VERSION}"
|
||||||
|
echo "download-key=${BASE}${SUFFIX}"
|
||||||
|
echo "download-restore-key=${BASE}"
|
||||||
|
echo "stamp-key=composer | stamp | v5.8 | ${OS} | ${MODE} | ${COMPOSER_CACHE_KEY} | ${COMPOSER_VERSION} | ${PHP_VERSION}${SUFFIX}"
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Args: working_directory exclude_from_stamp
|
||||||
|
# working_directory: absolute path (caller is responsible for realpath resolution)
|
||||||
|
# exclude_from_stamp: newline-separated list of composer package names to exclude
|
||||||
|
WORKING_DIR="$1"
|
||||||
|
EXCLUDE_FROM_STAMP="${2:-}"
|
||||||
|
VENDOR="${WORKING_DIR}/vendor"
|
||||||
|
|
||||||
|
PATHS="${VENDOR}/**"$'\n'"!${VENDOR}/**/"$'\n'"!${VENDOR}/magento/magento2-base"$'\n'"!${VENDOR}/magento/magento2-base/**"$'\n'"!${VENDOR}/mage-os/magento2-base"$'\n'"!${VENDOR}/mage-os/magento2-base/**"
|
||||||
|
|
||||||
|
while IFS= read -r pkg; do
|
||||||
|
pkg="${pkg#"${pkg%%[![:space:]]*}"}"
|
||||||
|
pkg="${pkg%"${pkg##*[![:space:]]}"}"
|
||||||
|
[[ -z "$pkg" ]] && continue
|
||||||
|
PATHS="${PATHS}"$'\n'"!${VENDOR}/${pkg}"$'\n'"!${VENDOR}/${pkg}/**"
|
||||||
|
done <<< "$EXCLUDE_FROM_STAMP"
|
||||||
|
|
||||||
|
echo "$PATHS"
|
||||||
Generated
+9
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "magento/product-community-edition",
|
||||||
|
"version": "2.4.7"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packages-dev": []
|
||||||
|
}
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
#!/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 ]
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
# Magento 2 Coding Standard Action
|
|
||||||
|
|
||||||
This Github Action automates the enforcement of Magento Coding Standards. It ensures code consistency and quality by checking code against Magento's specific coding guidelines.
|
|
||||||
|
|
||||||
## Inputs
|
|
||||||
|
|
||||||
For detailed descriptions of each input, refer to [action.yml](./action.yml).
|
|
||||||
|
|
||||||
## Why a Baseline?
|
|
||||||
|
|
||||||
Running PHP CodeSniffer (PHPCS) with a baseline is crucial for managing legacy code. It allows you to set a "starting point" for code quality, ignoring existing issues while ensuring no new issues are introduced. This approach is especially useful for large codebases where addressing all existing issues at once is not feasible. The baseline serves as a record of known issues, enabling teams to focus on maintaining and gradually improving code quality in new or modified code.
|
|
||||||
|
|
||||||
## Usage Example
|
|
||||||
|
|
||||||
The following example demonstrates how to set up the action in your workflow:
|
|
||||||
|
|
||||||
Check how this action is used in mage-os [here](https://github.com/mage-os/mageos-magento2/blob/2.4-develop/.github/workflows/coding-standard-baseline.yml).
|
|
||||||
|
|
||||||
```yml
|
|
||||||
name: Coding Standard Baseline
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
coding-standard:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: graycoreio/github-actions-magento2/coding-standard-baseline@main
|
|
||||||
with:
|
|
||||||
head_repo: "mage-os/mageos-magento2"
|
|
||||||
head_ref: "main"
|
|
||||||
php_version: "8.2"
|
|
||||||
composer_version: "2"
|
|
||||||
version: "*"
|
|
||||||
severity: "5"
|
|
||||||
warning_severity: "8"
|
|
||||||
error_severity: "8"
|
|
||||||
baseline_version: "*"
|
|
||||||
```
|
|
||||||
@@ -1,151 +0,0 @@
|
|||||||
name: "M2 Coding Standard"
|
|
||||||
author: "Mage-OS"
|
|
||||||
description: "A Github Action that runs the Magento Coding Standard."
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
php_version:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
default: "8.2"
|
|
||||||
description: "PHP version used to do the coding standard check (default: 8.2)."
|
|
||||||
|
|
||||||
composer_version:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
default: "2"
|
|
||||||
description: "The version of composer to use (default: 2)."
|
|
||||||
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: "*"
|
|
||||||
description: "The version of the coding standard to use (default: latest)."
|
|
||||||
|
|
||||||
severity:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: "5"
|
|
||||||
description: "The minimum severity required to display an error or warning (default: 5)"
|
|
||||||
|
|
||||||
warning_severity:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: "8"
|
|
||||||
description: "The minimum severity required to display a warning (default: 8)."
|
|
||||||
|
|
||||||
error_severity:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: "8"
|
|
||||||
description: "The minimum severity required to display an error (default: 8)."
|
|
||||||
|
|
||||||
baseline_version:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: "*"
|
|
||||||
description: "The version of phpcs baseline to use (default: latest)."
|
|
||||||
|
|
||||||
head_repo:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "The repository full name of the head branch. E.g.: mage-os/mageos-magento2"
|
|
||||||
|
|
||||||
head_ref:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "The branch name of the head branch. E.g.: main"
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: composite
|
|
||||||
steps:
|
|
||||||
- name: Checkout head
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
ref: ${{ inputs.head_ref }}
|
|
||||||
repository: ${{ inputs.head_repo }}
|
|
||||||
|
|
||||||
- uses: dorny/paths-filter@v2
|
|
||||||
name: Filter changed files
|
|
||||||
id: filter
|
|
||||||
with:
|
|
||||||
list-files: shell
|
|
||||||
filters: |
|
|
||||||
baseline:
|
|
||||||
- modified: '**/**.{php,phtml,graphqls,less,css,html,xml,js}'
|
|
||||||
phpcs:
|
|
||||||
- added|modified: '**/**.{php,phtml,graphqls,less,css,html,xml,js}'
|
|
||||||
|
|
||||||
- name: Check changed files for PHPcs
|
|
||||||
if: steps.filter.outputs.phpcs == 'true'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "One or more files relevant to PHPCS have changed."
|
|
||||||
echo "List all the files that have been added or changed: ${{ steps.filter.outputs.phpcs_files }}"
|
|
||||||
|
|
||||||
- name: Setup PHP
|
|
||||||
if: steps.filter.outputs.phpcs == 'true'
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ inputs.php_version }}
|
|
||||||
tools: composer:v${{ inputs.composer_version }}
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Install coding standards
|
|
||||||
if: steps.filter.outputs.phpcs == 'true'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
composer create-project --no-plugins --no-dev \
|
|
||||||
magento/magento-coding-standard \
|
|
||||||
magento-coding-standard "${{ github.event.inputs.version || '*' }}"
|
|
||||||
|
|
||||||
- name: Install phpcs baseline
|
|
||||||
if: steps.filter.outputs.phpcs == 'true'
|
|
||||||
working-directory: magento-coding-standard
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
composer config --no-plugins allow-plugins.digitalrevolution/php-codesniffer-baseline true
|
|
||||||
composer require --dev "digitalrevolution/php-codesniffer-baseline: ${{ github.event.inputs.baseline_version || '*' }}"
|
|
||||||
|
|
||||||
- name: Checkout base
|
|
||||||
if: steps.filter.outputs.phpcs == 'true'
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
ref: ${{github.event.pull_request.base.ref}}
|
|
||||||
repository: ${{github.event.pull_request.base.repo.full_name}}
|
|
||||||
path: base
|
|
||||||
|
|
||||||
- name: Create phpcs.baseline.xml from base
|
|
||||||
shell: bash
|
|
||||||
working-directory: base
|
|
||||||
if: steps.filter.outputs.baseline == 'true'
|
|
||||||
run: |
|
|
||||||
php ${{ github.workspace }}/magento-coding-standard/vendor/bin/phpcs --standard=Magento2 \
|
|
||||||
$([ -n "${{ inputs.severity }}" ] && echo "--severity=${{ inputs.severity }}") \
|
|
||||||
$([ -n "${{ inputs.warning_severity }}" ] && echo "--warning-severity=${{ inputs.warning_severity }}") \
|
|
||||||
$([ -n "${{ inputs.error_severity }}" ] && echo "--error-severity=${{ inputs.error_severity }}") \
|
|
||||||
--report=\\DR\\CodeSnifferBaseline\\Reports\\Baseline --report-file=phpcs.baseline.xml \
|
|
||||||
${{ steps.filter.outputs.baseline_files }} || /bin/true
|
|
||||||
|
|
||||||
- name: Copy baseline to head
|
|
||||||
if: steps.filter.outputs.baseline == 'true'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cp ${{ github.workspace }}/base/phpcs.baseline.xml ${{ github.workspace }}/magento-coding-standard/phpcs.baseline.xml
|
|
||||||
|
|
||||||
# Since we ran phpcs in the base folder, the files in phpcs.baseline.xml contain the base folder in the path.
|
|
||||||
# We need to remove /base/ so that the phpcs can locate the correct files.
|
|
||||||
- name: Remove base dir from phpcs baseline
|
|
||||||
if: steps.filter.outputs.baseline == 'true'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
sed -i "s|/base/|/|" ${{ github.workspace }}/magento-coding-standard/phpcs.baseline.xml
|
|
||||||
|
|
||||||
- name: Execute phpcs on head for changed files
|
|
||||||
shell: bash
|
|
||||||
if: steps.filter.outputs.phpcs == 'true'
|
|
||||||
run: |
|
|
||||||
php ${{ github.workspace }}/magento-coding-standard/vendor/bin/phpcs --standard=Magento2 \
|
|
||||||
$([ -n "${{ inputs.severity }}" ] && echo "--severity=${{ inputs.severity }}") \
|
|
||||||
$([ -n "${{ inputs.warning_severity }}" ] && echo "--warning-severity=${{ inputs.warning_severity }}") \
|
|
||||||
$([ -n "${{ inputs.error_severity }}" ] && echo "--error-severity=${{ inputs.error_severity }}") \
|
|
||||||
${{ steps.filter.outputs.phpcs_files }}
|
|
||||||
@@ -11,6 +11,8 @@ See the [action.yml](./action.yml)
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
The caller is responsible for checking out the repository and setting up PHP before calling this action.
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
name: Coding Standard
|
name: Coding Standard
|
||||||
|
|
||||||
@@ -26,10 +28,18 @@ jobs:
|
|||||||
coding-standard:
|
coding-standard:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: graycoreio/github-actions-magento2/coding-standard@main
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
|
php-version: '8.3'
|
||||||
|
tools: composer:v2
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/coding-standard@v7.0.0 # x-release-please-version
|
||||||
|
with:
|
||||||
|
path: app/code # Optional, defaults to .
|
||||||
version: 25 # Optional, will use the latest if omitted.
|
version: 25 # Optional, will use the latest if omitted.
|
||||||
path: app/code # Optional, will be used when event is not a pull request.
|
|
||||||
severity: 8 # Optional, will use phpcs default of 5 if not specified.
|
severity: 8 # Optional, will use phpcs default of 5 if not specified.
|
||||||
warning_severity: 4 # Optional, will use severity value if not specified.
|
warning_severity: 4 # Optional, will use severity value if not specified.
|
||||||
error_severity: 7 # Optional, will use severity value if not specified.
|
error_severity: 7 # Optional, will use severity value if not specified.
|
||||||
|
|||||||
+58
-50
@@ -3,20 +3,10 @@ author: "Graycore"
|
|||||||
description: "A Github Action that runs the Magento Coding Standard."
|
description: "A Github Action that runs the Magento Coding Standard."
|
||||||
|
|
||||||
inputs:
|
inputs:
|
||||||
php_version:
|
|
||||||
required: true
|
|
||||||
default: "8.1"
|
|
||||||
description: "PHP version used to do the coding standard check."
|
|
||||||
|
|
||||||
composer_version:
|
|
||||||
required: true
|
|
||||||
default: "2"
|
|
||||||
description: "The version of composer to use."
|
|
||||||
|
|
||||||
path:
|
path:
|
||||||
required: true
|
required: true
|
||||||
default: 'app/code'
|
default: '.'
|
||||||
description: "The directory (relative to the project root) in which the coding standard will be checked. Used when the event is not a pull request."
|
description: "The directory containing the code to check."
|
||||||
|
|
||||||
version:
|
version:
|
||||||
required: false
|
required: false
|
||||||
@@ -42,72 +32,90 @@ inputs:
|
|||||||
default: 'false'
|
default: 'false'
|
||||||
required: false
|
required: false
|
||||||
|
|
||||||
|
composer_auth:
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
description: "Composer authentication credentials (contents of auth.json as a JSON string)"
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Project
|
- name: Check if Coding Standard is already installed
|
||||||
uses: actions/checkout@v6
|
id: check-installed
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
path: project
|
|
||||||
|
|
||||||
- name: Create Standard Directory
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: mkdir standard
|
working-directory: ${{ inputs.path }}
|
||||||
|
run: |
|
||||||
- name: Set PHP Version
|
if [ -d "vendor/magento/magento-coding-standard" ] || [ -d "vendor/mage-os/magento-coding-standard" ]; then
|
||||||
uses: shivammathur/setup-php@v2
|
echo "installed=true" >> $GITHUB_OUTPUT
|
||||||
with:
|
else
|
||||||
php-version: ${{ inputs.php_version }}
|
echo "installed=false" >> $GITHUB_OUTPUT
|
||||||
tools: composer:v${{ inputs.composer_version }}
|
fi
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Get Composer Version
|
- name: Get Composer Version
|
||||||
uses: graycoreio/github-actions-magento2/get-composer-version@main
|
uses: graycoreio/github-actions-magento2/get-composer-version@v8.0.0-rc.2
|
||||||
id: get-composer-version
|
id: get-composer-version
|
||||||
|
if: steps.check-installed.outputs.installed != 'true'
|
||||||
|
|
||||||
- name: Check if allow-plugins option is available for this version of composer
|
- name: Check if allow-plugins option is available for this version of composer
|
||||||
uses: graycoreio/github-actions-magento2/semver-compare@main
|
uses: graycoreio/github-actions-magento2/semver-compare@v8.0.0-rc.2
|
||||||
|
id: is-allow-plugins-available
|
||||||
|
if: steps.check-installed.outputs.installed != 'true'
|
||||||
with:
|
with:
|
||||||
version: 2.2
|
version: 2.2
|
||||||
compare_against: ${{ steps.get-composer-version.outputs.version }}
|
compare_against: ${{ steps.get-composer-version.outputs.version }}
|
||||||
id: is-allow-plugins-available
|
|
||||||
|
|
||||||
- name: Enable dealerdirect/phpcodesniffer-composer-installer plugin
|
- name: Enable dealerdirect/phpcodesniffer-composer-installer plugin
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: standard
|
working-directory: ${{ inputs.path }}
|
||||||
run: composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true --global
|
run: composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true --global
|
||||||
if: steps.is-allow-plugins-available.outputs.result < 1
|
if: steps.check-installed.outputs.installed != 'true' && steps.is-allow-plugins-available.outputs.result < 1
|
||||||
|
|
||||||
- name: Install Coding Standard
|
- name: Install Coding Standard
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: standard
|
working-directory: ${{ inputs.path }}
|
||||||
run: composer require "magento/magento-coding-standard:${{ inputs.version || '*' }}"
|
run: composer require "magento/magento-coding-standard:${{ inputs.version || '*' }}" "magento/php-compatibility-fork"
|
||||||
|
if: steps.check-installed.outputs.installed != 'true'
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ inputs.composer_auth }}
|
||||||
|
|
||||||
- name: Register Coding Standard
|
- name: Register Coding Standard
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: standard
|
working-directory: ${{ inputs.path }}
|
||||||
run: vendor/bin/phpcs --config-set installed_paths ${{ github.workspace }}/standard/vendor/magento/magento-coding-standard,${{ github.workspace }}/standard/vendor/magento/php-compatibility-fork
|
run: |
|
||||||
|
if [ -d vendor/magento/magento-coding-standard ]; then
|
||||||
|
CODING_STANDARD_VENDOR=magento
|
||||||
|
elif [ -d vendor/mage-os/magento-coding-standard ]; then
|
||||||
|
CODING_STANDARD_VENDOR=mage-os
|
||||||
|
else
|
||||||
|
echo "No magento-coding-standard directory found under vendor/magento or vendor/mage-os."
|
||||||
|
echo "Trusting dealerdirect/phpcodesniffer-composer-installer to have registered installed_paths."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
vendor/bin/phpcs --config-set installed_paths \
|
||||||
|
"vendor/${CODING_STANDARD_VENDOR}/magento-coding-standard,vendor/${CODING_STANDARD_VENDOR}/php-compatibility-fork"
|
||||||
|
if: steps.check-installed.outputs.installed != 'true'
|
||||||
|
|
||||||
- name: Set ignore warnings flag
|
- name: Set ignore warnings flag
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: standard
|
working-directory: ${{ inputs.path }}
|
||||||
run: vendor/bin/phpcs --config-set ignore_warnings_on_exit 1
|
run: vendor/bin/phpcs --config-set ignore_warnings_on_exit 1
|
||||||
if: inputs.ignore_warnings == 'true'
|
if: inputs.ignore_warnings == 'true'
|
||||||
|
|
||||||
- name: Get Changed Files
|
|
||||||
shell: bash
|
|
||||||
working-directory: project
|
|
||||||
id: changed-files
|
|
||||||
run: echo "files=$(git diff --name-only --diff-filter=ACMRT ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | xargs)" >> $GITHUB_OUTPUT
|
|
||||||
if: github.event_name == 'pull_request'
|
|
||||||
|
|
||||||
- name: Coding Standard Check
|
- name: Coding Standard Check
|
||||||
shell: bash
|
shell: bash
|
||||||
|
working-directory: ${{ inputs.path }}
|
||||||
run: |
|
run: |
|
||||||
../standard/vendor/bin/phpcs --standard=Magento2 \
|
FLAGS=()
|
||||||
$([ -n "${{ inputs.severity }}" ] && echo "--severity=${{ inputs.severity }}") \
|
[ -n "${{ inputs.severity }}" ] && FLAGS+=(--severity=${{ inputs.severity }}) || true
|
||||||
$([ -n "${{ inputs.warning_severity }}" ] && echo "--warning-severity=${{ inputs.warning_severity }}") \
|
[ -n "${{ inputs.warning_severity }}" ] && FLAGS+=(--warning-severity=${{ inputs.warning_severity }}) || true
|
||||||
$([ -n "${{ inputs.error_severity }}" ] && echo "--error-severity=${{ inputs.error_severity }}") \
|
[ -n "${{ inputs.error_severity }}" ] && FLAGS+=(--error-severity=${{ inputs.error_severity }}) || true
|
||||||
${{ github.event_name == 'pull_request' && steps.changed-files.outputs.files || inputs.path }}
|
|
||||||
working-directory: project
|
if [ -f .phpcs.xml ] || [ -f phpcs.xml ] || [ -f .phpcs.xml.dist ] || [ -f phpcs.xml.dist ]; then
|
||||||
|
vendor/bin/phpcs "${FLAGS[@]}"
|
||||||
|
else
|
||||||
|
vendor/bin/phpcs --standard=Magento2 --ignore=*vendor/* "${FLAGS[@]}" .
|
||||||
|
fi
|
||||||
|
|
||||||
|
branding:
|
||||||
|
icon: "code"
|
||||||
|
color: "green"
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# What belongs in a composite action
|
||||||
|
|
||||||
|
A composite action should do one thing. The guiding test: **can a caller reasonably want to skip part of what this action does, independently of the rest?** If yes, those parts should be separate actions that the caller composes themselves.
|
||||||
|
|
||||||
|
## Good fits for a composite action
|
||||||
|
|
||||||
|
**A single tool installation paired with its execution.** Install the tool, run it, done. `coding-standard` installs PHPCS and runs it. `fix-magento-install` applies a known set of patches. The install and the run are not independently useful — splitting them would add complexity with no benefit.
|
||||||
|
|
||||||
|
**A utility that extracts and exposes a single value.** `get-composer-version`, `get-magento-version`, and `semver-compare` each run one or two commands and write an output. These exist because their output is needed inline by the next step in the same job. That is the right scope for a composite action.
|
||||||
|
|
||||||
|
**A setup operation with a well-defined end state.** `cache-magento` leaves the Composer cache populated. `setup-magento` leaves a Magento project at a known path. The caller gets a clear postcondition and nothing else.
|
||||||
|
|
||||||
|
## Signs an action is too broad
|
||||||
|
|
||||||
|
**It bundles independent setup concerns with execution.** Imagine a `unit-test` action that sets up PHP, installs Composer dependencies, and then runs the test command. These three things can each be wanted or skipped independently. A caller whose job already has PHP set up cannot avoid step 1. A caller that wants to run tests against already-installed dependencies cannot avoid step 2.
|
||||||
|
|
||||||
|
The right scope is just the execution step:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
inputs:
|
||||||
|
test_command:
|
||||||
|
required: true
|
||||||
|
default: composer run test
|
||||||
|
source_folder:
|
||||||
|
required: true
|
||||||
|
default: .
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- run: ${{ inputs.test_command }}
|
||||||
|
shell: bash
|
||||||
|
working-directory: ${{ inputs.source_folder }}
|
||||||
|
```
|
||||||
|
|
||||||
|
The caller is then responsible for composing `setup-php`, `cache-magento`, and `composer install` before calling it — each of which is already a separate action in this repo.
|
||||||
|
|
||||||
|
**It reimplements logic that already exists in another action.** If a new action rolls its own Composer caching inline rather than calling `cache-magento`, that creates two different cache key strategies in the same repo and makes it harder to update caching behavior consistently.
|
||||||
|
|
||||||
|
**The name describes a pipeline, not a step.** Names like "install and test" or "build and deploy" are warning signs. A good action name describes what state it produces or what it checks — not a sequence of operations.
|
||||||
@@ -4,7 +4,7 @@ A Github Workflow that runs various kinds of quality checks for a Magento Extens
|
|||||||
|
|
||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
See the [check-extension.yaml](./check-extension.yaml)
|
See the [check-extension.yaml](../../.github/workflows/check-extension.yaml)
|
||||||
|
|
||||||
| Input | Description | Required | Default |
|
| Input | Description | Required | Default |
|
||||||
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------- | --------------------------- |
|
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------- | --------------------------- |
|
||||||
@@ -38,12 +38,12 @@ jobs:
|
|||||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- uses: graycoreio/github-actions-magento2/supported-version@main
|
- uses: graycoreio/github-actions-magento2/supported-version@v7.0.0 # x-release-please-version
|
||||||
id: supported-version
|
id: supported-version
|
||||||
- run: echo ${{ steps.supported-version.outputs.matrix }}
|
- run: echo ${{ steps.supported-version.outputs.matrix }}
|
||||||
check-extension:
|
check-extension:
|
||||||
needs: compute_matrix
|
needs: compute_matrix
|
||||||
uses: graycoreio/github-actions-magento2/.github/workflows/check-extension.yaml@main
|
uses: graycoreio/github-actions-magento2/.github/workflows/check-extension.yaml@v7.0.0 # x-release-please-version
|
||||||
with:
|
with:
|
||||||
matrix: ${{ needs.compute_matrix.outputs.matrix }}
|
matrix: ${{ needs.compute_matrix.outputs.matrix }}
|
||||||
```
|
```
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# MageCheck Store
|
||||||
|
|
||||||
|
A Github Workflow that runs various kinds of quality checks for a Magento Store.
|
||||||
|
|
||||||
|
Unlike [MageCheck Extension](./check-extension.md), this workflow automatically detects the Magento version from your store's `composer.lock` — no matrix computation required in the calling workflow.
|
||||||
|
|
||||||
|
## Inputs
|
||||||
|
|
||||||
|
See the [check-store.yaml](../../.github/workflows/check-store.yaml)
|
||||||
|
|
||||||
|
| Input | Description | Required | Default |
|
||||||
|
| ------------------- | -------------------------------------------------------------------------------------- | -------- | --------- |
|
||||||
|
| path | The folder of the Magento store that you are testing | false | . |
|
||||||
|
| composer_cache_key | A key to version the composer cache. Can be incremented if you need to bust the cache. | false | \_mageos |
|
||||||
|
| store_artifact_name | If provided, download store files from this artifact instead of using actions/checkout | false | "" |
|
||||||
|
|
||||||
|
## Secrets
|
||||||
|
|
||||||
|
| Input | Description | Required | Default |
|
||||||
|
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- |
|
||||||
|
| composer_auth | Your composer credentials (typically a stringified json object of the contents of your auth.json) | false | NULL |
|
||||||
|
|
||||||
|
## Checks Run
|
||||||
|
|
||||||
|
- **Unit Tests** — runs PHPUnit against custom code in `app/code`. Skipped automatically if no test files are found.
|
||||||
|
- **Coding Standard** — runs the Magento Coding Standard against `app/code`. Uses your `phpcs.xml` (or `.phpcs.xml`, `phpcs.xml.dist`, `.phpcs.xml.dist`) if one exists, otherwise a sensible default is generated.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```yml
|
||||||
|
name: Check Store
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-store:
|
||||||
|
uses: graycoreio/github-actions-magento2/.github/workflows/check-store.yaml@v7.0.0 # x-release-please-version
|
||||||
|
secrets:
|
||||||
|
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Usage with a store artifact
|
||||||
|
|
||||||
|
If your pipeline builds or prepares the store in a prior job and uploads it as an artifact, you can pass the artifact name instead of relying on `actions/checkout`:
|
||||||
|
|
||||||
|
```yml
|
||||||
|
jobs:
|
||||||
|
check-store:
|
||||||
|
uses: graycoreio/github-actions-magento2/.github/workflows/check-store.yaml@v7.0.0 # x-release-please-version
|
||||||
|
secrets:
|
||||||
|
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
```
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
# Integration Tests for a Magento Package
|
# Integration Tests for a Magento Package
|
||||||
|
|
||||||
|
> **Deprecated** — use [MageCheck Extension](./check-extension.md) instead. Scheduled for removal in v10.
|
||||||
|
|
||||||
A Github Workflow that runs the Integration Tests of a Magento Package
|
A Github Workflow that runs the Integration Tests of a Magento Package
|
||||||
|
|
||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
See the [integration.yaml](./integration.yaml)
|
See the [integration.yaml](../../.github/workflows/integration.yaml)
|
||||||
|
|
||||||
| Input | Description | Required | Default |
|
| Input | Description | Required | Default |
|
||||||
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------------------------- |
|
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------------------------- |
|
||||||
@@ -48,13 +50,13 @@ jobs:
|
|||||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- uses: graycoreio/github-actions-magento2/supported-version@main
|
- uses: graycoreio/github-actions-magento2/supported-version@v7.0.0 # x-release-please-version
|
||||||
with:
|
with:
|
||||||
include_services: true
|
include_services: true
|
||||||
id: supported-version
|
id: supported-version
|
||||||
integration-workflow:
|
integration-workflow:
|
||||||
needs: compute_matrix
|
needs: compute_matrix
|
||||||
uses: graycoreio/github-actions-magento2/.github/workflows/integration.yaml@main
|
uses: graycoreio/github-actions-magento2/.github/workflows/integration.yaml@v7.0.0 # x-release-please-version
|
||||||
with:
|
with:
|
||||||
package_name: my-vendor/package
|
package_name: my-vendor/package
|
||||||
matrix: ${{ needs.compute_matrix.outputs.matrix }}
|
matrix: ${{ needs.compute_matrix.outputs.matrix }}
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- uses: graycoreio/github-actions-magento2/fix-magento-install@main
|
- uses: graycoreio/github-actions-magento2/fix-magento-install@v7.0.0 # x-release-please-version
|
||||||
with:
|
with:
|
||||||
magento_directory: path/to/magento
|
magento_directory: path/to/magento
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ inputs:
|
|||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
- uses: graycoreio/github-actions-magento2/get-magento-version@main
|
- uses: graycoreio/github-actions-magento2/get-magento-version@v8.0.0-rc.2
|
||||||
id: init-magento-get-magento-version
|
id: init-magento-get-magento-version
|
||||||
with:
|
with:
|
||||||
working-directory: ${{ inputs.magento_directory }}
|
working-directory: ${{ inputs.magento_directory }}
|
||||||
|
|
||||||
- run: echo "::set-output name=version::$(composer --version | awk '{print $3}')"
|
- run: echo "version=$(composer --version | awk '{print $3}')" >> $GITHUB_OUTPUT
|
||||||
shell: bash
|
shell: bash
|
||||||
name: Compute Composer Version
|
name: Compute Composer Version
|
||||||
id: init-magento-get-composer-version
|
id: init-magento-get-composer-version
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
name: A job to compute an installed Composer version.
|
name: A job to compute an installed Composer version.
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- uses: graycoreio/github-actions-magento2/get-composer-version@main
|
- uses: graycoreio/github-actions-magento2/get-composer-version@v7.0.0 # x-release-please-version
|
||||||
id: get-composer-version
|
id: get-composer-version
|
||||||
- run: echo version ${{ steps.get-composer-version.outputs.version }}
|
- run: echo version ${{ steps.get-composer-version.outputs.version }}
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
name: A job to compute an installed Magento version.
|
name: A job to compute an installed Magento version.
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- uses: graycoreio/github-actions-magento2/get-magento-version@main
|
- uses: graycoreio/github-actions-magento2/get-magento-version@v7.0.0 # x-release-please-version
|
||||||
id: get-magento-version
|
id: get-magento-version
|
||||||
- run: echo version ${{ steps.get-magento-version.outputs.version }}
|
- run: echo version ${{ steps.get-magento-version.outputs.version }}
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
@@ -9,22 +9,20 @@ inputs:
|
|||||||
required: false
|
required: false
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
version: # id of output
|
version:
|
||||||
description: 'The determined version of Magento'
|
description: 'The resolved Magento version (e.g. 2.4.6-p14)'
|
||||||
value: ${{ steps.get-magento-version.outputs.version }}
|
value: ${{ steps.get-magento-version.outputs.version }}
|
||||||
|
project:
|
||||||
|
description: 'The Magento project package name (e.g. magento/project-community-edition)'
|
||||||
|
value: ${{ steps.get-magento-version.outputs.project }}
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
- run: |
|
- name: Compute Installed Magento version
|
||||||
echo "version=$(cat composer.json | jq '.require
|
|
||||||
| with_entries( select(.key == "magento/product-community-edition" or .key == "magento/product-enterprise-edition") )
|
|
||||||
| to_entries
|
|
||||||
| .[0].value')" >> $GITHUB_OUTPUT
|
|
||||||
shell: bash
|
|
||||||
working-directory: ${{ inputs.working-directory }}
|
|
||||||
name: Compute Installed Magento version
|
|
||||||
id: get-magento-version
|
id: get-magento-version
|
||||||
|
shell: bash
|
||||||
|
run: bash "${{ github.action_path }}/get-magento-version.sh" "${{ inputs.working-directory }}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
branding:
|
branding:
|
||||||
icon: "code"
|
icon: "code"
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "magento/product-enterprise-edition",
|
||||||
|
"version": "2.4.7-p1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packages-dev": []
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"name": "vendor/module",
|
||||||
|
"type": "magento2-module",
|
||||||
|
"require": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "mage-os/product-community-edition",
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packages-dev": []
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"require": {
|
||||||
|
"magento/product-community-edition": "2.4.6-p1"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "magento/product-community-edition",
|
||||||
|
"version": "2.4.7"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packages-dev": []
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "magento/product-community-edition",
|
||||||
|
"version": "v2.4.6"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packages-dev": []
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -uo pipefail
|
||||||
|
|
||||||
|
WORKING_DIR="${1:-.}"
|
||||||
|
PATTERN="magento/product-(community|enterprise)-edition|mage-os/product-community-edition"
|
||||||
|
|
||||||
|
cd "$WORKING_DIR"
|
||||||
|
|
||||||
|
if [ -f composer.lock ]; then
|
||||||
|
RESULT=$(jq -r --arg p "$PATTERN" '.packages[] | select(.name | test($p)) | "\(.name) \(.version)"' composer.lock | head -1)
|
||||||
|
elif [ -f composer.json ]; then
|
||||||
|
RESULT=$(jq -r --arg p "$PATTERN" '.require | to_entries[] | select(.key | test($p)) | "\(.key) \(.value)"' composer.json | head -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
PRODUCT=$(echo "${RESULT:-}" | awk '{print $1}')
|
||||||
|
VERSION=$(echo "${RESULT:-}" | awk '{print $2}' | sed 's/^v//')
|
||||||
|
PROJECT=$(echo "$PRODUCT" | sed 's/product-/project-/')
|
||||||
|
|
||||||
|
echo "version=\"$VERSION\""
|
||||||
|
echo "project=$PROJECT"
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
SCRIPT="$SCRIPT_DIR/get-magento-version.sh"
|
||||||
|
FIXTURES="$SCRIPT_DIR/fixtures"
|
||||||
|
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-
|
||||||
|
}
|
||||||
|
|
||||||
|
OUT=$(bash "$SCRIPT" "$FIXTURES/store-lock")
|
||||||
|
assert_eq "store lock: version" '"2.4.7"' "$(field "$OUT" version)"
|
||||||
|
assert_eq "store lock: project" "magento/project-community-edition" "$(field "$OUT" project)"
|
||||||
|
|
||||||
|
OUT=$(bash "$SCRIPT" "$FIXTURES/store-v-prefix")
|
||||||
|
assert_eq "store v-prefix: version" '"2.4.6"' "$(field "$OUT" version)"
|
||||||
|
|
||||||
|
OUT=$(bash "$SCRIPT" "$FIXTURES/enterprise")
|
||||||
|
assert_eq "enterprise: version" '"2.4.7-p1"' "$(field "$OUT" version)"
|
||||||
|
assert_eq "enterprise: project" "magento/project-enterprise-edition" "$(field "$OUT" project)"
|
||||||
|
|
||||||
|
OUT=$(bash "$SCRIPT" "$FIXTURES/mage-os")
|
||||||
|
assert_eq "mage-os: version" '"1.0.0"' "$(field "$OUT" version)"
|
||||||
|
assert_eq "mage-os: project" "mage-os/project-community-edition" "$(field "$OUT" project)"
|
||||||
|
|
||||||
|
OUT=$(bash "$SCRIPT" "$FIXTURES/store-json")
|
||||||
|
assert_eq "store json: version" '"2.4.6-p1"' "$(field "$OUT" version)"
|
||||||
|
assert_eq "store json: project" "magento/project-community-edition" "$(field "$OUT" project)"
|
||||||
|
|
||||||
|
OUT=$(bash "$SCRIPT" "$FIXTURES/extension")
|
||||||
|
assert_eq "extension: version" '""' "$(field "$OUT" version)"
|
||||||
|
assert_eq "extension: project" "" "$(field "$OUT" project)"
|
||||||
|
|
||||||
|
OUT=$(bash "$SCRIPT" "$FIXTURES/empty")
|
||||||
|
assert_eq "empty dir: version" '""' "$(field "$OUT" version)"
|
||||||
|
assert_eq "empty dir: project" "" "$(field "$OUT" project)"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "$PASS passed, $FAIL failed"
|
||||||
|
[ "$FAIL" -eq 0 ]
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
# Magento 2 Package Installation Test Action
|
|
||||||
|
|
||||||
A Github Action that tests the installability of a Magento Package
|
|
||||||
|
|
||||||
## Inputs
|
|
||||||
|
|
||||||
See the [action.yml](./action.yml)
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```yml
|
|
||||||
name: Installation Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
compute_matrix:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: graycoreio/github-actions-magento2/supported-version@main
|
|
||||||
id: supported-version
|
|
||||||
- run: echo ${{ steps.supported-version.outputs.matrix }}
|
|
||||||
|
|
||||||
install-test:
|
|
||||||
needs: compute_matrix
|
|
||||||
strategy:
|
|
||||||
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: graycoreio/github-actions-magento2/installation-test@main
|
|
||||||
with:
|
|
||||||
composer_version: ${{ matrix.composer }}
|
|
||||||
php_version: ${{ matrix.php }}
|
|
||||||
magento_version: ${{ matrix.magento }}
|
|
||||||
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
|
||||||
package_name: vendor/package
|
|
||||||
source_folder: $GITHUB_WORKSPACE
|
|
||||||
```
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
name: "Installation Test"
|
|
||||||
author: "Graycore"
|
|
||||||
description: " A Github Action that tests the installability of a Magento Package"
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
php_version:
|
|
||||||
required: true
|
|
||||||
default: "8.1"
|
|
||||||
description: "PHP Version to use"
|
|
||||||
|
|
||||||
cache_key:
|
|
||||||
required: true
|
|
||||||
default: "2"
|
|
||||||
description: "The cache key used to hold Composer Packages"
|
|
||||||
|
|
||||||
composer_version:
|
|
||||||
required: true
|
|
||||||
default: "2"
|
|
||||||
description: "The version of composer to use"
|
|
||||||
|
|
||||||
use_local_source:
|
|
||||||
required: false
|
|
||||||
default: "true"
|
|
||||||
description: "Whether or not you want to test your local package or not."
|
|
||||||
|
|
||||||
source_folder:
|
|
||||||
required: true
|
|
||||||
default: $GITHUB_WORKSPACE
|
|
||||||
description: "The source folder of the package"
|
|
||||||
|
|
||||||
package_name:
|
|
||||||
required: true
|
|
||||||
description: "The name of the package"
|
|
||||||
|
|
||||||
magento_directory:
|
|
||||||
required: true
|
|
||||||
default: "../magento2"
|
|
||||||
description: "The folder where Magento will be installed"
|
|
||||||
|
|
||||||
magento_version:
|
|
||||||
required: true
|
|
||||||
default: "magento/project-community-edition"
|
|
||||||
description: "The version of Magento to test against"
|
|
||||||
|
|
||||||
magento_repository:
|
|
||||||
required: true
|
|
||||||
default: "https://mirror.mage-os.org/"
|
|
||||||
description: "Where to install Magento from"
|
|
||||||
|
|
||||||
composer_cache_key:
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
description: A key to version the composer cache. Can be incremented if you need to bust the cache.
|
|
||||||
|
|
||||||
composer_auth:
|
|
||||||
required: false
|
|
||||||
description: "Composer Authentication Credentials"
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Set PHP Version
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ inputs.php_version }}
|
|
||||||
|
|
||||||
- run: composer self-update ${{ inputs.composer_version }}
|
|
||||||
name: Pin to Composer Version ${{ inputs.composer_version }}
|
|
||||||
if: contains(inputs.composer_version, '.') == true
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- run: composer self-update --${{ inputs.composer_version }}
|
|
||||||
name: Pin to Composer Version ${{ inputs.composer_version }} (Range)
|
|
||||||
if: contains(inputs.composer_version, '.') == false
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- run: composer create-project --repository-url="${{ inputs.magento_repository }}" "${{ inputs.magento_version }}" ${{ inputs.magento_directory }} --no-install
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
COMPOSER_AUTH: ${{ inputs.composer_auth }}
|
|
||||||
name: Create Magento ${{ inputs.magento_version }} Project
|
|
||||||
|
|
||||||
- name: Get Composer Cache Directory
|
|
||||||
shell: bash
|
|
||||||
working-directory: ${{ inputs.magento_directory }}
|
|
||||||
id: composer-cache
|
|
||||||
run: |
|
|
||||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
|
|
||||||
- name: "Cache Composer Packages"
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
key: "composer | v5 | ${{ inputs.composer_cache_key }} | ${{ hashFiles('composer.lock') }} | ${{ runner.os }} | ${{ inputs.composer_version }} | ${{ inputs.php_version }} | ${{ inputs.magento_version }}"
|
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
|
||||||
|
|
||||||
- run: composer config repositories.local path ${{ inputs.source_folder }}
|
|
||||||
name: Add Github Repo for Testing
|
|
||||||
working-directory: ${{ inputs.magento_directory }}
|
|
||||||
shell: bash
|
|
||||||
if: ${{ inputs.use_local_source == 'true' }}
|
|
||||||
|
|
||||||
- run: |
|
|
||||||
composer config --no-interaction allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
|
|
||||||
composer config --no-interaction allow-plugins.laminas/laminas-dependency-plugin true
|
|
||||||
composer config --no-interaction allow-plugins.magento/* true
|
|
||||||
name: Fixup Composer Plugins
|
|
||||||
shell: bash
|
|
||||||
working-directory: ${{ inputs.magento_directory }}
|
|
||||||
if: ${{ !startsWith(inputs.composer_version, '1') }}
|
|
||||||
|
|
||||||
- run: composer require ${{ inputs.package_name }} "@dev" --no-update && composer install
|
|
||||||
name: Require and attempt install
|
|
||||||
working-directory: ${{ inputs.magento_directory }}
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
COMPOSER_CACHE_DIR: ${{ steps.composer-cache.outputs.dir }}
|
|
||||||
COMPOSER_AUTH: ${{ inputs.composer_auth }}
|
|
||||||
|
|
||||||
branding:
|
|
||||||
icon: "code"
|
|
||||||
color: "green"
|
|
||||||
Generated
+23
-7
@@ -1,15 +1,16 @@
|
|||||||
{
|
{
|
||||||
"name": "@graycoreio/github-actions-magento2",
|
"name": "@graycoreio/github-actions-magento2",
|
||||||
"version": "5.1.0",
|
"version": "8.0.0-rc.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@graycoreio/github-actions-magento2",
|
"name": "@graycoreio/github-actions-magento2",
|
||||||
"version": "5.1.0",
|
"version": "8.0.0-rc.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.11.1"
|
"@actions/core": "^1.11.1",
|
||||||
|
"@actions/exec": "^3.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
@@ -33,7 +34,7 @@
|
|||||||
"@actions/http-client": "^2.0.1"
|
"@actions/http-client": "^2.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@actions/exec": {
|
"node_modules/@actions/core/node_modules/@actions/exec": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz",
|
||||||
"integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==",
|
"integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==",
|
||||||
@@ -42,6 +43,21 @@
|
|||||||
"@actions/io": "^1.0.1"
|
"@actions/io": "^1.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@actions/core/node_modules/@actions/io": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz",
|
||||||
|
"integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/@actions/exec": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@actions/exec/-/exec-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/io": "^3.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@actions/http-client": {
|
"node_modules/@actions/http-client": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz",
|
||||||
@@ -53,9 +69,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@actions/io": {
|
"node_modules/@actions/io": {
|
||||||
"version": "1.1.3",
|
"version": "3.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/io/-/io-3.0.2.tgz",
|
||||||
"integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==",
|
"integrity": "sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@babel/code-frame": {
|
"node_modules/@babel/code-frame": {
|
||||||
|
|||||||
+4
-3
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "@graycoreio/github-actions-magento2",
|
"name": "@graycoreio/github-actions-magento2",
|
||||||
"version": "5.1.0",
|
"version": "8.0.0-rc.2",
|
||||||
"description": "Github Actions for Magento 2",
|
"description": "Github Actions for Magento 2",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "cd supported-version && npm run test && cd -",
|
"test": "cd supported-version && npm run test && cd - && cd setup-install && npm run test && cd -",
|
||||||
"release": "standard-version"
|
"release": "standard-version"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
@@ -18,7 +18,8 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/graycoreio/github-actions-magento2#readme",
|
"homepage": "https://github.com/graycoreio/github-actions-magento2#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.11.1"
|
"@actions/core": "^1.11.1",
|
||||||
|
"@actions/exec": "^3.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
|
|||||||
@@ -3,12 +3,17 @@
|
|||||||
"bump-patch-for-minor-pre-major": true,
|
"bump-patch-for-minor-pre-major": true,
|
||||||
"draft-pull-request": true,
|
"draft-pull-request": true,
|
||||||
"prerelease": true,
|
"prerelease": true,
|
||||||
|
"prerelease-type": "rc.0",
|
||||||
"include-component-in-tag": false,
|
"include-component-in-tag": false,
|
||||||
"include-v-in-tag": true,
|
"include-v-in-tag": true,
|
||||||
"pull-request-title-pattern": "chore: release ${version}",
|
"pull-request-title-pattern": "chore: release ${version}",
|
||||||
"packages": {
|
"packages": {
|
||||||
".": {
|
".": {
|
||||||
"release-type": "node"
|
"release-type": "node",
|
||||||
|
"extra-files": [
|
||||||
|
{ "type": "generic", "path": "*/README.md", "glob": true },
|
||||||
|
{ "type": "generic", "path": "docs/workflows/*.md", "glob": true }
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"bump-minor-pre-major": true,
|
||||||
|
"bump-patch-for-minor-pre-major": true,
|
||||||
|
"draft-pull-request": true,
|
||||||
|
"prerelease": true,
|
||||||
|
"prerelease-type": "rc.0",
|
||||||
|
"include-component-in-tag": false,
|
||||||
|
"include-v-in-tag": true,
|
||||||
|
"pull-request-title-pattern": "chore: release ${version}",
|
||||||
|
"packages": {
|
||||||
|
".": {
|
||||||
|
"release-type": "node",
|
||||||
|
"versioning": "prerelease"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# Sansec eComscan Security Scan Action
|
||||||
|
|
||||||
|
A Github Action that runs the [Sansec eComscan](https://sansec.io/ecomscan) security scanner.
|
||||||
|
|
||||||
|
## Inputs
|
||||||
|
|
||||||
|
See the [action.yml](./action.yml)
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
The caller is responsible for checking out the repository before calling this action. A valid Sansec license key must be passed via the `ecomscan_key` input.
|
||||||
|
|
||||||
|
The `path` input should point to the root of the Magento installation — the directory that contains `app/`, `vendor/`, etc. It defaults to `.` (the current working directory).
|
||||||
|
|
||||||
|
```yml
|
||||||
|
name: Sansec eComscan Security Scan
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request_target:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run-ecomscan:
|
||||||
|
# Skip if it's a push event on a PR (it can't access secrets)
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/sansec-ecomscan@v7.0.0 # x-release-please-version
|
||||||
|
with:
|
||||||
|
license: ${{ secrets.SANSEC_LICENSE_KEY }}
|
||||||
|
```
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
name: "Sansec eComscan Security Scan"
|
||||||
|
author: "Graycore"
|
||||||
|
description: "A Github Action that runs the Sansec eComscan security scanner."
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
license:
|
||||||
|
required: true
|
||||||
|
description: "Sansec license key (ECOMSCAN_KEY)"
|
||||||
|
|
||||||
|
path:
|
||||||
|
required: true
|
||||||
|
default: '.'
|
||||||
|
description: "The directory to scan."
|
||||||
|
|
||||||
|
skip_database:
|
||||||
|
required: false
|
||||||
|
default: 'true'
|
||||||
|
description: "Skip the database scan (--skip-database). Defaults to true."
|
||||||
|
|
||||||
|
skip-server-checks:
|
||||||
|
required: false
|
||||||
|
default: 'true'
|
||||||
|
description: "Skip server / os level checks like copy-fail"
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- name: Download eComscan
|
||||||
|
shell: bash
|
||||||
|
run: wget https://ecomscan.com/downloads/linux-amd64/ecomscan
|
||||||
|
|
||||||
|
- name: Fix permissions
|
||||||
|
shell: bash
|
||||||
|
run: chmod +x ecomscan
|
||||||
|
|
||||||
|
- name: Run eComscan
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
ECOMSCAN_KEY: ${{ inputs.license }}
|
||||||
|
run: |
|
||||||
|
[ "${{ inputs.skip-server-checks }}" = "true" ] && export ECOMSCAN_SKIP_SERVER_CHECKS=true
|
||||||
|
FLAGS=(--no-auto-update --deep --format=csv)
|
||||||
|
[ "${{ inputs.skip_database }}" = "true" ] && FLAGS+=(--skip-database)
|
||||||
|
output=$(./ecomscan "${FLAGS[@]}" "${{ inputs.path }}")
|
||||||
|
if [ -n "$output" ]; then
|
||||||
|
echo "Security issues found:"
|
||||||
|
echo "$output"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
branding:
|
||||||
|
icon: "shield"
|
||||||
|
color: "red"
|
||||||
@@ -31,7 +31,7 @@ jobs:
|
|||||||
name: A job to semantically compare two versions
|
name: A job to semantically compare two versions
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- uses: graycoreio/github-actions-magento2/semver-compare@main
|
- uses: graycoreio/github-actions-magento2/semver-compare@v7.0.0 # x-release-please-version
|
||||||
with:
|
with:
|
||||||
version: 2.1.0
|
version: 2.1.0
|
||||||
compare_against: 2.2.3
|
compare_against: 2.2.3
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# Setup DI Compile
|
||||||
|
|
||||||
|
A GitHub Action that enables all Magento modules and runs `bin/magento setup:di:compile`.
|
||||||
|
|
||||||
|
The caller is responsible for checkout, PHP/composer setup, and `composer install`. This action only performs the compilation step.
|
||||||
|
|
||||||
|
## Inputs
|
||||||
|
|
||||||
|
| Input | Required | Default | Description |
|
||||||
|
| ------ | -------- | ------- | ------------------------------------------------------------------ |
|
||||||
|
| `path` | No | `.` | Path to the Magento root directory. |
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```yml
|
||||||
|
name: DI Compile
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compute_matrix:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- uses: graycoreio/github-actions-magento2/supported-version@v7.0.0 # x-release-please-version
|
||||||
|
id: supported-version
|
||||||
|
|
||||||
|
compile:
|
||||||
|
needs: compute_matrix
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/setup-magento@v7.0.0 # x-release-please-version
|
||||||
|
id: setup-magento
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v${{ matrix.composer }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/cache-magento@v7.0.0 # x-release-please-version
|
||||||
|
|
||||||
|
- run: composer install
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/setup-di-compile@v7.0.0 # x-release-please-version
|
||||||
|
with:
|
||||||
|
path: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
```
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
name: "Magento compilation (setup:di:compile)"
|
||||||
|
author: "Graycore"
|
||||||
|
description: "A GitHub Action that runs bin/magento setup:di:compile."
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
path:
|
||||||
|
required: false
|
||||||
|
default: "."
|
||||||
|
description: "Path to the Magento root directory. Accepts the output of the setup-magento action."
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- name: Enable all modules
|
||||||
|
working-directory: ${{ inputs.path }}
|
||||||
|
shell: bash
|
||||||
|
run: php bin/magento module:enable --all
|
||||||
|
|
||||||
|
- name: Compile
|
||||||
|
working-directory: ${{ inputs.path }}
|
||||||
|
shell: bash
|
||||||
|
run: php bin/magento setup:di:compile
|
||||||
|
|
||||||
|
branding:
|
||||||
|
icon: "tool"
|
||||||
|
color: "orange"
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
# Setup Install
|
||||||
|
|
||||||
|
A GitHub Action that runs `bin/magento setup:install` using the services configuration from the [`supported-version`](../supported-version/README.md) matrix output. Database and service credentials are read directly from the service configuration of `supported-version`, so they stay in sync with the running containers automatically.
|
||||||
|
|
||||||
|
## Inputs
|
||||||
|
|
||||||
|
| Input | Required | Default | Description |
|
||||||
|
| ------------ | -------- | ------- | ----------------------------------------------------------- |
|
||||||
|
| `services` | No | `null` | JSON services object from `supported-version` matrix output |
|
||||||
|
| `path` | No | `.` | Path to the Magento root directory |
|
||||||
|
| `extra_args` | No | `""` | Additional arguments to append to `setup:install` |
|
||||||
|
|
||||||
|
## Outputs
|
||||||
|
|
||||||
|
| Output | Description |
|
||||||
|
| --------- | --------------------------------------------------------- |
|
||||||
|
| `command` | The full `bin/magento setup:install` command that was run |
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
This action is designed to work with [`supported-version`](../supported-version/README.md) (with `include_services: true`) and [`setup-magento`](../setup-magento/README.md).
|
||||||
|
|
||||||
|
```yml
|
||||||
|
name: Install Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compute_matrix:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- uses: graycoreio/github-actions-magento2/supported-version@v7.0.0 # x-release-please-version
|
||||||
|
id: supported-version
|
||||||
|
with:
|
||||||
|
include_services: "true"
|
||||||
|
|
||||||
|
install:
|
||||||
|
needs: compute_matrix
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
services: ${{ matrix.services }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/setup-magento@v7.0.0 # x-release-please-version
|
||||||
|
id: setup-magento
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v${{ matrix.composer }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- run: composer install
|
||||||
|
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/setup-install@v7.0.0 # x-release-please-version
|
||||||
|
with:
|
||||||
|
services: ${{ toJSON(matrix.services) }}
|
||||||
|
path: ${{ steps.setup-magento.outputs.path }}
|
||||||
|
```
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
name: "Magento setup:install"
|
||||||
|
author: "Graycore"
|
||||||
|
description: "A GitHub Action that runs bin/magento setup:install, deriving service flags from the supported-version services matrix."
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
services:
|
||||||
|
required: false
|
||||||
|
default: "null"
|
||||||
|
description: "JSON string of the services key from the supported-version matrix entry (toJSON(matrix.services))."
|
||||||
|
|
||||||
|
path:
|
||||||
|
required: false
|
||||||
|
default: "."
|
||||||
|
description: "Path to the Magento root directory. Accepts the output of the setup-magento action."
|
||||||
|
|
||||||
|
extra_args:
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
description: "Additional raw flags to append to the setup:install command."
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
command:
|
||||||
|
description: "The full bin/magento setup:install command that was run."
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "node24"
|
||||||
|
main: "dist/index.js"
|
||||||
|
|
||||||
|
branding:
|
||||||
|
icon: "tool"
|
||||||
|
color: "orange"
|
||||||
Vendored
+69
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
|
|||||||
|
module.exports = {
|
||||||
|
clearMocks: true,
|
||||||
|
moduleFileExtensions: ['js', 'ts'],
|
||||||
|
testMatch: ['**/*.spec.ts'],
|
||||||
|
transform: {
|
||||||
|
'^.+\\.ts$': 'ts-jest'
|
||||||
|
},
|
||||||
|
verbose: true
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"name": "@graycoreio/github-actions-magento2-setup-install",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "A Github Action that runs bin/magento setup:install from the supported-version services matrix",
|
||||||
|
"main": "index.js",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"build": "npx esbuild --outfile=dist/index.js --platform=node --bundle --minify src/index.ts",
|
||||||
|
"test": "jest"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/core": "0.0.0-PLACEHOLDER",
|
||||||
|
"@actions/exec": "0.0.0-PLACEHOLDER"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/jest": "0.0.0-PLACEHOLDER",
|
||||||
|
"jest": "0.0.0-PLACEHOLDER",
|
||||||
|
"ts-jest": "0.0.0-PLACEHOLDER"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,176 @@
|
|||||||
|
import { buildInstallArgs, buildMysqlPrepArgs, Services } from './build-command';
|
||||||
|
|
||||||
|
const BASE_ARGS = [
|
||||||
|
'--base-url=http://localhost/',
|
||||||
|
'--admin-user=admin',
|
||||||
|
'--admin-password=admin123',
|
||||||
|
'--admin-email=admin@example.com',
|
||||||
|
'--admin-firstname=Admin',
|
||||||
|
'--admin-lastname=User',
|
||||||
|
'--backend-frontname=admin',
|
||||||
|
];
|
||||||
|
|
||||||
|
const MYSQL_SERVICE = {
|
||||||
|
image: 'mysql:8.4',
|
||||||
|
env: {
|
||||||
|
MYSQL_DATABASE: 'magento_integration_tests',
|
||||||
|
MYSQL_USER: 'user',
|
||||||
|
MYSQL_PASSWORD: 'password',
|
||||||
|
MYSQL_ROOT_PASSWORD: 'rootpassword',
|
||||||
|
},
|
||||||
|
ports: ['3306:3306'],
|
||||||
|
options: '--health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3',
|
||||||
|
};
|
||||||
|
|
||||||
|
const MYSQL_ARGS = [
|
||||||
|
'--db-host=127.0.0.1:3306',
|
||||||
|
'--db-name=magento_integration_tests',
|
||||||
|
'--db-user=user',
|
||||||
|
'--db-password=password',
|
||||||
|
];
|
||||||
|
|
||||||
|
const OPENSEARCH_ARGS = [
|
||||||
|
'--search-engine=opensearch',
|
||||||
|
'--opensearch-host=localhost',
|
||||||
|
'--opensearch-port=9200',
|
||||||
|
];
|
||||||
|
|
||||||
|
const RABBITMQ_ARGS = [
|
||||||
|
'--amqp-host=localhost',
|
||||||
|
'--amqp-port=5672',
|
||||||
|
'--amqp-user=guest',
|
||||||
|
'--amqp-password=guest',
|
||||||
|
];
|
||||||
|
|
||||||
|
const CACHE_ARGS = [
|
||||||
|
'--session-save=redis',
|
||||||
|
'--session-save-redis-host=localhost',
|
||||||
|
'--session-save-redis-port=6379',
|
||||||
|
'--cache-backend=redis',
|
||||||
|
'--cache-backend-redis-server=localhost',
|
||||||
|
'--cache-backend-redis-port=6379',
|
||||||
|
];
|
||||||
|
|
||||||
|
describe('buildInstallArgs', () => {
|
||||||
|
describe('base args', () => {
|
||||||
|
it('returns only base args when services is null', () => {
|
||||||
|
expect(buildInstallArgs(null)).toEqual(BASE_ARGS);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns only base args when services is empty', () => {
|
||||||
|
expect(buildInstallArgs({})).toEqual(BASE_ARGS);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('mysql', () => {
|
||||||
|
it('adds db flags when mysql service is present', () => {
|
||||||
|
const services: Services = { mysql: MYSQL_SERVICE };
|
||||||
|
expect(buildInstallArgs(services)).toEqual([...BASE_ARGS, ...MYSQL_ARGS]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('search engine', () => {
|
||||||
|
it('adds opensearch flags when opensearch service is present', () => {
|
||||||
|
const services: Services = { opensearch: { image: 'opensearchproject/opensearch:2.19.1' } };
|
||||||
|
expect(buildInstallArgs(services)).toEqual([...BASE_ARGS, ...OPENSEARCH_ARGS]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('adds elasticsearch7 flags for an elasticsearch 7.x image', () => {
|
||||||
|
const services: Services = { elasticsearch: { image: 'elasticsearch:7.17.0' } };
|
||||||
|
expect(buildInstallArgs(services)).toEqual([
|
||||||
|
...BASE_ARGS,
|
||||||
|
'--search-engine=elasticsearch7',
|
||||||
|
'--elasticsearch-host=localhost',
|
||||||
|
'--elasticsearch-port=9200',
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('adds elasticsearch8 flags for an elasticsearch 8.x image', () => {
|
||||||
|
const services: Services = { elasticsearch: { image: 'elasticsearch:8.11.4' } };
|
||||||
|
expect(buildInstallArgs(services)).toEqual([
|
||||||
|
...BASE_ARGS,
|
||||||
|
'--search-engine=elasticsearch8',
|
||||||
|
'--elasticsearch-host=localhost',
|
||||||
|
'--elasticsearch-port=9200',
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('prefers opensearch over elasticsearch when both are present', () => {
|
||||||
|
const services: Services = {
|
||||||
|
opensearch: { image: 'opensearchproject/opensearch:2.19.1' },
|
||||||
|
elasticsearch: { image: 'elasticsearch:8.11.4' },
|
||||||
|
};
|
||||||
|
const args = buildInstallArgs(services);
|
||||||
|
expect(args).toContain('--search-engine=opensearch');
|
||||||
|
expect(args.some(a => a.startsWith('--search-engine=elasticsearch'))).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('rabbitmq', () => {
|
||||||
|
it('adds amqp flags when rabbitmq service is present', () => {
|
||||||
|
const services: Services = { rabbitmq: { image: 'rabbitmq:4.0-management' } };
|
||||||
|
expect(buildInstallArgs(services)).toEqual([...BASE_ARGS, ...RABBITMQ_ARGS]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('cache / session', () => {
|
||||||
|
it('adds redis cache flags when redis service is present', () => {
|
||||||
|
const services: Services = { redis: { image: 'redis:7.2' } };
|
||||||
|
expect(buildInstallArgs(services)).toEqual([...BASE_ARGS, ...CACHE_ARGS]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('adds redis cache flags when valkey service is present', () => {
|
||||||
|
const services: Services = { valkey: { image: 'valkey:8.0' } };
|
||||||
|
expect(buildInstallArgs(services)).toEqual([...BASE_ARGS, ...CACHE_ARGS]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('adds cache flags once when both valkey and redis are present', () => {
|
||||||
|
const services: Services = {
|
||||||
|
valkey: { image: 'valkey:8.0' },
|
||||||
|
redis: { image: 'redis:7.2' },
|
||||||
|
};
|
||||||
|
const args = buildInstallArgs(services);
|
||||||
|
expect(args.filter(a => a === '--session-save=redis')).toHaveLength(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('buildMysqlPrepArgs', () => {
|
||||||
|
it('uses root password and port from service config', () => {
|
||||||
|
expect(buildMysqlPrepArgs(MYSQL_SERVICE)).toEqual([
|
||||||
|
'-h127.0.0.1',
|
||||||
|
'--port=3306',
|
||||||
|
'-uroot',
|
||||||
|
'-prootpassword',
|
||||||
|
'-e', 'SET GLOBAL log_bin_trust_function_creators = 1;',
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('falls back to default port when ports is absent', () => {
|
||||||
|
const args = buildMysqlPrepArgs({ image: 'mysql:8.4' });
|
||||||
|
expect(args).toContain('--port=3306');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('falls back to default root password when env is absent', () => {
|
||||||
|
const args = buildMysqlPrepArgs({ image: 'mysql:8.4' });
|
||||||
|
expect(args).toContain('-prootpassword');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('all services', () => {
|
||||||
|
it('adds all flags when all services are present', () => {
|
||||||
|
const services: Services = {
|
||||||
|
mysql: MYSQL_SERVICE,
|
||||||
|
opensearch: { image: 'opensearchproject/opensearch:2.19.1' },
|
||||||
|
rabbitmq: { image: 'rabbitmq:4.0-management' },
|
||||||
|
valkey: { image: 'valkey:8.0' },
|
||||||
|
};
|
||||||
|
expect(buildInstallArgs(services)).toEqual([
|
||||||
|
...BASE_ARGS,
|
||||||
|
...MYSQL_ARGS,
|
||||||
|
...OPENSEARCH_ARGS,
|
||||||
|
...RABBITMQ_ARGS,
|
||||||
|
...CACHE_ARGS,
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
export interface ServiceConfig {
|
||||||
|
image: string;
|
||||||
|
env?: Record<string, string>;
|
||||||
|
ports?: string[];
|
||||||
|
options?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Services {
|
||||||
|
mysql?: ServiceConfig;
|
||||||
|
opensearch?: ServiceConfig;
|
||||||
|
elasticsearch?: ServiceConfig;
|
||||||
|
rabbitmq?: ServiceConfig;
|
||||||
|
redis?: ServiceConfig;
|
||||||
|
valkey?: ServiceConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
const BASE_ARGS = [
|
||||||
|
'--base-url=http://localhost/',
|
||||||
|
'--admin-user=admin',
|
||||||
|
'--admin-password=admin123',
|
||||||
|
'--admin-email=admin@example.com',
|
||||||
|
'--admin-firstname=Admin',
|
||||||
|
'--admin-lastname=User',
|
||||||
|
'--backend-frontname=admin',
|
||||||
|
];
|
||||||
|
|
||||||
|
export const buildMysqlPrepArgs = (mysql: ServiceConfig): string[] => {
|
||||||
|
const rootPassword = mysql.env?.MYSQL_ROOT_PASSWORD ?? 'rootpassword';
|
||||||
|
const port = mysql.ports?.[0]?.split(':')[0] ?? '3306';
|
||||||
|
return ['-h127.0.0.1', `--port=${port}`, '-uroot', `-p${rootPassword}`, '-e', 'SET GLOBAL log_bin_trust_function_creators = 1;'];
|
||||||
|
};
|
||||||
|
|
||||||
|
export const buildInstallArgs = (services: Services | null): string[] => {
|
||||||
|
const args = [...BASE_ARGS];
|
||||||
|
|
||||||
|
if (!services) return args;
|
||||||
|
|
||||||
|
if (services.mysql) {
|
||||||
|
const dbPort = services.mysql.ports?.[0]?.split(':')[0] ?? '3306';
|
||||||
|
args.push(
|
||||||
|
`--db-host=127.0.0.1:${dbPort}`,
|
||||||
|
`--db-name=${services.mysql.env?.MYSQL_DATABASE ?? 'magento'}`,
|
||||||
|
`--db-user=${services.mysql.env?.MYSQL_USER ?? 'magento'}`,
|
||||||
|
`--db-password=${services.mysql.env?.MYSQL_PASSWORD ?? 'magento'}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (services.opensearch) {
|
||||||
|
args.push(
|
||||||
|
'--search-engine=opensearch',
|
||||||
|
'--opensearch-host=localhost',
|
||||||
|
'--opensearch-port=9200',
|
||||||
|
);
|
||||||
|
} else if (services.elasticsearch) {
|
||||||
|
const majorVersion = services.elasticsearch.image.split(':')[1]?.split('.')[0];
|
||||||
|
args.push(
|
||||||
|
`--search-engine=elasticsearch${majorVersion}`,
|
||||||
|
'--elasticsearch-host=localhost',
|
||||||
|
'--elasticsearch-port=9200',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (services.rabbitmq) {
|
||||||
|
args.push(
|
||||||
|
'--amqp-host=localhost',
|
||||||
|
'--amqp-port=5672',
|
||||||
|
'--amqp-user=guest',
|
||||||
|
'--amqp-password=guest',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (services.valkey || services.redis) {
|
||||||
|
args.push(
|
||||||
|
'--session-save=redis',
|
||||||
|
'--session-save-redis-host=localhost',
|
||||||
|
'--session-save-redis-port=6379',
|
||||||
|
'--cache-backend=redis',
|
||||||
|
'--cache-backend-redis-server=localhost',
|
||||||
|
'--cache-backend-redis-port=6379',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return args;
|
||||||
|
};
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
import * as core from '@actions/core';
|
||||||
|
import * as exec from '@actions/exec';
|
||||||
|
import { buildInstallArgs, buildMysqlPrepArgs, Services } from './build-command';
|
||||||
|
|
||||||
|
export async function run(): Promise<void> {
|
||||||
|
try {
|
||||||
|
const servicesInput = core.getInput('services');
|
||||||
|
const path = core.getInput('path') || '.';
|
||||||
|
const extraArgs = core.getInput('extra_args').trim();
|
||||||
|
|
||||||
|
let services: Services | null = null;
|
||||||
|
if (servicesInput && servicesInput !== 'null') {
|
||||||
|
services = JSON.parse(servicesInput) as Services;
|
||||||
|
}
|
||||||
|
|
||||||
|
// setup:install creates MySQL triggers, which requires log_bin_trust_function_creators=1
|
||||||
|
// when binary logging is enabled.
|
||||||
|
if (services?.mysql) {
|
||||||
|
await exec.exec('mysql', buildMysqlPrepArgs(services.mysql));
|
||||||
|
}
|
||||||
|
|
||||||
|
const args = buildInstallArgs(services);
|
||||||
|
|
||||||
|
if (extraArgs) {
|
||||||
|
args.push(...extraArgs.split(/\s+/));
|
||||||
|
}
|
||||||
|
|
||||||
|
core.setOutput('command', `php bin/magento setup:install ${args.join(' ')}`);
|
||||||
|
|
||||||
|
await exec.exec('php', ['bin/magento', 'setup:install', ...args], { cwd: path });
|
||||||
|
} catch (error) {
|
||||||
|
core.setFailed((error as Error).message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
run();
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"typeRoots": ["../node_modules/@types"],
|
||||||
|
"types": ["jest"]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,7 +12,7 @@ The action operates in two modes:
|
|||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
| Input | Required | Default | Description |
|
| Input | Required | Default | Description |
|
||||||
|-------|----------|---------|-------------|
|
| -------------------- | -------- | -------------------------------------------- | ------------------------------------------------------------------- |
|
||||||
| `php-version` | Yes | `8.4` | PHP version to install |
|
| `php-version` | Yes | `8.4` | PHP version to install |
|
||||||
| `mode` | Yes | `extension` | Either `extension` or `store` |
|
| `mode` | Yes | `extension` | Either `extension` or `store` |
|
||||||
| `magento_version` | No | `magento/project-community-edition:2.4.8-p3` | Magento version to install (extension mode only) |
|
| `magento_version` | No | `magento/project-community-edition:2.4.8-p3` | Magento version to install (extension mode only) |
|
||||||
@@ -27,7 +27,7 @@ The action operates in two modes:
|
|||||||
## Outputs
|
## Outputs
|
||||||
|
|
||||||
| Output | Description |
|
| Output | Description |
|
||||||
|--------|-------------|
|
| ------ | --------------------------------------------------- |
|
||||||
| `path` | Absolute path to the Magento installation directory |
|
| `path` | Absolute path to the Magento installation directory |
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@@ -51,7 +51,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento/setup-magento@main
|
- uses: graycoreio/github-actions-magento2/setup-magento@v7.0.0 # x-release-please-version
|
||||||
id: setup-magento
|
id: setup-magento
|
||||||
with:
|
with:
|
||||||
php-version: "8.3"
|
php-version: "8.3"
|
||||||
@@ -89,7 +89,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento/setup-magento@main
|
- uses: graycoreio/github-actions-magento2/setup-magento@v7.0.0 # x-release-please-version
|
||||||
id: setup-magento
|
id: setup-magento
|
||||||
with:
|
with:
|
||||||
php-version: "8.3"
|
php-version: "8.3"
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ runs:
|
|||||||
- run: |
|
- run: |
|
||||||
MAGENTO_DIRECTORY=""
|
MAGENTO_DIRECTORY=""
|
||||||
if [ "${{ inputs.mode }}" = 'extension' ]; then
|
if [ "${{ inputs.mode }}" = 'extension' ]; then
|
||||||
MAGENTO_DIRECTORY="../magento2"
|
MAGENTO_DIRECTORY="_ghamagento"
|
||||||
else
|
else
|
||||||
MAGENTO_DIRECTORY="${{ inputs.working-directory }}"
|
MAGENTO_DIRECTORY="${{ inputs.working-directory }}"
|
||||||
fi
|
fi
|
||||||
@@ -90,7 +90,28 @@ runs:
|
|||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: ${{ inputs.composer_auth }}
|
COMPOSER_AUTH: ${{ inputs.composer_auth }}
|
||||||
|
|
||||||
- uses: graycoreio/github-actions-magento2/fix-magento-install@main
|
- run: mkdir -p ${{ steps.setup-magento-compute-directory.outputs.MAGENTO_DIRECTORY }}/app/etc
|
||||||
|
shell: bash
|
||||||
|
name: Ensure app/etc exists for magento composer plugin
|
||||||
|
if: inputs.mode == 'extension'
|
||||||
|
|
||||||
|
- name: Prevent Magento install from being mirrored into consumer vendor
|
||||||
|
if: inputs.mode == 'extension'
|
||||||
|
shell: bash
|
||||||
|
working-directory: ${{ inputs.working-directory }}
|
||||||
|
env:
|
||||||
|
MAGENTO_DIRECTORY: ${{ steps.setup-magento-compute-directory.outputs.MAGENTO_DIRECTORY }}
|
||||||
|
run: |
|
||||||
|
line="/$MAGENTO_DIRECTORY export-ignore"
|
||||||
|
if [[ -f .gitattributes ]] && grep -qxF "$line" .gitattributes; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [[ -s .gitattributes && -n "$(tail -c1 .gitattributes)" ]]; then
|
||||||
|
printf '\n' >> .gitattributes
|
||||||
|
fi
|
||||||
|
printf '%s\n' "$line" >> .gitattributes
|
||||||
|
|
||||||
|
- uses: graycoreio/github-actions-magento2/fix-magento-install@v8.0.0-rc.2
|
||||||
name: Fix Magento Out of Box Install Issues
|
name: Fix Magento Out of Box Install Issues
|
||||||
with:
|
with:
|
||||||
magento_directory: ${{ steps.setup-magento-compute-directory.outputs.MAGENTO_DIRECTORY }}
|
magento_directory: ${{ steps.setup-magento-compute-directory.outputs.MAGENTO_DIRECTORY }}
|
||||||
|
|||||||
@@ -13,9 +13,11 @@ See the [action.yml](./action.yml)
|
|||||||
|
|
||||||
| Input | Description | Required | Default |
|
| Input | Description | Required | Default |
|
||||||
|-----------------| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |-----------------------|
|
|-----------------| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |-----------------------|
|
||||||
| kind | The "kind" of support you're targeting for your package. Allowed values are `currently-supported`, `latest`, `custom`, `nightly` and `all` | false | 'currently-supported' |
|
| kind | The "kind" of support you're targeting for your package. See [Kinds](#kinds). | false | 'currently-supported' |
|
||||||
| project | The project to return the supported versions for. Allowed values are `mage-os` and `magento-open-source` | false | 'magento-open-source' |
|
| project | The project to return the supported versions for. Allowed values are `mage-os` and `magento-open-source` | false | 'magento-open-source' |
|
||||||
| custom_versions | The versions you want to support, as a comma-separated string, i.e. 'magento/project-community-edition:2.3.7-p3, magento/project-community-edition:2.4.2-p2' | false | '' |
|
| custom_versions | The versions you want to support, as a comma-separated string, i.e. 'magento/project-community-edition:2.3.7-p3, magento/project-community-edition:2.4.2-p2' | false | '' |
|
||||||
|
| recent_time_frame | The time frame (from today) used when `kind` is `recent`. Combination of years (y), months (m), and days (d), e.g. `2y 2m 2d`. | false | '2y' |
|
||||||
|
| include_services | Whether to include a `services` key in each matrix entry with GitHub Actions service container configurations for MySQL, search engine, RabbitMQ, and cache. | false | 'true' |
|
||||||
|
|
||||||
## Kinds
|
## Kinds
|
||||||
- `currently-supported` - The currently supported Magento Open Source versions by Adobe.
|
- `currently-supported` - The currently supported Magento Open Source versions by Adobe.
|
||||||
@@ -23,6 +25,7 @@ See the [action.yml](./action.yml)
|
|||||||
- `custom` - A custom subset of the versions, as specified by you. Requires `custom_versions` sibling key.
|
- `custom` - A custom subset of the versions, as specified by you. Requires `custom_versions` sibling key.
|
||||||
- `usable` - All versions of Magento, minus any that can no longer be installed or used under normal circumstances.
|
- `usable` - All versions of Magento, minus any that can no longer be installed or used under normal circumstances.
|
||||||
- `nightly` - The nightly version of Magento (only available via `https://upstream-nightly.mage-os.org`)
|
- `nightly` - The nightly version of Magento (only available via `https://upstream-nightly.mage-os.org`)
|
||||||
|
- `recent` - Versions released within a configurable time window from today (see `recent_time_frame`).
|
||||||
- `all` - All versions of Magento (including patched/unpatched versions).
|
- `all` - All versions of Magento (including patched/unpatched versions).
|
||||||
|
|
||||||
## Projects
|
## Projects
|
||||||
@@ -48,7 +51,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||||
steps:
|
steps:
|
||||||
- uses: graycoreio/github-actions-magento2/supported-version@main
|
- uses: graycoreio/github-actions-magento2/supported-version@v7.0.0 # x-release-please-version
|
||||||
id: supported-version
|
id: supported-version
|
||||||
- run: echo ${{ steps.supported-version.outputs.matrix }}
|
- run: echo ${{ steps.supported-version.outputs.matrix }}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ inputs:
|
|||||||
|
|
||||||
include_services:
|
include_services:
|
||||||
required: false
|
required: false
|
||||||
default: "false"
|
default: "true"
|
||||||
description: "Whether to include a `services` key in each matrix entry with GitHub Actions service configurations."
|
description: "Whether to include a `services` key in each matrix entry with GitHub Actions service configurations."
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
|
|||||||
Vendored
+33
-33
File diff suppressed because one or more lines are too long
@@ -78,16 +78,24 @@ describe('getCurrentlySupportedVersions for magento-open-source', () => {
|
|||||||
'magento/project-community-edition:2.4.7-p8',
|
'magento/project-community-edition:2.4.7-p8',
|
||||||
'magento/project-community-edition:2.4.8-p3',
|
'magento/project-community-edition:2.4.8-p3',
|
||||||
]],
|
]],
|
||||||
['2026-03-15T00:00:00Z', 'Day after v2.4.6 EoL', [
|
['2026-03-10T00:00:01Z', 'Day of March 2026 patch release', [
|
||||||
'magento/project-community-edition:2.4.7-p8',
|
'magento/project-community-edition:2.4.6-p14',
|
||||||
'magento/project-community-edition:2.4.8-p3',
|
'magento/project-community-edition:2.4.7-p9',
|
||||||
|
'magento/project-community-edition:2.4.8-p4',
|
||||||
]],
|
]],
|
||||||
['2027-04-09T00:00:00Z', 'Day of v2.4.7 EoL', [
|
['2026-03-15T00:00:00Z', 'Day after v2.4.6-p14 release', [
|
||||||
'magento/project-community-edition:2.4.7-p8',
|
'magento/project-community-edition:2.4.6-p14',
|
||||||
'magento/project-community-edition:2.4.8-p3',
|
'magento/project-community-edition:2.4.7-p9',
|
||||||
|
'magento/project-community-edition:2.4.8-p4',
|
||||||
]],
|
]],
|
||||||
['2027-04-10T00:00:00Z', 'Day after v2.4.7 EoL', [
|
['2027-05-31T00:00:00Z', 'Day of v2.4.7 EoL', [
|
||||||
'magento/project-community-edition:2.4.8-p3',
|
'magento/project-community-edition:2.4.7-p10',
|
||||||
|
'magento/project-community-edition:2.4.8-p5',
|
||||||
|
'magento/project-community-edition:2.4.9',
|
||||||
|
]],
|
||||||
|
['2027-06-01T00:00:00Z', 'Day after v2.4.7 EoL', [
|
||||||
|
'magento/project-community-edition:2.4.8-p5',
|
||||||
|
'magento/project-community-edition:2.4.9',
|
||||||
]],
|
]],
|
||||||
])(
|
])(
|
||||||
'supportedVersions for %s',
|
'supportedVersions for %s',
|
||||||
@@ -131,6 +139,12 @@ describe('getCurrentlySupportedVersions for mage-os', () => {
|
|||||||
['2025-09-09T00:00:01Z', 'Release of 1.3.1', [
|
['2025-09-09T00:00:01Z', 'Release of 1.3.1', [
|
||||||
'mage-os/project-community-edition:1.3.1',
|
'mage-os/project-community-edition:1.3.1',
|
||||||
]],
|
]],
|
||||||
|
['2026-03-10T00:00:01Z', 'Release of 2.2.0', [
|
||||||
|
'mage-os/project-community-edition:2.2.0',
|
||||||
|
]],
|
||||||
|
['2026-04-15T00:00:01Z', 'Release of 2.2.2', [
|
||||||
|
'mage-os/project-community-edition:2.2.2',
|
||||||
|
]],
|
||||||
])(
|
])(
|
||||||
'supportedVersions for %s',
|
'supportedVersions for %s',
|
||||||
(date, description ,result) => {
|
(date, description ,result) => {
|
||||||
|
|||||||
@@ -50,4 +50,46 @@ describe('getUsableVersions for magento-open-source', () => {
|
|||||||
expect(versions).not.toContain('magento/project-community-edition:2.3.7-p3');
|
expect(versions).not.toContain('magento/project-community-edition:2.3.7-p3');
|
||||||
expect(versions).toContain('magento/project-community-edition:2.4.6');
|
expect(versions).toContain('magento/project-community-edition:2.4.6');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should filter out uninstallable Magento 2.4.2.x and 2.4.3.x versions', () => {
|
||||||
|
mockGetVersions.mockReturnValue({
|
||||||
|
'magento/project-community-edition:2.4.2': { composer: '2.2.21' },
|
||||||
|
'magento/project-community-edition:2.4.2-p1': { composer: '2.2.21' },
|
||||||
|
'magento/project-community-edition:2.4.2-p2': { composer: '2.2.21' },
|
||||||
|
'magento/project-community-edition:2.4.3': { composer: '2.2.21' },
|
||||||
|
'magento/project-community-edition:2.4.3-p1': { composer: '2.2.21' },
|
||||||
|
'magento/project-community-edition:2.4.3-p2': { composer: '2.2.21' },
|
||||||
|
'magento/project-community-edition:2.4.3-p3': { composer: '2.2.21' },
|
||||||
|
'magento/project-community-edition:2.4.4': { composer: '2.2.21' }
|
||||||
|
});
|
||||||
|
|
||||||
|
const versions = getUsableVersions(project);
|
||||||
|
expect(versions).not.toContain('magento/project-community-edition:2.4.2');
|
||||||
|
expect(versions).not.toContain('magento/project-community-edition:2.4.2-p1');
|
||||||
|
expect(versions).not.toContain('magento/project-community-edition:2.4.2-p2');
|
||||||
|
expect(versions).not.toContain('magento/project-community-edition:2.4.3');
|
||||||
|
expect(versions).not.toContain('magento/project-community-edition:2.4.3-p1');
|
||||||
|
expect(versions).not.toContain('magento/project-community-edition:2.4.3-p2');
|
||||||
|
expect(versions).not.toContain('magento/project-community-edition:2.4.3-p3');
|
||||||
|
expect(versions).toContain('magento/project-community-edition:2.4.4');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getUsableVersions for mage-os', () => {
|
||||||
|
const project: Project = "mage-os";
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
mockGetVersions.mockReset();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should filter out mage-os 2.2.1 due to security advisory', () => {
|
||||||
|
mockGetVersions.mockReturnValue({
|
||||||
|
'mage-os/project-community-edition:2.2.0': { composer: '2.9.3' },
|
||||||
|
'mage-os/project-community-edition:2.2.1': { composer: '2.9.3' }
|
||||||
|
});
|
||||||
|
|
||||||
|
const versions = getUsableVersions(project);
|
||||||
|
expect(versions).not.toContain('mage-os/project-community-edition:2.2.1');
|
||||||
|
expect(versions).toContain('mage-os/project-community-edition:2.2.0');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,6 +2,24 @@ import { PackageMatrixVersion } from '../matrix/matrix-type';
|
|||||||
import { getIndividualVersionsForProject } from "../versions/get-versions-for-project";
|
import { getIndividualVersionsForProject } from "../versions/get-versions-for-project";
|
||||||
import semver from 'semver';
|
import semver from 'semver';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Versions that are known to be uninstallable and should be excluded from the usable set.
|
||||||
|
* Each entry includes a reason for documentation purposes.
|
||||||
|
*/
|
||||||
|
const uninstallableVersions: Record<string, string> = {
|
||||||
|
// magento/composer-root-update-plugin ~1.1 requires composer/composer <=2.1,
|
||||||
|
// but all composer versions <=2.1 are insecure and cannot be used.
|
||||||
|
'magento/project-community-edition:2.4.2': 'requires insecure composer <=2.1',
|
||||||
|
'magento/project-community-edition:2.4.2-p1': 'requires insecure composer <=2.1',
|
||||||
|
'magento/project-community-edition:2.4.2-p2': 'requires insecure composer <=2.1',
|
||||||
|
'magento/project-community-edition:2.4.3': 'requires insecure composer <=2.1',
|
||||||
|
'magento/project-community-edition:2.4.3-p1': 'requires insecure composer <=2.1',
|
||||||
|
'magento/project-community-edition:2.4.3-p2': 'requires insecure composer <=2.1',
|
||||||
|
'magento/project-community-edition:2.4.3-p3': 'requires insecure composer <=2.1',
|
||||||
|
// Security advisory in webonyx/graphql-php prevents installation.
|
||||||
|
'mage-os/project-community-edition:2.2.1': 'uninstallable due to webonyx/graphql-php security advisory',
|
||||||
|
};
|
||||||
|
|
||||||
export const getUsableVersions = (project: string): string[] => {
|
export const getUsableVersions = (project: string): string[] => {
|
||||||
const allVersions = getIndividualVersionsForProject(project)
|
const allVersions = getIndividualVersionsForProject(project)
|
||||||
return Object.entries(<Record<string,PackageMatrixVersion>>allVersions)
|
return Object.entries(<Record<string,PackageMatrixVersion>>allVersions)
|
||||||
@@ -17,6 +35,11 @@ export const getUsableVersions = (project: string): string[] => {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Exclude versions known to be uninstallable.
|
||||||
|
if (key in uninstallableVersions) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
.map(([key, value]) => key);
|
.map(([key, value]) => key);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export const getMatrixForVersions = (project: string, versions: string[]): Githu
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
magento: [...acc.magento, current],
|
magento: [...acc.magento, current],
|
||||||
include: [...acc.include, knownVersions[current]]
|
include: [...acc.include, { ...knownVersions[current], version: current.split(':')[1] ?? '' }]
|
||||||
}
|
}
|
||||||
}, {magento: [], include: []});
|
}, {magento: [], include: []});
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,7 @@ export interface Services {
|
|||||||
|
|
||||||
export interface PackageMatrixVersion {
|
export interface PackageMatrixVersion {
|
||||||
magento: string,
|
magento: string,
|
||||||
|
version: string,
|
||||||
php: string | number,
|
php: string | number,
|
||||||
composer: string | number,
|
composer: string | number,
|
||||||
mysql: string,
|
mysql: string,
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ describe('amendMatrixForNext', () => {
|
|||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
"magento": "magento/project-community-edition:next",
|
"magento": "magento/project-community-edition:next",
|
||||||
|
"version": "next",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2",
|
"composer": "2",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
@@ -33,6 +34,7 @@ describe('amendMatrixForNext', () => {
|
|||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
"magento": "magento/project-community-edition:@alpha",
|
"magento": "magento/project-community-edition:@alpha",
|
||||||
|
"version": "@alpha",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2",
|
"composer": "2",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
@@ -60,6 +62,7 @@ describe('amendMatrixForNext', () => {
|
|||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
"magento": "magento/project-community-edition:v2.4.6-p2",
|
"magento": "magento/project-community-edition:v2.4.6-p2",
|
||||||
|
"version": "v2.4.6-p2",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2",
|
"composer": "2",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
@@ -85,6 +88,7 @@ describe('amendMatrixForNext', () => {
|
|||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
"magento": "magento/project-community-edition:v2.4.6-p2",
|
"magento": "magento/project-community-edition:v2.4.6-p2",
|
||||||
|
"version": "v2.4.6-p2",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2",
|
"composer": "2",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
@@ -112,6 +116,7 @@ describe('amendMatrixForNext', () => {
|
|||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
"magento": "magento/project-community-edition:v2.4.6-p2",
|
"magento": "magento/project-community-edition:v2.4.6-p2",
|
||||||
|
"version": "v2.4.6-p2",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2",
|
"composer": "2",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
@@ -128,6 +133,7 @@ describe('amendMatrixForNext', () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"magento": "magento/project-community-edition:next",
|
"magento": "magento/project-community-edition:next",
|
||||||
|
"version": "next",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2",
|
"composer": "2",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
@@ -153,6 +159,7 @@ describe('amendMatrixForNext', () => {
|
|||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
"magento": "magento/project-community-edition:v2.4.6-p2",
|
"magento": "magento/project-community-edition:v2.4.6-p2",
|
||||||
|
"version": "v2.4.6-p2",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2",
|
"composer": "2",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
@@ -169,6 +176,7 @@ describe('amendMatrixForNext', () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"magento": "magento/project-community-edition:@alpha",
|
"magento": "magento/project-community-edition:@alpha",
|
||||||
|
"version": "@alpha",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2",
|
"composer": "2",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
@@ -196,6 +204,7 @@ describe('amendMatrixForNext', () => {
|
|||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
"magento": "mage-os/project-community-edition:next",
|
"magento": "mage-os/project-community-edition:next",
|
||||||
|
"version": "next",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2",
|
"composer": "2",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
@@ -221,6 +230,7 @@ describe('amendMatrixForNext', () => {
|
|||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
"magento": "mage-os/project-community-edition:@alpha",
|
"magento": "mage-os/project-community-edition:@alpha",
|
||||||
|
"version": "@alpha",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2",
|
"composer": "2",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
|
|||||||
@@ -12,12 +12,11 @@ export const amendMatrixForNext = (matrix: GithubActionsMatrix, repository: Repo
|
|||||||
const nextVersionRegExp = new RegExp(nextVersionPlaceHolder + '$');
|
const nextVersionRegExp = new RegExp(nextVersionPlaceHolder + '$');
|
||||||
matrix.magento = matrix.magento.map((item) => item.match(nextVersionRegExp) ? unifyNextPackageName(item, repository, date) : item);
|
matrix.magento = matrix.magento.map((item) => item.match(nextVersionRegExp) ? unifyNextPackageName(item, repository, date) : item);
|
||||||
matrix.include = matrix.include.map((item) => {
|
matrix.include = matrix.include.map((item) => {
|
||||||
return item.magento.match(nextVersionRegExp)
|
if (!item.magento.match(nextVersionRegExp)) {
|
||||||
? {
|
return item;
|
||||||
...item,
|
|
||||||
magento: unifyNextPackageName(item.magento, repository, date),
|
|
||||||
}
|
}
|
||||||
: item;
|
const magento = unifyNextPackageName(item.magento, repository, date);
|
||||||
|
return { ...item, magento, version: magento.split(':')[1] };
|
||||||
});
|
});
|
||||||
return matrix;
|
return matrix;
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@ import { PackageMatrixVersion } from '../matrix/matrix-type';
|
|||||||
|
|
||||||
const createTestEntry = (overrides: Partial<PackageMatrixVersion> = {}): PackageMatrixVersion => ({
|
const createTestEntry = (overrides: Partial<PackageMatrixVersion> = {}): PackageMatrixVersion => ({
|
||||||
magento: 'magento/project-community-edition:2.4.7',
|
magento: 'magento/project-community-edition:2.4.7',
|
||||||
|
version: '2.4.7',
|
||||||
php: '8.3',
|
php: '8.3',
|
||||||
composer: '2.7.4',
|
composer: '2.7.4',
|
||||||
mysql: 'mysql:8.4',
|
mysql: 'mysql:8.4',
|
||||||
|
|||||||
@@ -2,35 +2,37 @@
|
|||||||
"mage-os/project-community-edition": {
|
"mage-os/project-community-edition": {
|
||||||
"magento": "mage-os/project-community-edition",
|
"magento": "mage-os/project-community-edition",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.1-management",
|
||||||
|
"valkey": "valkey/valkey:8.0",
|
||||||
"redis": "redis:7.2",
|
"redis": "redis:7.2",
|
||||||
"varnish": "varnish:7.6",
|
"varnish": "varnish:7.7",
|
||||||
"nginx": "nginx:1.26",
|
"nginx": "nginx:1.28",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2026-01-20T00:00:00+0000",
|
"release": "2026-04-15T00:00:00+0000",
|
||||||
"eol": "2029-01-20T00:00:00+0000"
|
"eol": "2029-04-15T00:00:00+0000"
|
||||||
},
|
},
|
||||||
"mage-os/project-community-edition:next": {
|
"mage-os/project-community-edition:next": {
|
||||||
"magento": "mage-os/project-community-edition:next",
|
"magento": "mage-os/project-community-edition:next",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.1-management",
|
||||||
|
"valkey": "valkey/valkey:8.0",
|
||||||
"redis": "redis:7.2",
|
"redis": "redis:7.2",
|
||||||
"varnish": "varnish:7.6",
|
"varnish": "varnish:7.7",
|
||||||
"nginx": "nginx:1.26",
|
"nginx": "nginx:1.28",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2026-01-20T00:00:00+0000",
|
"release": "2026-04-15T00:00:00+0000",
|
||||||
"eol": "2029-01-20T00:00:00+0000"
|
"eol": "2029-04-15T00:00:00+0000"
|
||||||
},
|
},
|
||||||
"mage-os/project-community-edition:>=1.0 <1.1": {
|
"mage-os/project-community-edition:>=1.0 <1.1": {
|
||||||
"magento": "mage-os/project-community-edition:>=1.0 <1.1",
|
"magento": "mage-os/project-community-edition:>=1.0 <1.1",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -44,7 +46,7 @@
|
|||||||
"mage-os/project-community-edition:>=1.1 <1.2": {
|
"mage-os/project-community-edition:>=1.1 <1.2": {
|
||||||
"magento": "mage-os/project-community-edition:>=1.1 <1.2",
|
"magento": "mage-os/project-community-edition:>=1.1 <1.2",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -58,7 +60,7 @@
|
|||||||
"mage-os/project-community-edition:>=1.2 <1.3": {
|
"mage-os/project-community-edition:>=1.2 <1.3": {
|
||||||
"magento": "mage-os/project-community-edition:>=1.2 <1.3",
|
"magento": "mage-os/project-community-edition:>=1.2 <1.3",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -72,7 +74,7 @@
|
|||||||
"mage-os/project-community-edition:>=1.3 <1.4": {
|
"mage-os/project-community-edition:>=1.3 <1.4": {
|
||||||
"magento": "mage-os/project-community-edition:>=1.2 <1.3",
|
"magento": "mage-os/project-community-edition:>=1.2 <1.3",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -86,7 +88,7 @@
|
|||||||
"mage-os/project-community-edition:>=2.0 <2.1": {
|
"mage-os/project-community-edition:>=2.0 <2.1": {
|
||||||
"magento": "mage-os/project-community-edition:>=2.0 <2.1",
|
"magento": "mage-os/project-community-edition:>=2.0 <2.1",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -100,7 +102,7 @@
|
|||||||
"mage-os/project-community-edition:>=2.1 <2.2": {
|
"mage-os/project-community-edition:>=2.1 <2.2": {
|
||||||
"magento": "mage-os/project-community-edition:>=2.1 <2.2",
|
"magento": "mage-os/project-community-edition:>=2.1 <2.2",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -109,6 +111,21 @@
|
|||||||
"nginx": "nginx:1.26",
|
"nginx": "nginx:1.26",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2026-01-20T00:00:00+0000",
|
"release": "2026-01-20T00:00:00+0000",
|
||||||
"eol": "2029-01-20T00:00:00+0000"
|
"eol": "2026-03-10T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"mage-os/project-community-edition:>=2.2 <2.3": {
|
||||||
|
"magento": "mage-os/project-community-edition:>=2.2 <2.3",
|
||||||
|
"php": 8.4,
|
||||||
|
"composer": "2.9.8",
|
||||||
|
"mysql": "mysql:8.4",
|
||||||
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
|
"rabbitmq": "rabbitmq:4.1-management",
|
||||||
|
"valkey": "valkey/valkey:8.0",
|
||||||
|
"redis": "redis:7.2",
|
||||||
|
"varnish": "varnish:7.7",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-03-10T00:00:00+0000",
|
||||||
|
"eol": "2029-04-15T00:00:00+0000"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.0.0",
|
"magento": "mage-os/project-community-edition:1.0.0",
|
||||||
"upstream": "2.4.6-p3",
|
"upstream": "2.4.6-p3",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.0.1",
|
"magento": "mage-os/project-community-edition:1.0.1",
|
||||||
"upstream": "2.4.6-p3",
|
"upstream": "2.4.6-p3",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.0.2",
|
"magento": "mage-os/project-community-edition:1.0.2",
|
||||||
"upstream": "2.4.7-p1",
|
"upstream": "2.4.7-p1",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.7.4",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.0.3",
|
"magento": "mage-os/project-community-edition:1.0.3",
|
||||||
"upstream": "2.4.7-p1",
|
"upstream": "2.4.7-p1",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.7.4",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.0.4",
|
"magento": "mage-os/project-community-edition:1.0.4",
|
||||||
"upstream": "2.4.7-p2",
|
"upstream": "2.4.7-p2",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.7.4",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.0.5",
|
"magento": "mage-os/project-community-edition:1.0.5",
|
||||||
"upstream": "2.4.7-p3",
|
"upstream": "2.4.7-p3",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.7.4",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -93,7 +93,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.0.6",
|
"magento": "mage-os/project-community-edition:1.0.6",
|
||||||
"upstream": "2.4.7-p4",
|
"upstream": "2.4.7-p4",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.7.4",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.1.0",
|
"magento": "mage-os/project-community-edition:1.1.0",
|
||||||
"upstream": "2.4.8",
|
"upstream": "2.4.8",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.1.1",
|
"magento": "mage-os/project-community-edition:1.1.1",
|
||||||
"upstream": "2.4.8",
|
"upstream": "2.4.8",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.2.0",
|
"magento": "mage-os/project-community-edition:1.2.0",
|
||||||
"upstream": "2.4.8-p1",
|
"upstream": "2.4.8-p1",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -153,7 +153,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.3.0",
|
"magento": "mage-os/project-community-edition:1.3.0",
|
||||||
"upstream": "2.4.8-p2",
|
"upstream": "2.4.8-p2",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:1.3.1",
|
"magento": "mage-os/project-community-edition:1.3.1",
|
||||||
"upstream": "2.4.8-p2",
|
"upstream": "2.4.8-p2",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -183,7 +183,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:2.0.0",
|
"magento": "mage-os/project-community-edition:2.0.0",
|
||||||
"upstream": "2.4.8-p3",
|
"upstream": "2.4.8-p3",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"magento": "mage-os/project-community-edition:2.1.0",
|
"magento": "mage-os/project-community-edition:2.1.0",
|
||||||
"upstream": "2.4.8-p3",
|
"upstream": "2.4.8-p3",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -207,6 +207,52 @@
|
|||||||
"nginx": "nginx:1.26",
|
"nginx": "nginx:1.26",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2026-01-20T00:00:00+0000",
|
"release": "2026-01-20T00:00:00+0000",
|
||||||
"eol": "2029-01-20T00:00:00+0000"
|
"eol": "2026-03-10T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"mage-os/project-community-edition:2.2.0": {
|
||||||
|
"magento": "mage-os/project-community-edition:2.2.0",
|
||||||
|
"upstream": "2.4.8-p4",
|
||||||
|
"php": 8.4,
|
||||||
|
"composer": "2.9.8",
|
||||||
|
"mysql": "mysql:8.4",
|
||||||
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
|
"rabbitmq": "rabbitmq:4.1-management",
|
||||||
|
"valkey": "valkey/valkey:8.0",
|
||||||
|
"varnish": "varnish:7.7",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-03-10T00:00:00+0000",
|
||||||
|
"eol": "2026-03-18T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"mage-os/project-community-edition:2.2.1": {
|
||||||
|
"magento": "mage-os/project-community-edition:2.2.1",
|
||||||
|
"upstream": "2.4.8-p4",
|
||||||
|
"php": 8.4,
|
||||||
|
"composer": "2.9.8",
|
||||||
|
"mysql": "mysql:8.4",
|
||||||
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
|
"rabbitmq": "rabbitmq:4.1-management",
|
||||||
|
"valkey": "valkey/valkey:8.0",
|
||||||
|
"varnish": "varnish:7.7",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-03-18T00:00:00+0000",
|
||||||
|
"eol": "2026-04-15T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"mage-os/project-community-edition:2.2.2": {
|
||||||
|
"magento": "mage-os/project-community-edition:2.2.2",
|
||||||
|
"upstream": "2.4.8-p4",
|
||||||
|
"php": 8.4,
|
||||||
|
"composer": "2.9.8",
|
||||||
|
"mysql": "mysql:8.4",
|
||||||
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
|
"rabbitmq": "rabbitmq:4.1-management",
|
||||||
|
"valkey": "valkey/valkey:8.0",
|
||||||
|
"redis": "redis:7.2",
|
||||||
|
"varnish": "varnish:7.7",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-04-15T00:00:00+0000",
|
||||||
|
"eol": "2029-04-15T00:00:00+0000"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
"magento/project-community-edition:>=2.4.2 <2.4.3": {
|
"magento/project-community-edition:>=2.4.2 <2.4.3": {
|
||||||
"magento": "magento/project-community-edition:>=2.4.2 <2.4.3",
|
"magento": "magento/project-community-edition:>=2.4.2 <2.4.3",
|
||||||
"php": 7.4,
|
"php": 7.4,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.9.3",
|
"elasticsearch": "elasticsearch:7.9.3",
|
||||||
"rabbitmq": "rabbitmq:3.8-management",
|
"rabbitmq": "rabbitmq:3.8-management",
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
"magento/project-community-edition:>=2.4.3 <2.4.4": {
|
"magento/project-community-edition:>=2.4.3 <2.4.4": {
|
||||||
"magento": "magento/project-community-edition:>=2.4.3 <2.4.4",
|
"magento": "magento/project-community-edition:>=2.4.3 <2.4.4",
|
||||||
"php": 7.4,
|
"php": 7.4,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.16.3",
|
"elasticsearch": "elasticsearch:7.16.3",
|
||||||
"rabbitmq": "rabbitmq:3.8-management",
|
"rabbitmq": "rabbitmq:3.8-management",
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
"magento/project-community-edition:>=2.4.4 <2.4.5": {
|
"magento/project-community-edition:>=2.4.4 <2.4.5": {
|
||||||
"magento": "magento/project-community-edition:>=2.4.4 <2.4.5",
|
"magento": "magento/project-community-edition:>=2.4.4 <2.4.5",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.25",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
"magento/project-community-edition:>=2.4.5 <2.4.6": {
|
"magento/project-community-edition:>=2.4.5 <2.4.6": {
|
||||||
"magento": "magento/project-community-edition:>=2.4.5 <2.4.6",
|
"magento": "magento/project-community-edition:>=2.4.5 <2.4.6",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.25",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.28",
|
"elasticsearch": "elasticsearch:7.17.28",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -100,77 +100,86 @@
|
|||||||
"magento/project-community-edition:>=2.4.6 <2.4.7": {
|
"magento/project-community-edition:>=2.4.6 <2.4.7": {
|
||||||
"magento": "magento/project-community-edition:>=2.4.6 <2.4.7",
|
"magento": "magento/project-community-edition:>=2.4.6 <2.4.7",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.17.4",
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:4.2-management",
|
||||||
"redis": "redis:7.2",
|
"valkey": "valkey/valkey:8.1",
|
||||||
"varnish": "varnish:7.6",
|
"varnish": "varnish:8",
|
||||||
"nginx": "nginx:1.28",
|
"nginx": "nginx:1.28",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2025-04-08T00:00:00+0000",
|
"release": "2025-04-08T00:00:00+0000",
|
||||||
"eol": "2026-03-14T00:00:00+0000"
|
"eol": "2026-08-11T00:00:00+0000"
|
||||||
},
|
},
|
||||||
"magento/project-community-edition:>=2.4.7 <2.4.8": {
|
"magento/project-community-edition:>=2.4.7 <2.4.8": {
|
||||||
"magento": "magento/project-community-edition:>=2.4.7 <2.4.8",
|
"magento": "magento/project-community-edition:>=2.4.7 <2.4.8",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.17.4",
|
"elasticsearch": "elasticsearch:8.19.15",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
"redis": "redis:7.2",
|
"rabbitmq": "rabbitmq:4.2-management",
|
||||||
"varnish": "varnish:7.6",
|
"valkey": "valkey/valkey:8.1",
|
||||||
|
"varnish": "varnish:8",
|
||||||
"nginx": "nginx:1.28",
|
"nginx": "nginx:1.28",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2025-04-08T00:00:00+0000",
|
"release": "2025-04-08T00:00:00+0000",
|
||||||
"eol": "2027-04-09T00:00:00+0000"
|
"eol": "2027-05-31T00:00:00+0000"
|
||||||
},
|
},
|
||||||
"magento/project-community-edition:>=2.4.8 <2.4.9": {
|
"magento/project-community-edition:>=2.4.8 <2.4.9": {
|
||||||
"magento": "magento/project-community-edition:>=2.4.8 <2.4.9",
|
"magento": "magento/project-community-edition:>=2.4.8 <2.4.9",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"elasticsearch": "elasticsearch:8.17.4",
|
|
||||||
"opensearch": "opensearchproject/opensearch:3",
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.2-management",
|
||||||
"redis": "redis:7.2",
|
"valkey": "valkey/valkey:8.1",
|
||||||
"valkey": "valkey/valkey:8.0",
|
"varnish": "varnish:8",
|
||||||
"varnish": "varnish:7.6",
|
|
||||||
"nginx": "nginx:1.28",
|
"nginx": "nginx:1.28",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2025-04-08T00:00:00+0000",
|
"release": "2025-04-08T00:00:00+0000",
|
||||||
"eol": "2028-04-09T00:00:00+0000"
|
"eol": "2028-05-31T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"magento/project-community-edition:>=2.4.9 <2.4.10": {
|
||||||
|
"magento": "magento/project-community-edition:>=2.4.9 <2.4.10",
|
||||||
|
"php": 8.5,
|
||||||
|
"composer": "2.9.8",
|
||||||
|
"mysql": "mysql:8.4",
|
||||||
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
|
"rabbitmq": "rabbitmq:4.2-management",
|
||||||
|
"valkey": "valkey/valkey:9",
|
||||||
|
"varnish": "varnish:8",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-05-07T00:00:00+0000",
|
||||||
|
"eol": "2029-05-31T00:00:00+0000"
|
||||||
},
|
},
|
||||||
"magento/project-community-edition": {
|
"magento/project-community-edition": {
|
||||||
"magento": "magento/project-community-edition",
|
"magento": "magento/project-community-edition",
|
||||||
"php": 8.4,
|
"php": 8.5,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"elasticsearch": "elasticsearch:8.17.4",
|
|
||||||
"opensearch": "opensearchproject/opensearch:3",
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.2-management",
|
||||||
"redis": "redis:7.2",
|
"valkey": "valkey/valkey:9",
|
||||||
"valkey": "valkey/valkey:8.0",
|
"varnish": "varnish:8",
|
||||||
"varnish": "varnish:7.6",
|
|
||||||
"nginx": "nginx:1.28",
|
"nginx": "nginx:1.28",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2025-04-08T00:00:00+0000",
|
"release": "2026-05-07T00:00:00+0000",
|
||||||
"eol": "2028-04-09T00:00:00+0000"
|
"eol": "2029-05-31T00:00:00+0000"
|
||||||
},
|
},
|
||||||
"magento/project-community-edition:next": {
|
"magento/project-community-edition:next": {
|
||||||
"magento": "magento/project-community-edition:@alpha",
|
"magento": "magento/project-community-edition:@alpha",
|
||||||
"php": 8.4,
|
"php": 8.5,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"elasticsearch": "elasticsearch:8.17.4",
|
"valkey": "valkey/valkey:9",
|
||||||
"valkey": "valkey/valkey:8.0",
|
|
||||||
"opensearch": "opensearchproject/opensearch:3",
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.2-management",
|
||||||
"redis": "redis:7.2",
|
"varnish": "varnish:8",
|
||||||
"varnish": "varnish:7.6",
|
|
||||||
"nginx": "nginx:1.28",
|
"nginx": "nginx:1.28",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2025-04-08T00:00:00+0000",
|
"release": "2026-05-07T00:00:00+0000",
|
||||||
"eol": "2028-04-09T00:00:00+0000"
|
"eol": "2029-05-31T00:00:00+0000"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
"magento/project-community-edition:2.4.2": {
|
"magento/project-community-edition:2.4.2": {
|
||||||
"magento": "magento/project-community-edition:2.4.2",
|
"magento": "magento/project-community-edition:2.4.2",
|
||||||
"php": 7.4,
|
"php": 7.4,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.9.3",
|
"elasticsearch": "elasticsearch:7.9.3",
|
||||||
"rabbitmq": "rabbitmq:3.8-management",
|
"rabbitmq": "rabbitmq:3.8-management",
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
"magento/project-community-edition:2.4.2-p1": {
|
"magento/project-community-edition:2.4.2-p1": {
|
||||||
"magento": "magento/project-community-edition:2.4.2-p1",
|
"magento": "magento/project-community-edition:2.4.2-p1",
|
||||||
"php": 7.4,
|
"php": 7.4,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.9.3",
|
"elasticsearch": "elasticsearch:7.9.3",
|
||||||
"rabbitmq": "rabbitmq:3.8-management",
|
"rabbitmq": "rabbitmq:3.8-management",
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
"magento/project-community-edition:2.4.2-p2": {
|
"magento/project-community-edition:2.4.2-p2": {
|
||||||
"magento": "magento/project-community-edition:2.4.2-p2",
|
"magento": "magento/project-community-edition:2.4.2-p2",
|
||||||
"php": 7.4,
|
"php": 7.4,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.9.3",
|
"elasticsearch": "elasticsearch:7.9.3",
|
||||||
"rabbitmq": "rabbitmq:3.8-management",
|
"rabbitmq": "rabbitmq:3.8-management",
|
||||||
@@ -128,7 +128,7 @@
|
|||||||
"magento/project-community-edition:2.4.3": {
|
"magento/project-community-edition:2.4.3": {
|
||||||
"magento": "magento/project-community-edition:2.4.3",
|
"magento": "magento/project-community-edition:2.4.3",
|
||||||
"php": 7.4,
|
"php": 7.4,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.16.3",
|
"elasticsearch": "elasticsearch:7.16.3",
|
||||||
"rabbitmq": "rabbitmq:3.8-management",
|
"rabbitmq": "rabbitmq:3.8-management",
|
||||||
@@ -142,7 +142,7 @@
|
|||||||
"magento/project-community-edition:2.4.3-p1": {
|
"magento/project-community-edition:2.4.3-p1": {
|
||||||
"magento": "magento/project-community-edition:2.4.3-p1",
|
"magento": "magento/project-community-edition:2.4.3-p1",
|
||||||
"php": 7.4,
|
"php": 7.4,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.16.3",
|
"elasticsearch": "elasticsearch:7.16.3",
|
||||||
"rabbitmq": "rabbitmq:3.8-management",
|
"rabbitmq": "rabbitmq:3.8-management",
|
||||||
@@ -156,7 +156,7 @@
|
|||||||
"magento/project-community-edition:2.4.3-p2": {
|
"magento/project-community-edition:2.4.3-p2": {
|
||||||
"magento": "magento/project-community-edition:2.4.3-p2",
|
"magento": "magento/project-community-edition:2.4.3-p2",
|
||||||
"php": 7.4,
|
"php": 7.4,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.16.3",
|
"elasticsearch": "elasticsearch:7.16.3",
|
||||||
"rabbitmq": "rabbitmq:3.8-management",
|
"rabbitmq": "rabbitmq:3.8-management",
|
||||||
@@ -170,7 +170,7 @@
|
|||||||
"magento/project-community-edition:2.4.3-p3": {
|
"magento/project-community-edition:2.4.3-p3": {
|
||||||
"magento": "magento/project-community-edition:2.4.3-p3",
|
"magento": "magento/project-community-edition:2.4.3-p3",
|
||||||
"php": 7.4,
|
"php": 7.4,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.16.3",
|
"elasticsearch": "elasticsearch:7.16.3",
|
||||||
"rabbitmq": "rabbitmq:3.8-management",
|
"rabbitmq": "rabbitmq:3.8-management",
|
||||||
@@ -184,7 +184,7 @@
|
|||||||
"magento/project-community-edition:2.4.4": {
|
"magento/project-community-edition:2.4.4": {
|
||||||
"magento": "magento/project-community-edition:2.4.4",
|
"magento": "magento/project-community-edition:2.4.4",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.16.3",
|
"elasticsearch": "elasticsearch:7.16.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p1": {
|
"magento/project-community-edition:2.4.4-p1": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p1",
|
"magento": "magento/project-community-edition:2.4.4-p1",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.16.3",
|
"elasticsearch": "elasticsearch:7.16.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -212,7 +212,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p2": {
|
"magento/project-community-edition:2.4.4-p2": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p2",
|
"magento": "magento/project-community-edition:2.4.4-p2",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.16.3",
|
"elasticsearch": "elasticsearch:7.16.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -226,7 +226,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p3": {
|
"magento/project-community-edition:2.4.4-p3": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p3",
|
"magento": "magento/project-community-edition:2.4.4-p3",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -240,7 +240,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p4": {
|
"magento/project-community-edition:2.4.4-p4": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p4",
|
"magento": "magento/project-community-edition:2.4.4-p4",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -254,7 +254,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p5": {
|
"magento/project-community-edition:2.4.4-p5": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p5",
|
"magento": "magento/project-community-edition:2.4.4-p5",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -268,7 +268,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p6": {
|
"magento/project-community-edition:2.4.4-p6": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p6",
|
"magento": "magento/project-community-edition:2.4.4-p6",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -282,7 +282,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p7": {
|
"magento/project-community-edition:2.4.4-p7": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p7",
|
"magento": "magento/project-community-edition:2.4.4-p7",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p8": {
|
"magento/project-community-edition:2.4.4-p8": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p8",
|
"magento": "magento/project-community-edition:2.4.4-p8",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -310,7 +310,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p9": {
|
"magento/project-community-edition:2.4.4-p9": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p9",
|
"magento": "magento/project-community-edition:2.4.4-p9",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -324,7 +324,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p10": {
|
"magento/project-community-edition:2.4.4-p10": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p10",
|
"magento": "magento/project-community-edition:2.4.4-p10",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -338,7 +338,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p11": {
|
"magento/project-community-edition:2.4.4-p11": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p11",
|
"magento": "magento/project-community-edition:2.4.4-p11",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -352,7 +352,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p12": {
|
"magento/project-community-edition:2.4.4-p12": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p12",
|
"magento": "magento/project-community-edition:2.4.4-p12",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -366,7 +366,7 @@
|
|||||||
"magento/project-community-edition:2.4.4-p13": {
|
"magento/project-community-edition:2.4.4-p13": {
|
||||||
"magento": "magento/project-community-edition:2.4.4-p13",
|
"magento": "magento/project-community-edition:2.4.4-p13",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.25",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -380,7 +380,7 @@
|
|||||||
"magento/project-community-edition:2.4.5": {
|
"magento/project-community-edition:2.4.5": {
|
||||||
"magento": "magento/project-community-edition:2.4.5",
|
"magento": "magento/project-community-edition:2.4.5",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -394,7 +394,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p1": {
|
"magento/project-community-edition:2.4.5-p1": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p1",
|
"magento": "magento/project-community-edition:2.4.5-p1",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -408,7 +408,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p2": {
|
"magento/project-community-edition:2.4.5-p2": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p2",
|
"magento": "magento/project-community-edition:2.4.5-p2",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -422,7 +422,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p3": {
|
"magento/project-community-edition:2.4.5-p3": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p3",
|
"magento": "magento/project-community-edition:2.4.5-p3",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -436,7 +436,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p4": {
|
"magento/project-community-edition:2.4.5-p4": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p4",
|
"magento": "magento/project-community-edition:2.4.5-p4",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -450,7 +450,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p5": {
|
"magento/project-community-edition:2.4.5-p5": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p5",
|
"magento": "magento/project-community-edition:2.4.5-p5",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -464,7 +464,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p6": {
|
"magento/project-community-edition:2.4.5-p6": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p6",
|
"magento": "magento/project-community-edition:2.4.5-p6",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -478,7 +478,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p7": {
|
"magento/project-community-edition:2.4.5-p7": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p7",
|
"magento": "magento/project-community-edition:2.4.5-p7",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -492,7 +492,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p8": {
|
"magento/project-community-edition:2.4.5-p8": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p8",
|
"magento": "magento/project-community-edition:2.4.5-p8",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -506,7 +506,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p9": {
|
"magento/project-community-edition:2.4.5-p9": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p9",
|
"magento": "magento/project-community-edition:2.4.5-p9",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -520,7 +520,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p10": {
|
"magento/project-community-edition:2.4.5-p10": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p10",
|
"magento": "magento/project-community-edition:2.4.5-p10",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -534,7 +534,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p11": {
|
"magento/project-community-edition:2.4.5-p11": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p11",
|
"magento": "magento/project-community-edition:2.4.5-p11",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -548,7 +548,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p12": {
|
"magento/project-community-edition:2.4.5-p12": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p12",
|
"magento": "magento/project-community-edition:2.4.5-p12",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.25",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.28",
|
"elasticsearch": "elasticsearch:7.17.28",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -562,7 +562,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p13": {
|
"magento/project-community-edition:2.4.5-p13": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p13",
|
"magento": "magento/project-community-edition:2.4.5-p13",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -576,7 +576,7 @@
|
|||||||
"magento/project-community-edition:2.4.5-p14": {
|
"magento/project-community-edition:2.4.5-p14": {
|
||||||
"magento": "magento/project-community-edition:2.4.5-p14",
|
"magento": "magento/project-community-edition:2.4.5-p14",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.21",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.11-management",
|
"rabbitmq": "rabbitmq:3.11-management",
|
||||||
@@ -590,7 +590,7 @@
|
|||||||
"magento/project-community-edition:2.4.6": {
|
"magento/project-community-edition:2.4.6": {
|
||||||
"magento": "magento/project-community-edition:2.4.6",
|
"magento": "magento/project-community-edition:2.4.6",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:7.17.5",
|
"elasticsearch": "elasticsearch:7.17.5",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -604,7 +604,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p1": {
|
"magento/project-community-edition:2.4.6-p1": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p1",
|
"magento": "magento/project-community-edition:2.4.6-p1",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -618,7 +618,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p2": {
|
"magento/project-community-edition:2.4.6-p2": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p2",
|
"magento": "magento/project-community-edition:2.4.6-p2",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -632,7 +632,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p3": {
|
"magento/project-community-edition:2.4.6-p3": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p3",
|
"magento": "magento/project-community-edition:2.4.6-p3",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -646,7 +646,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p4": {
|
"magento/project-community-edition:2.4.6-p4": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p4",
|
"magento": "magento/project-community-edition:2.4.6-p4",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -660,7 +660,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p5": {
|
"magento/project-community-edition:2.4.6-p5": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p5",
|
"magento": "magento/project-community-edition:2.4.6-p5",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -674,7 +674,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p6": {
|
"magento/project-community-edition:2.4.6-p6": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p6",
|
"magento": "magento/project-community-edition:2.4.6-p6",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -688,7 +688,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p7": {
|
"magento/project-community-edition:2.4.6-p7": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p7",
|
"magento": "magento/project-community-edition:2.4.6-p7",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -702,7 +702,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p8": {
|
"magento/project-community-edition:2.4.6-p8": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p8",
|
"magento": "magento/project-community-edition:2.4.6-p8",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -716,7 +716,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p9": {
|
"magento/project-community-edition:2.4.6-p9": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p9",
|
"magento": "magento/project-community-edition:2.4.6-p9",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.9-management",
|
"rabbitmq": "rabbitmq:3.9-management",
|
||||||
@@ -730,7 +730,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p10": {
|
"magento/project-community-edition:2.4.6-p10": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p10",
|
"magento": "magento/project-community-edition:2.4.6-p10",
|
||||||
"php": 8.2,
|
"php": 8.2,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.17.4",
|
"elasticsearch": "elasticsearch:8.17.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -744,7 +744,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p11": {
|
"magento/project-community-edition:2.4.6-p11": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p11",
|
"magento": "magento/project-community-edition:2.4.6-p11",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -758,7 +758,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p12": {
|
"magento/project-community-edition:2.4.6-p12": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p12",
|
"magento": "magento/project-community-edition:2.4.6-p12",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -772,7 +772,7 @@
|
|||||||
"magento/project-community-edition:2.4.6-p13": {
|
"magento/project-community-edition:2.4.6-p13": {
|
||||||
"magento": "magento/project-community-edition:2.4.6-p13",
|
"magento": "magento/project-community-edition:2.4.6-p13",
|
||||||
"php": 8.1,
|
"php": 8.1,
|
||||||
"composer": "2.2.26",
|
"composer": "2.2.28",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.5.3",
|
"elasticsearch": "elasticsearch:8.5.3",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -781,12 +781,42 @@
|
|||||||
"nginx": "nginx:1.28",
|
"nginx": "nginx:1.28",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2025-10-14T00:00:00+0000",
|
"release": "2025-10-14T00:00:00+0000",
|
||||||
"eol": "2026-03-14T00:00:00+0000"
|
"eol": "2026-03-09T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"magento/project-community-edition:2.4.6-p14": {
|
||||||
|
"magento": "magento/project-community-edition:2.4.6-p14",
|
||||||
|
"php": 8.2,
|
||||||
|
"composer": "2.2.28",
|
||||||
|
"mysql": "mysql:8.0",
|
||||||
|
"elasticsearch": "elasticsearch:8.19.2",
|
||||||
|
"opensearch": "opensearchproject/opensearch:2.19.5",
|
||||||
|
"rabbitmq": "rabbitmq:4.1-management",
|
||||||
|
"redis": "redis:7.2",
|
||||||
|
"valkey": "valkey/valkey:8.0",
|
||||||
|
"varnish": "varnish:7.7",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-03-10T00:00:00+0000",
|
||||||
|
"eol": "2026-05-07T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"magento/project-community-edition:2.4.6-p15": {
|
||||||
|
"magento": "magento/project-community-edition:2.4.6-p15",
|
||||||
|
"php": 8.2,
|
||||||
|
"composer": "2.2.28",
|
||||||
|
"mysql": "mysql:8.0",
|
||||||
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
|
"rabbitmq": "rabbitmq:4.2-management",
|
||||||
|
"valkey": "valkey/valkey:8.1",
|
||||||
|
"varnish": "varnish:8",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-05-07T00:00:00+0000",
|
||||||
|
"eol": "2026-08-11T00:00:00+0000"
|
||||||
},
|
},
|
||||||
"magento/project-community-edition:2.4.7": {
|
"magento/project-community-edition:2.4.7": {
|
||||||
"magento": "magento/project-community-edition:2.4.7",
|
"magento": "magento/project-community-edition:2.4.7",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -800,7 +830,7 @@
|
|||||||
"magento/project-community-edition:2.4.7-p1": {
|
"magento/project-community-edition:2.4.7-p1": {
|
||||||
"magento": "magento/project-community-edition:2.4.7-p1",
|
"magento": "magento/project-community-edition:2.4.7-p1",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -814,7 +844,7 @@
|
|||||||
"magento/project-community-edition:2.4.7-p2": {
|
"magento/project-community-edition:2.4.7-p2": {
|
||||||
"magento": "magento/project-community-edition:2.4.7-p2",
|
"magento": "magento/project-community-edition:2.4.7-p2",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -828,7 +858,7 @@
|
|||||||
"magento/project-community-edition:2.4.7-p3": {
|
"magento/project-community-edition:2.4.7-p3": {
|
||||||
"magento": "magento/project-community-edition:2.4.7-p3",
|
"magento": "magento/project-community-edition:2.4.7-p3",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -842,7 +872,7 @@
|
|||||||
"magento/project-community-edition:2.4.7-p4": {
|
"magento/project-community-edition:2.4.7-p4": {
|
||||||
"magento": "magento/project-community-edition:2.4.7-p4",
|
"magento": "magento/project-community-edition:2.4.7-p4",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.11.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -856,7 +886,7 @@
|
|||||||
"magento/project-community-edition:2.4.7-p5": {
|
"magento/project-community-edition:2.4.7-p5": {
|
||||||
"magento": "magento/project-community-edition:2.4.7-p5",
|
"magento": "magento/project-community-edition:2.4.7-p5",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.0",
|
"mysql": "mysql:8.0",
|
||||||
"elasticsearch": "elasticsearch:8.17.4",
|
"elasticsearch": "elasticsearch:8.17.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
@@ -870,9 +900,9 @@
|
|||||||
"magento/project-community-edition:2.4.7-p6": {
|
"magento/project-community-edition:2.4.7-p6": {
|
||||||
"magento": "magento/project-community-edition:2.4.7-p6",
|
"magento": "magento/project-community-edition:2.4.7-p6",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.17.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
"redis": "redis:7.2",
|
"redis": "redis:7.2",
|
||||||
"varnish": "varnish:7.5",
|
"varnish": "varnish:7.5",
|
||||||
@@ -884,9 +914,9 @@
|
|||||||
"magento/project-community-edition:2.4.7-p7": {
|
"magento/project-community-edition:2.4.7-p7": {
|
||||||
"magento": "magento/project-community-edition:2.4.7-p7",
|
"magento": "magento/project-community-edition:2.4.7-p7",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.17.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
"redis": "redis:7.2",
|
"redis": "redis:7.2",
|
||||||
"varnish": "varnish:7.5",
|
"varnish": "varnish:7.5",
|
||||||
@@ -898,24 +928,55 @@
|
|||||||
"magento/project-community-edition:2.4.7-p8": {
|
"magento/project-community-edition:2.4.7-p8": {
|
||||||
"magento": "magento/project-community-edition:2.4.7-p8",
|
"magento": "magento/project-community-edition:2.4.7-p8",
|
||||||
"php": 8.3,
|
"php": 8.3,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mariadb:10.6",
|
"mysql": "mariadb:10.6",
|
||||||
"elasticsearch": "elasticsearch:8.11.4",
|
"elasticsearch": "elasticsearch:8.17.4",
|
||||||
"rabbitmq": "rabbitmq:3.13-management",
|
"rabbitmq": "rabbitmq:3.13-management",
|
||||||
"redis": "redis:7.2",
|
"redis": "redis:7.2",
|
||||||
"varnish": "varnish:7.5",
|
"varnish": "varnish:7.5",
|
||||||
"nginx": "nginx:1.28",
|
"nginx": "nginx:1.28",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2025-10-14T00:00:00+0000",
|
"release": "2025-10-14T00:00:00+0000",
|
||||||
"eol": "2027-04-09T00:00:00+0000"
|
"eol": "2026-03-09T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"magento/project-community-edition:2.4.7-p9": {
|
||||||
|
"magento": "magento/project-community-edition:2.4.7-p9",
|
||||||
|
"php": 8.3,
|
||||||
|
"composer": "2.9.8",
|
||||||
|
"mysql": "mariadb:10.11",
|
||||||
|
"elasticsearch": "elasticsearch:8.17.4",
|
||||||
|
"opensearch": "opensearchproject/opensearch:2.19.5",
|
||||||
|
"rabbitmq": "rabbitmq:4.1-management",
|
||||||
|
"redis": "redis:7.2",
|
||||||
|
"valkey": "valkey/valkey:8.0",
|
||||||
|
"varnish": "varnish:7.7",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-03-10T00:00:00+0000",
|
||||||
|
"eol": "2026-05-07T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"magento/project-community-edition:2.4.7-p10": {
|
||||||
|
"magento": "magento/project-community-edition:2.4.7-p10",
|
||||||
|
"php": 8.3,
|
||||||
|
"composer": "2.9.8",
|
||||||
|
"mysql": "mysql:8.0",
|
||||||
|
"elasticsearch": "elasticsearch:8.19.15",
|
||||||
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
|
"rabbitmq": "rabbitmq:4.2-management",
|
||||||
|
"valkey": "valkey/valkey:8.1",
|
||||||
|
"varnish": "varnish:8",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-05-07T00:00:00+0000",
|
||||||
|
"eol": "2027-05-31T00:00:00+0000"
|
||||||
},
|
},
|
||||||
"magento/project-community-edition:2.4.8": {
|
"magento/project-community-edition:2.4.8": {
|
||||||
"magento": "magento/project-community-edition:2.4.8",
|
"magento": "magento/project-community-edition:2.4.8",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"elasticsearch": "elasticsearch:8.17.4",
|
"elasticsearch": "elasticsearch:8.17.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.5",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
"redis": "redis:7.2",
|
"redis": "redis:7.2",
|
||||||
"valkey": "valkey/valkey:8.0",
|
"valkey": "valkey/valkey:8.0",
|
||||||
@@ -928,9 +989,9 @@
|
|||||||
"magento/project-community-edition:2.4.8-p1": {
|
"magento/project-community-edition:2.4.8-p1": {
|
||||||
"magento": "magento/project-community-edition:2.4.8-p1",
|
"magento": "magento/project-community-edition:2.4.8-p1",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
"opensearch": "opensearchproject/opensearch:2.19.5",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
"redis": "redis:7.2",
|
"redis": "redis:7.2",
|
||||||
"varnish": "varnish:7.6",
|
"varnish": "varnish:7.6",
|
||||||
@@ -942,7 +1003,7 @@
|
|||||||
"magento/project-community-edition:2.4.8-p2": {
|
"magento/project-community-edition:2.4.8-p2": {
|
||||||
"magento": "magento/project-community-edition:2.4.8-p2",
|
"magento": "magento/project-community-edition:2.4.8-p2",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:3",
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -956,7 +1017,7 @@
|
|||||||
"magento/project-community-edition:2.4.8-p3": {
|
"magento/project-community-edition:2.4.8-p3": {
|
||||||
"magento": "magento/project-community-edition:2.4.8-p3",
|
"magento": "magento/project-community-edition:2.4.8-p3",
|
||||||
"php": 8.4,
|
"php": 8.4,
|
||||||
"composer": "2.9.5",
|
"composer": "2.9.8",
|
||||||
"mysql": "mysql:8.4",
|
"mysql": "mysql:8.4",
|
||||||
"opensearch": "opensearchproject/opensearch:3",
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
"rabbitmq": "rabbitmq:4.0-management",
|
"rabbitmq": "rabbitmq:4.0-management",
|
||||||
@@ -965,6 +1026,48 @@
|
|||||||
"nginx": "nginx:1.28",
|
"nginx": "nginx:1.28",
|
||||||
"os": "ubuntu-latest",
|
"os": "ubuntu-latest",
|
||||||
"release": "2025-10-14T00:00:00+0000",
|
"release": "2025-10-14T00:00:00+0000",
|
||||||
"eol": "2028-04-09T00:00:00+0000"
|
"eol": "2026-03-09T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"magento/project-community-edition:2.4.8-p4": {
|
||||||
|
"magento": "magento/project-community-edition:2.4.8-p4",
|
||||||
|
"php": 8.4,
|
||||||
|
"composer": "2.9.8",
|
||||||
|
"mysql": "mysql:8.4",
|
||||||
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
|
"rabbitmq": "rabbitmq:4.1-management",
|
||||||
|
"valkey": "valkey/valkey:8.0",
|
||||||
|
"varnish": "varnish:7.7",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-03-10T00:00:00+0000",
|
||||||
|
"eol": "2026-05-07T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"magento/project-community-edition:2.4.8-p5": {
|
||||||
|
"magento": "magento/project-community-edition:2.4.8-p5",
|
||||||
|
"php": 8.4,
|
||||||
|
"composer": "2.9.8",
|
||||||
|
"mysql": "mysql:8.4",
|
||||||
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
|
"rabbitmq": "rabbitmq:4.2-management",
|
||||||
|
"valkey": "valkey/valkey:8.1",
|
||||||
|
"varnish": "varnish:8",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-05-07T00:00:00+0000",
|
||||||
|
"eol": "2028-05-31T00:00:00+0000"
|
||||||
|
},
|
||||||
|
"magento/project-community-edition:2.4.9": {
|
||||||
|
"magento": "magento/project-community-edition:2.4.9",
|
||||||
|
"php": 8.5,
|
||||||
|
"composer": "2.9.8",
|
||||||
|
"mysql": "mysql:8.4",
|
||||||
|
"opensearch": "opensearchproject/opensearch:3",
|
||||||
|
"rabbitmq": "rabbitmq:4.2-management",
|
||||||
|
"valkey": "valkey/valkey:9",
|
||||||
|
"varnish": "varnish:8",
|
||||||
|
"nginx": "nginx:1.28",
|
||||||
|
"os": "ubuntu-latest",
|
||||||
|
"release": "2026-05-07T00:00:00+0000",
|
||||||
|
"eol": "2029-05-31T00:00:00+0000"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
# Magento 2 Unit Test Action
|
|
||||||
|
|
||||||
A Github Action that runs the Unit Tests of a Magento Package
|
|
||||||
|
|
||||||
## Inputs
|
|
||||||
|
|
||||||
See the [action.yml](./action.yml)
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```yml
|
|
||||||
name: Unit Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
unit-test:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
php_version:
|
|
||||||
- 7.4
|
|
||||||
- 8.1
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: graycoreio/github-actions-magento2/unit-test@main
|
|
||||||
with:
|
|
||||||
php_version: ${{ matrix.php_version }}
|
|
||||||
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
|
||||||
```
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
name: "Unit Test"
|
|
||||||
author: "Graycore"
|
|
||||||
description: "A Github Action that runs the Unit Tests of a Magento Package"
|
|
||||||
inputs:
|
|
||||||
php_version:
|
|
||||||
required: true
|
|
||||||
default: "8.4"
|
|
||||||
description: "PHP Version to use"
|
|
||||||
|
|
||||||
source_folder:
|
|
||||||
required: true
|
|
||||||
default: .
|
|
||||||
description: "The source folder of the package"
|
|
||||||
|
|
||||||
test_command:
|
|
||||||
required: true
|
|
||||||
default: composer run test
|
|
||||||
description: "The test command"
|
|
||||||
|
|
||||||
composer_auth:
|
|
||||||
required: false
|
|
||||||
description: "Composer Authentication Credentials"
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Set PHP Version
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ inputs.php_version }}
|
|
||||||
|
|
||||||
- name: Get Composer Cache Directory
|
|
||||||
shell: bash
|
|
||||||
working-directory: ${{ inputs.source_folder }}
|
|
||||||
id: composer-cache
|
|
||||||
run: |
|
|
||||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: "Cache Composer Packages"
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
key: "composer | v4 | ${{ hashFiles('composer.lock') }} | ${{ runner.os }} | ${{ inputs.php_version }}"
|
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
|
||||||
|
|
||||||
- run: composer install
|
|
||||||
name: Require and attempt install
|
|
||||||
working-directory: ${{ inputs.source_folder }}
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
COMPOSER_CACHE_DIR: ${{ steps.composer-cache.outputs.dir }}
|
|
||||||
COMPOSER_AUTH: ${{ inputs.composer_auth }}
|
|
||||||
|
|
||||||
- run: ${{ inputs.test_command }}
|
|
||||||
name: Run Unit Tests
|
|
||||||
working-directory: ${{ inputs.source_folder }}
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
COMPOSER_CACHE_DIR: ${{ steps.composer-cache.outputs.dir }}
|
|
||||||
COMPOSER_AUTH: ${{ inputs.composer_auth }}
|
|
||||||
|
|
||||||
branding:
|
|
||||||
icon: "code"
|
|
||||||
color: "green"
|
|
||||||
Reference in New Issue
Block a user