Last active
February 12, 2024 10:54
-
-
Save spoonerWeb/53ea8a4bdc6fbb92a74195aba7339e94 to your computer and use it in GitHub Desktop.
GitLab CI (version >= 9) configuration for testing and TER uploading TYPO3 extensions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cache: | |
key: "$CI_COMMIT_REF_NAME/$CI_JOB_STAGE" | |
paths: | |
- .composer/ | |
before_script: | |
# Install git on machine | |
- apk add git --update | |
stages: | |
- test | |
- mirror | |
- upload | |
.test: &testing | |
stage: test | |
image: php:$DOCKER_TAG | |
only: | |
- branches | |
before_script: | |
# Where to locate the DocRoot (needed for Unit Tests) | |
- export TYPO3_PATH_WEB="$PWD/.Build/Web" | |
- export COMPOSER_CACHE_DIR=.composer | |
# Install composer | |
- curl -OLs https://composer.github.io/installer.sig | |
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" | |
- php -r "if (hash_file('SHA384', 'composer-setup.php') === trim(file_get_contents('installer.sig'))) { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" | |
- php composer-setup.php --no-ansi --install-dir=/usr/bin --filename=composer | |
- php -r "unlink('composer-setup.php'); unlink('installer.sig');" | |
# Get the given TYPO3 core | |
- composer require typo3/cms="${TYPO3_VERSION}" --update-with-dependencies | |
# Get the TYPO3 testing framework (thx to Nicole and Helmut for that) | |
- composer require nimut/testing-framework | |
# Get the latest PHP_CodeSniffer | |
- composer require squizlabs/php_codesniffer | |
script: | |
# Run Unit Tests | |
- .Build/bin/phpunit -c Configuration/.Build/Tests/UnitTests.xml | |
# Run PHP_CodeSniffer (warning_severity is needed due usage of hooks which are not psr2 compliant) | |
- .Build/bin/phpcs --standard=PSR2 --config-set warning_severity 8 Classes Configuration/TCA Tests/Unit | |
# Tests in PHP 5.6 and TYPO3 6.2 | |
test:php56:typo3_62: | |
<<: *testing | |
variables: | |
DOCKER_TAG: 5.6-alpine | |
TYPO3_VERSION: ^6.2 | |
# Build in PHP 5.6 and TYPO3 7.6 | |
test:php56:typo3_7: | |
<<: *testing | |
variables: | |
DOCKER_TAG: 5.6-alpine | |
TYPO3_VERSION: ^7.6 | |
# Build in PHP 7.0 and TYPO3 7.6 | |
test:php70:typo3_7: | |
<<: *testing | |
variables: | |
DOCKER_TAG: 7.0-alpine | |
TYPO3_VERSION: ^7.6 | |
# Build in PHP 7.1 and TYPO3 7.6 | |
test:php71:typo3_7: | |
<<: *testing | |
variables: | |
DOCKER_TAG: 7.1-alpine | |
TYPO3_VERSION: ^7.6 | |
# Build in PHP 7.0 and TYPO3 8 (latest stable release) | |
test:php70:typo3_8: | |
<<: *testing | |
variables: | |
DOCKER_TAG: 7.0-alpine | |
TYPO3_VERSION: ^8 | |
# Build in PHP 7.1 and TYPO3 8 (latest stable release) | |
test:php71:typo3_8: | |
<<: *testing | |
variables: | |
DOCKER_TAG: 7.1-alpine | |
TYPO3_VERSION: ^8 | |
# Build in PHP 7.0 and TYPO3 (current master) | |
test:php70:typo3_master: | |
<<: *testing | |
variables: | |
DOCKER_TAG: 7.0-alpine | |
TYPO3_VERSION: dev-master | |
# Build in PHP 7.1 and TYPO3 (current master) | |
test:php71:typo3_master: | |
<<: *testing | |
variables: | |
DOCKER_TAG: 7.1-alpine | |
TYPO3_VERSION: dev-master | |
mirror-to-github: | |
stage: mirror | |
image: indiehosters/git | |
only: | |
- master | |
script: | |
- git remote add github https://$GITHUB_USERNAME:[email protected]/$GITHUB_USERNAME/$GITHUB_REMOTE_REPO_NAME.git | |
- git push github master | |
- git push github master --tags | |
# TER Upload when tagging in master branch | |
# The variables T3O_USERNAME and T3O_PASSWORD should be set in GitLab | |
ter-upload: | |
image: php:7-alpine | |
stage: upload | |
only: | |
- tags | |
before_script: | |
- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer | |
- export COMPOSER_CACHE_DIR=.composer | |
script: | |
- composer install | |
# Get the package for uploading to TER (thx to Claus) | |
- composer require namelesscoder/typo3-repository-client | |
- export TYPO3_PATH_WEB="$PWD/.Build/Web" | |
# Upload to TER if a Git tag was set (and username/password is set in the global variables) | |
- > | |
if [ -n "$CI_COMMIT_TAG" ] && [ -n "$T3O_USERNAME" ] && [ -n "$T3O_PASSWORD" ]; then | |
echo -e "Preparing upload of release ${CI_COMMIT_TAG} to TER\n" | |
# Cleanup before we upload | |
git reset --hard HEAD && git clean -fx | |
# Upload | |
TAG_MESSAGE=`git tag -n10 -l $CI_COMMIT_TAG | sed 's/^[0-9.]*[ ]*//g'` | |
echo "Uploading release ${CI_COMMIT_TAG} to TER" | |
.Build/bin/upload . "$T3O_USERNAME" "$T3O_PASSWORD" "$TAG_MESSAGE" | |
fi; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "vendorname/extensionname", | |
"type": "typo3-cms-extension", | |
"description": "Description of my extension", | |
"homepage": "https://typo3.org", | |
"license": [ | |
"GPL-2.0+" | |
], | |
"keywords": [ | |
"TYPO3", | |
"extension" | |
], | |
"authors": [ | |
{ | |
"name": "Thomas Löffler", | |
"email": "[email protected]", | |
"homepage": "https://spooner-web.de", | |
"role": "Developer" | |
} | |
], | |
"require": { | |
"typo3/cms": "^6.2 || ^7 || ^8" | |
}, | |
"autoload": { | |
"psr-4": { | |
"VendorName\\ExtensionName\\": "Classes/" | |
} | |
}, | |
"config": { | |
"vendor-dir": ".Build/vendor/", | |
"bin-dir": ".Build/bin/" | |
}, | |
"extra": { | |
"typo3/cms": { | |
"cms-package-dir": "{$vendor-dir}/typo3/cms", | |
"web-dir": ".Build/Web" | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
concurrent = 5 | |
[[runners]] | |
name = "GitLab Runner" | |
url = "https://my.gitlab.com/ci" | |
token = "xxx" | |
envorionment = ["COMPOSER_CACHE_DIR=/cache"] | |
executor = "docker" | |
[runners.docker] | |
tls_verify = false | |
image = "webdevops/php" | |
privileged = false | |
disable_cache = false | |
volumes = ["/var/cache:/cache:rw"] | |
cache_dir = "/cache" | |
[runners.cache] | |
Insecure = false |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<phpunit | |
backupGlobals="true" | |
backupStaticAttributes="false" | |
bootstrap="../../../.Build/vendor/nimut/testing-framework/src/TestingFramework/Bootstrap/UnitTestsBootstrap.php" | |
colors="true" | |
convertErrorsToExceptions="true" | |
convertWarningsToExceptions="true" | |
forceCoversAnnotation="false" | |
processIsolation="false" | |
stopOnError="false" | |
stopOnFailure="false" | |
stopOnIncomplete="false" | |
stopOnSkipped="false" | |
verbose="false" | |
> | |
<testsuites> | |
<testsuite name="Base tests"> | |
<directory>../../../Tests/Unit</directory> | |
</testsuite> | |
</testsuites> | |
</phpunit> |
One job to check outdated composer packages can also be helpful:
check-outdated:
image: composer
stage: test
allow_failure: true
script:
- composer install --no-ansi --no-interaction --no-dev --no-progress --no-scripts
- composer outdated -D -m --strict
Running that job (and other test jobs) scheduled and skip the deployment jobs with
ter-upload:
except:
- schedules
lets you monitor the version state of your projects.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
One Idea:
Use a cache key for all tests to share the composer cache across all dependent jobs
e.g.:
Use variables instead of script/export because they are merged from global to job e.g.: