Skip to content

Add runtime assertion that scoring category weights sum to 1.0 #13

Add runtime assertion that scoring category weights sum to 1.0

Add runtime assertion that scoring category weights sum to 1.0 #13

Workflow file for this run

name: CI/CD
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20, 22]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install dependencies
run: npm ci --legacy-peer-deps
- name: Run linter
run: npm run lint
- name: Build project
run: npm run build
- name: Run tests
run: npm run test:run
- name: Test CLI functionality
run: |
chmod +x ./dist/index.js
# Test basic CLI functionality
./dist/index.js tests/fixtures/perfect-skill --json > test-output.json
if [ ! -s test-output.json ]; then
echo "CLI test failed - no output generated"
exit 1
fi
# Validate JSON output
node -e "JSON.parse(require('fs').readFileSync('test-output.json', 'utf8'))"
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Install dependencies
run: npm ci --legacy-peer-deps
- name: Run ESLint
run: npm run lint
- name: Check TypeScript
run: npx tsc --noEmit
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Install dependencies
run: npm ci --legacy-peer-deps
- name: Build project
run: npm run build
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: dist/
integration-test:
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Install dependencies
run: npm ci --legacy-peer-deps
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-artifacts
path: dist/
- name: Make CLI executable
run: chmod +x dist/index.js
- name: Test against test fixtures
run: |
# Test perfect skill
echo "Testing perfect skill..."
./dist/index.js tests/fixtures/perfect-skill
# Test terrible skill
echo "Testing terrible skill..."
./dist/index.js tests/fixtures/terrible-skill
# Test output formats
echo "Testing JSON output..."
./dist/index.js tests/fixtures/perfect-skill --json > perfect.json
node -e "const data = JSON.parse(require('fs').readFileSync('perfect.json', 'utf8')); console.log('Score:', data.overallScore.percentage + '%')"
echo "Testing Markdown output..."
./dist/index.js tests/fixtures/perfect-skill --markdown > perfect.md
if ! grep -q "SkillScore Evaluation Report" perfect.md; then
echo "Markdown output test failed"
exit 1
fi
- name: Test GitHub URL detection (dry run)
run: |
# Test GitHub URL parsing without actually cloning
node -e "
const { SkillScoreCli } = require('./dist/cli.js');
const cli = new SkillScoreCli();
console.log('Testing GitHub URL detection...');
const isGitHub1 = cli.isGitHubUrl('https://github.com/user/repo');
const isGitHub2 = cli.isGitHubUrl('user/repo');
const isNotGitHub = cli.isGitHubUrl('./local/path');
if (!isGitHub1 || !isGitHub2 || isNotGitHub) {
console.error('GitHub URL detection failed');
process.exit(1);
}
console.log('GitHub URL detection working correctly');
" || echo "Skipping GitHub URL test due to module import issues"
security:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Install dependencies
run: npm ci --legacy-peer-deps
- name: Run security audit
run: npm audit --audit-level=high
- name: Check for known vulnerabilities
run: |
npm audit --audit-level=high || true
echo "Security check complete"
publish-check:
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs: [test, lint, build, integration-test]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Install dependencies
run: npm ci --legacy-peer-deps
- name: Build project
run: npm run build
- name: Check package can be built for publishing
run: npm pack
- name: Validate package contents
run: |
tar -tzf skillscore-*.tgz | grep -E "(package\.json|dist/)" || {
echo "Package missing required files"
exit 1
}
echo "Package validation successful"