Skip to content

Merge pull request #225 from horstoeko/codelistsenum #83

Merge pull request #225 from horstoeko/codelistsenum

Merge pull request #225 from horstoeko/codelistsenum #83

Workflow file for this run

name: Continuous Integration
on:
push:
tags-ignore:
- "**"
branches:
- "**"
paths-ignore:
- "**.md"
- ".github/**"
- "examples/**"
- "make/**"
pull_request:
types:
- opened
branches:
- "master"
workflow_dispatch:
env:
VALIDATORURL: https://github.com/itplr-kosit/validator/releases/download/v1.5.0/validator-1.5.0-distribution.zip
VALIDATORSCENARIOURL: https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/download/release-2023-07-31/validator-configuration-xrechnung_3.0.0_2023-07-31.zip
VALIDATORPATH: build/validator
VALIDATORZIPFILENAME: validator.zip
VALIDATORSCENARIOZIPFILENAME: validator-configuration.zip
VALIDATORJARFILENAME: validationtool-1.5.0-standalone.jar
VALIDATORSCENARIOFILENAME: scenarios.xml
PHPDOCUMENTORURL: https://phpdoc.org/phpDocumentor.phar
PHPDOCUMENTORFILENAME: phpDocumentor.phar
VERAPDFURL: https://software.verapdf.org/rel/verapdf-installer.zip
VERAPDFPATH: build/verapdf
VERAPDFZIPFILENAME: verapdf.zip
jobs:
build:
permissions: write-all
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system: ["ubuntu-22.04", "ubuntu-24.04"]
phpversion: ["7.3", "7.4", "8.0", "8.1", "8.2", "8.3", "8.4"]
steps:
- name: Checkout Sources
uses: actions/checkout@v4
- name: Setup PHP with PECL extension
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.phpversion }}
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, bcmath, intl, gd, exif, iconv, imagick, json, xdebug
coverage: xdebug
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
java-version: "11"
distribution: "adopt"
- name: Get Composer Cache Directory
id: composer-cache
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-${{ matrix.phpversion }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.phpversion }}-composer-
- name: Install composer dependencies
run: |
composer config -g github-oauth.github.com ${{ secrets.GITHUB_TOKEN }}
composer install
- name: Prepare Directories
run: |
mkdir build/builddoc
mkdir build/doc
mkdir build/coverage
mkdir build/coverage-html
mkdir build/logs
mkdir build/pdepend
mkdir build/dist
mkdir build/phpdoc
- name: Run Lint (PHP 8.0 and lower)
if: ${{ matrix.phpversion < '8.1' }}
run: |
for afile in $(find . -type f -name '*.php' -path './src*/*' -not -path "*codes*" -not -path "*codelistsenum*" -print); do
php -l $afile
done
for afile in $(find . -type f -name '*.php' -path './tests*/*' -print); do
php -l $afile
done
- name: Run Lint (PHP 8.1 and higher)
if: ${{ matrix.phpversion >= '8.1' }}
run: |
for afile in $(find . -type f -name '*.php' -path './src*/*' -print); do
php -l $afile
done
for afile in $(find . -type f -name '*.php' -path './tests*/*' -print); do
php -l $afile
done
- name: Run PHPLOC
continue-on-error: true
run: |
vendor/bin/phploc --count-tests --log-csv build/logs/phploc.csv --log-xml build/logs/phploc.xml src tests
- name: Run PDEPEND
continue-on-error: true
run: |
vendor/bin/pdepend --jdepend-xml=build/logs/jdepend.xml --jdepend-chart=build/pdepend/dependencies.svg --overview-pyramid=build/pdepend/overview-pyramid.svg src
- name: Run PHPMD
continue-on-error: true
run: |
vendor/bin/phpmd src xml build/phpmd.xml --reportfile build/logs/pmd.xml --exclude src/entities/
vendor/bin/phpmd src github build/phpmd.xml --exclude src/entities/
- name: Run PHPCS
continue-on-error: true
run: |
vendor/bin/phpcs --report=checkstyle --report-file=build/logs/checkstyle.xml --standard=build/phpcsrules.xml --extensions=php --ignore=autoload.php src tests
- name: Run PHPSTAN
continue-on-error: true
run: |
vendor/bin/phpstan analyze -c build/phpstan.neon --autoload-file=vendor/autoload.php --no-interaction --no-progress --error-format=checkstyle > build/logs/checkstyle_phpstan.xml
- name: Run PHPCPD
continue-on-error: true
run: |
vendor/bin/phpcpd --log-pmd build/logs/pmd-cpd.xml --exclude src/entities/ src
- name: Run Tests (PHPUnit)
run: |
vendor/bin/phpunit --stop-on-failure --configuration build/phpunit.xml
env:
XDEBUG_MODE: coverage
- name: Run Tests (Schematron)
run: |
set -e
rm -rf $VALIDATORPATH
mkdir $VALIDATORPATH
wget $VALIDATORURL -O $VALIDATORPATH/$VALIDATORZIPFILENAME
wget $VALIDATORSCENARIOURL -O $VALIDATORPATH/$VALIDATORSCENARIOZIPFILENAME
unzip $VALIDATORPATH/$VALIDATORZIPFILENAME -d $VALIDATORPATH
unzip $VALIDATORPATH/$VALIDATORSCENARIOZIPFILENAME -d $VALIDATORPATH
rm -f examples/factur-x.xml
php -f examples/XRechnung3SimpleQuick.php
java -jar $VALIDATORPATH/$VALIDATORJARFILENAME -r $VALIDATORPATH -s $VALIDATORPATH/$VALIDATORSCENARIOFILENAME examples/factur-x.xml
rm -f examples/factur-x.xml
php -f examples/En16931SimpleQuick.php
java -jar $VALIDATORPATH/$VALIDATORJARFILENAME -r $VALIDATORPATH -s $VALIDATORPATH/$VALIDATORSCENARIOFILENAME examples/factur-x.xml
rm -rf build/validator
- name: Run Tests (VeraPDF)
continue-on-error: true
run: |
set -e
rm -rf $VERAPDFPATH
mkdir $VERAPDFPATH
wget $VERAPDFURL -O $VERAPDFPATH/$VERAPDFZIPFILENAME
unzip -j $VERAPDFPATH/$VERAPDFZIPFILENAME -d $VERAPDFPATH
rm -f $VERAPDFPATH/$VERAPDFZIPFILENAME
echo "Creating veraPDF install config"
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>
<AutomatedInstallation langpack=\"eng\">
<com.izforge.izpack.panels.htmlhello.HTMLHelloPanel id=\"welcome\"/>
<com.izforge.izpack.panels.target.TargetPanel id=\"install_dir\">
<installpath>$(pwd)/$VERAPDFPATH</installpath>
</com.izforge.izpack.panels.target.TargetPanel>
<com.izforge.izpack.panels.packs.PacksPanel id=\"sdk_pack_select\">
<pack index=\"0\" name=\"veraPDF Mac and *nix Scripts\" selected=\"true\"/>
<pack index=\"1\" name=\"veraPDF Validation model\" selected=\"true\"/>
<pack index=\"2\" name=\"veraPDF Documentation\" selected=\"true\"/>
<pack index=\"3\" name=\"veraPDF Sample Plugins\" selected=\"true\"/>
</com.izforge.izpack.panels.packs.PacksPanel>
<com.izforge.izpack.panels.install.InstallPanel id=\"install\"/>
<com.izforge.izpack.panels.finish.FinishPanel id=\"finish\"/>
</AutomatedInstallation>" > $VERAPDFPATH/install.xml
echo "Installing veraPDF"
VERAPDFINSTALLJAR=$(find $VERAPDFPATH -type f -name "*.jar" | head -n 1); [[ -z "$VERAPDFINSTALLJAR" ]] && { echo "No veraPDF installer found" >&2; exit 1; } || echo "veraPDF installer fount at $VERAPDFINSTALLJAR"
java -jar $VERAPDFINSTALLJAR $VERAPDFPATH/install.xml
echo "Creating test PDF"
php -f examples/En16931SimpleWithPdf.php
echo "Running PDF validation"
VERAPDFRESULT=$($VERAPDFPATH/verapdf --format text examples/fullpdf.pdf)
echo "Result of validation"
echo $VERAPDFRESULT
[[ $VERAPDFRESULT == PASS* ]] && echo "PDF validation passed" || { echo "Error: PDF validation not passed" >&2; exit 1; }
echo "Removing veraPDF"
rm -rf $VERAPDFPATH
- name: Publish Unit Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: github.event_name != 'pull_request'
with:
files: "build/logs/junit.xml"
- name: Publish Build Logs
uses: actions/upload-artifact@v4
with:
name: Build log artifacts for ${{ matrix.operating-system }} PHP ${{ matrix.phpversion }}
path: build/logs