From 0d2a58319d6a99670fd82b30fb4ac1790aade26b Mon Sep 17 00:00:00 2001 From: tdeekens Date: Mon, 17 Mar 2025 15:39:24 +0100 Subject: [PATCH 1/2] refactor(ci): to not use circleci but only github --- .circleci/config.yml | 143 ------------------------------- .github/actions/ci/action.yml | 22 +++++ .github/workflows/quality.yml | 63 ++++++++++++++ .github/workflows/regression.yml | 41 +++++++++ .github/workflows/release.yml | 15 +--- docs/README.md | 7 +- docs/cli/csv-parser-orders.md | 6 +- docs/cli/csv-parser-price.md | 6 +- 8 files changed, 136 insertions(+), 167 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/actions/ci/action.yml create mode 100644 .github/workflows/quality.yml create mode 100644 .github/workflows/regression.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index d3baaeb68..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,143 +0,0 @@ -version: 2.1 - -aliases: - - &working_directory ~/nodejs - -executors: - node_18: - docker: - - image: cimg/node:18.18.0 - working_directory: *working_directory - node_20: - docker: - - image: cimg/node:20.9.0 - working_directory: *working_directory - - node_22: - docker: - - image: cimg/node:22.14.0 - working_directory: *working_directory - -commands: - pnpm_install: - description: Installs dependencies using PNPM - parameters: - pnpm_store_dir: - type: string - default: /home/circleci/.local/share/pnpm/store - pnpm_install_directory: - type: string - default: /home/circleci/bin - command: - type: string - default: pnpm install --frozen-lockfile - steps: - - restore_cache: - name: Restoring pnpm cache - keys: - # Delete and re-create a increased `CACHE_VERSION_PNPM` variable in CircleCI's project configuration. - # https://app.circleci.com/settings/project/github/commercetools/nodejs/environment-variables - - pnpm-cache-{{ .Environment.CACHE_VERSION_PNPM }}-{{ checksum "pnpm-lock.yaml" }} - - run: - name: Ensuring pnpm installation directory exists - command: mkdir -p << parameters.pnpm_install_directory >> - - run: - name: Exporting << parameters.pnpm_install_directory >> to PATH - command: echo 'export PATH=$PATH:<< parameters.pnpm_install_directory >>' >> $BASH_ENV - - run: - name: Installing pnpm via corepack - command: | - corepack enable --install-directory << parameters.pnpm_install_directory >> - corepack prepare --activate - - run: - name: Setting pnpm store - command: pnpm config set store-dir << parameters.pnpm_store_dir >> - - save_cache: - name: Saving pnpm cache - key: pnpm-cache-{{ .Environment.CACHE_VERSION_PNPM }}-{{ checksum "pnpm-lock.yaml" }} - paths: - - node_modules - - run: - name: Installing project dependencies - command: << parameters.command >> - -jobs: - install_test_node_18: - executor: node_18 - steps: - - checkout - - pnpm_install - - run: - name: Building libraries - command: pnpm build - - run: - name: Running linters - # Limiting the workers of Jest to 10 - # as the build otherwise dies due to resource restrictions. - command: pnpm lint --maxWorkers=10 - - run: - name: Running tests - # Limiting the workers of Jest to 10 - # as the build otherwise dies due to resource restrictions. - command: pnpm test:ci - - run: - name: Running test (with coverage report) - command: pnpm test:ci - - install_test_node_20: - executor: node_20 - steps: - - checkout - - pnpm_install - - run: - name: Building libraries - command: pnpm build - - run: - name: Running linters - # Limiting the workers of Jest to 10 - # as the build otherwise dies due to resource restrictions. - command: pnpm lint --maxWorkers=10 - - run: - name: Running tests (with coverage report) - # Limiting the workers of Jest to 10 - # as the build otherwise dies due to resource restrictions. - command: pnpm test:coverage:ci - - run: - name: Running integration tests - command: pnpm test:integration - - install_test_node_22: - executor: node_22 - steps: - - checkout - - pnpm_install - - run: - name: Building libraries - command: pnpm build - - run: - name: Running linters - # Limiting the workers of Jest to 10 - # as the build otherwise dies due to resource restrictions. - command: pnpm lint --maxWorkers=10 - - run: - name: Running tests (with coverage report) - # Limiting the workers of Jest to 10 - # as the build otherwise dies due to resource restrictions. - command: pnpm test:coverage:ci - - run: - name: Running integration tests - command: pnpm test:integration - -workflows: - build_and_test: - jobs: - - install_test_node_18: - context: org-global - - install_test_node_20: - context: org-global - requires: - - install_test_node_18 - - install_test_node_22: - context: org-global - requires: - - install_test_node_20 diff --git a/.github/actions/ci/action.yml b/.github/actions/ci/action.yml new file mode 100644 index 000000000..f866412d1 --- /dev/null +++ b/.github/actions/ci/action.yml @@ -0,0 +1,22 @@ +name: CI + +description: Shared action to install dependencies + +runs: + using: composite + + steps: + - name: Install pnpm + uses: pnpm/action-setup@v4.1.0 + with: + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + cache: "pnpm" + + - name: Install + run: pnpm install + shell: bash diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml new file mode 100644 index 000000000..0032dce1e --- /dev/null +++ b/.github/workflows/quality.yml @@ -0,0 +1,63 @@ +name: Quality + +on: + push: + branches: + - master + pull_request: + +jobs: + lint: + name: Linting + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup + uses: ./.github/actions/ci + + - name: Lint + run: pnpm lint + + type-checking: + name: Type checking + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup + uses: ./.github/actions/ci + + - name: TypeScript + run: pnpm typecheck:ts + + - name: Flow + run: pnpm typecheck:flow + + testing: + name: Testing + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup + uses: ./.github/actions/ci + + - name: Build + run: pnpm build + + - uses: oNaiPs/secrets-to-env-action@v1 + with: + secrets: ${{ toJSON(secrets) }} + + - name: Test (with coverage) + run: pnpm test:coverage:ci + + - name: Integration tests + run: pnpm test:integration diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml new file mode 100644 index 000000000..ff37f95de --- /dev/null +++ b/.github/workflows/regression.yml @@ -0,0 +1,41 @@ +name: Regression + +on: + workflow_run: + workflows: [Quality] + types: + - completed + +jobs: + testing: + name: Regression Testing + runs-on: ubuntu-latest + strategy: + matrix: + version: [18, 20] + fail-fast: true + max-parallel: 1 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup + uses: ./.github/actions/ci + + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.version }} + + - name: Build + run: pnpm build + + - uses: oNaiPs/secrets-to-env-action@v1 + with: + secrets: ${{ toJSON(secrets) }} + + - name: Test (with coverage) + run: pnpm test:coverage:ci + + - name: Integration tests + run: pnpm test:integration diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b9c7483b6..0570f1e97 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,19 +26,8 @@ jobs: # https://github.community/t/action-does-not-trigger-another-on-push-tag-action/17148/8 token: ${{ steps.generate_github_token.outputs.token }} - - name: Install pnpm - uses: pnpm/action-setup@v4.1.0 - with: - run_install: false - - - name: Setup Node (uses version in .nvmrc) - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: 'pnpm' - - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Setup + uses: ./.github/actions/ci - name: Creating .npmrc run: | diff --git a/docs/README.md b/docs/README.md index b10c51538..b8458aa6d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,15 +6,12 @@

