Skip to content

feat(v2-ui): schema/question domain entities + widget-selection mapping #356

feat(v2-ui): schema/question domain entities + widget-selection mapping

feat(v2-ui): schema/question domain entities + widget-selection mapping #356

name: Build Extralit frontend package
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
workflow_call:
push:
branches:
- main
- develop
- feat/**
- releases/**
paths:
- "extralit-frontend/**"
- ".github/workflows/extralit-frontend.yml"
permissions:
contents: read
jobs:
build:
name: Build extralit-frontend
runs-on: ubuntu-latest
defaults:
run:
working-directory: extralit-frontend
steps:
- name: Checkout Code 🛎
uses: actions/checkout@v4
- name: Setup Node.js ⚙️
uses: actions/setup-node@v4
with:
node-version: 24
- name: Install dependencies 📦
run: |
npm install
- name: Check generated v2 API types are current 🔒
run: |
npm run gen:api:types
git diff --exit-code -- v2/infrastructure/api/generated
- name: Run lint 🧹
continue-on-error: true
run: |
npm run lint
- name: Run tests with coverage 🧪
id: run-tests
run: |
npm run test:coverage
- name: Upload frontend test coverage
if: always()
uses: codecov/codecov-action@v5.4.3
with:
files: ./coverage/lcov.info
flags: frontend
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
- name: Build package 📦
env:
# Nuxt 4 SPA (ssr:false) ships as static files served at the site root, so build at
# base "/". (The Nuxt 2 "@@baseUrl@@" placeholder breaks Nuxt 4's prerender crawler;
# parameterizable sub-path hosting is a separate follow-up.)
BASE_URL: "/"
run: |
# `nuxi generate` prerenders the SPA shell to .output/public (index.html + _nuxt
# assets); `nuxi build` only emits a Nitro server with no static index.html.
npm run generate
- name: Upload frontend statics as artifact
uses: actions/upload-artifact@v4
with:
name: extralit-frontend
path: extralit-frontend/.output/public