DEV Community

ILshat Khamitov
ILshat Khamitov

Posted on

Publish all the libraries in Telegram bot on NestJS to the npm registry

Links

https://github.com/EndyKaufman/kaufman-bot - source code of bot

https://telegram.me/DevelopKaufmanBot - current bot in telegram

Description of work

In this post, I publish all the libraries in the npm registry.

And I will show how to update the libraries to prepare them for publication, I will write the steps for only one of the libraries, the steps for the others are the same.

Change names of libraries

Because npm register only works with two levels in the name path, we have to update all names for it.

Replace in all libarries

npx -y replace-in-files-cli --string=@kaufman-bot/core/server --replacement=@kaufman-bot/core './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/bot-in-groups/server --replacement=@kaufman-bot/bot-in-groups-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/currency-converter/server --replacement=@kaufman-bot/currency-converter-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/debug-messages/server --replacement=@kaufman-bot/debug-messages-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/dialogflow/server --replacement=@kaufman-bot/dialogflow-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/facts-generator/server --replacement=@kaufman-bot/facts-generator-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/first-meeting/server --replacement=@kaufman-bot/first-meeting-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/html-scraper/server --replacement=@kaufman-bot/html-scraper-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/jokes-generator/server --replacement=@kaufman-bot/jokes-generator-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/language-swither/server --replacement=@kaufman-bot/language-swither-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/prisma/server --replacement=@kaufman-bot/prisma-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/quotes-generator/server --replacement=@kaufman-bot/quotes-generator-server './libs/**'

npx -y replace-in-files-cli --string=@kaufman-bot/short-commands/server --replacement=@kaufman-bot/short-commands-server './libs/**'

Replace in all applications

npx -y replace-in-files-cli --string=@kaufman-bot/core/server --replacement=@kaufman-bot/core './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/bot-in-groups/server --replacement=@kaufman-bot/bot-in-groups-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/currency-converter/server --replacement=@kaufman-bot/currency-converter-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/debug-messages/server --replacement=@kaufman-bot/debug-messages-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/dialogflow/server --replacement=@kaufman-bot/dialogflow-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/facts-generator/server --replacement=@kaufman-bot/facts-generator-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/first-meeting/server --replacement=@kaufman-bot/first-meeting-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/html-scraper/server --replacement=@kaufman-bot/html-scraper-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/jokes-generator/server --replacement=@kaufman-bot/jokes-generator-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/language-swither/server --replacement=@kaufman-bot/language-swither-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/prisma/server --replacement=@kaufman-bot/prisma-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/quotes-generator/server --replacement=@kaufman-bot/quotes-generator-server './apps/**'

npx -y replace-in-files-cli --string=@kaufman-bot/short-commands/server --replacement=@kaufman-bot/short-commands-server './apps/**'

Replace in tsc config

npx -y replace-in-files-cli --string=@kaufman-bot/core/server --replacement=@kaufman-bot/core './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/bot-in-groups/server --replacement=@kaufman-bot/bot-in-groups-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/currency-converter/server --replacement=@kaufman-bot/currency-converter-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/debug-messages/server --replacement=@kaufman-bot/debug-messages-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/dialogflow/server --replacement=@kaufman-bot/dialogflow-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/facts-generator/server --replacement=@kaufman-bot/facts-generator-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/first-meeting/server --replacement=@kaufman-bot/first-meeting-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/html-scraper/server --replacement=@kaufman-bot/html-scraper-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/jokes-generator/server --replacement=@kaufman-bot/jokes-generator-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/language-swither/server --replacement=@kaufman-bot/language-swither-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/prisma/server --replacement=@kaufman-bot/prisma-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/quotes-generator/server --replacement=@kaufman-bot/quotes-generator-server './tsconfig.base.json'

npx -y replace-in-files-cli --string=@kaufman-bot/short-commands/server --replacement=@kaufman-bot/short-commands-server './tsconfig.base.json'

Update source codes and all configs

Update project json

Add build section
libs/core/server/project.json

{ "root": "libs/core/server", "sourceRoot": "libs/core/server/src", "projectType": "library", "targets": { "build": { "executor": "@nrwl/node:package", "outputs": ["{options.outputPath}"], "options": { "outputPath": "dist/libs/core/server", "tsConfig": "libs/core/server/tsconfig.lib.json", "packageJson": "libs/core/server/package.json", "main": "libs/core/server/src/index.ts", "assets": ["libs/core/server/*.md"], "updateBuildableProjectDepsInPackageJson": false, "deleteOutputPath": true } }, "lint": { "executor": "@nrwl/linter:eslint", "outputs": ["{options.outputFile}"], "options": { "lintFilePatterns": ["libs/core/server/\*\*/*.ts"] } }, "test": { "executor": "@nrwl/jest:jest", "outputs": ["coverage/libs/core/server"], "options": { "jestConfig": "libs/core/server/jest.config.js", "passWithNoTests": true } } }, "tags": [] } 
Enter fullscreen mode Exit fullscreen mode

