253 lines
7.7 KiB
YAML
253 lines
7.7 KiB
YAML
name: 'Build'
|
|
on: ['push', 'workflow_dispatch', 'release']
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-18.04
|
|
if: github.repository == 'nabeelio/phpvms'
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
php-versions: ['7.3', '7.4']
|
|
name: PHP ${{ matrix.php-versions }}
|
|
env:
|
|
extensions: intl, pcov, mbstring
|
|
key: cache-v1
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
# 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@v1
|
|
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@v2
|
|
with:
|
|
path: ${{ steps.composer-cache.outputs.dir }}
|
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
|
restore-keys: ${{ runner.os }}-composer-
|
|
|
|
# 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 MariaDB
|
|
uses: getong/mariadb-action@v1.1
|
|
with:
|
|
character set server: 'utf8'
|
|
collation server: 'utf8_general_ci'
|
|
mysql database: 'phpvms'
|
|
mysql root password: ''
|
|
mysql user: ''
|
|
mysql password: ''
|
|
|
|
- name: Configure Environment
|
|
run: |
|
|
php --version
|
|
mysql --version
|
|
# Downgrade composer version to 1.x
|
|
composer self-update --1
|
|
composer install --dev --no-interaction --verbose
|
|
cp .github/scripts/env.php env.php
|
|
cp .github/scripts/phpunit.xml phpunit.xml
|
|
php artisan database:create --reset
|
|
php artisan migrate:refresh --seed
|
|
|
|
- name: Run Tests
|
|
run: |
|
|
vendor/bin/php-cs-fixer fix --config=.php_cs -v --dry-run --diff --using-cache=no
|
|
vendor/bin/phpunit --debug --verbose
|
|
|
|
# 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 dev build'
|
|
needs: build
|
|
runs-on: 'ubuntu-18.04'
|
|
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Setup PHP
|
|
uses: shivammathur/setup-php@v2
|
|
with:
|
|
php-version: '7.4'
|
|
|
|
- uses: olegtarasov/get-tag@v2.1
|
|
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@v2
|
|
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
|
|
sudo npm i tar-to-zip -g
|
|
composer self-update --1
|
|
composer install --no-dev --prefer-dist --no-interaction --verbose
|
|
sudo chmod +x ./.github/scripts/*
|
|
|
|
- name: Get version
|
|
run: .github/scripts/version.sh
|
|
|
|
- name: Build Distro
|
|
run: .github/scripts/build.sh
|
|
|
|
- name: Upload S3
|
|
uses: shallwefootball/s3-upload-action@v1.1.3
|
|
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
|
|
env:
|
|
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
|
uses: Ilshidur/action-discord@0.3.0
|
|
with:
|
|
# DISCORD_MSG is defined in versions.sh
|
|
args: '{{ DISCORD_MSG }}'
|
|
|
|
# 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: build
|
|
runs-on: 'ubuntu-18.04'
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Setup PHP
|
|
uses: shivammathur/setup-php@v2
|
|
with:
|
|
php-version: '7.4'
|
|
|
|
- uses: olegtarasov/get-tag@v2.1
|
|
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@v2
|
|
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
|
|
sudo npm i tar-to-zip -g
|
|
composer self-update --1
|
|
composer install --no-dev --prefer-dist --no-interaction --verbose
|
|
sudo chmod +x ./.github/scripts/*
|
|
|
|
- name: Get version
|
|
run: .github/scripts/version.sh
|
|
|
|
- name: Build Distro
|
|
run: .github/scripts/build.sh
|
|
|
|
- name: Upload S3
|
|
uses: shallwefootball/s3-upload-action@v1.1.3
|
|
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: Checkout code
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Get version
|
|
run: .github/scripts/version.sh
|
|
|
|
- name: Create Release
|
|
id: create_release
|
|
uses: actions/create-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ github.ref }}
|
|
release_name: Release ${{ github.ref }}
|
|
draft: true
|
|
prerelease: false
|
|
|
|
# Upload the tar file to the release
|
|
- name: Upload Tar Asset
|
|
id: upload-tar-asset
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: dist/{{TAR_NAME}}
|
|
asset_name: '{{ TAR_NAME }}'
|
|
asset_content_type: application/gzip
|
|
|
|
# upload the zip file to the release
|
|
- name: Upload Zip Asset
|
|
id: upload-zip-asset
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: dist/{{ZIP_NAME}}
|
|
asset_name: '{{ ZIP_NAME }}'
|
|
asset_content_type: application/zip
|
|
|
|
- name: Discord notification
|
|
env:
|
|
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
|
uses: Ilshidur/action-discord@0.3.0
|
|
with:
|
|
# DISCORD_MSG is defined in versions.sh
|
|
args: '{{ DISCORD_MSG }}'
|