mirror of
https://github.com/graycoreio/github-actions-magento2.git
synced 2026-06-13 05:04:54 +00:00
Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dc750a9f2f | |||
| 7c0bc65842 | |||
| 89912779a9 | |||
| 484dc14f62 | |||
| 810a5705cf | |||
| 389830f189 | |||
| 45e881414f | |||
| c05755261d | |||
| 5608271fe3 | |||
| 5fd96b988e | |||
| b0a3bea8e4 | |||
| e99b140104 | |||
| a8e8db3572 | |||
| 2b6d19f691 | |||
| 499eb24a13 | |||
| e12d993761 | |||
| 229f7a2684 | |||
| 5fb9523081 | |||
| 178ec212f2 | |||
| 87b8b80feb | |||
| 9c1dbc7d07 | |||
| ab5dc9fc95 | |||
| 2dbed0d4a7 | |||
| f5460068b6 | |||
| 886bbbb9ba | |||
| da59af27fa | |||
| 0c244f2f28 | |||
| 1ab0330f1f | |||
| 8a95e723df | |||
| d5e7876887 | |||
| 611c336883 | |||
| ebd21042cd | |||
| dfb8be2ee7 | |||
| 6179ca545b | |||
| 962e52d426 | |||
| 6c31728af2 | |||
| 3ef43188b2 | |||
| 91fe5d8ddf | |||
| 3fc699af5c |
@@ -31,8 +31,8 @@ jobs:
|
||||
- uses: ./supported-version
|
||||
with:
|
||||
kind: currently-supported
|
||||
include_services: true
|
||||
id: supported-version
|
||||
- run: echo ${{ steps.supported-version.outputs.matrix }}
|
||||
integration-workflow:
|
||||
needs: compute_matrix
|
||||
uses: ./.github/workflows/integration.yaml
|
||||
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
outputs:
|
||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
- uses: ./supported-version
|
||||
with:
|
||||
kind: currently-supported
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
fail-fast: false
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- run: |
|
||||
PSEUDO_STORE_FULL_PATH=$(realpath "${{ env.PSEUDO_REPO_FOLDER }}")
|
||||
@@ -58,7 +58,7 @@ jobs:
|
||||
php-version: ${{ matrix.php }}
|
||||
tools: composer:v${{ matrix.composer }}
|
||||
|
||||
- uses: actions/cache@v4
|
||||
- uses: actions/cache@v5
|
||||
id: setup-magento-store-cache
|
||||
with:
|
||||
key: setup-magento-ci | ${{ runner.os }} | ${{ matrix.magento }}
|
||||
@@ -122,16 +122,16 @@ jobs:
|
||||
id: setup-magento
|
||||
with:
|
||||
php-version: 8.4
|
||||
tools: composer:v2
|
||||
tools: composer:v2.8
|
||||
mode: extension
|
||||
magento_repository: ${{ env.MAGENTO_COMPOSER_REPO }}
|
||||
composer_auth: ${{ secrets.COMPOSER_AUTH }}
|
||||
magento_version: magento/project-community-edition:2.4.8
|
||||
magento_version: magento/project-community-edition:2.4.8-p3
|
||||
|
||||
- uses: graycoreio/github-actions-magento2/cache-magento@main
|
||||
with:
|
||||
mode: 'extension'
|
||||
composer_cache_key: 'magento/project-community-edition:2.4.8'
|
||||
composer_cache_key: 'magento/project-community-edition:2.4.8-p3'
|
||||
|
||||
- run: composer install
|
||||
name: Composer install
|
||||
|
||||
@@ -23,11 +23,12 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
php_version:
|
||||
- 7.4
|
||||
- 8.1
|
||||
- 8.2
|
||||
- 8.3
|
||||
- 8.4
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
- uses: ./unit-test
|
||||
with:
|
||||
source_folder: _test/demo-package
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
name: Check Extension Test
|
||||
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "_test/demo-package/**"
|
||||
- ".github/workflows/_internal_check_extension.yaml"
|
||||
- ".github/workflows/check-extension.yaml"
|
||||
- "supported-version/**"
|
||||
- "!(**/*.md)"
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "_test/demo-package/**"
|
||||
- ".github/workflows/_internal_check_extension.yaml"
|
||||
- ".github/workflows/check-extension.yaml"
|
||||
- "supported-version/**"
|
||||
- "!(**/*.md)"
|
||||
jobs:
|
||||
compute_matrix:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
matrix: ${{ steps.supported-version.outputs.matrix }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ./supported-version
|
||||
with:
|
||||
kind: currently-supported
|
||||
include_services: true
|
||||
id: supported-version
|
||||
check-workflow:
|
||||
needs: compute_matrix
|
||||
uses: ./.github/workflows/check-extension.yaml
|
||||
with:
|
||||
path: _test/demo-package
|
||||
matrix: ${{ needs.compute_matrix.outputs.matrix }}
|
||||
@@ -0,0 +1,49 @@
|
||||
# MageCheck Extension
|
||||
|
||||
A Github Workflow that runs various kinds of quality checks for a Magento Extension.
|
||||
|
||||
## Inputs
|
||||
|
||||
See the [check-extension.yaml](./check-extension.yaml)
|
||||
|
||||
| Input | Description | Required | Default |
|
||||
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------- | --------------------------- |
|
||||
| matrix | JSON string of [version matrix for Magento](./#matrix-format) | true | NULL |
|
||||
| fail-fast | Same as Github's [fail-fast](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategyfail-fast) | false | true |
|
||||
| path | The folder of the Magento store or extension that you are testing | false | . |
|
||||
| magento_repository | Where to install Magento from | false | https://mirror.mage-os.org/ |
|
||||
| composer_cache_key | A key to version the composer cache. Can be incremented if you need to bust the cache. | false | \_mageos |
|
||||
|
||||
### Matrix Format
|
||||
|
||||
The Magento matrix format outlined by the [supported versions action.](https://github.com/graycoreio/github-actions-magento2/tree/main/supported-version/supported.json)
|
||||
|
||||
## Usage
|
||||
|
||||
```yml
|
||||
name: Unit 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@v4
|
||||
- uses: graycoreio/github-actions-magento2/supported-version@main
|
||||
id: supported-version
|
||||
- run: echo ${{ steps.supported-version.outputs.matrix }}
|
||||
check-extension:
|
||||
needs: compute_matrix
|
||||
uses: graycoreio/github-actions-magento2/.github/workflows/check-extension.yaml@main
|
||||
with:
|
||||
matrix: ${{ needs.compute_matrix.outputs.matrix }}
|
||||
```
|
||||
@@ -0,0 +1,280 @@
|
||||
name: MageCheck Extension
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
path:
|
||||
type: string
|
||||
required: false
|
||||
default: "."
|
||||
description: "The folder of the Magento store or extension that you are testing."
|
||||
|
||||
magento_repository:
|
||||
type: string
|
||||
required: false
|
||||
default: "https://mirror.mage-os.org/"
|
||||
description: "Where to install Magento from"
|
||||
|
||||
matrix:
|
||||
type: string
|
||||
required: true
|
||||
description: "The matrix of Magento versions to test against"
|
||||
|
||||
fail-fast:
|
||||
type: boolean
|
||||
required: false
|
||||
default: true
|
||||
|
||||
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.
|
||||
|
||||
secrets:
|
||||
composer_auth:
|
||||
required: false
|
||||
description: "Your composer credentials (typically a stringified json object of the contents of your auth.json)"
|
||||
|
||||
jobs:
|
||||
unit-test-extension:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix: ${{ fromJSON(inputs.matrix) }}
|
||||
fail-fast: ${{ inputs.fail-fast }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: graycoreio/github-actions-magento2/setup-magento@main
|
||||
id: setup-magento
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
tools: composer:v${{ matrix.composer }}
|
||||
mode: extension
|
||||
magento_version: ${{ matrix.magento }}
|
||||
magento_repository: ${{ inputs.magento_repository }}
|
||||
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
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: composer config repositories.local path ${{ github.workspace }}/${{ inputs.path }}
|
||||
|
||||
- name: Get package name
|
||||
id: package
|
||||
run: echo "name=$(jq -r .name ${{ github.workspace }}/${{ inputs.path }}/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 }}
|
||||
|
||||
- name: Configure phpunit.xml.dist
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: |
|
||||
## Add the testsuite
|
||||
cat > /tmp/testsuite.xml << 'EOF'
|
||||
<testsuite name="Extension_Unit_Tests">
|
||||
<directory>../../../vendor/${{ steps.package.outputs.name }}/Test/Unit</directory>
|
||||
</testsuite>
|
||||
EOF
|
||||
sed -i '/<testsuites>/r /tmp/testsuite.xml' dev/tests/unit/phpunit.xml.dist
|
||||
|
||||
## Disable allure (See https://github.com/magento/magento2/issues/36702 )
|
||||
## (╯°□°)╯︵ ┻━┻
|
||||
sed -i '/<extensions>/,/<\/extensions>/d' dev/tests/unit/phpunit.xml.dist
|
||||
|
||||
- name: Run extension unit tests
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: vendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist --testsuite Extension_Unit_Tests
|
||||
|
||||
compile-extension:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix: ${{ fromJSON(inputs.matrix) }}
|
||||
fail-fast: ${{ inputs.fail-fast }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: graycoreio/github-actions-magento2/setup-magento@main
|
||||
id: setup-magento
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
tools: composer:v${{ matrix.composer }}
|
||||
mode: extension
|
||||
magento_version: ${{ matrix.magento }}
|
||||
magento_repository: ${{ inputs.magento_repository }}
|
||||
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
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: composer config repositories.local path ${{ github.workspace }}/${{ inputs.path }}
|
||||
|
||||
- name: Get package name
|
||||
id: package
|
||||
run: echo "name=$(jq -r .name ${{ github.workspace }}/${{ inputs.path }}/composer.json)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Require extension
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: composer require "${{ steps.package.outputs.name }}:@dev" --no-install
|
||||
env:
|
||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||
|
||||
- name: Composer install
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: composer install
|
||||
env:
|
||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||
|
||||
- name: Enable all modules
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: php bin/magento module:enable --all
|
||||
|
||||
- name: Compile
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: php bin/magento setup:di:compile
|
||||
|
||||
coding-standard:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix: ${{ fromJSON(inputs.matrix) }}
|
||||
fail-fast: ${{ inputs.fail-fast }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Get Composer Version
|
||||
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:
|
||||
version: 2.2
|
||||
compare_against: ${{ steps.get-composer-version.outputs.version }}
|
||||
id: is-allow-plugins-available
|
||||
|
||||
- name: Enable dealerdirect/phpcodesniffer-composer-installer plugin
|
||||
shell: bash
|
||||
working-directory: ${{ inputs.path }}
|
||||
run: composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true --global
|
||||
if: steps.is-allow-plugins-available.outputs.result < 1
|
||||
|
||||
- name: Install Coding Standard
|
||||
shell: bash
|
||||
working-directory: ${{ inputs.path }}
|
||||
run: composer require "magento/magento-coding-standard" "magento/php-compatibility-fork"
|
||||
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:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix: ${{ fromJSON(inputs.matrix) }}
|
||||
fail-fast: ${{ inputs.fail-fast }}
|
||||
services: ${{ matrix.services }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: graycoreio/github-actions-magento2/setup-magento@main
|
||||
id: setup-magento
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
tools: composer:v${{ matrix.composer }}
|
||||
mode: extension
|
||||
magento_version: ${{ matrix.magento }}
|
||||
magento_repository: ${{ inputs.magento_repository }}
|
||||
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
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: composer config repositories.local path ${{ github.workspace }}/${{ inputs.path }}
|
||||
|
||||
- name: Get package name
|
||||
id: package
|
||||
run: echo "name=$(jq -r .name ${{ github.workspace }}/${{ inputs.path }}/composer.json)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Require extension
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: composer require "${{ steps.package.outputs.name }}:@dev" --no-install
|
||||
env:
|
||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||
|
||||
- name: Composer install
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: composer install
|
||||
env:
|
||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||
|
||||
- uses: graycoreio/github-actions-magento2/get-magento-version@main
|
||||
id: magento-version
|
||||
with:
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
|
||||
- name: Replace Configuration Settings for env
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}/dev/tests/integration
|
||||
run: |
|
||||
sed -i "s/'db-host' => 'localhost'/'db-host' => '127.0.0.1'/" etc/install-config-mysql.php.dist
|
||||
sed -i "s/'db-user' => 'root'/'db-user' => 'user'/" etc/install-config-mysql.php.dist
|
||||
sed -i "s/'db-password' => '123123q'/'db-password' => 'password'/" etc/install-config-mysql.php.dist
|
||||
sed -i "s/'elasticsearch-host' => 'localhost'/'elasticsearch-host' => '127.0.0.1'/" etc/install-config-mysql.php.dist
|
||||
sed -i "s/'amqp-host' => 'localhost'/'amqp-host' => '127.0.0.1'/" etc/install-config-mysql.php.dist
|
||||
|
||||
- name: Enable log-bin-trust-function-creators
|
||||
run: |
|
||||
mysql -h127.0.0.1 -uroot -prootpassword -e "SET GLOBAL log_bin_trust_function_creators = 1;"
|
||||
|
||||
- name: Configure phpunit.xml.dist
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: |
|
||||
## Add the testsuite
|
||||
cat > /tmp/testsuite.xml << 'EOF'
|
||||
<testsuite name="Extension_Integration_Tests">
|
||||
<directory>../../../vendor/${{ steps.package.outputs.name }}/Test/Integration</directory>
|
||||
</testsuite>
|
||||
EOF
|
||||
sed -i '/<testsuites>/r /tmp/testsuite.xml' dev/tests/integration/phpunit.xml.dist
|
||||
|
||||
- name: Run Integration Tests
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}/dev/tests/integration
|
||||
run: ../../../vendor/bin/phpunit -c phpunit.xml.dist --testsuite Extension_Integration_Tests
|
||||
|
||||
- name: Upload test sandbox dir
|
||||
uses: actions/upload-artifact@v4
|
||||
if: failure()
|
||||
with:
|
||||
name: sandbox-data-${{ steps.magento-version.outputs.version }}
|
||||
path: ${{ steps.setup-magento.outputs.path }}/dev/tests/integration/tmp/sandbox-*
|
||||
retention-days: 3
|
||||
@@ -59,48 +59,10 @@ on:
|
||||
jobs:
|
||||
integration_test:
|
||||
runs-on: ${{ matrix.os }}
|
||||
services: ${{ matrix.services }}
|
||||
strategy:
|
||||
fail-fast: ${{ inputs.fail-fast }}
|
||||
matrix: ${{ fromJSON(inputs.matrix) }}
|
||||
services:
|
||||
elasticsearch:
|
||||
image: ${{ matrix.elasticsearch }}
|
||||
env:
|
||||
# By default, ElasticSearch refuses to spawn in single node configuration, as it expects redundancy.
|
||||
# This is a dev environment, so redundancy is just wasteful.
|
||||
discovery.type: single-node
|
||||
# Disable HTTPS and password authentication
|
||||
# this is a local dev environment, so the added CA chain complexity is an extreme overkill
|
||||
xpack.security.enabled: false
|
||||
xpack.security.http.ssl.enabled: false
|
||||
xpack.security.transport.ssl.enabled: false
|
||||
|
||||
options: >-
|
||||
--health-cmd "curl http://localhost:9200/_cluster/health"
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 10
|
||||
ports:
|
||||
- 9200:9200
|
||||
|
||||
mysql:
|
||||
image: ${{ matrix.mysql }}
|
||||
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
|
||||
|
||||
rabbitmq:
|
||||
image: ${{ matrix.rabbitmq }}
|
||||
env:
|
||||
RABBITMQ_DEFAULT_USER: guest
|
||||
RABBITMQ_DEFAULT_PASS: guest
|
||||
ports:
|
||||
- 5672:5672
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set PHP Version
|
||||
@@ -110,6 +72,10 @@ jobs:
|
||||
tools: composer:v${{ matrix.composer }}
|
||||
coverage: none
|
||||
|
||||
- name: Allow SQL triggers
|
||||
run: |
|
||||
mysql --host 127.0.0.1 --port ${{ job.services.mysql.ports['3306'] }} -u root -prootpassword -e "set global log_bin_trust_function_creators=1;"
|
||||
|
||||
- run: composer create-project --repository-url="${{ inputs.magento_repository }}" "${{ matrix.magento }}" ${{ inputs.magento_directory }} --no-install
|
||||
shell: bash
|
||||
env:
|
||||
|
||||
@@ -1 +1 @@
|
||||
{".":"3.0.0"}
|
||||
{".":"4.0.1"}
|
||||
|
||||
@@ -2,6 +2,49 @@
|
||||
|
||||
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.
|
||||
|
||||
## [4.0.1](https://github.com/graycoreio/github-actions-magento2/compare/v4.0.0...v4.0.1) (2025-12-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **supported-version:** handle semver-ish values from old magento verisons ([7c0bc65](https://github.com/graycoreio/github-actions-magento2/commit/7c0bc65842e0e866cd957a44f879d37d04d11dce))
|
||||
|
||||
## [4.0.0](https://github.com/graycoreio/github-actions-magento2/compare/v3.0.0...v4.0.0) (2025-12-15)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* **integration:** use services from supported-version ([#207](https://github.com/graycoreio/github-actions-magento2/issues/207))
|
||||
* **unit-test:** set default unit-test php version to 8.4
|
||||
* **supported-version:** upgrade to use node24
|
||||
|
||||
### Features
|
||||
|
||||
* **check-extension:** add coding standard ([#203](https://github.com/graycoreio/github-actions-magento2/issues/203)) ([da59af2](https://github.com/graycoreio/github-actions-magento2/commit/da59af27fa8aa088a53f5e99b834ed8b88959395))
|
||||
* **check-extension:** add integration tests ([#205](https://github.com/graycoreio/github-actions-magento2/issues/205)) ([87b8b80](https://github.com/graycoreio/github-actions-magento2/commit/87b8b80febfa50df4107623942627079d4f12850))
|
||||
* **check-extension:** add new check-extension workflow ([#201](https://github.com/graycoreio/github-actions-magento2/issues/201)) ([1ab0330](https://github.com/graycoreio/github-actions-magento2/commit/1ab0330f1f9f7663dec418d22c2674eaf599cc35))
|
||||
* **check-extension:** add setup:di:compile test ([#202](https://github.com/graycoreio/github-actions-magento2/issues/202)) ([0c244f2](https://github.com/graycoreio/github-actions-magento2/commit/0c244f2f2891e3b8250b12c66781981775cbeb09))
|
||||
* **check-extension:** prefer phpcs conf if it exists ([810a570](https://github.com/graycoreio/github-actions-magento2/commit/810a5705cfc5fafa8230214ab84a44fc86de5baf))
|
||||
* **extension-check:** support composer auth ([#204](https://github.com/graycoreio/github-actions-magento2/issues/204)) ([886bbbb](https://github.com/graycoreio/github-actions-magento2/commit/886bbbb9ba2cb296c9f945e37bcd2669864384af))
|
||||
* **integration:** use services from supported-version ([#207](https://github.com/graycoreio/github-actions-magento2/issues/207)) ([5fb9523](https://github.com/graycoreio/github-actions-magento2/commit/5fb9523081c1f6e353320c4540d609ce735cf474))
|
||||
* **supported-version:** Add 2.4.5-p14, 2.4.6-p12, 2.4.7-p7 and 2.4.8-p2 ([#295](https://github.com/graycoreio/github-actions-magento2/issues/295)) ([499eb24](https://github.com/graycoreio/github-actions-magento2/commit/499eb24a13ed9f783c4af7ffac5bd5339c357774))
|
||||
* **supported-version:** add optional services output for each matrix entry ([#206](https://github.com/graycoreio/github-actions-magento2/issues/206)) ([9c1dbc7](https://github.com/graycoreio/github-actions-magento2/commit/9c1dbc7d072a9864f9eb1d1a6219b8aaa99f0bcd))
|
||||
* **supported-versions:** 1.3.1 ([#297](https://github.com/graycoreio/github-actions-magento2/issues/297)) ([a8e8db3](https://github.com/graycoreio/github-actions-magento2/commit/a8e8db3572abfabfd64a5a701f62b630aabc3260))
|
||||
* **supported-versions:** update matrix for Magento 2.4.8-p3, 2.4.7-p8, 2.4.6-p13 ([#301](https://github.com/graycoreio/github-actions-magento2/issues/301)) ([e99b140](https://github.com/graycoreio/github-actions-magento2/commit/e99b140104280b87fd23e482f86b45442e7a6167))
|
||||
* **supported-version:** update matrix for Mage-OS 2.0.0 ([#298](https://github.com/graycoreio/github-actions-magento2/issues/298)) ([b0a3bea](https://github.com/graycoreio/github-actions-magento2/commit/b0a3bea8e4d0fbead1e5a7eab72d56a025845049))
|
||||
* **supported-version:** upgrade to use node24 ([3ef4318](https://github.com/graycoreio/github-actions-magento2/commit/3ef43188b22ccc25226e7e39bfbe5d5ee2599a58))
|
||||
* **unit-test:** set default unit-test php version to 8.4 ([8a95e72](https://github.com/graycoreio/github-actions-magento2/commit/8a95e723df2aec4a5a528189e2df73aebe9ad148))
|
||||
* updated supported-version matrix for Mage-OS release 1.2.0 ([f546006](https://github.com/graycoreio/github-actions-magento2/commit/f5460068b60334f81a186235c67c8239ab2f6e14))
|
||||
* upgrade setup-magento action test to v2.4.8-p3 ([#198](https://github.com/graycoreio/github-actions-magento2/issues/198)) ([6c31728](https://github.com/graycoreio/github-actions-magento2/commit/6c31728af28fbf37cebc296192ee10367dcdd546))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 'invalid kind provided' when defining `usable` type ([#305](https://github.com/graycoreio/github-actions-magento2/issues/305)) ([c057552](https://github.com/graycoreio/github-actions-magento2/commit/c05755261db8ae7f335d559bea60c231b04bfc5b))
|
||||
* allow matrix testing without EOL versions ([#299](https://github.com/graycoreio/github-actions-magento2/issues/299)) ([5608271](https://github.com/graycoreio/github-actions-magento2/commit/5608271fe3546ed7ed6d94e33b3984b3bb8dbfd6))
|
||||
* **supported-verison:** upstream version for Mage-OS 2.0.0 ([#302](https://github.com/graycoreio/github-actions-magento2/issues/302)) ([5fd96b9](https://github.com/graycoreio/github-actions-magento2/commit/5fd96b988e2f3576aa5b7add7fa5c9018ad35416))
|
||||
* **supported-version:** adjust correct key for mage-os/project-community-edition:>=1.2 <1.3 ([e12d993](https://github.com/graycoreio/github-actions-magento2/commit/e12d9937614ebd8537ce791e1cf2c34672716871))
|
||||
|
||||
## [3.0.0](https://github.com/graycoreio/github-actions-magento2/compare/v2.0.0...v3.0.0) (2025-04-09)
|
||||
|
||||
|
||||
|
||||
@@ -11,15 +11,16 @@
|
||||
|
||||
Opinionated Github Actions and Workflows to make building, testing, and maintaining Magento 2 Modules easier.
|
||||
|
||||
* [README if you are new to Github Actions.](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#the-components-of-github-actions)
|
||||
* [What is a workflow?](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#workflows)
|
||||
* [What is an action?](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#actions)
|
||||
- [README if you are new to Github Actions.](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#the-components-of-github-actions)
|
||||
- [What is a workflow?](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#workflows)
|
||||
- [What is an action?](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#actions)
|
||||
|
||||
## Workflows
|
||||
|
||||
| Workflow Name | Description |
|
||||
| ------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
||||
| [Integration Test](./.github/workflows/integration-README.md) | A Github Workflow that runs the Integration Tests of a Magento Package |
|
||||
| Workflow Name | Description |
|
||||
| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
|
||||
| [Integration Test](./.github/workflows/integration-README.md) | 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. |
|
||||
|
||||
## Actions
|
||||
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
vendor/
|
||||
.phpunit.result.cache
|
||||
.phpunit.result.cache
|
||||
composer.lock
|
||||
@@ -45,6 +45,6 @@
|
||||
}
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.5"
|
||||
"phpunit/phpunit": "^9.5 || ^10 || ^11 || ^12"
|
||||
}
|
||||
}
|
||||
|
||||
Generated
-6001
File diff suppressed because it is too large
Load Diff
Generated
+655
-2526
File diff suppressed because it is too large
Load Diff
+10
-11
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@graycoreio/github-actions-magento2",
|
||||
"version": "3.0.0",
|
||||
"version": "4.0.1",
|
||||
"description": "Github Actions for Magento 2",
|
||||
"scripts": {
|
||||
"test": "cd supported-version && npm run test && cd -",
|
||||
@@ -18,18 +18,17 @@
|
||||
},
|
||||
"homepage": "https://github.com/graycoreio/github-actions-magento2#readme",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.10.0"
|
||||
"@actions/core": "^1.11.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^29.5.11",
|
||||
"@types/node": "^22.13.9",
|
||||
"@typescript-eslint/eslint-plugin": "^8.26.1",
|
||||
"@typescript-eslint/parser": "^8.26.1",
|
||||
"esbuild": "^0.25.1",
|
||||
"eslint": "^9.22.0",
|
||||
"@types/jest": "^29.5.14",
|
||||
"@types/node": "^24.10.4",
|
||||
"@typescript-eslint/eslint-plugin": "^8.49.0",
|
||||
"@typescript-eslint/parser": "^8.49.0",
|
||||
"esbuild": "^0.25.12",
|
||||
"eslint": "^9.39.2",
|
||||
"jest": "^29.5.0",
|
||||
"standard-version": "^9.5.0",
|
||||
"ts-jest": "^29.2.6",
|
||||
"typescript": "^5.8.2"
|
||||
"ts-jest": "^29.4.6",
|
||||
"typescript": "^5.9.3"
|
||||
}
|
||||
}
|
||||
|
||||
+78
-47
@@ -1,79 +1,110 @@
|
||||
# Magento 2 Package Installation Test Action
|
||||
# Setup Magento
|
||||
|
||||
A Github Action that sets Magento up to the point of composer install.
|
||||
A GitHub Action that prepares a Magento 2 environment for testing. It handles PHP setup and Magento project creation, stopping just before `composer install` so you can add custom repositories or packages.
|
||||
|
||||
## Modes
|
||||
|
||||
The action operates in two modes:
|
||||
|
||||
- **`extension`** (default): Creates a fresh Magento project in `../magento2` for testing your extension against. Use this when your repository contains a Magento module/extension.
|
||||
- **`store`**: Uses your existing Magento project in the working directory. Use this when your repository is a full Magento store.
|
||||
|
||||
## Inputs
|
||||
|
||||
See the [action.yml](./action.yml)
|
||||
| Input | Required | Default | Description |
|
||||
|-------|----------|---------|-------------|
|
||||
| `php-version` | Yes | `8.4` | PHP version to install |
|
||||
| `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_repository` | No | `https://mirror.mage-os.org/` | Composer repository URL for Magento packages |
|
||||
| `tools` | No | - | PHP tools to install globally (e.g., `composer:v2`) |
|
||||
| `extensions` | No | - | Additional PHP extensions to install |
|
||||
| `coverage` | No | - | Code coverage driver (e.g., `xdebug`, `pcov`) |
|
||||
| `working-directory` | No | `.` | Working directory for the action |
|
||||
| `apply_fixes` | No | `false` | Apply Magento installation fixes (always applied in extension mode) |
|
||||
| `composer_auth` | No | - | Composer authentication credentials JSON |
|
||||
|
||||
## Outputs
|
||||
|
||||
| Output | Description |
|
||||
|--------|-------------|
|
||||
| `path` | Absolute path to the Magento installation directory |
|
||||
|
||||
## Usage
|
||||
|
||||
### Stores
|
||||
### Testing an Extension
|
||||
|
||||
Use `mode: extension` when your repository contains a Magento module. The action creates a fresh Magento instance and you can then require your extension into it.
|
||||
|
||||
```yml
|
||||
name: Setup Magento Store
|
||||
name: Test Extension
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
setup-magento-store:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: ./setup-magento
|
||||
with:
|
||||
php-version: 8.1
|
||||
tools: composer:v2
|
||||
mode: store
|
||||
working-directory: $GITHUB_WORKSPACE
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- run: composer install
|
||||
name: Composer install
|
||||
shell: bash
|
||||
- uses: graycoreio/github-actions-magento/setup-magento@main
|
||||
id: setup-magento
|
||||
with:
|
||||
php-version: "8.3"
|
||||
tools: composer:v2
|
||||
mode: extension
|
||||
magento_version: "magento/project-community-edition:2.4.8-p3"
|
||||
|
||||
- name: Add local repository
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: composer config repositories.local path $GITHUB_WORKSPACE
|
||||
|
||||
- name: Require extension
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: composer require vendor/my-extension "@dev"
|
||||
env:
|
||||
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||
```
|
||||
|
||||
### Extensions
|
||||
### Testing a Magento Store
|
||||
|
||||
Use `mode: store` when your repository is a complete Magento project.
|
||||
|
||||
```yml
|
||||
name: Setup Magento Store
|
||||
name: Test Store
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
setup-magento-extension:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: ./setup-magento
|
||||
with:
|
||||
php-version: 8.1
|
||||
tools: composer:v2
|
||||
mode: extension
|
||||
magento_version: 2.4.5-p1
|
||||
- uses: graycoreio/github-actions-magento/setup-magento@main
|
||||
id: setup-magento
|
||||
with:
|
||||
php-version: "8.3"
|
||||
tools: composer:v2
|
||||
mode: store
|
||||
|
||||
- run: composer config repositories.local path $GITHUB_WORKSPACE
|
||||
name: Add Github Repo for Testing
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
shell: bash
|
||||
|
||||
- run: composer require my/package "@dev"
|
||||
name: Attempt install
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
shell: bash
|
||||
env:
|
||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
||||
- name: Install dependencies
|
||||
working-directory: ${{ steps.setup-magento.outputs.path }}
|
||||
run: composer install
|
||||
env:
|
||||
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- The action uses [shivammathur/setup-php](https://github.com/shivammathur/setup-php) for PHP installation
|
||||
- By default, Magento packages are fetched from the [Mage-OS mirror](https://mirror.mage-os.org/) which doesn't require authentication
|
||||
- For Adobe Commerce or private packages, provide `composer_auth` with your credentials
|
||||
@@ -5,7 +5,7 @@ description: "This action sets up a Magento instance for further actions like ru
|
||||
inputs:
|
||||
php-version:
|
||||
description: "Setup PHP version."
|
||||
default: "8.1"
|
||||
default: "8.4"
|
||||
required: true
|
||||
|
||||
tools:
|
||||
@@ -27,7 +27,7 @@ inputs:
|
||||
|
||||
magento_version:
|
||||
required: false
|
||||
default: '~2.4.5'
|
||||
default: 'magento/project-community-edition:2.4.8-p3'
|
||||
description: "The version of Magento to use. This is only relevant if you are testing an extension."
|
||||
|
||||
apply_fixes:
|
||||
|
||||
@@ -21,6 +21,7 @@ See the [action.yml](./action.yml)
|
||||
- `currently-supported` - The currently supported Magento Open Source versions by Adobe.
|
||||
- `latest` - The latest version of Magento only.
|
||||
- `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.
|
||||
- `nightly` - The nightly version of Magento (only available via `https://upstream-nightly.mage-os.org`)
|
||||
- `all` - All versions of Magento (including patched/unpatched versions).
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ description: "A Github Action that computes the Github Actions matrix for the ch
|
||||
inputs:
|
||||
kind:
|
||||
required: false
|
||||
description: "The kind of versions you want to return. Allowed values are `currently-supported`, `latest`, `custom`, `nightly`, `recent` and `all`"
|
||||
description: "The kind of versions you want to return. Allowed values are `currently-supported`, `latest`, `custom`, `usable`, `nightly`, `recent` and `all`"
|
||||
default: "currently-supported"
|
||||
project:
|
||||
required: false
|
||||
@@ -22,13 +22,17 @@ inputs:
|
||||
default: "2y"
|
||||
description: "The time frame (from today). Only used in `recent` kind. String that defines a time duration using a combination of years (y), months (m), and days (d). Each unit is optional and can appear in any order, separated by spaces. For example `2y 2m 2d`. "
|
||||
|
||||
include_services:
|
||||
required: false
|
||||
default: "false"
|
||||
description: "Whether to include a `services` key in each matrix entry with GitHub Actions service configurations."
|
||||
|
||||
outputs:
|
||||
matrix:
|
||||
description: "The Github Actions matrix of software technologies required to run Magento."
|
||||
value: ${{ steps.generate.outputs.matrix }}
|
||||
|
||||
runs:
|
||||
using: "node16"
|
||||
using: "node24"
|
||||
main: dist/index.js
|
||||
|
||||
branding:
|
||||
|
||||
Vendored
+67
-6
File diff suppressed because one or more lines are too long
@@ -11,12 +11,12 @@
|
||||
"author": "",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.10.1",
|
||||
"@actions/github": "^6.0.0"
|
||||
"@actions/core": "0.0.0-PLACEHOLDER",
|
||||
"@actions/github": "0.0.0-PLACEHOLDER"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^29.5.12",
|
||||
"jest": "^29.7.0",
|
||||
"ts-jest": "^29.2.3"
|
||||
"@types/jest": "0.0.0-PLACEHOLDER",
|
||||
"jest": "0.0.0-PLACEHOLDER",
|
||||
"ts-jest": "0.0.0-PLACEHOLDER"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,21 +2,35 @@ import * as core from '@actions/core';
|
||||
import { validateKind } from './kind/validate-kinds';
|
||||
import { getMatrixForKind } from './matrix/get-matrix-for-kind';
|
||||
import { validateProject } from "./project/validate-projects";
|
||||
import { buildServicesForEntry } from "./services/build-services";
|
||||
|
||||
|
||||
export async function run(): Promise<void> {
|
||||
try {
|
||||
try {
|
||||
const kind = core.getInput("kind");
|
||||
const customVersions = core.getInput("custom_versions");
|
||||
const project = core.getInput("project");
|
||||
const recent_time_frame = core.getInput("recent_time_frame");
|
||||
|
||||
const include_services = core.getInput("include_services") === "true";
|
||||
|
||||
validateProject(<any>project)
|
||||
|
||||
validateKind(<any>kind, customVersions ? customVersions.split(',') : undefined);
|
||||
|
||||
core.setOutput('matrix', getMatrixForKind(kind, project, customVersions, recent_time_frame));
|
||||
}
|
||||
let matrix = getMatrixForKind(kind, project, customVersions, recent_time_frame);
|
||||
|
||||
if (include_services) {
|
||||
matrix = {
|
||||
magento: matrix.magento,
|
||||
include: matrix.include.map((entry) => ({
|
||||
...entry,
|
||||
services: buildServicesForEntry(entry)
|
||||
}))
|
||||
};
|
||||
}
|
||||
|
||||
core.setOutput('matrix', matrix);
|
||||
}
|
||||
catch (error) {
|
||||
core.setFailed(error.message);
|
||||
}
|
||||
|
||||
@@ -44,38 +44,50 @@ describe('getCurrentlySupportedVersions for magento-open-source', () => {
|
||||
'magento/project-community-edition:2.4.6-p8',
|
||||
'magento/project-community-edition:2.4.7-p3',
|
||||
]],
|
||||
['2025-08-08T00:00:00Z', 'Day Before v2.4.5 EoL', [
|
||||
['2025-06-09T00:00:00Z', 'Day before new patch releases', [
|
||||
'magento/project-community-edition:2.4.5-p12',
|
||||
'magento/project-community-edition:2.4.6-p10',
|
||||
'magento/project-community-edition:2.4.7-p5',
|
||||
'magento/project-community-edition:2.4.8',
|
||||
]],
|
||||
['2025-08-09T00:00:00Z', 'Day of v2.4.5 EoL', [
|
||||
'magento/project-community-edition:2.4.5-p12',
|
||||
'magento/project-community-edition:2.4.6-p10',
|
||||
'magento/project-community-edition:2.4.7-p5',
|
||||
'magento/project-community-edition:2.4.8',
|
||||
['2025-06-10T00:00:01Z', 'Day of new patch releases', [
|
||||
'magento/project-community-edition:2.4.5-p13',
|
||||
'magento/project-community-edition:2.4.6-p11',
|
||||
'magento/project-community-edition:2.4.7-p6',
|
||||
'magento/project-community-edition:2.4.8-p1',
|
||||
]],
|
||||
['2025-08-10T00:00:00Z', 'Day after v2.4.5 EoL', [
|
||||
'magento/project-community-edition:2.4.6-p10',
|
||||
'magento/project-community-edition:2.4.7-p5',
|
||||
'magento/project-community-edition:2.4.8',
|
||||
['2025-08-11T00:00:00Z', 'Day Before v2.4.5 EoL', [
|
||||
'magento/project-community-edition:2.4.5-p13',
|
||||
'magento/project-community-edition:2.4.6-p11',
|
||||
'magento/project-community-edition:2.4.7-p6',
|
||||
'magento/project-community-edition:2.4.8-p1',
|
||||
]],
|
||||
['2025-08-12T00:00:00Z', 'Day of v2.4.5 EoL', [
|
||||
'magento/project-community-edition:2.4.5-p13',
|
||||
'magento/project-community-edition:2.4.6-p11',
|
||||
'magento/project-community-edition:2.4.7-p6',
|
||||
'magento/project-community-edition:2.4.8-p1',
|
||||
]],
|
||||
['2025-08-14T00:00:00Z', 'Day after August 2025 patch release', [
|
||||
'magento/project-community-edition:2.4.6-p12',
|
||||
'magento/project-community-edition:2.4.7-p7',
|
||||
'magento/project-community-edition:2.4.8-p2',
|
||||
]],
|
||||
['2025-12-31T00:00:00Z', 'End of 2025', [
|
||||
'magento/project-community-edition:2.4.6-p10',
|
||||
'magento/project-community-edition:2.4.7-p5',
|
||||
'magento/project-community-edition:2.4.8',
|
||||
'magento/project-community-edition:2.4.6-p13',
|
||||
'magento/project-community-edition:2.4.7-p8',
|
||||
'magento/project-community-edition:2.4.8-p3',
|
||||
]],
|
||||
['2026-03-15T00:00:00Z', 'Day after v2.4.6 EoL', [
|
||||
'magento/project-community-edition:2.4.7-p5',
|
||||
'magento/project-community-edition:2.4.8',
|
||||
'magento/project-community-edition:2.4.7-p8',
|
||||
'magento/project-community-edition:2.4.8-p3',
|
||||
]],
|
||||
['2027-04-09T00:00:00Z', 'Day of v2.4.7 EoL', [
|
||||
'magento/project-community-edition:2.4.7-p5',
|
||||
'magento/project-community-edition:2.4.8',
|
||||
'magento/project-community-edition:2.4.7-p8',
|
||||
'magento/project-community-edition:2.4.8-p3',
|
||||
]],
|
||||
['2027-04-10T00:00:00Z', 'Day after v2.4.7 EoL', [
|
||||
'magento/project-community-edition:2.4.8',
|
||||
'magento/project-community-edition:2.4.8-p3',
|
||||
]],
|
||||
])(
|
||||
'supportedVersions for %s',
|
||||
@@ -110,6 +122,15 @@ describe('getCurrentlySupportedVersions for mage-os', () => {
|
||||
['2024-07-18T00:00:01Z', 'Release of 1.0.2', [
|
||||
'mage-os/project-community-edition:1.0.2',
|
||||
]],
|
||||
['2025-04-22T00:00:01Z', 'Release of 1.1.1', [
|
||||
'mage-os/project-community-edition:1.1.1',
|
||||
]],
|
||||
['2025-08-13T00:00:01Z', 'Release of 1.3.0', [
|
||||
'mage-os/project-community-edition:1.3.0',
|
||||
]],
|
||||
['2025-09-09T00:00:01Z', 'Release of 1.3.1', [
|
||||
'mage-os/project-community-edition:1.3.1',
|
||||
]],
|
||||
])(
|
||||
'supportedVersions for %s',
|
||||
(date, description ,result) => {
|
||||
@@ -118,4 +139,4 @@ describe('getCurrentlySupportedVersions for mage-os', () => {
|
||||
).toEqual(result);
|
||||
}
|
||||
);
|
||||
})
|
||||
})
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
import { getUsableVersions } from "./get-usable";
|
||||
import { Project } from "../project/projects";
|
||||
import { getIndividualVersionsForProject } from "../versions/get-versions-for-project";
|
||||
|
||||
// Mock the dependencies
|
||||
jest.mock('../versions/get-versions-for-project');
|
||||
const mockGetVersions = getIndividualVersionsForProject as jest.Mock;
|
||||
|
||||
describe('getUsableVersions for magento-open-source', () => {
|
||||
const project: Project = "magento-open-source";
|
||||
|
||||
beforeEach(() => {
|
||||
mockGetVersions.mockReset();
|
||||
});
|
||||
|
||||
it('should return an array of versions', () => {
|
||||
mockGetVersions.mockReturnValue({
|
||||
'magento/project-community-edition:2.4.6': { composer: '2.2.0' }
|
||||
});
|
||||
expect(Array.isArray(getUsableVersions(project))).toBe(true);
|
||||
});
|
||||
|
||||
it('should filter out versions with composer < 2.0.0', () => {
|
||||
mockGetVersions.mockReturnValue({
|
||||
'magento/project-community-edition:2.4.5': { composer: '1.9.0' },
|
||||
'magento/project-community-edition:2.4.6': { composer: '2.2.0' }
|
||||
});
|
||||
|
||||
const versions = getUsableVersions(project);
|
||||
expect(versions).not.toContain('magento/project-community-edition:2.4.5');
|
||||
expect(versions).toContain('magento/project-community-edition:2.4.6');
|
||||
});
|
||||
|
||||
it('should handle composer version equal to 2.0.0', () => {
|
||||
mockGetVersions.mockReturnValue({
|
||||
'magento/project-community-edition:2.4.6': { composer: '2.0.0' }
|
||||
});
|
||||
|
||||
const versions = getUsableVersions(project);
|
||||
expect(versions).toContain('magento/project-community-edition:2.4.6');
|
||||
});
|
||||
|
||||
it('should handle numeric composer versions', () => {
|
||||
mockGetVersions.mockReturnValue({
|
||||
'magento/project-community-edition:2.3.7-p3': { composer: 1 },
|
||||
'magento/project-community-edition:2.4.6': { composer: 2 }
|
||||
});
|
||||
|
||||
const versions = getUsableVersions(project);
|
||||
expect(versions).not.toContain('magento/project-community-edition:2.3.7-p3');
|
||||
expect(versions).toContain('magento/project-community-edition:2.4.6');
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,23 @@
|
||||
import { PackageMatrixVersion } from '../matrix/matrix-type';
|
||||
import { getIndividualVersionsForProject } from "../versions/get-versions-for-project";
|
||||
import semver from 'semver';
|
||||
|
||||
export const getUsableVersions = (project: string): string[] => {
|
||||
const allVersions = getIndividualVersionsForProject(project)
|
||||
return Object.entries(<Record<string,PackageMatrixVersion>>allVersions)
|
||||
.filter(([key, value]) => {
|
||||
/**
|
||||
* Filter out any versions that are not 'usable', and cannot be successfully installed
|
||||
* anymore for modern systems or other reasons outside our control.
|
||||
*/
|
||||
|
||||
// Packagist retired support for Composer 1 on 2025-09-01.
|
||||
const composerVersion = semver.coerce(value.composer.toString());
|
||||
if (composerVersion && semver.lt(composerVersion, '2.0.0')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
})
|
||||
.map(([key, value]) => key);
|
||||
}
|
||||
@@ -5,6 +5,7 @@ export const KNOWN_KINDS = {
|
||||
'currently-supported': true,
|
||||
'latest': true,
|
||||
'custom': true,
|
||||
'usable': true,
|
||||
'nightly': true,
|
||||
'recent': true,
|
||||
'all': true,
|
||||
|
||||
@@ -53,15 +53,19 @@ describe('recent for magento-open-source', () => {
|
||||
"magento/project-community-edition:2.4.5-p10",
|
||||
"magento/project-community-edition:2.4.5-p11",
|
||||
"magento/project-community-edition:2.4.5-p12",
|
||||
"magento/project-community-edition:2.4.5-p13",
|
||||
"magento/project-community-edition:2.4.6-p7",
|
||||
"magento/project-community-edition:2.4.6-p8",
|
||||
"magento/project-community-edition:2.4.6-p9",
|
||||
"magento/project-community-edition:2.4.6-p10",
|
||||
"magento/project-community-edition:2.4.6-p11",
|
||||
"magento/project-community-edition:2.4.7-p2",
|
||||
"magento/project-community-edition:2.4.7-p3",
|
||||
"magento/project-community-edition:2.4.7-p4",
|
||||
"magento/project-community-edition:2.4.7-p5",
|
||||
"magento/project-community-edition:2.4.7-p6",
|
||||
"magento/project-community-edition:2.4.8",
|
||||
"magento/project-community-edition:2.4.8-p1"
|
||||
]],
|
||||
])(
|
||||
'recent for %s',
|
||||
|
||||
@@ -84,7 +84,7 @@ describe('getMatrixForKind for magento-open-source', () => {
|
||||
});
|
||||
|
||||
it('returns a matrix for valid `custom`', () => {
|
||||
const result = getMatrixForKind("custom", project, "magento/project-community-edition:2.3.7-p3");
|
||||
const result = getMatrixForKind("custom", project, "magento/project-community-edition:2.4.2");
|
||||
|
||||
expect(result.magento).toBeDefined();
|
||||
expect(result.include).toBeDefined();
|
||||
@@ -98,7 +98,7 @@ describe('getMatrixForKind for magento-open-source', () => {
|
||||
});
|
||||
|
||||
it('returns a matrix for valid multiple `custom`', () => {
|
||||
const result = getMatrixForKind("custom", project, "magento/project-community-edition:2.3.7-p3,magento/project-community-edition:2.4.0");
|
||||
const result = getMatrixForKind("custom", project, "magento/project-community-edition:2.4.2,magento/project-community-edition:2.4.3");
|
||||
|
||||
expect(result.magento).toBeDefined();
|
||||
expect(result.include).toBeDefined();
|
||||
|
||||
@@ -4,6 +4,7 @@ import latestJson from '../kind/special-versions/latest.json';
|
||||
import nightlyJson from '../kind/special-versions/nightly.json';
|
||||
import { getDayBefore } from '../nightly/get-day-before';
|
||||
import { getCurrentlySupportedVersions } from "../kind/get-currently-supported";
|
||||
import { getUsableVersions } from "../kind/get-usable";
|
||||
import { amendMatrixForNext } from "../nightly/amend-matrix-for-next";
|
||||
import { getRecentVersions } from "../kind/recent";
|
||||
|
||||
@@ -14,6 +15,8 @@ export const getMatrixForKind = (kind: string, project: string, versions = "", r
|
||||
return getMatrixForVersions(project, latestJson[project]);
|
||||
case 'currently-supported':
|
||||
return getMatrixForVersions(project, getCurrentlySupportedVersions(project, new Date()));
|
||||
case 'usable':
|
||||
return getMatrixForVersions(project, getUsableVersions(project));
|
||||
case 'nightly':
|
||||
return amendMatrixForNext(getMatrixForVersions(project, nightlyJson[project]), 'https://upstream-nightly.mage-os.org', getDayBefore());
|
||||
case 'all':
|
||||
|
||||
@@ -1,16 +1,30 @@
|
||||
export interface ServiceConfig {
|
||||
image: string;
|
||||
env?: Record<string, string>;
|
||||
ports?: string[];
|
||||
options?: string;
|
||||
}
|
||||
|
||||
export interface Services {
|
||||
[serviceName: string]: ServiceConfig;
|
||||
}
|
||||
|
||||
export interface PackageMatrixVersion {
|
||||
magento: string,
|
||||
php: string | number,
|
||||
composer: string | number,
|
||||
mysql: string,
|
||||
elasticsearch: string,
|
||||
opensearch: string,
|
||||
rabbitmq: string,
|
||||
redis: string,
|
||||
varnish: string,
|
||||
valkey: string,
|
||||
nginx: string,
|
||||
os: string,
|
||||
release: string,
|
||||
eol: string
|
||||
eol: string,
|
||||
services?: Services
|
||||
}
|
||||
|
||||
export interface GithubActionsMatrix {
|
||||
|
||||
@@ -12,8 +12,10 @@ describe('amendMatrixForNext', () => {
|
||||
"composer": "2",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"opensearch": "",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:7.0",
|
||||
"valkey": "",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -35,8 +37,10 @@ describe('amendMatrixForNext', () => {
|
||||
"composer": "2",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"opensearch": "",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:7.0",
|
||||
"valkey": "",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -60,8 +64,10 @@ describe('amendMatrixForNext', () => {
|
||||
"composer": "2",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"opensearch": "",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:7.0",
|
||||
"valkey": "",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -83,8 +89,10 @@ describe('amendMatrixForNext', () => {
|
||||
"composer": "2",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"opensearch": "",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:7.0",
|
||||
"valkey": "",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -108,8 +116,10 @@ describe('amendMatrixForNext', () => {
|
||||
"composer": "2",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"opensearch": "",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:7.0",
|
||||
"valkey": "",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -122,8 +132,10 @@ describe('amendMatrixForNext', () => {
|
||||
"composer": "2",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"opensearch": "",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:7.0",
|
||||
"valkey": "",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -145,8 +157,10 @@ describe('amendMatrixForNext', () => {
|
||||
"composer": "2",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"opensearch": "",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:7.0",
|
||||
"valkey": "",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -159,8 +173,10 @@ describe('amendMatrixForNext', () => {
|
||||
"composer": "2",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"opensearch": "",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:7.0",
|
||||
"valkey": "",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -184,8 +200,10 @@ describe('amendMatrixForNext', () => {
|
||||
"composer": "2",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"opensearch": "",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:7.0",
|
||||
"valkey": "",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -207,8 +225,10 @@ describe('amendMatrixForNext', () => {
|
||||
"composer": "2",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"opensearch": "",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:7.0",
|
||||
"valkey": "",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
|
||||
@@ -0,0 +1,248 @@
|
||||
import { buildServicesForEntry } from './build-services';
|
||||
import { PackageMatrixVersion } from '../matrix/matrix-type';
|
||||
|
||||
const createTestEntry = (overrides: Partial<PackageMatrixVersion> = {}): PackageMatrixVersion => ({
|
||||
magento: 'magento/project-community-edition:2.4.7',
|
||||
php: '8.3',
|
||||
composer: '2.7.4',
|
||||
mysql: 'mysql:8.4',
|
||||
elasticsearch: 'elasticsearch:8.11.4',
|
||||
opensearch: 'opensearchproject/opensearch:2.19.1',
|
||||
rabbitmq: 'rabbitmq:4.0-management',
|
||||
redis: 'redis:7.2',
|
||||
varnish: 'varnish:7.5',
|
||||
valkey: 'valkey:8.0',
|
||||
nginx: 'nginx:1.26',
|
||||
os: 'ubuntu-latest',
|
||||
release: '2024-04-09T00:00:00+0000',
|
||||
eol: '2027-04-09T00:00:00+0000',
|
||||
...overrides
|
||||
});
|
||||
|
||||
describe('buildServicesForEntry', () => {
|
||||
describe('search engine selection', () => {
|
||||
it('should prefer opensearch when both are available', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.opensearch).toBeDefined();
|
||||
expect(services.opensearch.image).toBe('opensearchproject/opensearch:2.19.1');
|
||||
expect(services.elasticsearch).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should fall back to elasticsearch when opensearch is empty', () => {
|
||||
const entry = createTestEntry({ opensearch: '' });
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.elasticsearch).toBeDefined();
|
||||
expect(services.elasticsearch.image).toBe('elasticsearch:8.11.4');
|
||||
expect(services.opensearch).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should not include search engine when neither is available', () => {
|
||||
const entry = createTestEntry({ opensearch: '', elasticsearch: '' });
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.opensearch).toBeUndefined();
|
||||
expect(services.elasticsearch).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('cache selection', () => {
|
||||
it('should prefer valkey when both are available', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.valkey).toBeDefined();
|
||||
expect(services.valkey.image).toBe('valkey:8.0');
|
||||
expect(services.redis).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should fall back to redis when valkey is empty', () => {
|
||||
const entry = createTestEntry({ valkey: '' });
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.redis).toBeDefined();
|
||||
expect(services.redis.image).toBe('redis:7.2');
|
||||
expect(services.valkey).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should not include cache when neither is available', () => {
|
||||
const entry = createTestEntry({ valkey: '', redis: '' });
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.valkey).toBeUndefined();
|
||||
expect(services.redis).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('mysql configuration', () => {
|
||||
it('should include mysql when available', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.mysql).toBeDefined();
|
||||
expect(services.mysql.image).toBe('mysql:8.4');
|
||||
});
|
||||
|
||||
it('should not include mysql when empty', () => {
|
||||
const entry = createTestEntry({ mysql: '' });
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.mysql).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should include correct mysql env configuration', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.mysql.env).toEqual({
|
||||
MYSQL_DATABASE: 'magento_integration_tests',
|
||||
MYSQL_USER: 'user',
|
||||
MYSQL_PASSWORD: 'password',
|
||||
MYSQL_ROOT_PASSWORD: 'rootpassword'
|
||||
});
|
||||
});
|
||||
|
||||
it('should include correct mysql ports', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.mysql.ports).toEqual(['3306:3306']);
|
||||
});
|
||||
|
||||
it('should include mysql health check options', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.mysql.options).toContain('--health-cmd');
|
||||
expect(services.mysql.options).toContain('mysqladmin ping');
|
||||
});
|
||||
});
|
||||
|
||||
describe('rabbitmq configuration', () => {
|
||||
it('should include rabbitmq when available', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.rabbitmq).toBeDefined();
|
||||
expect(services.rabbitmq.image).toBe('rabbitmq:4.0-management');
|
||||
});
|
||||
|
||||
it('should not include rabbitmq when empty', () => {
|
||||
const entry = createTestEntry({ rabbitmq: '' });
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.rabbitmq).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should include correct rabbitmq env configuration', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.rabbitmq.env).toEqual({
|
||||
RABBITMQ_DEFAULT_USER: 'guest',
|
||||
RABBITMQ_DEFAULT_PASS: 'guest'
|
||||
});
|
||||
});
|
||||
|
||||
it('should include correct rabbitmq ports', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.rabbitmq.ports).toEqual(['5672:5672']);
|
||||
});
|
||||
});
|
||||
|
||||
describe('opensearch configuration', () => {
|
||||
it('should include correct opensearch env configuration', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.opensearch.env).toEqual({
|
||||
'discovery.type': 'single-node',
|
||||
'DISABLE_INSTALL_DEMO_CONFIG': 'true',
|
||||
'DISABLE_SECURITY_PLUGIN': 'true'
|
||||
});
|
||||
});
|
||||
|
||||
it('should include correct opensearch ports', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.opensearch.ports).toEqual(['9200:9200']);
|
||||
});
|
||||
|
||||
it('should include opensearch health check options', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.opensearch.options).toContain('--health-cmd');
|
||||
expect(services.opensearch.options).toContain('curl');
|
||||
});
|
||||
});
|
||||
|
||||
describe('elasticsearch configuration', () => {
|
||||
it('should include correct elasticsearch env configuration', () => {
|
||||
const entry = createTestEntry({ opensearch: '' });
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.elasticsearch.env).toEqual({
|
||||
'discovery.type': 'single-node',
|
||||
'xpack.security.enabled': 'false',
|
||||
'xpack.security.http.ssl.enabled': 'false',
|
||||
'xpack.security.transport.ssl.enabled': 'false'
|
||||
});
|
||||
});
|
||||
|
||||
it('should include correct elasticsearch ports', () => {
|
||||
const entry = createTestEntry({ opensearch: '' });
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.elasticsearch.ports).toEqual(['9200:9200']);
|
||||
});
|
||||
});
|
||||
|
||||
describe('cache configuration', () => {
|
||||
it('should include correct valkey ports', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.valkey.ports).toEqual(['6379:6379']);
|
||||
});
|
||||
|
||||
it('should include correct redis ports', () => {
|
||||
const entry = createTestEntry({ valkey: '' });
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(services.redis.ports).toEqual(['6379:6379']);
|
||||
});
|
||||
});
|
||||
|
||||
describe('complete service output', () => {
|
||||
it('should build all services when all are available', () => {
|
||||
const entry = createTestEntry();
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(Object.keys(services)).toHaveLength(4);
|
||||
expect(services.mysql).toBeDefined();
|
||||
expect(services.opensearch).toBeDefined();
|
||||
expect(services.rabbitmq).toBeDefined();
|
||||
expect(services.valkey).toBeDefined();
|
||||
});
|
||||
|
||||
it('should handle entry with minimal services', () => {
|
||||
const entry = createTestEntry({
|
||||
mysql: '',
|
||||
elasticsearch: '',
|
||||
opensearch: '',
|
||||
rabbitmq: '',
|
||||
redis: '',
|
||||
valkey: ''
|
||||
});
|
||||
const services = buildServicesForEntry(entry);
|
||||
|
||||
expect(Object.keys(services)).toHaveLength(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,86 @@
|
||||
import { PackageMatrixVersion, Services } from '../matrix/matrix-type';
|
||||
import {
|
||||
mysqlConfig,
|
||||
elasticsearchConfig,
|
||||
opensearchConfig,
|
||||
rabbitmqConfig,
|
||||
redisConfig,
|
||||
valkeyConfig
|
||||
} from './service-config';
|
||||
|
||||
interface SearchEngineChoice {
|
||||
type: 'opensearch' | 'elasticsearch';
|
||||
image: string;
|
||||
}
|
||||
|
||||
interface CacheChoice {
|
||||
type: 'valkey' | 'redis';
|
||||
image: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines which search engine to use for a matrix entry.
|
||||
* Prefers opensearch over elasticsearch.
|
||||
*/
|
||||
function getSearchEngineChoice(entry: PackageMatrixVersion): SearchEngineChoice | null {
|
||||
if (entry.opensearch && entry.opensearch.trim() !== '') {
|
||||
return { type: 'opensearch', image: entry.opensearch };
|
||||
}
|
||||
if (entry.elasticsearch && entry.elasticsearch.trim() !== '') {
|
||||
return { type: 'elasticsearch', image: entry.elasticsearch };
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines which cache to use for a matrix entry.
|
||||
* Prefers valkey over redis.
|
||||
*/
|
||||
function getCacheChoice(entry: PackageMatrixVersion): CacheChoice | null {
|
||||
if (entry.valkey && entry.valkey.trim() !== '') {
|
||||
return { type: 'valkey', image: entry.valkey };
|
||||
}
|
||||
if (entry.redis && entry.redis.trim() !== '') {
|
||||
return { type: 'redis', image: entry.redis };
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the services object for a single matrix entry.
|
||||
*/
|
||||
export function buildServicesForEntry(entry: PackageMatrixVersion): Services {
|
||||
const services: Services = {};
|
||||
|
||||
// MySQL is always included if present
|
||||
if (entry.mysql && entry.mysql.trim() !== '') {
|
||||
services.mysql = mysqlConfig.getConfig(entry.mysql);
|
||||
}
|
||||
|
||||
// Search engine: prefer opensearch over elasticsearch
|
||||
const searchEngine = getSearchEngineChoice(entry);
|
||||
if (searchEngine) {
|
||||
if (searchEngine.type === 'opensearch') {
|
||||
services.opensearch = opensearchConfig.getConfig(searchEngine.image);
|
||||
} else {
|
||||
services.elasticsearch = elasticsearchConfig.getConfig(searchEngine.image);
|
||||
}
|
||||
}
|
||||
|
||||
// RabbitMQ
|
||||
if (entry.rabbitmq && entry.rabbitmq.trim() !== '') {
|
||||
services.rabbitmq = rabbitmqConfig.getConfig(entry.rabbitmq);
|
||||
}
|
||||
|
||||
// Cache: prefer valkey over redis
|
||||
const cache = getCacheChoice(entry);
|
||||
if (cache) {
|
||||
if (cache.type === 'valkey') {
|
||||
services.valkey = valkeyConfig.getConfig(cache.image);
|
||||
} else {
|
||||
services.redis = redisConfig.getConfig(cache.image);
|
||||
}
|
||||
}
|
||||
|
||||
return services;
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
import { ServiceConfig } from '../matrix/matrix-type';
|
||||
|
||||
export interface ServiceTemplate {
|
||||
getConfig(image: string): ServiceConfig;
|
||||
}
|
||||
|
||||
export const mysqlConfig: ServiceTemplate = {
|
||||
getConfig(image: string): ServiceConfig {
|
||||
return {
|
||||
image,
|
||||
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'
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
export const elasticsearchConfig: ServiceTemplate = {
|
||||
getConfig(image: string): ServiceConfig {
|
||||
return {
|
||||
image,
|
||||
env: {
|
||||
'discovery.type': 'single-node',
|
||||
'xpack.security.enabled': 'false',
|
||||
'xpack.security.http.ssl.enabled': 'false',
|
||||
'xpack.security.transport.ssl.enabled': 'false'
|
||||
},
|
||||
ports: ['9200:9200'],
|
||||
options: '--health-cmd "curl http://localhost:9200/_cluster/health" --health-interval 10s --health-timeout 5s --health-retries 10'
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
export const opensearchConfig: ServiceTemplate = {
|
||||
getConfig(image: string): ServiceConfig {
|
||||
return {
|
||||
image,
|
||||
env: {
|
||||
'discovery.type': 'single-node',
|
||||
'DISABLE_INSTALL_DEMO_CONFIG': 'true',
|
||||
'DISABLE_SECURITY_PLUGIN': 'true'
|
||||
},
|
||||
ports: ['9200:9200'],
|
||||
options: '--health-cmd "curl http://localhost:9200/_cluster/health" --health-interval 10s --health-timeout 5s --health-retries 10'
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
export const rabbitmqConfig: ServiceTemplate = {
|
||||
getConfig(image: string): ServiceConfig {
|
||||
return {
|
||||
image,
|
||||
env: {
|
||||
RABBITMQ_DEFAULT_USER: 'guest',
|
||||
RABBITMQ_DEFAULT_PASS: 'guest'
|
||||
},
|
||||
ports: ['5672:5672']
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
export const redisConfig: ServiceTemplate = {
|
||||
getConfig(image: string): ServiceConfig {
|
||||
return {
|
||||
image,
|
||||
ports: ['6379:6379']
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
export const valkeyConfig: ServiceTemplate = {
|
||||
getConfig(image: string): ServiceConfig {
|
||||
return {
|
||||
image,
|
||||
ports: ['6379:6379']
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -1,22 +1,36 @@
|
||||
{
|
||||
"mage-os/project-community-edition": {
|
||||
"mage-os/project-community-edition": {
|
||||
"magento": "mage-os/project-community-edition",
|
||||
"php": 8.1,
|
||||
"composer": "2.2.21",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"rabbitmq": "rabbitmq:3.9-management",
|
||||
"redis": "redis:7.0",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2023-10-10T00:00:00+0000",
|
||||
"eol": "2026-10-10T00:00:00+0000"
|
||||
"release": "2025-10-16T00:00:00+0000",
|
||||
"eol": "2028-10-17T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:next": {
|
||||
"magento": "mage-os/project-community-edition:next",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-10-16T00:00:00+0000",
|
||||
"eol": "2028-10-17T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:>=1.0 <1.1": {
|
||||
"magento": "mage-os/project-community-edition:>=1.0 <1.1",
|
||||
"php": 8.3,
|
||||
"composer": "2",
|
||||
"composer": "2.7.4",
|
||||
"mysql": "mariadb:10.6",
|
||||
"elasticsearch": "elasticsearch:8.11.4",
|
||||
"rabbitmq": "rabbitmq:3.13-management",
|
||||
@@ -24,7 +38,63 @@
|
||||
"varnish": "varnish:7.5",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-10-10T00:00:00+0000",
|
||||
"eol": "2026-10-10T00:00:00+0000"
|
||||
"release": "2023-10-10T00:00:00+0000",
|
||||
"eol": "2025-04-07T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:>=1.1 <1.2": {
|
||||
"magento": "mage-os/project-community-edition:>=1.1 <1.2",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-04-15T00:00:00+0000",
|
||||
"eol": "2025-06-16T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:>=1.2 <1.3": {
|
||||
"magento": "mage-os/project-community-edition:>=1.2 <1.3",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-06-17T00:00:00+0000",
|
||||
"eol": "2025-08-12T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:>=1.3 <1.4": {
|
||||
"magento": "mage-os/project-community-edition:>=1.2 <1.3",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-08-13T00:00:00+0000",
|
||||
"eol": "2025-10-16T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:>=2.0 <2.1": {
|
||||
"magento": "mage-os/project-community-edition:>=2.0 <2.1",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-10-16T00:00:00+0000",
|
||||
"eol": "2028-10-17T00:00:00+0000"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"mage-os/project-community-edition:1.0.0": {
|
||||
"magento": "mage-os/project-community-edition:1.0.0",
|
||||
"upstream": "2.4.6-p3",
|
||||
"php": 8.1,
|
||||
"composer": "2.2.21",
|
||||
"mysql": "mysql:8.0",
|
||||
@@ -15,6 +16,7 @@
|
||||
},
|
||||
"mage-os/project-community-edition:1.0.1": {
|
||||
"magento": "mage-os/project-community-edition:1.0.1",
|
||||
"upstream": "2.4.6-p3",
|
||||
"php": 8.1,
|
||||
"composer": "2.2.21",
|
||||
"mysql": "mysql:8.0",
|
||||
@@ -29,6 +31,7 @@
|
||||
},
|
||||
"mage-os/project-community-edition:1.0.2": {
|
||||
"magento": "mage-os/project-community-edition:1.0.2",
|
||||
"upstream": "2.4.7-p1",
|
||||
"php": 8.3,
|
||||
"composer": "2.7.4",
|
||||
"mysql": "mariadb:10.6",
|
||||
@@ -43,6 +46,7 @@
|
||||
},
|
||||
"mage-os/project-community-edition:1.0.3": {
|
||||
"magento": "mage-os/project-community-edition:1.0.3",
|
||||
"upstream": "2.4.7-p1",
|
||||
"php": 8.3,
|
||||
"composer": "2.7.4",
|
||||
"mysql": "mariadb:10.6",
|
||||
@@ -57,6 +61,7 @@
|
||||
},
|
||||
"mage-os/project-community-edition:1.0.4": {
|
||||
"magento": "mage-os/project-community-edition:1.0.4",
|
||||
"upstream": "2.4.7-p2",
|
||||
"php": 8.3,
|
||||
"composer": "2.7.4",
|
||||
"mysql": "mariadb:10.6",
|
||||
@@ -71,6 +76,7 @@
|
||||
},
|
||||
"mage-os/project-community-edition:1.0.5": {
|
||||
"magento": "mage-os/project-community-edition:1.0.5",
|
||||
"upstream": "2.4.7-p3",
|
||||
"php": 8.3,
|
||||
"composer": "2.7.4",
|
||||
"mysql": "mariadb:10.6",
|
||||
@@ -85,6 +91,7 @@
|
||||
},
|
||||
"mage-os/project-community-edition:1.0.6": {
|
||||
"magento": "mage-os/project-community-edition:1.0.6",
|
||||
"upstream": "2.4.7-p4",
|
||||
"php": 8.3,
|
||||
"composer": "2.7.4",
|
||||
"mysql": "mariadb:10.6",
|
||||
@@ -95,6 +102,96 @@
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-02-12T00:00:00+0000",
|
||||
"eol": "2027-02-14T00:00:00+0000"
|
||||
"eol": "2025-04-07T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:1.1.0": {
|
||||
"magento": "mage-os/project-community-edition:1.1.0",
|
||||
"upstream": "2.4.8",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-04-15T00:00:00+0000",
|
||||
"eol": "2025-04-21T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:1.1.1": {
|
||||
"magento": "mage-os/project-community-edition:1.1.1",
|
||||
"upstream": "2.4.8",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-04-22T00:00:00+0000",
|
||||
"eol": "2025-06-16T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:1.2.0": {
|
||||
"magento": "mage-os/project-community-edition:1.2.0",
|
||||
"upstream": "2.4.8-p1",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-06-17T00:00:00+0000",
|
||||
"eol": "2025-08-12T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:1.3.0": {
|
||||
"magento": "mage-os/project-community-edition:1.3.0",
|
||||
"upstream": "2.4.8-p2",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-08-13T00:00:00+0000",
|
||||
"eol": "2025-09-08T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:1.3.1": {
|
||||
"magento": "mage-os/project-community-edition:1.3.1",
|
||||
"upstream": "2.4.8-p2",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-09-09T00:00:00+0000",
|
||||
"eol": "2025-10-16T00:00:00+0000"
|
||||
},
|
||||
"mage-os/project-community-edition:2.0.0": {
|
||||
"magento": "mage-os/project-community-edition:2.0.0",
|
||||
"upstream": "2.4.8-p3",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-10-16T00:00:00+0000",
|
||||
"eol": "2028-10-17T00:00:00+0000"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,9 +131,10 @@
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"elasticsearch": "elasticsearch:8.17.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"valkey": "valkey:8.0",
|
||||
"valkey": "valkey/valkey:8.0",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -146,9 +147,10 @@
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"elasticsearch": "elasticsearch:8.17.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"valkey": "valkey:8.0",
|
||||
"valkey": "valkey/valkey:8.0",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
@@ -161,9 +163,10 @@
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"elasticsearch": "elasticsearch:8.17.4",
|
||||
"valkey": "valkey/valkey:8.0",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"valkey": "valkey:8.0",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
|
||||
@@ -319,7 +319,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-06-11T00:00:00+0000",
|
||||
"eol": "2024-08-12T00:00:00+0000"
|
||||
"eol": "2024-08-13T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.4-p10": {
|
||||
"magento": "magento/project-community-edition:2.4.4-p10",
|
||||
@@ -333,7 +333,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-08-13T00:00:00+0000",
|
||||
"eol": "2024-10-07T00:00:00+0000"
|
||||
"eol": "2024-10-08T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.4-p11": {
|
||||
"magento": "magento/project-community-edition:2.4.4-p11",
|
||||
@@ -347,7 +347,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-10-08T00:00:00+0000",
|
||||
"eol": "2025-02-10T00:00:00+0000"
|
||||
"eol": "2025-02-11T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.4-p12": {
|
||||
"magento": "magento/project-community-edition:2.4.4-p12",
|
||||
@@ -361,7 +361,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-02-11T00:00:00+0000",
|
||||
"eol": "2025-04-07T23:59:59+0000"
|
||||
"eol": "2025-04-08T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.4-p13": {
|
||||
"magento": "magento/project-community-edition:2.4.4-p13",
|
||||
@@ -389,7 +389,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2022-08-09T00:00:00+0000",
|
||||
"eol": "2022-08-09T00:00:00+0000"
|
||||
"eol": "2022-10-11T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.5-p1": {
|
||||
"magento": "magento/project-community-edition:2.4.5-p1",
|
||||
@@ -501,7 +501,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-06-11T00:00:00+0000",
|
||||
"eol": "2024-08-12T00:00:00+0000"
|
||||
"eol": "2024-08-13T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.5-p9": {
|
||||
"magento": "magento/project-community-edition:2.4.5-p9",
|
||||
@@ -515,7 +515,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-08-13T00:00:00+0000",
|
||||
"eol": "2024-10-07T00:00:00+0000"
|
||||
"eol": "2024-10-08T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.5-p10": {
|
||||
"magento": "magento/project-community-edition:2.4.5-p10",
|
||||
@@ -529,7 +529,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-10-08T00:00:00+0000",
|
||||
"eol": "2025-02-10T00:00:00+0000"
|
||||
"eol": "2025-02-11T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.5-p11": {
|
||||
"magento": "magento/project-community-edition:2.4.5-p11",
|
||||
@@ -543,7 +543,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-02-11T00:00:00+0000",
|
||||
"eol": "2025-04-07T23:59:59+0000"
|
||||
"eol": "2025-04-08T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.5-p12": {
|
||||
"magento": "magento/project-community-edition:2.4.5-p12",
|
||||
@@ -557,7 +557,35 @@
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-04-08T00:00:00+0000",
|
||||
"eol": "2025-08-09T00:00:00+0000"
|
||||
"eol": "2025-06-10T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.5-p13": {
|
||||
"magento": "magento/project-community-edition:2.4.5-p13",
|
||||
"php": 8.1,
|
||||
"composer": "2.2.21",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.17.5",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:6.2",
|
||||
"varnish": "varnish:7.1",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-06-10T00:00:00+0000",
|
||||
"eol": "2025-08-12T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.5-p14": {
|
||||
"magento": "magento/project-community-edition:2.4.5-p14",
|
||||
"php": 8.1,
|
||||
"composer": "2.2.21",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:7.17.5",
|
||||
"rabbitmq": "rabbitmq:3.11-management",
|
||||
"redis": "redis:6.2",
|
||||
"varnish": "varnish:7.1",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-08-12T00:00:00+0000",
|
||||
"eol": "2025-08-12T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.6": {
|
||||
"magento": "magento/project-community-edition:2.4.6",
|
||||
@@ -655,7 +683,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-06-11T00:00:00+0000",
|
||||
"eol": "2024-08-12T00:00:00+0000"
|
||||
"eol": "2024-08-13T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.6-p7": {
|
||||
"magento": "magento/project-community-edition:2.4.6-p7",
|
||||
@@ -669,7 +697,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-08-13T00:00:00+0000",
|
||||
"eol": "2024-10-07T00:00:00+0000"
|
||||
"eol": "2024-10-08T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.6-p8": {
|
||||
"magento": "magento/project-community-edition:2.4.6-p8",
|
||||
@@ -683,7 +711,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-10-08T00:00:00+0000",
|
||||
"eol": "2025-02-10T00:00:00+0000"
|
||||
"eol": "2025-02-11T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.6-p9": {
|
||||
"magento": "magento/project-community-edition:2.4.6-p9",
|
||||
@@ -697,7 +725,7 @@
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-02-11T00:00:00+0000",
|
||||
"eol": "2025-04-07T23:59:59+0000"
|
||||
"eol": "2025-04-08T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.6-p10": {
|
||||
"magento": "magento/project-community-edition:2.4.6-p10",
|
||||
@@ -711,6 +739,48 @@
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-04-08T00:00:00+0000",
|
||||
"eol": "2025-06-10T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.6-p11": {
|
||||
"magento": "magento/project-community-edition:2.4.6-p11",
|
||||
"php": 8.1,
|
||||
"composer": "2.2.21",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"rabbitmq": "rabbitmq:3.13-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-06-10T00:00:00+0000",
|
||||
"eol": "2025-08-12T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.6-p12": {
|
||||
"magento": "magento/project-community-edition:2.4.6-p12",
|
||||
"php": 8.1,
|
||||
"composer": "2.2.21",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"rabbitmq": "rabbitmq:3.13-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-08-12T00:00:00+0000",
|
||||
"eol": "2025-10-14T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.6-p13": {
|
||||
"magento": "magento/project-community-edition:2.4.6-p13",
|
||||
"php": 8.1,
|
||||
"composer": "2.2.21",
|
||||
"mysql": "mysql:8.0",
|
||||
"elasticsearch": "elasticsearch:8.5.3",
|
||||
"rabbitmq": "rabbitmq:3.13-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.3",
|
||||
"nginx": "nginx:1.22",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-10-14T00:00:00+0000",
|
||||
"eol": "2026-03-14T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.7": {
|
||||
@@ -739,7 +809,7 @@
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-06-11T00:00:00+0000",
|
||||
"eol": "2024-08-12T00:00:00+0000"
|
||||
"eol": "2024-08-13T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.7-p2": {
|
||||
"magento": "magento/project-community-edition:2.4.7-p2",
|
||||
@@ -753,7 +823,7 @@
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-08-13T00:00:00+0000",
|
||||
"eol": "2024-10-07T00:00:00+0000"
|
||||
"eol": "2024-10-08T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.7-p3": {
|
||||
"magento": "magento/project-community-edition:2.4.7-p3",
|
||||
@@ -767,7 +837,7 @@
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2024-10-08T00:00:00+0000",
|
||||
"eol": "2025-02-10T00:00:00+0000"
|
||||
"eol": "2025-02-11T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.7-p4": {
|
||||
"magento": "magento/project-community-edition:2.4.7-p4",
|
||||
@@ -781,7 +851,7 @@
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-02-11T00:00:00+0000",
|
||||
"eol": "2025-04-07T23:59:59+0000"
|
||||
"eol": "2025-04-08T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.7-p5": {
|
||||
"magento": "magento/project-community-edition:2.4.7-p5",
|
||||
@@ -795,6 +865,48 @@
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-04-08T00:00:00+0000",
|
||||
"eol": "2025-06-10T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.7-p6": {
|
||||
"magento": "magento/project-community-edition:2.4.7-p6",
|
||||
"php": 8.3,
|
||||
"composer": "2.7.4",
|
||||
"mysql": "mariadb:10.6",
|
||||
"elasticsearch": "elasticsearch:8.11.4",
|
||||
"rabbitmq": "rabbitmq:3.13-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.5",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-06-10T00:00:00+0000",
|
||||
"eol": "2025-08-12T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.7-p7": {
|
||||
"magento": "magento/project-community-edition:2.4.7-p7",
|
||||
"php": 8.3,
|
||||
"composer": "2.7.4",
|
||||
"mysql": "mariadb:10.6",
|
||||
"elasticsearch": "elasticsearch:8.11.4",
|
||||
"rabbitmq": "rabbitmq:3.13-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.5",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-08-12T00:00:00+0000",
|
||||
"eol": "2025-10-14T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.7-p8": {
|
||||
"magento": "magento/project-community-edition:2.4.7-p8",
|
||||
"php": 8.3,
|
||||
"composer": "2.7.4",
|
||||
"mysql": "mariadb:10.6",
|
||||
"elasticsearch": "elasticsearch:8.11.4",
|
||||
"rabbitmq": "rabbitmq:3.13-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.5",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-10-14T00:00:00+0000",
|
||||
"eol": "2027-04-09T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.8": {
|
||||
@@ -803,13 +915,56 @@
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"elasticsearch": "elasticsearch:8.17.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"valkey": "valkey:8.0",
|
||||
"valkey": "valkey/valkey:8.0",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-04-08T00:00:00+0000",
|
||||
"eol": "2025-06-10T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.8-p1": {
|
||||
"magento": "magento/project-community-edition:2.4.8-p1",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-06-10T00:00:00+0000",
|
||||
"eol": "2025-08-12T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.8-p2": {
|
||||
"magento": "magento/project-community-edition:2.4.8-p2",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-08-12T00:00:00+0000",
|
||||
"eol": "2025-10-14T00:00:00+0000"
|
||||
},
|
||||
"magento/project-community-edition:2.4.8-p3": {
|
||||
"magento": "magento/project-community-edition:2.4.8-p3",
|
||||
"php": 8.4,
|
||||
"composer": "2.8.8",
|
||||
"mysql": "mysql:8.4",
|
||||
"opensearch": "opensearchproject/opensearch:2.19.1",
|
||||
"rabbitmq": "rabbitmq:4.0-management",
|
||||
"redis": "redis:7.2",
|
||||
"varnish": "varnish:7.6",
|
||||
"nginx": "nginx:1.26",
|
||||
"os": "ubuntu-latest",
|
||||
"release": "2025-10-14T00:00:00+0000",
|
||||
"eol": "2028-04-09T00:00:00+0000"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ description: "A Github Action that runs the Unit Tests of a Magento Package"
|
||||
inputs:
|
||||
php_version:
|
||||
required: true
|
||||
default: "8.1"
|
||||
default: "8.4"
|
||||
description: "PHP Version to use"
|
||||
|
||||
source_folder:
|
||||
@@ -37,9 +37,9 @@ runs:
|
||||
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: "Cache Composer Packages"
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
key: "composer | v3 | ${{ hashFiles('composer.lock') }} | ${{ runner.os }} | ${{ inputs.php_version }}"
|
||||
key: "composer | v4 | ${{ hashFiles('composer.lock') }} | ${{ runner.os }} | ${{ inputs.php_version }}"
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
|
||||
- run: composer install
|
||||
|
||||
Reference in New Issue
Block a user