97 lines
3.1 KiB
YAML
97 lines
3.1 KiB
YAML
name: build-run
|
||
|
||
# Controls when the action will run.
|
||
on:
|
||
# Triggers the workflow on push or pull request events for specific branches
|
||
push:
|
||
branches: [main, dev, dev-angular-19]
|
||
pull_request:
|
||
branches: [main, dev, dev-angular-19]
|
||
|
||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||
jobs:
|
||
# This workflow contains a single job called "build"
|
||
build:
|
||
# The type of runner that the job will run on
|
||
name: Run Lint, Build and Deploy
|
||
runs-on: ubuntu-latest
|
||
|
||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Use Node.js 22
|
||
uses: actions/setup-node@v3
|
||
with:
|
||
# no support for lts as of now with github actions.
|
||
# issue link : https://github.com/actions/setup-node/issues/26
|
||
# lts/gallium node v19.7.0 (npm v9.5.0)
|
||
node-version: '22.12.0'
|
||
|
||
- name: Remove node_modules
|
||
run: rm -rf node_modules
|
||
|
||
- name: Run CI
|
||
run: npm ci
|
||
|
||
- name: Fallback – Clean install with regenerated lockfile
|
||
if: failure()
|
||
run: |
|
||
echo "npm ci failed — regenerating lockfile and retrying"
|
||
rm -rf node_modules package-lock.json
|
||
npm install
|
||
|
||
- name: Run eslint
|
||
run: npx eslint .
|
||
|
||
- name: Run stylelint
|
||
run: npx stylelint "src/**/*.scss"
|
||
|
||
- name: Run prettier
|
||
run: npx prettier . --check
|
||
|
||
- name: Run HTMLHint
|
||
run: npx htmlhint "src" --config .htmlhintrc
|
||
|
||
- name: Check file headers
|
||
run: |
|
||
echo "Checking for MPL-2.0 license headers in changed files..."
|
||
|
||
# Get list of changed files (comparing with base branch)
|
||
if [ "${{ github.event_name }}" == "pull_request" ]; then
|
||
BASE_SHA="${{ github.event.pull_request.base.sha }}"
|
||
else
|
||
BASE_SHA="${{ github.event.before }}"
|
||
fi
|
||
|
||
# Get changed files
|
||
CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRT $BASE_SHA HEAD | grep -E '\.(ts|js|html|css|scss)$' | grep -v -E '\.(spec\.ts|spec\.js|d\.ts)$' | grep -v -E '(environment\.ts|environment\.prod\.ts|polyfills\.ts|node_modules)' || true)
|
||
|
||
if [ -z "$CHANGED_FILES" ]; then
|
||
echo "✅ No relevant files changed"
|
||
exit 0
|
||
fi
|
||
|
||
echo "📋 Checking $(echo "$CHANGED_FILES" | wc -l) changed file(s)..."
|
||
echo "$CHANGED_FILES"
|
||
|
||
# Run header check on changed files
|
||
echo "$CHANGED_FILES" | xargs node scripts/check-file-headers.js
|
||
|
||
- name: Run production build
|
||
run: npm run build:prod
|
||
|
||
- name: Deploy to github pages
|
||
if: ${{ github.event_name == 'push' }}
|
||
uses: JamesIves/github-pages-deploy-action@v4
|
||
with:
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
BRANCH: gh-pages
|
||
FOLDER: dist/web-app
|
||
#without preserve it only builds if you have untracked files
|
||
PRESERVE: true
|
||
# github user name and email shows up in the logs,
|
||
# so it would be better to make it silent.
|
||
SILENT: true
|