- - Travis CI Status + + GitHub Actions Status Codecov - - Waffle.io Board -

The **commercetools nodejs** repo is managed as a [monorepo](https://github.com/lerna/lerna) and contains different npm packages. diff --git a/docs/cli/csv-parser-orders.md b/docs/cli/csv-parser-orders.md index 91aa44884..292bfbd1c 100644 --- a/docs/cli/csv-parser-orders.md +++ b/docs/cli/csv-parser-orders.md @@ -1,6 +1,6 @@ # CSV Parser Orders -[![Travis Build Status][travis-icon]][travis] +[![GitHub Actions Status][github-actions-icon]][github-actions] [![Codecov Coverage Status][codecov-icon]][codecov] [![David Dependencies Status][david-icon]][david] [![David devDependencies Status][david-dev-icon]][david-dev] @@ -468,8 +468,8 @@ More delivery examples can be seen [here](https://github.com/commercetools/nodej [commercetools]: https://commercetools.com/ [commercetools-icon]: https://cdn.rawgit.com/commercetools/press-kit/master/PNG/72DPI/CT%20logo%20horizontal%20RGB%2072dpi.png -[travis]: https://travis-ci.org/commercetools/csv-parser-orders -[travis-icon]: https://img.shields.io/travis/commercetools/csv-parser-orders/master.svg?style=flat-square +[github-actions]: https://github.com/commercetools/nodejs/actions/workflows/quality.yml +[github-actions-icon]: https://github.com/commercetools/nodejs/actions/workflows/quality.yml/badge.svg [codecov]: https://codecov.io/gh/commercetools/csv-parser-orders [codecov-icon]: https://img.shields.io/codecov/c/github/commercetools/csv-parser-orders.svg?style=flat-square [david]: https://david-dm.org/commercetools/csv-parser-orders diff --git a/docs/cli/csv-parser-price.md b/docs/cli/csv-parser-price.md index bc87b39b2..8526a89d5 100644 --- a/docs/cli/csv-parser-price.md +++ b/docs/cli/csv-parser-price.md @@ -1,6 +1,6 @@ # CSV Parser Price -[![Travis Build Status][travis-icon]][travis] +[![GitHub Actions Status][github-actions-icon]][github-actions] [![Codecov Coverage Status][codecov-icon]][codecov] [![David Dependencies Status][david-icon]][david] [![David devDependencies Status][david-dev-icon]][david-dev] @@ -181,8 +181,8 @@ JSON object returned from the conversion of the CSV file above [commercetools]: https://commercetools.com/ [commercetools-icon]: https://cdn.rawgit.com/commercetools/press-kit/master/PNG/72DPI/CT%20logo%20horizontal%20RGB%2072dpi.png -[travis]: https://travis-ci.org/commercetools/csv-parser-price -[travis-icon]: https://img.shields.io/travis/commercetools/csv-parser-price/master.svg?style=flat-square +[github-actions]: https://github.com/commercetools/nodejs/actions/workflows/quality.yml +[github-actions-icon]: https://github.com/commercetools/nodejs/actions/workflows/quality.yml/badge.svg [codecov]: https://codecov.io/gh/commercetools/csv-parser-price [codecov-icon]: https://img.shields.io/codecov/c/github/commercetools/csv-parser-price.svg?style=flat-square [david]: https://david-dm.org/commercetools/csv-parser-price From b70124ab8d884884fd3014972dbb38f42c3a08ab Mon Sep 17 00:00:00 2001 From: tdeekens Date: Mon, 17 Mar 2025 19:52:20 +0100 Subject: [PATCH 2/2] refactor: to have one regression job --- .github/workflows/quality.yml | 34 +++++++++++++++++++++++++- .github/workflows/regression.yml | 41 -------------------------------- 2 files changed, 33 insertions(+), 42 deletions(-) delete mode 100644 .github/workflows/regression.yml diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 0032dce1e..c7ce8ad00 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -7,7 +7,7 @@ on: pull_request: jobs: - lint: + linting: name: Linting runs-on: ubuntu-latest @@ -40,6 +40,7 @@ jobs: testing: name: Testing + needs: [linting, type-checking] runs-on: ubuntu-latest steps: @@ -61,3 +62,34 @@ jobs: - name: Integration tests run: pnpm test:integration + + regression-testing: + name: Regression Testing + needs: [testing] + runs-on: ubuntu-latest + strategy: + matrix: + version: [18, 20] + fail-fast: true + max-parallel: 1 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup + uses: ./.github/actions/ci + + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.version }} + + - name: Build + run: pnpm build + + - uses: oNaiPs/secrets-to-env-action@v1 + with: + secrets: ${{ toJSON(secrets) }} + + - name: Integration tests + run: pnpm test:integration diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml deleted file mode 100644 index ff37f95de..000000000 --- a/.github/workflows/regression.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Regression - -on: - workflow_run: - workflows: [Quality] - types: - - completed - -jobs: - testing: - name: Regression Testing - runs-on: ubuntu-latest - strategy: - matrix: - version: [18, 20] - fail-fast: true - max-parallel: 1 - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup - uses: ./.github/actions/ci - - - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.version }} - - - name: Build - run: pnpm build - - - uses: oNaiPs/secrets-to-env-action@v1 - with: - secrets: ${{ toJSON(secrets) }} - - - name: Test (with coverage) - run: pnpm test:coverage:ci - - - name: Integration tests - run: pnpm test:integration