Switch back to nerdbank versioning (#1952) #681
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 | |
- "feature/**" | |
- "release/**" | |
- "hotfix/**" | |
workflow_dispatch: | |
env: | |
REGISTRY: ghcr.io | |
IMAGE_NAME: ${{ github.repository }} | |
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 "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- 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 | |
composer dump-autoload | |
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: Get version | |
run: .github/scripts/version.sh | |
- name: Run Tests | |
run: | | |
export PHP_CS_FIXER_IGNORE_ENV=1 | |
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' | |
permissions: | |
contents: write | |
packages: write | |
attestations: write | |
id-token: write | |
needs: [build] | |
runs-on: ubuntu-latest | |
if: github.repository == 'phpvms/phpvms' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') | |
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 | |
- 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 "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- 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 | |
composer dump-autoload | |
sudo chmod +x ./.github/scripts/* | |
- id: version | |
name: Get version | |
run: .github/scripts/version.sh | |
- name: Build Distro | |
run: .github/scripts/build.sh | |
- 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: Discord notification | |
uses: Ilshidur/[email protected] | |
env: | |
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} | |
with: | |
args: ${{ steps.version.outputs.discord_msg }} | |
- name: Upload artifact for deployment job | |
uses: actions/upload-artifact@v4 | |
with: | |
name: phpvms-package | |
path: 'dist/*' | |
docker: | |
name: 'Create docker image' | |
permissions: | |
contents: write | |
packages: write | |
attestations: write | |
id-token: write | |
runs-on: ubuntu-latest | |
needs: [build] | |
if: github.repository == 'phpvms/phpvms' && github.event_name != 'pull_request' && (github.ref == 'refs/heads/dev') | |
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 | |
- id: version | |
name: Get version | |
run: .github/scripts/version.sh | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
tags: | | |
type=edge,branch=dev | |
type=ref,event=branch | |
# type=sha,enable=false | |
- name: Build and push | |
id: push | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
- name: Generate artifact attestation | |
uses: actions/attest-build-provenance@v2 | |
with: | |
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} | |
subject-digest: ${{ steps.push.outputs.digest }} | |
push-to-registry: true |