300 lines
10 KiB
PHP
300 lines
10 KiB
PHP
<?php
|
|
|
|
return [
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Vendor Storage Configuration
|
|
|--------------------------------------------------------------------------
|
|
| Supports local and S3 cold storage. When using S3, versions are archived
|
|
| after import and downloaded on-demand for analysis.
|
|
*/
|
|
'storage' => [
|
|
// Primary storage disk: 'local' or 's3'
|
|
'disk' => env('UPSTREAM_STORAGE_DISK', 'local'),
|
|
|
|
// Local paths (always used for active/temp files)
|
|
'base_path' => storage_path('app/vendors'),
|
|
'licensed' => storage_path('app/vendors/licensed'),
|
|
'oss' => storage_path('app/vendors/oss'),
|
|
'plugins' => storage_path('app/vendors/plugins'),
|
|
'temp_path' => storage_path('app/temp/upstream'),
|
|
|
|
// S3 cold storage settings (Hetzner Object Store compatible)
|
|
's3' => [
|
|
// Private bucket for vendor archives (not publicly accessible)
|
|
'bucket' => env('UPSTREAM_S3_BUCKET', 'hostuk'),
|
|
'prefix' => env('UPSTREAM_S3_PREFIX', 'upstream/vendors/'),
|
|
'region' => env('UPSTREAM_S3_REGION', env('AWS_DEFAULT_REGION', 'eu-west-2')),
|
|
|
|
// Dual endpoint support for Hetzner Object Store
|
|
// Private: Internal access only (hostuk)
|
|
// Public: CDN/public access (host-uk) - NOT used for vendor archives
|
|
'private_endpoint' => env('S3_PRIVATE_ENDPOINT', env('AWS_ENDPOINT')),
|
|
'public_endpoint' => env('S3_PUBLIC_ENDPOINT'),
|
|
|
|
// Disk name in config/filesystems.php
|
|
// Defaults to private storage for vendor archives
|
|
'disk' => env('UPSTREAM_S3_DISK', 's3-private'),
|
|
],
|
|
|
|
// Archive behavior
|
|
'archive' => [
|
|
// Auto-archive to S3 after import (if disk is 's3')
|
|
'auto_archive' => env('UPSTREAM_AUTO_ARCHIVE', true),
|
|
// Delete local files after successful S3 upload
|
|
'delete_local_after_archive' => env('UPSTREAM_DELETE_LOCAL', true),
|
|
// Keep local copies for N most recent versions per vendor
|
|
'keep_local_versions' => env('UPSTREAM_KEEP_LOCAL', 2),
|
|
// Cleanup temp files older than N hours
|
|
'cleanup_after_hours' => env('UPSTREAM_CLEANUP_HOURS', 24),
|
|
],
|
|
|
|
// Download behavior
|
|
'download' => [
|
|
// Max concurrent downloads
|
|
'max_concurrent' => 3,
|
|
// Download timeout in seconds
|
|
'timeout' => 300,
|
|
],
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Vendor Source Types
|
|
|--------------------------------------------------------------------------
|
|
| - licensed: Paid software (manual upload/extract)
|
|
| - oss: Open source (git submodule capable)
|
|
| - plugin: Plugin packages (Altum, WordPress, etc.)
|
|
*/
|
|
'source_types' => [
|
|
'licensed' => [
|
|
'label' => 'Licensed Software',
|
|
'description' => 'Paid/proprietary software requiring manual version uploads',
|
|
'can_git_sync' => false,
|
|
'requires_upload' => true,
|
|
],
|
|
'oss' => [
|
|
'label' => 'Open Source',
|
|
'description' => 'Open source projects that can be git submoduled',
|
|
'can_git_sync' => true,
|
|
'requires_upload' => false,
|
|
],
|
|
'plugin' => [
|
|
'label' => 'Plugin/Extension',
|
|
'description' => 'Plugins for various platforms (Altum, WordPress, etc.)',
|
|
'can_git_sync' => false,
|
|
'requires_upload' => true,
|
|
],
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Plugin Platforms
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
'plugin_platforms' => [
|
|
'altum' => 'Altum/phpBioLinks',
|
|
'wordpress' => 'WordPress',
|
|
'laravel' => 'Laravel Package',
|
|
'other' => 'Other',
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Auto-Detection Patterns
|
|
|--------------------------------------------------------------------------
|
|
| File patterns to auto-detect change categories
|
|
*/
|
|
'detection_patterns' => [
|
|
'security' => [
|
|
'*/security/*',
|
|
'*/auth/*',
|
|
'*password*',
|
|
'*permission*',
|
|
'*/middleware/*',
|
|
'*csrf*',
|
|
'*xss*',
|
|
],
|
|
'controller' => [
|
|
'*/controllers/*',
|
|
'*Controller.php',
|
|
],
|
|
'model' => [
|
|
'*/models/*',
|
|
'*Model.php',
|
|
'*/Entities/*',
|
|
],
|
|
'view' => [
|
|
'*/views/*',
|
|
'*/themes/*',
|
|
'*.blade.php',
|
|
'*/templates/*',
|
|
],
|
|
'migration' => [
|
|
'*/migrations/*',
|
|
'*/database/*',
|
|
'*schema*',
|
|
],
|
|
'api' => [
|
|
'*/api/*',
|
|
'*api.php',
|
|
'*/Api/*',
|
|
],
|
|
'block' => [
|
|
'*/blocks/*',
|
|
'*biolink*',
|
|
'*Block.php',
|
|
],
|
|
'plugin' => [
|
|
'*/plugins/*',
|
|
'*Plugin.php',
|
|
],
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| AI Analysis Settings
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
'ai' => [
|
|
'provider' => env('UPSTREAM_AI_PROVIDER', 'anthropic'),
|
|
'model' => env('UPSTREAM_AI_MODEL', 'claude-sonnet-4-20250514'),
|
|
'max_tokens' => 4096,
|
|
'temperature' => 0.3,
|
|
|
|
// Rate limiting: max AI API calls per minute
|
|
'rate_limit' => env('UPSTREAM_AI_RATE_LIMIT', 10),
|
|
|
|
// Prompt templates
|
|
'prompts' => [
|
|
'categorize' => 'Analyse this code diff and categorise the change type (feature, bugfix, security, ui, refactor, etc). Also estimate the effort level (low, medium, high) and priority (1-10) for porting.',
|
|
'summarize' => 'Summarise the key changes in this version update in bullet points. Focus on user-facing features, security updates, and breaking changes.',
|
|
'dependencies' => 'Identify any dependencies this change has on other files or features that would need to be ported first.',
|
|
],
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| GitHub Integration
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
'github' => [
|
|
'enabled' => env('UPSTREAM_GITHUB_ENABLED', true),
|
|
'token' => env('GITHUB_TOKEN'),
|
|
'default_labels' => ['upstream', 'auto-generated'],
|
|
'assignees' => explode(',', env('UPSTREAM_GITHUB_ASSIGNEES', '')),
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Gitea Integration (Internal)
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
'gitea' => [
|
|
'enabled' => env('UPSTREAM_GITEA_ENABLED', true),
|
|
'url' => env('GITEA_URL', 'https://git.host.uk'),
|
|
'token' => env('GITEA_TOKEN'),
|
|
'org' => env('GITEA_ORG', 'host-uk'),
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Update Checker Settings
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
'update_checker' => [
|
|
// Auto-create todos when updates are detected
|
|
'create_todos' => env('UPSTREAM_CREATE_TODOS', true),
|
|
|
|
// Default priority for auto-created update todos (1-10)
|
|
'default_priority' => 5,
|
|
|
|
// Skip checking vendors that haven't been updated in N days
|
|
// Set to 0 to always check all vendors
|
|
'skip_recently_checked_days' => 0,
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Notifications
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
'notifications' => [
|
|
'slack_webhook' => env('UPSTREAM_SLACK_WEBHOOK'),
|
|
'discord_webhook' => env('UPSTREAM_DISCORD_WEBHOOK'),
|
|
'email_recipients' => explode(',', env('UPSTREAM_EMAIL_RECIPIENTS', '')),
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Default Vendor Configurations
|
|
|--------------------------------------------------------------------------
|
|
| Pre-configured vendors to seed the database with
|
|
*/
|
|
'default_vendors' => [
|
|
[
|
|
'slug' => '66biolinks',
|
|
'name' => '66biolinks',
|
|
'vendor_name' => 'AltumCode',
|
|
'source_type' => 'licensed',
|
|
'path_mapping' => [
|
|
'app/' => 'product/app/',
|
|
'themes/' => 'product/themes/',
|
|
'plugins/' => 'product/plugins/',
|
|
],
|
|
'ignored_paths' => [
|
|
'vendor/*',
|
|
'node_modules/*',
|
|
'storage/*',
|
|
'.git/*',
|
|
'*.log',
|
|
],
|
|
'priority_paths' => [
|
|
'app/controllers/*',
|
|
'app/models/*',
|
|
'plugins/*/init.php',
|
|
'themes/altum/views/l/*',
|
|
],
|
|
'target_repo' => 'host-uk/bio.host.uk.com',
|
|
],
|
|
[
|
|
'slug' => 'mixpost-pro',
|
|
'name' => 'Mixpost Pro',
|
|
'vendor_name' => 'Inovector',
|
|
'source_type' => 'licensed',
|
|
'path_mapping' => [
|
|
'src/' => 'packages/mixpost-pro/src/',
|
|
],
|
|
'ignored_paths' => [
|
|
'vendor/*',
|
|
'node_modules/*',
|
|
'tests/*',
|
|
],
|
|
'priority_paths' => [
|
|
'src/Http/Controllers/*',
|
|
'src/Models/*',
|
|
'src/Services/*',
|
|
],
|
|
'target_repo' => 'host-uk/host.uk.com',
|
|
],
|
|
[
|
|
'slug' => 'mixpost-enterprise',
|
|
'name' => 'Mixpost Enterprise',
|
|
'vendor_name' => 'Inovector',
|
|
'source_type' => 'licensed',
|
|
'path_mapping' => [
|
|
'src/' => 'packages/mixpost-enterprise/src/',
|
|
],
|
|
'ignored_paths' => [
|
|
'vendor/*',
|
|
'node_modules/*',
|
|
'tests/*',
|
|
],
|
|
'priority_paths' => [
|
|
'src/Billing/*',
|
|
'src/Features/*',
|
|
],
|
|
'target_repo' => 'host-uk/host.uk.com',
|
|
],
|
|
],
|
|
];
|