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 : 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 : Debug Info run : | docker-compose exec -T web ls -lah . docker-compose exec -T web ls -lah ./vendor docker-compose exec -T web ls -lah ./vendor/bin - 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 : Reduce Git repository size. run : | git gc --prune=now --aggressive - 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 }}