From d556d2cb5caa7555ca8cc82a6de736117983ffd5 Mon Sep 17 00:00:00 2001 From: Stanislav Mishchyshyn Date: Mon, 21 Oct 2024 18:36:29 +0300 Subject: [PATCH] ci: new pipeline --- .github/workflows/ci.yml | 117 +++++++++++++++++++++++---------------- package-lock.json | 12 ++-- package.json | 5 +- release.config.js | 38 ++++++++++++- 4 files changed, 116 insertions(+), 56 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 693a844..26de5fa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,54 +1,75 @@ name: CI on: - push: - branches: - - master - tags-ignore: - - "**" - pull_request: - branches: - - "**" + push: + branches: + - master + - feature/publish-package + tags-ignore: + - '**' + pull_request: + branches: + - '**' jobs: - build: - name: Build - runs-on: ubuntu-latest + build: + name: Build + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [16.x, 18.x, 20.x] + steps: + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + - run: npm ci + - if: github.event_name == 'pull_request' + name: Lint commit messages + run: npx commitlint --from $GITHUB_BASE_REF --to $GITHUB_HEAD_REF + - run: npm run format:check + - run: npm run lint + - run: npm run build + - run: npm run coverage + - if: matrix.node-version == '20.x' + uses: actions/upload-artifact@v4 + with: + name: Code coverage + path: coverage/ + - if: matrix.node-version == '20.x' + run: npm run docs + - if: matrix.node-version == '20.x' + uses: actions/upload-artifact@v4 + with: + name: Documentation + path: docs/ - strategy: - matrix: - node-version: [16.x, 18.x, 20.x] - - steps: - - uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: 'npm' - - run: npm ci - - if: github.event_name == 'pull_request' - name: Lint commit messages - run: npx commitlint --from $GITHUB_BASE_REF --to $GITHUB_HEAD_REF - - run: npm run format:check - - run: npm run lint - - run: npm run build - - run: npm run coverage - - if: matrix.node-version == '20.x' - uses: actions/upload-artifact@v4 - with: - name: Code coverage - path: coverage/ - - if: matrix.node-version == '20.x' - run: npm run docs - - if: matrix.node-version == '20.x' - uses: actions/upload-artifact@v4 - with: - name: Documentation - path: docs/ - - name: Deploy Docs - if: github.ref == 'refs/heads/master' && matrix.node-version == '20.x' - uses: peaceiris/actions-gh-pages@v4 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs + publish: + name: 'Publish' + needs: build + runs-on: ubuntu-latest + environment: npm_publish + # if: github.ref == 'refs/heads/master' + steps: + - uses: actions/download-artifact@v4 + with: + name: Documentation + path: docs/ + - name: Deploy Docs + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20.x + cache: 'npm' + - run: npm ci + - name: Publish new version + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: npx semantic-release diff --git a/package-lock.json b/package-lock.json index d388fba..50e574c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ilc-sdk", - "version": "5.2.1", + "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ilc-sdk", - "version": "5.2.1", + "version": "0.0.0", "license": "Apache-2.0", "dependencies": { "@types/url-join": "^4.0.2", @@ -2912,15 +2912,15 @@ } }, "node_modules/conventional-changelog-conventionalcommits": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-8.0.0.tgz", + "integrity": "sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA==", "dev": true, "dependencies": { "compare-func": "^2.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/conventional-changelog-writer": { diff --git a/package.json b/package.json index 8faa367..6e442e1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ilc-sdk", - "version": "5.2.1", + "version": "0.0.0", "description": "SDK for app development with Isomorphic Layout Composer", "main": "dist/server/index.js", "types": "dist/server/index.d.ts", @@ -76,6 +76,9 @@ "webpack-inject-plugin": "^1.5.5", "wrapper-webpack-plugin": "^2.2.2" }, + "overrides": { + "conventional-changelog-conventionalcommits": ">= 8.0.0" + }, "engines": { "npm": ">=7" } diff --git a/release.config.js b/release.config.js index e1956c7..23f0721 100644 --- a/release.config.js +++ b/release.config.js @@ -1,6 +1,42 @@ +const preset = 'conventionalcommits'; + +/** + * semantic-release plugin to analyze commits with conventional-changelog + * https://github.com/semantic-release/commit-analyzer + */ +const commitAnalyzerConfig = { + preset, +}; + +/** + * semantic-release plugin to generate changelog content with conventional-changelog + * https://github.com/semantic-release/release-notes-generator + */ +const releaseNotesGeneratorConfig = { + preset, +}; + +/** + * semantic-release plugin to publish a GitHub release and comment on released Pull Requests/Issues. + * https://github.com/semantic-release/github + */ +const githubConfig = { + successComment: false, + failComment: false, + labels: false, + releasedLabels: false, +}; + /** * @type {import('semantic-release').GlobalConfig} */ module.exports = { - branches: ['master', 'feature/publish-package'], + branches: ['master'], + tagFormat: 'v${version}', + plugins: [ + ['@semantic-release/commit-analyzer', commitAnalyzerConfig], + ['@semantic-release/release-notes-generator', releaseNotesGeneratorConfig], + ['@semantic-release/npm'], + ['@semantic-release/github', githubConfig], + ], };