name: 'Build' on: ['push', 'pull_request', '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', '8.0'] 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 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 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 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 }}'