Add docker for production #3073
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |