name: Build, Test & Push Frontend run-name: ${{ gitea.actor }} build and test Angular 🚀 on: push: branches: - main pull_request: branches: - main jobs: # ------------------------------------------------------------------ # JOB 1: Code integrity and quality gates (CI) # ------------------------------------------------------------------ quality-check: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - name: Install Linux Libs run: | sudo apt-get update sudo apt-get install -y \ libnss3 \ libnspr4 \ libatk1.0-0 \ libatk-bridge2.0-0 \ libcups2t64 \ libdrm2 \ libxkbcommon0 \ libxcomposite1 \ libxdamage1 \ libxfixes3 \ libxrandr2 \ libgbm1 \ libasound2t64 \ libpango-1.0-0 \ libcairo2 - name: Install Dependencies run: npm ci # 1. Linting (Code-Style) - name: Lint & Type Check run: npm run lint --if-present # 2. Unit Tests (Logik) Not necessary, because atm no tests written #- name: Unit Tests # run: npx ng test --watch=false --browsers=ChromeHeadless # 3. Build Production (necessary for lighthouse) - name: Build Production run: npx ng build --configuration production # 4. Lighthouse Audit (Performance & SEO) - name: Install Puppeteer run: npm install puppeteer --no-save - name: Lighthouse CI run: | CHROME_PATH=$(node -e 'console.log(require("puppeteer").executablePath())') export CHROME_PATH=$CHROME_PATH npx lhci autorun # ------------------------------------------------------------------ # JOB 2: Docker Build & Push (CD) # Runs only if 'quality-check' are successfully and we are on branch main. # ------------------------------------------------------------------ docker: needs: quality-check runs-on: ubuntu-latest if: github.event_name == 'push' && github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4 - name: Prepare tag (sanitize branch) id: prep shell: bash run: | BRANCH="${GITHUB_REF_NAME}" BRANCH="${BRANCH//\//-}" BRANCH="$(echo "$BRANCH" | tr '[:upper:]' '[:lower:]')" echo "branch=$BRANCH" >> "$GITHUB_OUTPUT" echo "sha=${GITHUB_SHA::12}" >> "$GITHUB_OUTPUT" - uses: docker/setup-buildx-action@v3 - uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build & Push (branch + sha tags) uses: docker/build-push-action@v6 with: context: . push: true tags: | docker.io/${{ secrets.DOCKERHUB_USERNAME }}/playground:frontend-a-${{ steps.prep.outputs.branch }} docker.io/${{ secrets.DOCKERHUB_USERNAME }}/playground:frontend-a-${{ steps.prep.outputs.branch }}-${{ steps.prep.outputs.sha }} - name: Also push moving main tag uses: docker/build-push-action@v6 with: context: . push: true tags: | docker.io/${{ secrets.DOCKERHUB_USERNAME }}/playground:frontend-a-main