mirror of
https://github.com/callumalpass/tasknotes.git
synced 2026-07-22 12:50:26 +00:00
156 lines
4.3 KiB
YAML
156 lines
4.3 KiB
YAML
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
|