callumalpass_tasknotes/.github/workflows/test.yml
2026-02-15 11:03:35 +11:00

156 lines
4.3 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Test Suite
on:
push:
branches: [ main, develop, v3-maintenance ]
pull_request:
branches: [ main, develop, v3-maintenance ]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install dependencies
run: npm ci --prefer-offline --no-audit
timeout-minutes: 5
- name: Check i18n manifest is up-to-date
run: |
echo "🔍 Checking if i18n manifest and state files are up-to-date..."
npm run i18n:sync
if [[ -n "$(git status --porcelain)" ]]; then
echo "❌ Error: i18n manifest or state files are out of date."
echo "📝 Files that need to be committed:"
git status --porcelain
echo ""
echo "🔧 Please run 'npm run i18n:sync' locally and commit the changes:"
echo " npm run i18n:sync"
echo " git add i18n.manifest.json i18n.state.json"
echo " git commit -m 'chore: update i18n manifest and state files'"
echo ""
echo "📊 Current diff:"
git diff --name-only
if git diff --quiet i18n.manifest.json; then
echo " No manifest changes"
else
echo "📄 Manifest changes:"
git diff i18n.manifest.json | head -20
fi
if git diff --quiet i18n.state.json; then
echo " No state changes"
else
echo "📄 State changes:"
git diff i18n.state.json | head -20
fi
exit 1
else
echo "✅ i18n files are up-to-date."
fi
timeout-minutes: 3
- name: Debug environment
run: |
echo "Node version: $(node --version)"
echo "NPM version: $(npm --version)"
echo "Timezone: $(date)"
echo "Jest version: $(npx jest --version)"
- name: Run docs quality checks
run: npm run docs:check
timeout-minutes: 3
- name: Run linter
run: npm run lint || echo "Linting completed with warnings"
timeout-minutes: 10
- name: Generate release notes import
run: node generate-release-notes-import.mjs
timeout-minutes: 1
- name: Run type check
run: npm run typecheck
timeout-minutes: 5
- name: Run unit tests with coverage
run: npm run test:ci -- --verbose
timeout-minutes: 15
- name: Run integration tests
run: npm run test:integration
timeout-minutes: 10
- name: Upload coverage reports
uses: codecov/codecov-action@v3
with:
file: ./coverage/lcov.info
fail_ci_if_error: false
- name: Performance benchmarks
run: npm run test:performance
timeout-minutes: 10
if: matrix.node-version == '20' # Only run on latest Node
- name: Archive test results
uses: actions/upload-artifact@v4
if: failure()
with:
name: test-results-${{ matrix.node-version }}
path: |
coverage/
test-results/
build-test:
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci --prefer-offline --no-audit
timeout-minutes: 5
- name: Build plugin
env:
GOOGLE_OAUTH_CLIENT_ID: ${{ secrets.GOOGLE_OAUTH_CLIENT_ID }}
MICROSOFT_OAUTH_CLIENT_ID: ${{ secrets.MICROSOFT_OAUTH_CLIENT_ID }}
run: |
cat <<EOF > .env
GOOGLE_OAUTH_CLIENT_ID=${GOOGLE_OAUTH_CLIENT_ID}
MICROSOFT_OAUTH_CLIENT_ID=${MICROSOFT_OAUTH_CLIENT_ID}
EOF
npm run build
timeout-minutes: 10
- name: Test built plugin
run: npm run test:build
timeout-minutes: 5
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: plugin-build
path: |
main.js
manifest.json
styles.css