Skip to content

[Chore] Finalize migrating husky to v9 #838

[Chore] Finalize migrating husky to v9

[Chore] Finalize migrating husky to v9 #838

Workflow file for this run

name: 'Build'
on: [push, pull_request, merge_group]
env:
CI: true
jobs:
prepare:
name: 'Install dependencies'
runs-on: ubuntu-latest
env:
YARN_CACHE_FOLDER: .yarn-cache
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- run: yarn install --frozen-lockfile --prefer-offline
typecheck:
needs: [prepare]
name: 'Typecheck'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- run: yarn install --frozen-lockfile --prefer-offline
- run: yarn typecheck
linting:
needs: [prepare]
name: 'ESLint'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- run: yarn install --frozen-lockfile --prefer-offline
- run: yarn lint --max-warnings=0
prettier:
needs: [prepare]
name: 'Prettier'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- run: yarn install --frozen-lockfile --prefer-offline
- run: yarn prettier . --check
test-interface:
needs: [prepare]
# This should actually include anything but parser tests
name: 'Interface tests'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- run: yarn install --frozen-lockfile --prefer-offline
- run: yarn test:interface
test-parser:
needs: [prepare]
name: 'Parser tests'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- run: yarn install --frozen-lockfile --prefer-offline
- run: yarn test:parser
build:
needs: [prepare]
name: 'Build'
runs-on: ubuntu-latest
if: github.repository == 'wowanalyzer/wowanalyzer'
outputs:
environment_name: ${{ steps.environment-name.outputs.environment_name }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- run: yarn install --frozen-lockfile --prefer-offline
- name: Extract messages
if: github.event_name != 'pull_request' && github.repository == 'wowanalyzer/wowanalyzer'
run: |
yarn extract
yarn lingui compile
- name: Calculate environment name
id: environment-name
run: echo "environment_name=${GITHUB_REF##*/}" >> $GITHUB_OUTPUT
- name: Production build
run: yarn build
env:
DISABLE_AUTOMATIC_ESLINT: true
VITE_ENABLE_GA: true
VITE_ENVIRONMENT_NAME: ${{ steps.environment-name.outputs.environment_name }}
VITE_VERSION: ${{ github.sha }}
- run: tar -czf dist.tar.gz dist
- uses: actions/upload-artifact@v4
with:
name: dist
path: dist.tar.gz
e2e-build:
needs: [prepare]
name: 'e2e-build'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- run: yarn install --frozen-lockfile --prefer-offline
- name: Extract messages
run: |
yarn extract
yarn lingui compile
- name: Calculate environment name
id: environment-name
run: echo "environment_name=${GITHUB_REF##*/}" >> $GITHUB_OUTPUT
- name: Customize production environment variables
# Even though this is a "production" build, it's actually a "development" build we're
# using for e2e testing.
run: cp .env.development .env.production
- name: Production build
run: yarn build
env:
DISABLE_AUTOMATIC_ESLINT: true
VITE_ENABLE_GA: false
VITE_ENVIRONMENT_NAME: ${{ steps.environment-name.outputs.environment_name }}
VITE_VERSION: ${{ github.sha }}
VITE_FORCE_PREMIUM: true
- run: tar -czf dist.tar.gz dist
- uses: actions/upload-artifact@v4
with:
name: e2e-build
path: dist.tar.gz
e2e-test:
needs: [e2e-build]
name: e2e-test-shard-${{ matrix.shard }}
runs-on: ubuntu-latest
strategy:
matrix:
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- run: yarn install --frozen-lockfile --prefer-offline
- uses: actions/download-artifact@v4
with:
name: e2e-build
- run: tar -xzf dist.tar.gz
- name: Install Playwright deps
run: yarn playwright install --with-deps
- name: Run Playwright tests
run: yarn e2e --shard=${{ matrix.shard }}/4
- uses: actions/upload-artifact@v3
if: always()
with:
name: playwright-report-shard-${{ matrix.shard }}
path: playwright-report/
retention-days: 30
# This only runs on PRs since it's not a part of the build step. This is
# required as mistakes in i18n tags may trigger errors, and we skip the
# extraction in the build for performance in PRs.
extract-verify:
needs: [prepare]
name: 'Verify i18n messages'
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
cache: 'yarn'
- run: yarn install --frozen-lockfile --prefer-offline
- name: Extract messages
run: yarn extract
- name: Compile messages
run: yarn lingui compile
docker-image:
needs: [typecheck, linting, prettier, test-interface, test-parser, build]
name: 'Publish Docker image'
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.repository == 'wowanalyzer/wowanalyzer'
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: dist
path: .
- run: tar -xzf dist.tar.gz
# Remove files we no longer need to speed up sending context to Docker
- run: rm dist.tar.gz
- name: Docker meta
id: docker_meta
uses: docker/metadata-action@v5
with:
images: |
wowanalyzer/wowanalyzer
tags: |
type=ref,event=branch
type=ref,event=pr
type=sha
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_PASSWORD}}
- name: Build Docker image
id: docker_build
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}
- uses: getsentry/action-release@v1
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: wowanalyzer
SENTRY_PROJECT: wowanalyzer-app
with:
environment: ${{ needs.build.outputs.environment_name }}
sourcemaps: './build/static/js'
url_prefix: '~/static/js'
require-changelog-entry:
name: 'Has new changelog entry'
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
env:
YARN_CACHE_FOLDER: .yarn-cache
steps:
- uses: actions/checkout@v4
- run: git fetch --no-tags --depth=1 origin $GITHUB_BASE_REF:$GITHUB_BASE_REF
- uses: actions/setup-node@v4
with:
node-version: '20.x'
- run: node scripts/require-changelog-entry.cjs