package-controller

1.2.0 • Public • Published

Package Controller

Upgrade your NPM package dependencies automatically!

NOTE: Currently only compatible with gitlab

Quick Start

Install

npm i package-controller --save-dev

Add to your package.json

 "packageController": {
    "only": [
      "MY PACKAGE NAME"
    ],
    "exclude": [],
    "skipCi": false
  }

Options

  • Only

    Specify packages you want to upgrade

  • Exclude

    Exclude packages you don't want to upgrade

  • skipCi

    Disabled as default, skips builds in Merge Requests

GitLab Configuration

Requirements

  1. Create a Project Access Token
  2. Create a CI/CD Variable
  3. Configure a Repository
  4. Schedule pipeline jobs

1. Create a Project Access Token

In your GitLab project go to Settings -> Access Tokens

Now create a Project Access Token with the following information.

Name: Package-Controller-AccessToken

Scopes:

  • API
  • read_repository
  • write_repository

and don't forget to copy the token to a safe place (you will need it for the next step).

2. Create a CI/CD Variable

In your GitLab project go to Settings -> CI/CD

Expand the Variables section and click Add Variable

Create the variable with the following information:

Key: Package_Controller_AccessToken

Value: { Use the Package-Controller-AccessToken VALUE }

Flags: check Protect variable and Mask variable

Click Add Variable

3. Configure a Repository

Add to your .gitlab-ci.yml file the following code:

package-controller:
   stage: maintenance
   cache: []
   image:
      name: brunomartinspro/node-powershell:latest
      entrypoint: [""]
   script:
    - npx package-controller 
   only:
    - schedules

If you want to create also an image for your organization like brunomartinspro/node-powershell:latest

FROM mcr.microsoft.com/powershell:7.1.5-debian-buster-slim

RUN apt-get update \
 && apt-get upgrade -y \
 && apt-get install nodejs -y \
 && apt-get install npm -y \
 && apt-get install curl -y

RUN apt install git-all -y
 
RUN npm install -g n
RUN n 14.18.1

run the commands:

docker build -t registry.gitlab.com/MY_ORGANIZATION/tools/package-controller-standalone .
docker push registry.gitlab.com/MY_ORGANIZATION/tools/package-controller-standalone

and update the image name variable with:

name: registry.gitlab.com/MY_ORGANIZATION/tools/package-controller-standalone:latest

If you are using private repositories this is probably the best approach since you can add to your script the configurations for private repositories, for example:

# Set URL for your scoped packages.
# For example package with name `@foo/bar` will use this URL for download
npm config set @foo:registry https://gitlab.example.com/api/v4/packages/npm/

# Add the token for the scoped packages URL. This will allow you to download
# `@foo/` packages from private projects.
npm config set -- '//gitlab.example.com/api/v4/packages/npm/:_authToken' "<your_token>"

NOTE: generally you can replace "<your_token>" with "${CI_JOB_TOKEN}"

as described in Authenticate with a personal access token or deploy token

To ignore other jobs from being executed add a rule for each job:

except:
  - schedules

When you want to ignore other jobs on a specific branch as a manual trigger

when: manual
only:
  - master
except:
  - schedules

You may have to include a maintenance stage

stages:
  - maintenance

Also sometimes the pipeline may run in detached mode, this means it won't be building a branch but the merge request itself.

You may want to add validations for these cases like:

myJob:
  only:
    - merge_requests

4. Schedule pipeline jobs

In your GitLab project go to CI/CD -> Schedules

Click New schedule and set up the schedule to your preferences.

If you don't have any add preferences:

Description: Package ControllerInterval

Pattern: Custom and set to 0 18 * * 4 (Every Thursday at 6 PM every week)

Cron Timezone: UTC

Target Branch: master

Click "Save pipeline schedule".

That's it, everything should work now!

Package Sidebar

Install

npm i package-controller

Weekly Downloads

241

Version

1.2.0

License

MIT

Unpacked Size

17.4 kB

Total Files

11

Last publish

Collaborators

  • brunomartinspro