Photo by Daniel McCullough on Unsplash
Introduction
This post takes place in a series aiming to show how to build an angular application from scratch.
We will see how to scaffold an enterprise-scale angular application with all the assets needed to easily develop and maintain it.
This post will show you how to setup a basic CI toolchain (test and lint your code) for your application on Gitlab.
Git Workflow
git checkout master
git pull
# Retrieve the last master version
git checkout -b develop
# Branch develop creation
Setup tests scripts
We will need to adapt our testing environment to work on the Gitlab CI environment.
Add the follwing lines to your package.json :
"scripts": {
    ...
    "ci:test": "ng test --browsers PhantomJS --watch=false",
    "ci:lint": "ng lint",
    ...
}
Add PhantomJs support :
npm install karma-phantomjs-launcher phantomjs core-js --save --save-exact
  
  
  Update karma.conf.js :
plugins: [
    ...,
    require('karma-phantomjs-launcher')
],
  
  
  Update polyfill.ts :
# Add core-js imports
import 'core-js/es/symbol';
import 'core-js/es/object';
import 'core-js/es/function';
import 'core-js/es/parse-int';
import 'core-js/es/parse-float';
import 'core-js/es/number';
import 'core-js/es/math';
import 'core-js/es/string';
import 'core-js/es/date';
import 'core-js/es/array';
import 'core-js/es/regexp';
import 'core-js/es/map';
import 'core-js/es/weak-map';
import 'core-js/es/set';
# Uncomment zone polyfills
(window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
(window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
(window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
(window as any).__Zone_enable_cross_context_check = true;
  
  
  Update your tsconfig.json :
{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "es2019",
      "dom",
      "esnext.asynciterable"
    ],
    "resolveJsonModule": true
  }
}
Write your CI configuration file
Create a file .gitlab-ci.yml with the following content :
image: node:latest
stages:
  - CodeQuality
test:
  stage: CodeQuality
  script: 
    - npm ci
    - npm run ci:test
lint:
  stage: CodeQuality
  script:
    - npm ci
    - npm run ci:lint
Each time someone commit on a branch, the CodeQuality stages above will be triggerred.
From the NPM documentation about
npm ci:
This command is similar tonpm install, except it’s meant to be used in automated environments such as test platforms, continuous integration, and deployment – or any situation where you want to make sure you’re doing a clean install of your dependencies. It can be significantly faster than a regular npm install by skipping certain user-oriented features. It is also more strict than a regular install, which can help catch errors or inconsistencies caused by the incrementally-installed local environments of most npm users.
Push your modifications
git add .gitlab-ci.yml package.json package-lock.json karma.conf.js src/polyfills.ts tsconfig.json
git commit -m "core(ci): Add gitlab CI file and scripts"
git push -u origin develop
Check your CI
For now, your CI will run
npm run ci:test
and
npm run ci:lint
You can now follow the state of your CI on Gitlab.
Go to CI/CD > Pipelines :

Click on the corresponding pipeline to show the stages details :

              


    
Top comments (0)