Commit d1ab6f83 authored by Mathis Goichon's avatar Mathis Goichon
Browse files

feat: multiple node manager support (npm and yarn)

parent 8125cfa8
Loading
Loading
Loading
Loading
+56 −13
Original line number Diff line number Diff line
@@ -48,12 +48,12 @@ variables:
  # Audit
  NODE_AUDIT_LEVEL: "low"
  NODE_AUDIT_ARGS: "--audit-level=$NODE_AUDIT_LEVEL"
  NODE_AUDIT_JSON_PATH: "reports/npm-audit-report.json"
  NODE_AUDIT_JSON_PATH: "reports/audit-report.json"

  # Outdated
  NODE_OUTDATED_ARGS: "--long"
  NODE_OUTDATED_SILENT: "true"
  NODE_OUTDATED_JSON_PATH: "reports/npm-outdated-report.json"
  NODE_OUTDATED_JSON_PATH: "reports/outdated-report.json"

  # default production ref name (pattern)
  PROD_REF: '/^(master|main)$/'
@@ -95,9 +95,9 @@ stages:
    if [[ -n "$SONAR_URL" ]]
    then
      mkdir -p reports
      # generate eslint report in json for SONARqube
      # generate eslint report in json for SonarQube
      # shellcheck disable=SC2086
      npm $NODE_LINT_ARGS -- --format=json --output-file=$NODE_LINT_REPORT_PATH
      $NODE_MANAGER $NODE_LINT_ARGS -- --format=json --output-file=$NODE_LINT_REPORT_PATH
    fi
  }

@@ -229,6 +229,38 @@ stages:
    log_info "... done"
  }
  
  function guess_node_manager_system() {
    case "${NODE_MANAGER:-auto}" in
    auto)
      ;;
    npm)
      log_info "--- Build system explictly declared: npm"
      return
      ;;
    yarn)
      log_info "--- Build system explictly declared: yarn"
      return
      ;;
    *)
      log_warn "--- Unknown declared node manager system: \\e[33;1m${NODE_MANAGER}\\e[0m: please read template doc"
      ;;
    esac

    if [[ -f "package-lock.json" ]]
    then
      log_info "--- Build system auto-detected: npm"
      export NODE_MANAGER="npm"
    elif [[ -f "yarn.lock" ]]
    then
      log_info "--- Build system auto-detected: yarn"
      export NODE_MANAGER="yarn"
    else
      log_error "--- Node manager system auto-detect failed: please read template doc"
      exit 1
    fi
  }


  unscope_variables

  # ENDSCRIPT
@@ -243,22 +275,31 @@ stages:
  cache:
    key: "$CI_COMMIT_REF_SLUG-node"
    paths:
      - $NODE_PROJECT_DIR/.npm/
      - $NODE_PROJECT_DIR/.$NODE_MANAGER/
  before_script:
    - *node-scripts
    - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}"
    - guess_node_manager_system
    - cd ${NODE_PROJECT_DIR}
    # NPM_CONFIG_REGISTRY is not supported by old npm versions: force with cli
    - if [[ "$NPM_CONFIG_REGISTRY" ]]; then npm config set registry $NPM_CONFIG_REGISTRY; fi
    - npm ci --cache .npm --prefer-offline
    - if [[ "$CONFIG_REGISTRY" ]]; then $NODE_MANAGER config set registry $CONFIG_REGISTRY; fi
    - |
      case "$NODE_MANAGER" in
      npm)
        npm ci --cache .npm --prefer-offline
        ;;
      yarn)
        yarn install --immutable --immutable-cache --check-cache --cache-folder .yarn
      ;;
      esac


node-build:
  extends: .node-base
  stage: build
  script:
    # launch unit test and code coverage
    - npm $NODE_TEST_ARGS
    - if [[ "$NODE_BUILD_DISABLED" != "true" ]]; then npm $NODE_BUILD_ARGS; fi
    - $NODE_MANAGER $NODE_TEST_ARGS
    - if [[ "$NODE_BUILD_DISABLED" != "true" ]]; then $NODE_MANAGER $NODE_BUILD_ARGS; fi
  coverage: '/^All files\s*\|\s*(\d+(?:\.\d+)?)/'
  artifacts:
    reports:
@@ -277,7 +318,7 @@ node-lint:
    # generate lint report for sonar
    - sonar_lint_report
    # display lint result for console
    - npm $NODE_LINT_ARGS
    - $NODE_MANAGER $NODE_LINT_ARGS
  artifacts:
    when: always # store artifact even if test Failed
    name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG"
@@ -303,7 +344,8 @@ node-audit:
  stage: test
  script:
    - mkdir -p reports
    - npm audit --json $NODE_AUDIT_ARGS | tee $NODE_AUDIT_JSON_PATH
    - $NODE_MANAGER audit --json $NODE_AUDIT_ARGS > $NODE_AUDIT_JSON_PATH
    - $NODE_MANAGER audit $NODE_AUDIT_ARGS
  artifacts:
    name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG"
    expire_in: 1 day
@@ -327,7 +369,8 @@ node-outdated:
  script:
    - set +e
    - mkdir -p reports
    - npm outdated --json $NODE_OUTDATED_ARGS | tee $NODE_OUTDATED_JSON_PATH || EXIT_CODE=$?
    - $NODE_MANAGER outdated --json $NODE_OUTDATED_ARGS > $NODE_OUTDATED_JSON_PATH
    - $NODE_MANAGER outdated $NODE_OUTDATED_ARGS || EXIT_CODE=$?
    - if [[ $NODE_OUTDATED_SILENT == "true" ]] && [[ $EXIT_CODE == 1 ]]; then exit 0; fi
  artifacts:
    name: "$CI_JOB_NAME artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG"