Release v1.4.0 #146

Merged
myrmidex merged 71 commits from release/v1.4.0 into main 2026-08-15 00:36:54 +02:00
2 changed files with 0 additions and 283 deletions
Showing only changes of commit 4e3f83142e - Show all commits

241
Jenkinsfile vendored
View file

@ -1,241 +0,0 @@
pipeline {
agent any
environment {
APP_ENV = 'testing'
DB_CONNECTION = 'mysql'
DB_HOST = 'mysql'
DB_PORT = '3306'
DB_DATABASE = 'ffr_testing'
DB_USERNAME = 'ffr_user'
DB_PASSWORD = 'ffr_password'
CACHE_STORE = 'array'
SESSION_DRIVER = 'array'
QUEUE_CONNECTION = 'sync'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Setup Environment') {
steps {
script {
sh '''
echo "Setting up environment for testing..."
cp .env.example .env.testing
echo "APP_ENV=testing" >> .env.testing
echo "DB_CONNECTION=${DB_CONNECTION}" >> .env.testing
echo "DB_HOST=${DB_HOST}" >> .env.testing
echo "DB_PORT=${DB_PORT}" >> .env.testing
echo "DB_DATABASE=${DB_DATABASE}" >> .env.testing
echo "DB_USERNAME=${DB_USERNAME}" >> .env.testing
echo "DB_PASSWORD=${DB_PASSWORD}" >> .env.testing
echo "CACHE_STORE=${CACHE_STORE}" >> .env.testing
echo "SESSION_DRIVER=${SESSION_DRIVER}" >> .env.testing
echo "QUEUE_CONNECTION=${QUEUE_CONNECTION}" >> .env.testing
'''
}
}
}
stage('Install Dependencies') {
parallel {
stage('PHP Dependencies') {
steps {
sh '''
echo "Installing PHP dependencies..."
composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev
'''
}
}
stage('Node Dependencies') {
steps {
sh '''
echo "Installing Node.js dependencies..."
npm ci
'''
}
}
}
}
stage('Generate Application Key') {
steps {
sh '''
php artisan key:generate --env=testing --force
'''
}
}
stage('Database Setup') {
steps {
sh '''
echo "Setting up test database..."
php artisan migrate:fresh --env=testing --force
php artisan config:clear --env=testing
'''
}
}
stage('Code Quality Checks') {
parallel {
stage('PHP Syntax Check') {
steps {
sh '''
echo "Checking PHP syntax..."
find . -name "*.php" -not -path "./vendor/*" -not -path "./node_modules/*" -exec php -l {} \\;
'''
}
}
stage('PHPStan Analysis') {
steps {
script {
try {
sh '''
if [ -f "phpstan.neon" ]; then
echo "Running PHPStan static analysis..."
./vendor/bin/phpstan analyse --no-progress --error-format=table
else
echo "PHPStan configuration not found, skipping static analysis"
fi
'''
} catch (Exception e) {
unstable(message: "PHPStan found issues")
}
}
}
}
stage('Security Audit') {
steps {
script {
try {
sh '''
echo "Running security audit..."
composer audit
'''
} catch (Exception e) {
unstable(message: "Security vulnerabilities found")
}
}
}
}
}
}
stage('Unit Tests') {
steps {
sh '''
echo "Running Unit Tests..."
php artisan test tests/Unit/ --env=testing --stop-on-failure
'''
}
post {
always {
publishTestResults testResultsPattern: 'tests/Unit/results/*.xml'
}
}
}
stage('Feature Tests') {
steps {
sh '''
echo "Running Feature Tests..."
php artisan test tests/Feature/ --env=testing --stop-on-failure
'''
}
post {
always {
publishTestResults testResultsPattern: 'tests/Feature/results/*.xml'
}
}
}
stage('Full Regression Test Suite') {
steps {
sh '''
echo "Running comprehensive regression test suite..."
chmod +x ./run-regression-tests.sh
./run-regression-tests.sh
'''
}
post {
always {
// Archive test results
archiveArtifacts artifacts: 'tests/reports/**/*', allowEmptyArchive: true
// Publish coverage reports if available
publishHTML([
allowMissing: false,
alwaysLinkToLastBuild: true,
keepAll: true,
reportDir: 'coverage',
reportFiles: 'index.html',
reportName: 'Coverage Report'
])
}
}
}
stage('Performance Tests') {
steps {
script {
try {
sh '''
echo "Running performance tests..."
# Test memory usage
php -d memory_limit=256M artisan test tests/Feature/DatabaseIntegrationTest.php --env=testing
# Test response times for API endpoints
time php artisan test tests/Feature/ApiEndpointRegressionTest.php --env=testing
'''
} catch (Exception e) {
unstable(message: "Performance tests indicated potential issues")
}
}
}
}
stage('Build Assets') {
when {
anyOf {
branch 'main'
branch 'develop'
}
}
steps {
sh '''
echo "Building production assets..."
npm run build
'''
}
}
}
post {
always {
// Clean up
sh '''
echo "Cleaning up..."
rm -f .env.testing
'''
}
success {
echo '✅ All regression tests passed successfully!'
// Notify success (customize as needed)
// slackSend channel: '#dev-team', color: 'good', message: "Regression tests passed for ${env.JOB_NAME} - ${env.BUILD_NUMBER}"
}
failure {
echo '❌ Regression tests failed!'
// Notify failure (customize as needed)
// slackSend channel: '#dev-team', color: 'danger', message: "Regression tests failed for ${env.JOB_NAME} - ${env.BUILD_NUMBER}"
}
unstable {
echo '⚠️ Tests completed with warnings'
}
}
}

View file

@ -1,42 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Inertia\Middleware;
class HandleInertiaRequests extends Middleware
{
/**
* The root template that's loaded on the first page visit.
*
* @see https://inertiajs.com/server-side-setup#root-template
*
* @var string
*/
protected $rootView = 'app';
/**
* Determines the current asset version.
*
* @see https://inertiajs.com/asset-versioning
*/
public function version(Request $request): ?string
{
return parent::version($request);
}
/**
* Define the props that are shared by default.
*
* @see https://inertiajs.com/shared-data
*
* @return array<string, mixed>
*/
public function share(Request $request): array
{
return array_merge(parent::share($request), [
//
]);
}
}