name: UI Compatibility on: push: branches: [master] pull_request: branches: [master] jobs: files-changed: name: Detect File Changes runs-on: ubuntu-latest outputs: ui: ${{ steps.changes.outputs.ui }} steps: - name: Checkout uses: actions/checkout@v6 - name: Check for file changes uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 id: changes with: token: ${{ github.token }} filters: .github/file-filters.yml build-library: name: Build Library if: needs.files-changed.outputs.ui == 'true' needs: files-changed runs-on: ubuntu-latest defaults: run: working-directory: packages/ui steps: - name: Checkout uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version-file: 'packages/ui/.tool-versions' cache: 'npm' cache-dependency-path: packages/ui/package-lock.json - name: Install dependencies run: npm ci - name: Build library run: npm run build - name: Upload build artifacts uses: actions/upload-artifact@v6 with: name: ui-dist path: packages/ui/dist/ retention-days: 1 test-compatibility: name: Test Compatibility if: needs.files-changed.outputs.ui == 'true' needs: [files-changed, build-library] runs-on: ubuntu-latest strategy: fail-fast: false matrix: example: - vue3-tailwind - vue3-css - vue2-tailwind - vue2-css defaults: run: working-directory: packages/ui/examples/${{ matrix.example }} steps: - name: Checkout uses: actions/checkout@v6 - name: Download build artifacts uses: actions/download-artifact@v4 with: name: ui-dist path: packages/ui/dist/ - name: Setup Node.js uses: actions/setup-node@v6 with: node-version-file: 'packages/ui/.tool-versions' cache: 'npm' cache-dependency-path: packages/ui/examples/${{ matrix.example }}/package-lock.json - name: Install dependencies run: npm install - name: Lint run: npm run lint - name: Run tests run: npm test - name: Build example app run: npm run build compatibility-result: name: Compatibility Result if: always() needs: [files-changed, test-compatibility] runs-on: ubuntu-latest steps: - name: Skip if no UI changes if: needs.files-changed.outputs.ui != 'true' run: echo "No UI changes detected, skipping." - name: Check matrix results if: needs.files-changed.outputs.ui == 'true' run: | if [ "${{ needs.test-compatibility.result }}" != "success" ]; then echo "Compatibility tests failed" exit 1 fi