117 lines
3.2 KiB
YAML
117 lines
3.2 KiB
YAML
kind: pipeline
|
|
type: docker
|
|
name: default
|
|
|
|
steps:
|
|
# Step 1: Install dependencies and run tests
|
|
- name: test
|
|
image: php:7.4-cli
|
|
commands:
|
|
- apt-get update && apt-get install -y libzip-dev
|
|
- docker-php-ext-install exif zip
|
|
- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer --version=2.2.24
|
|
# Create .env and directories BEFORE composer install
|
|
- cp .env.example .env || echo "APP_KEY=" > .env
|
|
- mkdir -p storage/framework/{cache,sessions,views}
|
|
- mkdir -p storage/logs
|
|
- mkdir -p bootstrap/cache
|
|
# Set proper permissions for Laravel
|
|
- chmod -R 775 storage bootstrap/cache
|
|
# Now run composer install WITHOUT scripts (skip auto-discovery)
|
|
- composer install --prefer-dist --no-progress --no-interaction --no-scripts
|
|
# Generate app key before running discovery
|
|
- php artisan key:generate
|
|
# Now manually run package discovery
|
|
- php artisan package:discover --ansi
|
|
# Validate composer.json
|
|
- composer validate --strict
|
|
- echo "✓ Composer validation passed"
|
|
# Uncomment when tests are ready:
|
|
# - php artisan test
|
|
|
|
# Step 2: Deploy to staging (on develop/main branch)
|
|
- name: deploy-staging
|
|
image: appleboy/drone-ssh
|
|
when:
|
|
branch:
|
|
- develop
|
|
- main
|
|
event:
|
|
- push
|
|
settings:
|
|
host:
|
|
from_secret: staging_host
|
|
user: root
|
|
key:
|
|
from_secret: ssh_private_key
|
|
port: 22
|
|
envs:
|
|
- GITEA_TOKEN
|
|
script:
|
|
- export GITEA_TOKEN=$GITEA_TOKEN
|
|
- /opt/deploy-scripts/deploy-laravel.sh staging main
|
|
- cd /var/www/laravel/current && php artisan migrate --force
|
|
environment:
|
|
GITEA_TOKEN:
|
|
from_secret: gitea_token
|
|
|
|
# Step 3: Deploy to production (manual trigger only)
|
|
- name: deploy-production
|
|
image: appleboy/drone-ssh
|
|
when:
|
|
branch:
|
|
- main
|
|
event:
|
|
- promote
|
|
target:
|
|
- production
|
|
settings:
|
|
host:
|
|
from_secret: production_host
|
|
user: root
|
|
key:
|
|
from_secret: ssh_private_key
|
|
port: 22
|
|
envs:
|
|
- GITEA_TOKEN
|
|
script:
|
|
- export GITEA_TOKEN=$GITEA_TOKEN
|
|
- /opt/deploy-scripts/deploy-laravel.sh production main
|
|
- cd /var/www/laravel/current && php artisan migrate --force
|
|
- cd /var/www/laravel/current && php artisan queue:restart
|
|
environment:
|
|
GITEA_TOKEN:
|
|
from_secret: gitea_token
|
|
|
|
# Step 4: Notification
|
|
- name: notify
|
|
image: plugins/slack
|
|
when:
|
|
status:
|
|
- success
|
|
- failure
|
|
settings:
|
|
webhook:
|
|
from_secret: slack_webhook
|
|
channel: deployments
|
|
username: Drone CI
|
|
template: >
|
|
{{#success build.status}}
|
|
✓ Laravel API build {{build.number}} succeeded.
|
|
Branch: {{build.branch}}
|
|
Commit: {{build.commit}}
|
|
{{else}}
|
|
✗ Laravel API build {{build.number}} failed.
|
|
Branch: {{build.branch}}
|
|
Commit: {{build.commit}}
|
|
{{/success}}
|
|
failure: ignore
|
|
|
|
trigger:
|
|
branch:
|
|
- main
|
|
- develop
|
|
event:
|
|
- push
|
|
- promote
|