Skip to content

Add docker for production #3073

Add docker for production

Add docker for production #3073

Workflow file for this run

name: 'Build'
on:
pull_request:
push:
branches:
- main
- dev
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
php-versions: ['8.1', '8.2', '8.3']
name: PHP ${{ matrix.php-versions }}
env:
extensions: intl, pcov, mbstring
key: cache-v1
MYSQL_ROOT_PASSWORD: root
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# https://github.com/marketplace/actions/nerdbank-gitversioning
- name: Nerdbank.GitVersioning
uses: dotnet/[email protected]
with:
setAllVars: true
# Configure Caching
- name: Setup cache environment
id: cache-env
uses: shivammathur/cache-extensions@v1
with:
php-version: ${{ matrix.php-versions }}
extensions: ${{ env.extensions }}
key: ${{ env.key }}
- name: Cache extensions
uses: actions/cache@v4
with:
path: ${{ steps.cache-env.outputs.dir }}
key: ${{ steps.cache-env.outputs.key }}
restore-keys: ${{ steps.cache-env.outputs.key }}
- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache dependencies
uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
# Configure PHP
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: ${{ env.extensions }}
ini-values: post_max_size=256M, short_open_tag=On
coverage: xdebug
tools: php-cs-fixer, phpunit
- name: Shutdown Ubuntu MySQL
run: sudo service mysql stop
- name: Install MySQL
uses: mirromutth/[email protected]
with:
mysql version: '8.0'
mysql database: 'phpvms'
mysql root password: $MYSQL_ROOT_PASSWORD
mysql user: ''
mysql password: ''
- name: Wait for MySQL
run: |
while ! mysqladmin ping -h127.0.0.1 --silent; do
sleep 1
done
- name: Configure Environment
run: |
php --version
mysql --version
composer install --dev --no-interaction --verbose
cp .github/scripts/env.test .env
cp .github/scripts/phpunit.xml phpunit.xml
.github/scripts/version.sh ${{ env.NBGV_SemVer2 }}
php artisan database:create --reset
php artisan migrate:refresh --seed
- name: Run Tests
run: |
export PHP_CS_FIXER_IGNORE_ENV=1
#vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php -v --dry-run --diff --using-cache=no
vendor/bin/phpunit
# This runs after all of the tests, run have run. Creates a cleaned up version of the
# distro, and then creates the artifact to push up to S3 or wherever
artifacts:
name: 'Create release package'
needs: [build]
runs-on: ubuntu-latest
if: github.repository == 'nabeelio/phpvms' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/'))
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# https://github.com/marketplace/actions/nerdbank-gitversioning
- name: Get Version
uses: dotnet/[email protected]
with:
setAllVars: true
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
- uses: olegtarasov/[email protected]
id: tagName
# Configure Caching
- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache dependencies
uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
# Dependencies
- name: 'Install Release Dependencies'
run: |
rm -rf vendor
composer install --no-dev --prefer-dist --no-interaction --verbose
sudo chmod +x ./.github/scripts/*
- name: Get version
run: .github/scripts/version.sh
- name: Discord Message
id: discord
run: .github/scripts/discord.sh
- name: Build Distro
run: .github/scripts/build.sh
- uses: altinukshini/deployment-action@releases/v1
name: start deployment
id: deployment
with:
token: ${{ secrets.GITHUB_TOKEN}}
description: Uploading files to CDN
environment: production
- uses: BetaHuhn/do-spaces-action@v2
id: spaces
with:
access_key: ${{ secrets.SPACE_ACCESS_KEY}}
secret_key: ${{ secrets.SPACE_SECRET_KEY }}
space_name: ${{ secrets.SPACE_NAME }}
space_region: ${{ secrets.SPACE_REGION }}
source: dist
cdn_domain: phpvms.cdn.vmslabs.net
permission: public-read
- name: Upload S3
uses: shallwefootball/s3-upload-action@master
with:
aws_key_id: ${{ secrets.S3_BUILD_ARTIFACTS_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.S3_BUILD_ARTIFACTS_SECRET_ACCESS_KEY}}
aws_bucket: ${{ secrets.S3_BUCKET_NAME }}
source_dir: 'dist'
destination_dir: ''
- name: Discord notification
uses: Ilshidur/[email protected]
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
with:
args: ${{ steps.discord.outputs.discord_msg }}
- name: Upload artifact for deployment job
uses: actions/upload-artifact@v3
with:
name: phpvms-package
path: 'dist/*'
# - name: update deployment status
# if: always()
# uses: altinukshini/deployment-status@releases/v1
# with:
# token: ${{ secrets.GITHUB_TOKEN }}
# state: ${{ job.status }}
# environment_url: ${{ steps.spaces.outputs.output_url }}
# deployment_id: ${{ steps.deployment.outputs.deployment_id }}
# description: "Successfully uploaded files to CDN"
# This runs after all of the tests, run have run. Creates a cleaned up version of the
# distro, and then creates the artifact to push up to S3 or wherever
# https://github.com/actions/create-release
release:
name: 'Create Release'
needs: artifacts
runs-on: ubuntu-latest
if: github.repository == 'nabeelio/phpvms' && startsWith(github.ref, 'refs/tags/')
steps:
- name: Download artifact from build job
uses: actions/download-artifact@v3
with:
name: phpvms-package
# Dependencies
- name: 'List files'
run: |
find . -maxdepth 2 -type f
- name: Create Release
uses: ncipollo/release-action@v1
with:
artifacts: "./*.*"
allowUpdates: true
generateReleaseNotes: true
name: ${{ github.ref_name }}
tag: ${{ github.ref_name }}
token: ${{ secrets.GITHUB_TOKEN }}