Skip to content

Node CI

Node CI #1075

Workflow file for this run

name: Node CI
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
pull_request:
workflow_dispatch:
push:
branches: main
schedule:
- cron: "0 0 * * *"
env:
CI: true
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_TOKEN }}
COVERALLS_GIT_BRANCH: main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# - name: Setup kernel for react native, increase watchers
# run: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
# used to centralize the node version across workflows
# refs https://arinco.com.au/blog/github-actions-share-environment-variables-across-workflows
# refs https://github.com/marketplace/actions/set-environment-variables
- name: Set Environment Variables
uses: tw3lveparsecs/[email protected]
with:
envFilePath: ./envvars.for.actions
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- name: Attempt to restore the cache
uses: actions/cache@v3
id: cache
with:
path: |
./node_modules
~/.cache/Cypress
key: ${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ hashFiles('**/package-lock.json') }}
- name: install
if: steps.cache.outputs.cache-hit != 'true'
run: npm install --legacy-peer-deps
test:
runs-on: ubuntu-latest
needs: [build]
steps:
- uses: actions/checkout@v4
- name: Set Environment Variables
uses: tw3lveparsecs/[email protected]
with:
envFilePath: ./envvars.for.actions
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- name: Attempt to restore the cache
uses: actions/cache@v3
id: cache_restore
with:
fail-on-cache-miss: true
path: |
./node_modules
~/.cache/Cypress
key: ${{ hashFiles('**/package-lock.json') }}
- name: coverage
if: github.ref == 'refs/heads/main'
run: npm run coverage
- uses: actions/upload-artifact@v3
if: github.ref == 'refs/heads/main'
with:
name: jest-lcov
path: coverage/lcov.info
- name: coverage (no coveralls)
if: github.ref != 'refs/heads/main'
run: npm run coverage
acceptance:
runs-on: ubuntu-latest
needs: [build]
steps:
- uses: actions/checkout@v4
- name: Set Environment Variables
uses: tw3lveparsecs/[email protected]
with:
envFilePath: ./envvars.for.actions
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- name: Attempt to restore the cache
uses: actions/cache@v3
id: cache_restore
with:
fail-on-cache-miss: true
path: |
./node_modules
~/.cache/Cypress
key: ${{ hashFiles('**/package-lock.json') }}
- name: export display
run: |
/usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
echo ">>> Started xvfb"
- name: delete coverage folder
run: rm -rf coverage/
- name: lint
run: npm run lint
- name: build application
run: npm run build
- name: instrument application
run: |
npx nyc instrument src/ instrumented
cp -R instrumented/ src/
rm -rf instrumented
- name: Run cypress (acceptance tests)
uses: cypress-io/github-action@v6
env:
CYPRESS_INSTRUMENT_PRODUCTION: false
DISABLE_ESLINT_PLUGIN: true
CYPRESS_BASE_URL: 'http://localhost:3000'
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
with:
record: true
wait-on: 'http://localhost:3000'
start: npm run start-instrumented
browser: chrome
headed: true
install-command: npm install --legacy-peer-deps
- name: Generate lcov
run: npx nyc report --reporter=lcov
- uses: actions/upload-artifact@v3
if: github.ref == 'refs/heads/main'
with:
name: cypress-lcov
path: coverage/lcov.info
coverage:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
needs: [build, test, acceptance]
steps:
- uses: actions/checkout@v4
- name: Set Environment Variables
uses: tw3lveparsecs/[email protected]
with:
envFilePath: ./envvars.for.actions
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- name: Attempt to restore the cache
uses: actions/cache@v3
with:
fail-on-cache-miss: true
path: |
./node_modules
~/.cache/Cypress
key: ${{ hashFiles('**/package-lock.json') }}
- uses: actions/download-artifact@v3
with:
path: coverage/
pattern: "*-lcov"
merge-multiple: false
- run: |
mkdir merged_coverage
mv coverage/cypress-lcov/lcov.info merged_coverage/cypress.info
mv coverage/jest-lcov/lcov.info merged_coverage/jest.info
./node_modules/.bin/lcov-result-merger './merged_coverage/*' merged_coverage.info
npm run coveralls
- uses: actions/upload-artifact@v3
with:
name: merged-lcov
path: merged_coverage.info
delivery:
runs-on: ubuntu-latest
needs: [test, acceptance]
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Set Environment Variables
uses: tw3lveparsecs/[email protected]
with:
envFilePath: ./envvars.for.actions
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- name: Attempt to restore the cache
uses: actions/cache@v3
id: cache_restore
with:
fail-on-cache-miss: true
path: |
./node_modules
~/.cache/Cypress
key: ${{ hashFiles('**/package-lock.json') }}
- name: package
run: npm run package
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
- name: fetch snap file
id: snap_file
run: echo "::set-output name=name::$(ls dist/*.snap | sed "s/dist\///g" | sed "s/\.snap//g")"
- name: publish snap edge channel
uses: snapcore/action-publish@v1
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.STORE_LOGIN }}
with:
store_login: ${{ secrets.STORE_LOGIN }}
snap: "dist/${{ steps.snap_file.outputs.name }}.snap"
release: edge