Add build section

Update package.json

You should collect all used imports and add them to the dependencies section.

libs/core/server/package.json

{ "name": "@kaufman-bot/core-server", "description": "Core commands and tools", "license": "MIT", "author": "EndyKaufman <admin@site15.ru>", "keywords": [ "kaufman-bot", "nx", "nests", "telegram", "core" ], "bugs": { "url": "https://github.com/EndyKaufman/kaufman-bot/issues" }, "homepage": "https://github.com/EndyKaufman/kaufman-bot", "repository": { "type": "git", "url": "git+https://github.com/EndyKaufman/kaufman-bot.git" }, "maintainers": [ { "name": "EndyKaufman", "email": "admin@site15.ru" } ], "readme": "README.md", "i18n": [ { "scope": "core-server", "path": "src/i18n", "strategy": "join" }, { "scope": "core-server-getText", "path": "src/i18n/getText", "strategy": "join" } ], "version": "2.1.0", "peerDependencies": { "@nestjs/common": "^8.0.0", "nestjs-custom-injector": "^1.0.1", "nestjs-translates": "^1.0.3", "class-validator-multi-lang": "^0.130.201", "micromatch": "^4.0.5", "mustache": "^4.2.0", "telegraf": "^4.7.0" } } 
Enter fullscreen mode Exit fullscreen mode

You must apply these changes to all libraries.

Update root files

Update package.json

package.json

... "scripts": { ... "publish:core": "npm publish ./dist/libs/core/server", "publish:bot-in-groups": "npm publish ./dist/libs/bot-in-groups/server", "publish:currency-converter": "npm publish ./dist/libs/currency-converter/server", "publish:debug-messages": "npm publish ./dist/libs/debug-messages/server", "publish:dialogflow": "npm publish ./dist/libs/dialogflow/server", "publish:facts-generator": "npm publish ./dist/libs/facts-generator/server", "publish:first-meeting": "npm publish ./dist/libs/first-meeting/server", "publish:html-scraper": "npm publish ./dist/libs/html-scraper/server", "publish:jokes-generator": "npm publish ./dist/libs/jokes-generator/server", "publish:language-swither": "npm publish ./dist/libs/language-swither/server", "publish:quotes-generator": "npm publish ./dist/libs/quotes-generator/server", "publish:short-commands": "npm publish ./dist/libs/short-commands/server", "publish": "npm run publish:core && npm run publish:bot-in-groups && npm run publish:currency-converter && npm run publish:debug-messages && npm run publish:dialogflow && npm run publish:facts-generator && npm run publish:first-meeting && npm run publish:html-scraper && npm run publish:jokes-generator && npm run publish:language-swither && npm run publish:quotes-generator && npm run publish:short-commands" }, ... 
Enter fullscreen mode Exit fullscreen mode

Update publish config

.github/workflows/publish.yml

name: Publish on: push: tags: - v* jobs: publish: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Setup Node.js 16.x to publish to npmjs.org uses: actions/setup-node@v1 with: node-version: '16.x' registry-url: 'https://registry.npmjs.org' - name: Install Packages run: npm i --force - name: Build run: npm run build - name: Generate Release Body run: npx extract-changelog-release > RELEASE_BODY.md - name: Publish to NPM run: npm run publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Create GitHub Release uses: ncipollo/release-action@v1 with: bodyFile: 'RELEASE_BODY.md' token: ${{ secrets.GITHUB_TOKEN }} 
Enter fullscreen mode Exit fullscreen mode

Add npm token to github actions environments

Create token in npm

Navigate to https://www.npmjs.com/settings//tokens

Click to create token
Click to create token

Click to generate
Click to generate

After that you see generated token
After that you see generated token

Append token to github envs

Go to https://github.com///settings/secrets/actions

Create common environment variable
Create common environment variable

Check npm libraries

Go to https://www.npmjs.com/package/@kaufman-bot/core-server
Check npm libraries

In the next post, I will add schematics for create application from command line...

Top comments (0)