name: CI
on: workflow_call
permissions: {}
jobs:
lint:
name: Lint source files
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v3
with:
cache: npm
node-version-file: '.node-version'
- name: Install Dependencies
run: npm ci --ignore-scripts
- name: Lint ESLint
run: npm run lint
- name: Check Types
run: npm run check
- name: Lint Prettier
run: npm run prettier:check
- name: Spellcheck
run: npm run check:spelling
- name: Lint GitHub Actions
uses: docker://rhysd/actionlint:latest
with:
args: -color
checkForCommonlyIgnoredFiles:
name: Check for commonly ignored files
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Check if commit contains files that should be ignored
run: |
git clone --depth 1 https://github.com/github/gitignore.git
rm gitignore/Global/ModelSim.gitignore
rm gitignore/Global/Images.gitignore
cat gitignore/Node.gitignore gitignore/Global/*.gitignore > all.gitignore
IGNORED_FILES=$(git ls-files --cached --ignored --exclude-from=all.gitignore)
if [[ "$IGNORED_FILES" != "" ]]; then
echo -e "::error::Please remove these files:\n$IGNORED_FILES" | sed -z 's/\n/%0A/g'
exit 1
fi
checkPackageLock:
name: Check health of package-lock.json file
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v3
with:
cache: npm
node-version-file: '.node-version'
- name: Install Dependencies
run: npm ci --ignore-scripts
- name: Check that package-lock.json doesn't have conflicts
run: npm ls --depth 999
- name: Run npm install
run: npm install --ignore-scripts --force --package-lock-only --engine-strict --strict-peer-deps
- name: Check that package-lock.json is in sync with package.json
run: git diff --exit-code package-lock.json
integrationTests:
name: Run integration tests
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.node-version'
- name: Install Dependencies
run: npm ci --ignore-scripts
- name: Run Integration Tests
run: npm run check:integrations
fuzz:
name: Run fuzzing tests
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v3
with:
cache: npm
node-version-file: '.node-version'
- name: Install Dependencies
run: npm ci --ignore-scripts
- name: Run Tests
run: npm run fuzzonly
test:
name: Run tests on Node v${{ matrix.node_version_to_setup }}
runs-on: ubuntu-latest
strategy:
matrix:
node_version_to_setup: [16, 18, 19]
permissions:
contents: read
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Setup Node.js v${{ matrix.node_version_to_setup }}
uses: actions/setup-node@v3
with:
cache: npm
node-version: ${{ matrix.node_version_to_setup }}
- name: Install Dependencies
run: npm ci --ignore-scripts
- name: Run Tests with coverage
run: npm run testonly:cover
codeql:
name: Run CodeQL security scan
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: 'javascript, typescript'
- name: Perform CodeQL analysis
uses: github/codeql-action/analyze@v2
build-npm-dist:
name: Build 'npmDist' artifact
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v3
with:
cache: npm
node-version-file: '.node-version'
- name: Install Dependencies
run: npm ci --ignore-scripts
- name: Build NPM package
run: npm run build:npm
- name: Upload npmDist package
uses: actions/upload-artifact@v3
with:
name: npmDist
path: ./npmDist
build-deno-dist:
name: Build 'denoDist' artifact
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v3
with:
cache: npm
node-version-file: '.node-version'
- name: Install Dependencies
run: npm ci --ignore-scripts
- name: Build Deno package
run: npm run build:deno
- name: Upload denoDist package
uses: actions/upload-artifact@v3
with:
name: denoDist
path: ./denoDist
build-website-dist:
name: Build website
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v3
with:
cache: npm
node-version-file: '.node-version'
- name: Install Dependencies
run: npm ci --ignore-scripts
- name: Build Docs
run: npm run build:website
- name: Upload denoDist package
uses: actions/upload-artifact@v3
with:
name: websiteDist
path: ./websiteDist