homebridge-prometheus-exporter/.github/workflows/build.yml
Lars Strojny c4ce1531cc
Specify exact version for GH actions to avoid accidental breakage (#69)
To avoid accidental breakage when an action is implicitly upgraded,
let’s fixate the action versions and let dependabot do it’s thing.
Therefore when an action upgrade breaks the build it becomes visible in
the dependabot PR.
2022-12-18 21:17:18 +01:00

86 lines
2.5 KiB
YAML

name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- { node-version: 14.x, lint: true, tests: true }
- { node-version: 15.x, lint: false, tests: true }
- { node-version: 16.x, lint: true, tests: true }
- { node-version: 17.x, lint: true, tests: true }
- { node-version: 18.x, lint: true, tests: true }
- { node-version: 19.x, lint: true, tests: true }
name: nodejs ${{ matrix.node-version }} (${{ matrix.lint && 'lint → ' || '' }}${{ matrix.tests && 'test → ' || '' }}build)
steps:
- uses: actions/checkout@v3.2.0
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3.5.0
with:
node-version: ${{ matrix.node-version }}
- name: Cache node modules
id: cache-npm
uses: actions/cache@v3.0.11
env:
cache-name: cache-node-modules
with:
path: node_modules
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/package.json') }}
- name: Cache eslint
id: cache-eslint
uses: actions/cache@v3.0.11
env:
cache-name: cache-eslint
with:
path: .eslintcache
key: ${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/package.json') }}
- name: Cache TypeScript
id: cache-typescript
uses: actions/cache@v3.0.11
env:
cache-name: cache-typescript
with:
path: .tsbuildinfo
key: ${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/package.json') }}
- name: Cache prettier
id: cache-prettier
uses: actions/cache@v3.0.11
env:
cache-name: cache-prettier
with:
path: node_modules/.cache/prettier/.prettier-cache
key: ${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/package.json') }}
- name: Install dependencies
run: npm install
if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
- name: Lint the project
run: npm run lint
if: ${{ matrix.lint }}
- name: Run tests
run: npm test
if: ${{ matrix.tests }}
- name: Upload code coverage
uses: actions/upload-artifact@v3.1.1
with:
name: code-coverage
path: coverage/lcov.info
if: ${{ matrix.node-version == '18.x' }}
- name: Build the project
run: npm run build