diff --git a/.github/workflows/_internal-check-store.yaml b/.github/workflows/_internal-check-store.yaml new file mode 100644 index 0000000..9125de4 --- /dev/null +++ b/.github/workflows/_internal-check-store.yaml @@ -0,0 +1,77 @@ +name: Check Store Test + +on: + workflow_dispatch: {} + push: + branches: + - main + paths: + - ".github/workflows/_internal-check-store.yaml" + - ".github/workflows/check-store.yaml" + - "supported-version/**" + - "get-magento-version/**" + - "!(**/*.md)" + pull_request: + branches: + - main + paths: + - ".github/workflows/_internal-check-store.yaml" + - ".github/workflows/check-store.yaml" + - "supported-version/**" + - "get-magento-version/**" + - "!(**/*.md)" + +jobs: + compute_matrix: + if: "!startsWith(github.head_ref, 'release-please')" + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.supported-version.outputs.matrix }} + steps: + - uses: actions/checkout@v6 + - uses: ./supported-version + id: supported-version + with: + kind: currently-supported + + prepare-fixture: + needs: compute_matrix + runs-on: ${{ matrix.os }} + strategy: + matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }} + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + tools: composer:v${{ matrix.composer }} + coverage: none + + - uses: ./cache-magento + with: + composer_cache_key: ${{ matrix.magento }} + + - name: Create Magento store fixture + run: composer create-project --repository-url="https://mirror.mage-os.org/" "${{ matrix.magento }}" ./store-fixture + + - name: Strip vendor from fixture + run: rm -rf ./store-fixture/vendor + + - uses: actions/upload-artifact@v7 + with: + name: store-fixture-${{ matrix.version }} + path: ./store-fixture + retention-days: 3 + + check-store: + needs: [compute_matrix, prepare-fixture] + strategy: + matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }} + fail-fast: false + uses: ./.github/workflows/check-store.yaml + with: + store_artifact_name: store-fixture-${{ matrix.version }} + path: "." + composer_cache_key: ${{ matrix.magento }} \ No newline at end of file diff --git a/.github/workflows/check-store.yaml b/.github/workflows/check-store.yaml new file mode 100644 index 0000000..fd2f8eb --- /dev/null +++ b/.github/workflows/check-store.yaml @@ -0,0 +1,164 @@ +name: MageCheck Store +on: + workflow_call: + inputs: + path: + type: string + required: false + default: "." + description: "The folder of the Magento store that you are testing." + + composer_cache_key: + type: string + required: false + default: "_mageos" + description: A key to version the composer cache. Can be incremented if you need to bust the cache. + + store_artifact_name: + type: string + required: false + default: "" + description: "If provided, download store files from this artifact instead of using actions/checkout." + + secrets: + composer_auth: + required: false + description: "Your composer credentials (typically a stringified json object of the contents of your auth.json)" + +jobs: + compute_matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.supported-version.outputs.matrix }} + steps: + - uses: actions/checkout@v6 + if: inputs.store_artifact_name == '' + + - uses: actions/download-artifact@v8 + if: inputs.store_artifact_name != '' + with: + name: ${{ inputs.store_artifact_name }} + path: ${{ inputs.path }} + + - uses: graycoreio/github-actions-magento2/get-magento-version@main + id: get-magento-version + with: + working-directory: ${{ inputs.path }} + + - uses: graycoreio/github-actions-magento2/supported-version@main + id: supported-version + with: + kind: custom + custom_versions: ${{ steps.get-magento-version.outputs.project }}:${{ fromJSON(steps.get-magento-version.outputs.version) }} + + unit-test: + runs-on: ${{ matrix.os }} + needs: compute_matrix + strategy: + matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }} + + steps: + - uses: actions/checkout@v6 + if: inputs.store_artifact_name == '' + + - uses: actions/download-artifact@v8 + if: inputs.store_artifact_name != '' + with: + name: ${{ inputs.store_artifact_name }} + path: ${{ inputs.path }} + + - uses: graycoreio/github-actions-magento2/setup-magento@main + id: setup-magento + with: + php-version: ${{ matrix.php }} + tools: composer:v${{ matrix.composer }} + mode: store + working-directory: ${{ inputs.path }} + composer_auth: ${{ secrets.composer_auth }} + + - uses: graycoreio/github-actions-magento2/cache-magento@main + with: + composer_cache_key: ${{ inputs.composer_cache_key }} + + - name: Composer install + working-directory: ${{ steps.setup-magento.outputs.path }} + run: composer install + env: + COMPOSER_AUTH: ${{ secrets.composer_auth }} + + - name: Configure phpunit.xml.dist + working-directory: ${{ steps.setup-magento.outputs.path }} + run: | + mkdir -p app/code + + cat > /tmp/testsuite.xml << 'EOF' + + ../../../app/code + + 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 unit tests + working-directory: ${{ steps.setup-magento.outputs.path }} + run: | + if find app/code -name "*Test.php" -print -quit | grep -q .; then + vendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist --testsuite Store_Unit_Tests + else + echo "No unit tests found in app/code, skipping." + fi + + coding-standard: + runs-on: ${{ matrix.os }} + needs: compute_matrix + strategy: + matrix: ${{ fromJSON(needs.compute_matrix.outputs.matrix) }} + + steps: + - uses: actions/checkout@v6 + if: inputs.store_artifact_name == '' + + - uses: actions/download-artifact@v8 + if: inputs.store_artifact_name != '' + with: + name: ${{ inputs.store_artifact_name }} + path: ${{ inputs.path }} + + - uses: graycoreio/github-actions-magento2/setup-magento@main + id: setup-magento + with: + php-version: ${{ matrix.php }} + tools: composer:v${{ matrix.composer }} + mode: store + working-directory: ${{ inputs.path }} + composer_auth: ${{ secrets.composer_auth }} + + - uses: graycoreio/github-actions-magento2/cache-magento@main + with: + composer_cache_key: ${{ inputs.composer_cache_key }} + + - name: Composer install + working-directory: ${{ steps.setup-magento.outputs.path }} + run: composer install + env: + COMPOSER_AUTH: ${{ secrets.composer_auth }} + + - name: Create default phpcs.xml if none exists + working-directory: ${{ steps.setup-magento.outputs.path }} + run: | + mkdir -p app/code + if [ ! -f .phpcs.xml ] && [ ! -f phpcs.xml ] && [ ! -f .phpcs.xml.dist ] && [ ! -f phpcs.xml.dist ]; then + cat > phpcs.xml << 'EOF' + + + app/code + + EOF + fi + + - uses: graycoreio/github-actions-magento2/coding-standard@main + with: + path: ${{ steps.setup-magento.outputs.path }} + composer_auth: ${{ secrets.composer_auth }} \ No newline at end of file