[pull] main from AzuraCast:main #580
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, Test and Publish | |
on: | |
pull_request: | |
branches: | |
- main | |
push: | |
paths-ignore: | |
- '*.md' | |
- '.github/*.yml' | |
- '.github/ISSUE_TEMPLATE/*.md' | |
- 'install.sh' # Ansible-only scripts and folders | |
- 'update.sh' | |
- 'util/ansible/**' | |
branches: | |
- ci-testing | |
- main | |
- stable | |
- 'dev-*' | |
tags: | |
- '*' | |
schedule: | |
- cron: '0 2 * * 0' # Weekly on Sundays at 02:00 | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
test: | |
name: Test Suite | |
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.3' | |
extensions: intl, xdebug | |
tools: composer:v2, cs2pr | |
- name: Cache PHP dependencies | |
uses: actions/cache@v4 | |
with: | |
path: vendor | |
key: ${{ runner.OS }}-build-${{ hashFiles('composer.lock') }} | |
- 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 --memory-limit=-1 --error-format=checkstyle | cs2pr | |
- name: Run PHP Code Sniffer | |
run: | | |
vendor/bin/phpcs --report=checkstyle | cs2pr | |
prepare: | |
name: Prepare Codebase | |
needs: test | |
runs-on: ubuntu-latest | |
env: | |
APPLICATION_ENV: testing | |
NODE_ENV: production | |
if: github.event_name == 'push' || github.event_name == 'schedule' | |
steps: | |
- uses: actions/checkout@master | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: '8.3' | |
extensions: intl, xdebug | |
tools: composer:v2, cs2pr | |
- name: Cache PHP dependencies | |
uses: actions/cache@v4 | |
with: | |
path: vendor | |
key: ${{ runner.OS }}-build-${{ hashFiles('composer.lock') }} | |
- name: Set console permissions and clear static assets. | |
run: | | |
rm -rf web/static/vite_dist | |
rm -rf translations/*.UTF-8 | |
chmod a+x backend/bin/* | |
- name: Run Composer install | |
run: | | |
composer install --no-interaction --ignore-platform-reqs | |
- name: Generate new translations from existing code. | |
run: | | |
npm ci --include=dev | |
backend/bin/console locale:generate | |
- name: Pull latest translations. | |
uses: crowdin/github-action@1.5.3 | |
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: | | |
backend/bin/console locale:import | |
npm run build | |
- name: Build OpenAPI Docs | |
run: backend/bin/console azuracast:api:docs | |
- name: Write .gitinfo File | |
run: | | |
bash util/write_git_info.sh | |
chmod 777 .gitinfo | |
- name: Upload built static assets and translations | |
uses: actions/upload-artifact@v4 | |
with: | |
name: assets | |
if-no-files-found: error | |
include-hidden-files: true | |
path: | | |
.gitinfo | |
translations | |
web/static/vite_dist | |
web/static/api/openapi.yml | |
build: | |
name: Build & Publish | |
needs: prepare | |
permissions: | |
contents: read | |
id-token: write | |
packages: write | |
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@v4 | |
with: | |
name: assets | |
- name: Set up Depot | |
uses: depot/setup-action@v1 | |
- name: Login to DockerHub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build Docker Metadata | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
azuracast/azuracast | |
ghcr.io/azuracast/azuracast | |
flavor: | | |
latest=false | |
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: depot/build-push-action@v1 | |
with: | |
context: . | |
push: true | |
platforms: linux/amd64,linux/arm64 | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} |