From 1585596f7e2b962a29bb051cfed2bcfc9c454d0b Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Fri, 29 Jul 2022 19:35:52 +0200 Subject: [PATCH 1/7] chore: broke up pr workflow & measure package size --- .github/workflows/measure-packages-size.yml | 26 +++++++ .github/workflows/pr_lint_and_test.yml | 84 ++++++++------------- 2 files changed, 57 insertions(+), 53 deletions(-) create mode 100644 .github/workflows/measure-packages-size.yml diff --git a/.github/workflows/measure-packages-size.yml b/.github/workflows/measure-packages-size.yml new file mode 100644 index 0000000000..bce5872f04 --- /dev/null +++ b/.github/workflows/measure-packages-size.yml @@ -0,0 +1,26 @@ +name: Measure packages size + +on: + workflow_dispatch: + inputs: + prNumber: + description: "PR Number" + required: true + +jobs: + measure-utils-sizes: + runs-on: ubuntu-latest + env: + NODE_ENV: dev + PR_NUMBER: ${{ inputs.prNumber }} + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + - name: Packages size report + uses: flochaz/pkg-size-action@v1.2.15 + with: + build-command: mkdir dist && npm run package -w packages/logger -w packages/tracer -w packages/metrics && npm run package-bundle -w packages/logger -w packages/tracer -w packages/metrics && bash -c "mv ./packages/*/dist/* dist/" && ls dist + dist-directory: /dist + pr-number: ${{ inputs.prNumber }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pr_lint_and_test.yml b/.github/workflows/pr_lint_and_test.yml index 67458725a4..2e5e4b7cf9 100644 --- a/.github/workflows/pr_lint_and_test.yml +++ b/.github/workflows/pr_lint_and_test.yml @@ -1,9 +1,10 @@ -name: pr-lint-and-test +name: On PR code update + on: pull_request: types: [opened, synchronize] jobs: - on_push: + run-unit-tests-on-utils: runs-on: ubuntu-latest env: NODE_ENV: dev @@ -12,63 +13,40 @@ jobs: version: [12, 14, 16] fail-fast: false steps: - - uses: actions/checkout@v3 - - name: "Use NodeJS" + - name: Checkout code + uses: actions/checkout@v3 + - name: Setup NodeJS uses: actions/setup-node@v3 with: node-version: ${{ matrix.version }} - - name: Install npm@8.x + - name: Setup npm run: npm i -g npm@next-8 - - name: "Setup npm" - run: | - npm set "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" - - name: Install monorepo packages - # This installs all the dependencies of ./packages/* + - name: Install dependencies # See https://github.com/npm/cli/issues/4475 to see why --foreground-scripts run: npm ci --foreground-scripts - - name: Install CDK example packages - # Since we are not managing the CDK examples with npm workspaces we install - # the dependencies in a separate step - working-directory: ./examples/cdk - run: npm ci - - name: "Setup SAM" - # We use an ad-hoc action so we can specify the SAM CLI version - uses: aws-actions/setup-sam@v2 + - name: Lint + run: npm run lint -ws + - name: Run unit tests + run: npm t -ws + check-examples: + runs-on: ubuntu-latest + env: + NODE_ENV: dev + strategy: + matrix: + example: ["sam", "cdk"] + fail-fast: false + defaults: + run: + working-directory: examples/${{ matrix.example }} + steps: + - name: Checkout code + uses: actions/checkout@v3 + - name: Setup NodeJS + uses: actions/setup-node@v3 with: - version: 1.49.0 - - name: Install SAM example packages - # Since we are not managing the SAM examples with npm workspaces we install - # the dependencies in a separate step - working-directory: ./examples/sam + node-version: 16 + - name: Install dependencies run: npm ci - - name: Run lint - run: npm run lerna-lint - name: Run tests - run: npm run lerna-test - - name: Collate Coverage Reports - if: ${{ github.actor != 'dependabot[bot]' }} - run: | - for d in ./packages/*/ ; do - mkdir -p coverage - if [[ ! -f coverage/lcov.info ]] - then - continue - fi - filename="$d""coverage/lcov.info" - targetSource="SF:""$d""src" - sed "s|SF:src|$targetSource|g" $filename >> coverage/lcov.info - done - - name: Report Coverage - #Dependabot user will only have read-only perms, so don't try to report coverage - if: ${{ github.actor != 'dependabot[bot]' }} - uses: romeovs/lcov-reporter-action@v0.3.1 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - lcov-file: ./coverage/lcov.info - - name: Packages size report - uses: flochaz/pkg-size-action@v1.2.12 - with: - build-command: mkdir dist && npm run lerna-package && npm run lerna-package-bundle && bash -c "mv ./packages/*/dist/* dist/" && ls dist - dist-directory: /dist - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: npm t \ No newline at end of file From 0db209f03dba82c1bd5593e83ec7024f6816fe2d Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Fri, 29 Jul 2022 19:50:29 +0200 Subject: [PATCH 2/7] chore: explicitly set packages where to run cmds --- .github/workflows/pr_lint_and_test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr_lint_and_test.yml b/.github/workflows/pr_lint_and_test.yml index 2e5e4b7cf9..29a31487cd 100644 --- a/.github/workflows/pr_lint_and_test.yml +++ b/.github/workflows/pr_lint_and_test.yml @@ -25,9 +25,9 @@ jobs: # See https://github.com/npm/cli/issues/4475 to see why --foreground-scripts run: npm ci --foreground-scripts - name: Lint - run: npm run lint -ws + run: npm run lint -w packages/logger -w packages/tracer -w packages/metrics - name: Run unit tests - run: npm t -ws + run: npm t -w packages/logger -w packages/tracer -w packages/metrics check-examples: runs-on: ubuntu-latest env: From 75df9a320b2b788ded92ce5b096c7a73a34b38fc Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Fri, 29 Jul 2022 20:00:49 +0200 Subject: [PATCH 3/7] fix: added missing dependency to examples/sam --- examples/sam/package-lock.json | 23 ++++++++++++++++++++++- examples/sam/package.json | 3 ++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/examples/sam/package-lock.json b/examples/sam/package-lock.json index c01174f0c4..ae6456377b 100644 --- a/examples/sam/package-lock.json +++ b/examples/sam/package-lock.json @@ -16,6 +16,7 @@ }, "devDependencies": { "@types/aws-lambda": "^8.10.86", + "@types/jest": "^27.5.2", "@types/node": "18.0.0", "esbuild": "^0.14.23", "eslint": "^8.4.0", @@ -1187,6 +1188,16 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "dev": true, + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, "node_modules/@types/node": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", @@ -6338,6 +6349,16 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "dev": true, + "requires": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, "@types/node": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", @@ -9421,4 +9442,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/examples/sam/package.json b/examples/sam/package.json index 58a396a4e5..3b3b13be9b 100644 --- a/examples/sam/package.json +++ b/examples/sam/package.json @@ -18,6 +18,7 @@ }, "devDependencies": { "@types/aws-lambda": "^8.10.86", + "@types/jest": "^27.5.2", "@types/node": "18.0.0", "esbuild": "^0.14.23", "eslint": "^8.4.0", @@ -32,4 +33,4 @@ "@aws-lambda-powertools/tracer": "^1.0.1", "aws-sdk": "^2.1122.0" } -} +} \ No newline at end of file From 736dbf637002a0e3328bc62be823f5741cf5774c Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Sun, 31 Jul 2022 19:36:37 +0200 Subject: [PATCH 4/7] added cache in workflow --- .github/workflows/pr_lint_and_test.yml | 34 ++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/.github/workflows/pr_lint_and_test.yml b/.github/workflows/pr_lint_and_test.yml index 29a31487cd..6880c6d38d 100644 --- a/.github/workflows/pr_lint_and_test.yml +++ b/.github/workflows/pr_lint_and_test.yml @@ -19,11 +19,32 @@ jobs: uses: actions/setup-node@v3 with: node-version: ${{ matrix.version }} + cache: "npm" - name: Setup npm run: npm i -g npm@next-8 + - name: Cache node modules + id: cache-node-modules + uses: actions/cache@v3 + env: + cache-name: cache-node-modules + with: + path: "./node_modules" + # Use the combo between node version, name, and SHA-256 hash of the lock file as cache key so that + # if one of them changes the cache is invalidated/discarded + key: ${{ matrix.version }}-build-${{ env.cache-name }}-${{ hashFiles('./package-lock.json') }} - name: Install dependencies + # We can skip the install if there was a cache hit + if: steps.cache-node-modules.outputs.cache-hit != 'true' # See https://github.com/npm/cli/issues/4475 to see why --foreground-scripts run: npm ci --foreground-scripts + - name: Build packages + # If there's a cache hit we still need to manually build the packages + # this would otherwise have been done automatically as a part of the + # postinstall npm hook + if: steps.cache-node-modules.outputs.cache-hit == 'true' + run: | + npm run build -w packages/commons + npm run build -w packages/logger & npm run build -w packages/tracer & npm run build -w packages/metrics - name: Lint run: npm run lint -w packages/logger -w packages/tracer -w packages/metrics - name: Run unit tests @@ -46,6 +67,19 @@ jobs: uses: actions/setup-node@v3 with: node-version: 16 + cache: "npm" + - name: Cache node modules + id: cache-node-modules + uses: actions/cache@v3 + env: + cache-name: cache-node-modules + with: + path: "./examples/${{ matrix.example }}/node_modules" + # Use the combo between example, name, and SHA-256 hash of all example lock files as cache key. + # It's not possible to use the ${{ matrix.example }} key in the hashFiles fn so + # if any of the lock files (wich should be fairly similar anyway) changes the cache is + # invalidated/discarded for all. + key: ${{ matrix.example }}-build-${{ env.cache-name }}-${{ hashFiles('./examples/*/package-lock.json') }} - name: Install dependencies run: npm ci - name: Run tests From b108cfd4f0c2eccd8120dbd98fb3f76eab90bb8e Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Mon, 1 Aug 2022 16:58:37 +0200 Subject: [PATCH 5/7] chore: updated workflow + removed env var from command --- .github/workflows/measure-packages-size.yml | 16 +++++++++++++++- packages/commons/package.json | 4 ++-- packages/logger/package.json | 4 ++-- packages/metrics/package.json | 4 ++-- packages/tracer/package.json | 4 ++-- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/.github/workflows/measure-packages-size.yml b/.github/workflows/measure-packages-size.yml index bce5872f04..098cd628e3 100644 --- a/.github/workflows/measure-packages-size.yml +++ b/.github/workflows/measure-packages-size.yml @@ -14,12 +14,26 @@ jobs: NODE_ENV: dev PR_NUMBER: ${{ inputs.prNumber }} steps: + # Since we are manually triggering the workflow the previous checkout has the main branch. In order to checkout the branch/code of the PR + # we need first to use the PR number to retrieve the PR SHA number. This means we need three steps to: checkout the repo, + # run a custom script to get the SHA, and then finally checkout the PR branch - name: Checkout Repo uses: actions/checkout@v3 + - name: Extract PR details + id: extract_PR_details + uses: actions/github-script@v6 + with: + script: | + const script = require('.github/scripts/get_pr_info.js'); + await script({github, context, core}); + - name: Checkout PR code + uses: actions/checkout@v3 + with: + ref: ${{ steps.extract_PR_details.outputs.headSHA }} - name: Packages size report uses: flochaz/pkg-size-action@v1.2.15 with: - build-command: mkdir dist && npm run package -w packages/logger -w packages/tracer -w packages/metrics && npm run package-bundle -w packages/logger -w packages/tracer -w packages/metrics && bash -c "mv ./packages/*/dist/* dist/" && ls dist + build-command: mkdir dist && npm run package -w packages/logger -w packages/tracer -w packages/metrics -w packages/commons && npm run package-bundle -w packages/logger -w packages/tracer -w packages/metrics -w packages/commons && bash -c "mv ./packages/*/dist/* dist/" && ls dist dist-directory: /dist pr-number: ${{ inputs.prNumber }} env: diff --git a/packages/commons/package.json b/packages/commons/package.json index 0c37c5081b..47d69c5a39 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -19,7 +19,7 @@ "lint": "eslint --ext .ts --fix --no-error-on-unmatched-pattern src tests", "format": "eslint --fix --ext .ts --fix --no-error-on-unmatched-pattern src tests", "package": "mkdir -p dist/ && npm pack && mv *.tgz dist/", - "package-bundle": "../../package-bundler.sh ${LERNA_PACKAGE_NAME}-bundle ./dist/", + "package-bundle": "../../package-bundler.sh commons-bundle ./dist", "prepare": "npm run build", "prepublishOnly": "npm test && npm run lint", "preversion": "npm run lint", @@ -48,4 +48,4 @@ "serverless", "nodejs" ] -} +} \ No newline at end of file diff --git a/packages/logger/package.json b/packages/logger/package.json index b29ebfc107..d876252270 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -22,7 +22,7 @@ "lint": "eslint --ext .ts --fix --no-error-on-unmatched-pattern src tests", "format": "eslint --fix --ext .ts --fix --no-error-on-unmatched-pattern src tests", "package": "mkdir -p dist/ && npm pack && mv *.tgz dist/", - "package-bundle": "../../package-bundler.sh ${LERNA_PACKAGE_NAME}-bundle ./dist/", + "package-bundle": "../../package-bundler.sh logger-bundle ./dist", "prepare": "npm run build", "prepublishOnly": "npm test && npm run lint", "preversion": "npm run lint", @@ -64,4 +64,4 @@ "serverless", "nodejs" ] -} +} \ No newline at end of file diff --git a/packages/metrics/package.json b/packages/metrics/package.json index cfeebc5702..4767d9c0fb 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -22,7 +22,7 @@ "lint": "eslint --ext .ts --fix --no-error-on-unmatched-pattern src tests", "format": "eslint --fix --ext .ts --fix --no-error-on-unmatched-pattern src tests", "package": "mkdir -p dist/ && npm pack && mv *.tgz dist/", - "package-bundle": "../../package-bundler.sh ${LERNA_PACKAGE_NAME}-bundle ./dist/", + "package-bundle": "../../package-bundler.sh metrics-bundle ./dist", "prepare": "npm run build", "prepublishOnly": "npm test && npm run lint", "preversion": "npm run lint", @@ -59,4 +59,4 @@ "serverless", "nodejs" ] -} +} \ No newline at end of file diff --git a/packages/tracer/package.json b/packages/tracer/package.json index 7166bdfc13..6da8339c46 100644 --- a/packages/tracer/package.json +++ b/packages/tracer/package.json @@ -27,7 +27,7 @@ "version": "npm run format && git add -A src", "postversion": "git push && git push --tags", "package": "mkdir -p dist/ && npm pack && mv *.tgz dist/", - "package-bundle": "../../package-bundler.sh ${LERNA_PACKAGE_NAME}-bundle ./dist/" + "package-bundle": "../../package-bundler.sh tracer-bundle ./dist" }, "homepage": "https://github.com/awslabs/aws-lambda-powertools-typescript/tree/master/packages/tracer#readme", "license": "MIT-0", @@ -62,4 +62,4 @@ "serverless", "nodejs" ] -} +} \ No newline at end of file From 017c999d3f1a7558d13ee98bf23c369b138f375b Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 4 Aug 2022 10:45:19 +0200 Subject: [PATCH 6/7] chore: updated action version --- .github/workflows/measure-packages-size.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/measure-packages-size.yml b/.github/workflows/measure-packages-size.yml index 098cd628e3..830cdd867e 100644 --- a/.github/workflows/measure-packages-size.yml +++ b/.github/workflows/measure-packages-size.yml @@ -31,7 +31,7 @@ jobs: with: ref: ${{ steps.extract_PR_details.outputs.headSHA }} - name: Packages size report - uses: flochaz/pkg-size-action@v1.2.15 + uses: flochaz/pkg-size-action@v2.0.0 with: build-command: mkdir dist && npm run package -w packages/logger -w packages/tracer -w packages/metrics -w packages/commons && npm run package-bundle -w packages/logger -w packages/tracer -w packages/metrics -w packages/commons && bash -c "mv ./packages/*/dist/* dist/" && ls dist dist-directory: /dist From 8e303d9f9bc59d183ee66fe9965c30ef67eb5077 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 4 Aug 2022 12:44:57 +0200 Subject: [PATCH 7/7] fix: removed redundant env variable --- .github/workflows/pr_lint_and_test.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pr_lint_and_test.yml b/.github/workflows/pr_lint_and_test.yml index 6880c6d38d..6d23c28d4c 100644 --- a/.github/workflows/pr_lint_and_test.yml +++ b/.github/workflows/pr_lint_and_test.yml @@ -25,13 +25,11 @@ jobs: - name: Cache node modules id: cache-node-modules uses: actions/cache@v3 - env: - cache-name: cache-node-modules with: path: "./node_modules" # Use the combo between node version, name, and SHA-256 hash of the lock file as cache key so that # if one of them changes the cache is invalidated/discarded - key: ${{ matrix.version }}-build-${{ env.cache-name }}-${{ hashFiles('./package-lock.json') }} + key: ${{ matrix.version }}-cache-utils-node-modules-${{ hashFiles('./package-lock.json') }} - name: Install dependencies # We can skip the install if there was a cache hit if: steps.cache-node-modules.outputs.cache-hit != 'true' @@ -71,15 +69,13 @@ jobs: - name: Cache node modules id: cache-node-modules uses: actions/cache@v3 - env: - cache-name: cache-node-modules with: path: "./examples/${{ matrix.example }}/node_modules" # Use the combo between example, name, and SHA-256 hash of all example lock files as cache key. # It's not possible to use the ${{ matrix.example }} key in the hashFiles fn so # if any of the lock files (wich should be fairly similar anyway) changes the cache is # invalidated/discarded for all. - key: ${{ matrix.example }}-build-${{ env.cache-name }}-${{ hashFiles('./examples/*/package-lock.json') }} + key: ${{ matrix.example }}-cache-examples-node-modules-${{ hashFiles('./examples/*/package-lock.json') }} - name: Install dependencies run: npm ci - name: Run tests