Some checks failed
Deploy to Production / test (push) Failing after 6s
Deploy to Production / deploy (push) Successful in 33s
127 lines
3.4 KiB
YAML
127 lines
3.4 KiB
YAML
name: Deploy to Production
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: splendid-bear
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres:18-alpine
|
|
env:
|
|
POSTGRES_USER: mineseeker_test
|
|
POSTGRES_PASSWORD: test_password
|
|
POSTGRES_DB: mineseeker_test
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
ports:
|
|
- 5432:5432
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup PHP 8.3
|
|
uses: shivammathur/setup-php@v2
|
|
with:
|
|
php-version: '8.3'
|
|
extensions: pdo_pgsql, gd, intl, zip, sodium
|
|
coverage: none
|
|
tools: composer:v2
|
|
|
|
- name: Install PHP dependencies
|
|
run: composer install --prefer-dist --no-progress --no-interaction
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '20'
|
|
|
|
- name: Install Node dependencies
|
|
run: npm ci
|
|
|
|
- name: Build assets
|
|
run: npm run build
|
|
|
|
- name: Create .env.test file
|
|
run: |
|
|
cat > .env.test << 'ENVEOF'
|
|
APP_ENV=test
|
|
APP_SECRET=test-secret-key-for-ci-testing-only
|
|
DATABASE_URL="postgresql://mineseeker_test:test_password@localhost:5432/mineseeker_test?serverVersion=18&charset=utf8"
|
|
KERNEL_CLASS='App\Kernel'
|
|
SYMFONY_DEPRECATIONS_HELPER=999999
|
|
ENVEOF
|
|
|
|
- name: Setup test database
|
|
run: make test-db-setup
|
|
|
|
- name: Run PHPUnit tests
|
|
run: vendor/bin/phpunit --testdox --colors=always --stop-on-failure
|
|
|
|
deploy:
|
|
needs: test
|
|
runs-on: splendid-bear
|
|
steps:
|
|
- name: Checkout tag
|
|
env:
|
|
GITEA_TOKEN: ${{ gitea.token }}
|
|
run: |
|
|
set -e
|
|
export HOME=/tmp
|
|
git config --global credential.helper '!f() { echo "username=oauth2"; echo "password=$GITEA_TOKEN"; }; f'
|
|
git config --global --add safe.directory "${{ vars.PROD_APP_DIR }}"
|
|
cd "${{ vars.PROD_APP_DIR }}"
|
|
git remote set-url origin "${{ gitea.server_url }}/${{ gitea.repository }}.git"
|
|
git fetch --tags --force
|
|
git checkout "${{ gitea.ref_name }}"
|
|
|
|
- name: Write .env
|
|
env:
|
|
PROD_ENV_FILE: ${{ secrets.PROD_ENV_FILE }}
|
|
run: |
|
|
printf '%s' "$PROD_ENV_FILE" > "${{ vars.PROD_APP_DIR }}/.env"
|
|
|
|
- name: Build image
|
|
run: |
|
|
cd "${{ vars.PROD_APP_DIR }}"
|
|
docker compose build
|
|
|
|
- name: Run database migrations
|
|
run: |
|
|
cd "${{ vars.PROD_APP_DIR }}"
|
|
docker compose run --rm app php bin/console doctrine:migrations:migrate --no-interaction
|
|
|
|
- name: Clear cache
|
|
run: |
|
|
cd "${{ vars.PROD_APP_DIR }}"
|
|
docker compose run --rm app php bin/console cache:clear --env=prod
|
|
|
|
- name: Start services
|
|
run: |
|
|
cd "${{ vars.PROD_APP_DIR }}"
|
|
docker compose up -d
|
|
|
|
- name: Health check
|
|
run: |
|
|
sleep 5
|
|
curl -f http://localhost:10080/ || exit 1
|
|
|
|
- name: Notify deployment success
|
|
if: success()
|
|
run: |
|
|
echo "✅ Deployment successful for tag ${{ gitea.ref_name }}"
|
|
|
|
- name: Notify deployment failure
|
|
if: failure()
|
|
run: |
|
|
echo "❌ Deployment failed for tag ${{ gitea.ref_name }}"
|
|
exit 1
|