Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
244 changes: 8 additions & 236 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,238 +1,10 @@
name: CI
on: workflow_call
jobs:
lint:
name: Lint source files
runs-on: ubuntu-latest
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
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
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

# Disabled due to https://github.com/milesj/docusaurus-plugin-typedoc-api/pull/19
# - 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
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'
# We install bunch of packages during integration tests without locking them
# so we skip cache action to not pollute cache for other jobs.

- name: Install Dependencies
run: npm ci --ignore-scripts

- name: Run Integration Tests
run: npm run check:integrations
name: Continuous Integration

fuzz:
name: Run fuzzing tests
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
persist-credentials: false
on:
pull_request:
types: [opened, synchronize]

- 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: [14, 16, 18]
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

build-npm-dist:
name: Build 'npmDist' artifact
runs-on: ubuntu-latest
needs: [test, fuzz, lint, integrationTests]
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
needs: [test, fuzz, lint, integrationTests]
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
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
jobs:
pr-actions:
uses: classapp/cicada/.github/workflows/pr-patterns.yml@main
secrets: inherit