diff --git a/.github/workflows/_internal_check_extension.yaml b/.github/workflows/_internal_check_extension.yaml new file mode 100644 index 0000000..44bb754 --- /dev/null +++ b/.github/workflows/_internal_check_extension.yaml @@ -0,0 +1,39 @@ +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 + 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 }} diff --git a/.github/workflows/check-extension-README.md b/.github/workflows/check-extension-README.md new file mode 100644 index 0000000..1af2661 --- /dev/null +++ b/.github/workflows/check-extension-README.md @@ -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 }} +``` diff --git a/.github/workflows/check-extension.yaml b/.github/workflows/check-extension.yaml new file mode 100644 index 0000000..cdb2383 --- /dev/null +++ b/.github/workflows/check-extension.yaml @@ -0,0 +1,90 @@ +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. +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 }} + + - 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 + + - name: Configure phpunit.xml.dist + working-directory: ${{ steps.setup-magento.outputs.path }} + run: | + ## Add the testsuite + cat > /tmp/testsuite.xml << 'EOF' + + ../../../vendor/${{ steps.package.outputs.name }}/Test/Unit + + EOF + sed -i '//r /tmp/testsuite.xml' dev/tests/unit/phpunit.xml.dist + + ## Disable allure (See https://github.com/magento/magento2/issues/36702 ) + ## (╯°□°)╯︵ ┻━┻ + sed -i '//,/<\/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 + + diff --git a/README.md b/README.md index 6c4ca07..ffc3712 100644 --- a/README.md +++ b/README.md @@ -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