202 lines
5.9 KiB
YAML
202 lines
5.9 KiB
YAML
name : Build, Test and Publish
|
|
on :
|
|
pull_request :
|
|
branches :
|
|
- main
|
|
push :
|
|
paths-ignore :
|
|
- '.github/*.yml'
|
|
- '.github/ISSUE_TEMPLATE/*.md'
|
|
- 'install.sh' # Ansible-only scripts and folders
|
|
- 'update.sh'
|
|
- 'util/ansible/**'
|
|
branches :
|
|
- ci-testing
|
|
- main
|
|
- stable
|
|
tags :
|
|
- '*'
|
|
schedule :
|
|
- cron : '0 2 * * 0' # Weekly on Sundays at 02:00
|
|
|
|
jobs :
|
|
build :
|
|
name : Build and Test
|
|
runs-on : ubuntu-latest
|
|
env :
|
|
APPLICATION_ENV : testing
|
|
NODE_ENV : production
|
|
steps :
|
|
- uses : actions/checkout@master
|
|
|
|
- name : Reduce Git repository size.
|
|
run : |
|
|
git gc --prune=now --aggressive
|
|
|
|
- name : Setup PHP
|
|
uses : shivammathur/setup-php@v2
|
|
with :
|
|
php-version : '8.0'
|
|
extensions : intl, maxminddb
|
|
tools : composer:v2, cs2pr
|
|
|
|
- name : Cache PHP dependencies
|
|
uses : actions/cache@v2
|
|
with :
|
|
path : vendor
|
|
key : ${{ runner.OS }}-build-${{ hashFiles('**/composer.lock') }}
|
|
|
|
- name : Set console permissions and clear static assets.
|
|
run : |
|
|
rm -rf web/static/dist
|
|
rm -rf web/static/webpack.json
|
|
rm -rf web/static/assets.json
|
|
chmod a+x bin/console
|
|
|
|
- name : Run Composer install
|
|
run : |
|
|
composer install --no-interaction --ignore-platform-reqs
|
|
|
|
- name : Run PHP Linter
|
|
run : |
|
|
vendor/bin/parallel-lint . --exclude vendor --checkstyle | cs2pr
|
|
|
|
- name : Run PHPStan
|
|
run : |
|
|
vendor/bin/phpstan analyze --error-format=checkstyle | cs2pr
|
|
|
|
- name : Run PHP Code Sniffer
|
|
run : |
|
|
vendor/bin/phpcs --report=checkstyle | cs2pr
|
|
|
|
- name : Clear existing locales.
|
|
if : github.event_name == 'push' || github.event_name == 'schedule'
|
|
run : |
|
|
rm -rf resources/locale/compiled
|
|
rm -rf resources/locale/*.UTF-8
|
|
rm -rf resources/locale/translations.json
|
|
mkdir -p resources/locale/compiled
|
|
|
|
- name : Generate new translations from existing code.
|
|
if : github.event_name == 'push' || github.event_name == 'schedule'
|
|
run : |
|
|
bin/console locale:generate
|
|
cd frontend
|
|
npm ci
|
|
npm run generate-locales
|
|
|
|
- name : Pull latest translations.
|
|
if : github.event_name == 'push' || github.event_name == 'schedule'
|
|
uses : crowdin/github-action@1.0.18
|
|
with :
|
|
upload_sources : true
|
|
download_translations : true
|
|
export_only_approved : false
|
|
push_translations : false
|
|
crowdin_branch_name : main
|
|
config : crowdin.yaml
|
|
env :
|
|
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
|
|
CROWDIN_PROJECT_ID : ${{ secrets.CROWDIN_PROJECT_ID }}
|
|
CROWDIN_PERSONAL_TOKEN : ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
|
|
|
- name : Import locales, build static assets.
|
|
run : |
|
|
bin/console locale:import
|
|
|
|
cd frontend
|
|
npm ci
|
|
npm run import-locales
|
|
npm run build
|
|
|
|
- name : Set up functional test environment.
|
|
run : |
|
|
cp sample.env .env
|
|
cp azuracast.sample.env azuracast.env
|
|
cp docker-compose.sample.yml docker-compose.yml
|
|
cp docker-compose.testing.yml docker-compose.override.yml
|
|
docker-compose build web
|
|
docker-compose up -d
|
|
|
|
- name : Run functional test suite.
|
|
run : |
|
|
chmod 777 tests/_output/
|
|
chmod 777 tests/_support/_generated
|
|
docker-compose exec -T --user="azuracast" web composer run codeception-no-coverage
|
|
|
|
- name : Stop all running containers.
|
|
run : |
|
|
docker-compose down -v
|
|
|
|
- name : Echo test output directory
|
|
if : failure()
|
|
run : |
|
|
docker-compose logs
|
|
cat tests/_output/*
|
|
|
|
- name : Upload built static assets and translations
|
|
uses : actions/upload-artifact@v2
|
|
with :
|
|
name : assets
|
|
if-no-files-found : error
|
|
path : |
|
|
resources/locale/compiled
|
|
resources/locale/translations.json
|
|
web/static/dist
|
|
web/static/webpack.json
|
|
web/static/assets.json
|
|
|
|
publish :
|
|
name : Publish
|
|
needs : build
|
|
runs-on : ubuntu-latest
|
|
if : github.event_name == 'push' || github.event_name == 'schedule'
|
|
steps :
|
|
- uses : actions/checkout@master
|
|
|
|
- name : Download built static assets from previous step
|
|
uses : actions/download-artifact@v2
|
|
with :
|
|
name : assets
|
|
|
|
# - name : Set up QEMU
|
|
# uses : docker/setup-qemu-action@v1
|
|
|
|
- name : Set up Docker Buildx
|
|
uses : docker/setup-buildx-action@v1
|
|
|
|
- name : Login to DockerHub
|
|
uses : docker/login-action@v1
|
|
with :
|
|
username : ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password : ${{ secrets.DOCKERHUB_TOKEN }}
|
|
|
|
- name : Login to GitHub Container Registry
|
|
uses : docker/login-action@v1
|
|
with :
|
|
registry : ghcr.io
|
|
username : ${{ github.repository_owner }}
|
|
password : ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name : Build Docker Metadata
|
|
id : meta
|
|
uses : crazy-max/ghaction-docker-meta@v2
|
|
with :
|
|
images : |
|
|
azuracast/azuracast_web_v2
|
|
ghcr.io/azuracast/web
|
|
tags : |
|
|
type=raw,value=latest,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }}
|
|
type=ref,event=branch
|
|
type=semver,pattern={{version}}
|
|
|
|
- name : Publish to Docker Hub
|
|
uses : docker/build-push-action@v2
|
|
with :
|
|
context : .
|
|
# platforms : linux/amd64,linux/arm64
|
|
cache-from : type=registry,ref=azuracast/azuracast_web_v2:latest
|
|
push : true
|
|
tags : ${{ steps.meta.outputs.tags }}
|
|
labels : ${{ steps.meta.outputs.labels }}
|