From ea2ea8bca7e07412c720ca4c7f87b7aa2606294c Mon Sep 17 00:00:00 2001 From: Young Yu Date: Tue, 16 Jan 2024 13:13:55 -0800 Subject: [PATCH 1/4] Update pipeline.yml --- .github/workflows/pipeline.yml | 50 +++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 0a9ad6b..7e17efe 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -4,8 +4,16 @@ name: CI/CD Pipeline on: push: branches: [ "main" ] - pull_request: + paths-ignore: # ignore workflow for markdown file changes + - 'README.md' + - 'CHANGELOG.md' + - 'CONTRIBUTING.md' + pull_request: # ignore workflow for markdown file changes branches: [ "main" ] + paths-ignore: + - 'README.md' + - 'CHANGELOG.md' + - 'CONTRIBUTING.md' # Schedule pipeline to run monday midnight after sunday ends schedule: - cron: 0 0 * * MON @@ -76,10 +84,10 @@ jobs: - name: Compile TypeScript into JavaScript run: pnpm run build - # publish to NPM - publish-npm: - name: Publish to NPM - if: github.event_name == 'push' # only run this on push, not PR + # verify new NPM version is updated + verify-npm-version: + name: Verify NPM Version Number is Updated + if: github.event_name == 'push' || github.event_name == 'pull_request' # run version checks only on PR and push needs: build runs-on: ubuntu-latest steps: @@ -93,7 +101,7 @@ jobs: registry-url: 'https://registry.npmjs.org/' - name: Install dependencies run: npm install - - name: Check if version updated + - name: Check if version number is updated id: check_version run: | LATEST_TAG=$(git describe --tags --abbrev=0) @@ -101,20 +109,42 @@ jobs: if [ "$LATEST_TAG" = "v$PACKAGE_VERSION" ]; then echo "Version in package.json is already published. Exiting..." exit 1 - else - echo "::set-output name=version::$PACKAGE_VERSION" fi + + # publish to NPM + publish-npm: + name: Publish to NPM + if: github.event_name == 'push' # only run this on push, not PR + needs: verify-npm-version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # Fetches all history for all branches and tags + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: '20.x' + registry-url: 'https://registry.npmjs.org/' + - name: Install dependencies + run: npm install + - name: Check if version updated + id: check_version + run: | + LATEST_TAG=$(git describe --tags --abbrev=0) + PACKAGE_VERSION=$(node -p "require('./package.json').version") + echo "::set-output name=version::$PACKAGE_VERSION" - name: Publish to NPM if: steps.check_version.outputs.version run: npm publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - # Create Release + # Create Release on GitHub release: name: Create Release if: github.event_name == 'push' # only run this on push, not PR - needs: publish-npm + needs: verify-npm-version runs-on: ubuntu-latest steps: - name: Checkout code From aa19d2c0a80302d0054637a4080f7b217e0d688c Mon Sep 17 00:00:00 2001 From: Young Yu Date: Tue, 16 Jan 2024 13:18:54 -0800 Subject: [PATCH 2/4] Update pipeline.yml --- .github/workflows/pipeline.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 7e17efe..dfa4ab6 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -4,16 +4,14 @@ name: CI/CD Pipeline on: push: branches: [ "main" ] - paths-ignore: # ignore workflow for markdown file changes - - 'README.md' - - 'CHANGELOG.md' - - 'CONTRIBUTING.md' - pull_request: # ignore workflow for markdown file changes + paths-ignore: + - '**/*.md' # Ignore all markdown files + - '.github/workflows/pipeline.yml' # Ignore changes in this specific workflow file + pull_request: branches: [ "main" ] paths-ignore: - - 'README.md' - - 'CHANGELOG.md' - - 'CONTRIBUTING.md' + - '**/*.md' # Ignore all markdown files + - '.github/workflows/pipeline.yml' # Ignore changes in this specific workflow file # Schedule pipeline to run monday midnight after sunday ends schedule: - cron: 0 0 * * MON From 18316eeb6495f4031b03423588d241141aaf4f65 Mon Sep 17 00:00:00 2001 From: Young Yu Date: Tue, 16 Jan 2024 13:19:32 -0800 Subject: [PATCH 3/4] Update pipeline.yml --- .github/workflows/pipeline.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index dfa4ab6..976789f 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -5,13 +5,13 @@ on: push: branches: [ "main" ] paths-ignore: - - '**/*.md' # Ignore all markdown files + - '**/*.md' # Ignore changes on all markdown files - '.github/workflows/pipeline.yml' # Ignore changes in this specific workflow file pull_request: branches: [ "main" ] paths-ignore: - - '**/*.md' # Ignore all markdown files - - '.github/workflows/pipeline.yml' # Ignore changes in this specific workflow file + - '**/*.md' # Ignore changes on all markdown files + - '.github/workflows/pipeline.yml' # Ignore changes in this specific workflow file # Schedule pipeline to run monday midnight after sunday ends schedule: - cron: 0 0 * * MON From 35b114c2de48976bab4d972d85d87cffcff3ff49 Mon Sep 17 00:00:00 2001 From: Young Yu Date: Tue, 16 Jan 2024 13:43:44 -0800 Subject: [PATCH 4/4] Update pipeline.yml --- .github/workflows/pipeline.yml | 42 +++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 976789f..bc4f81a 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -5,13 +5,9 @@ on: push: branches: [ "main" ] paths-ignore: - - '**/*.md' # Ignore changes on all markdown files - - '.github/workflows/pipeline.yml' # Ignore changes in this specific workflow file pull_request: branches: [ "main" ] paths-ignore: - - '**/*.md' # Ignore changes on all markdown files - - '.github/workflows/pipeline.yml' # Ignore changes in this specific workflow file # Schedule pipeline to run monday midnight after sunday ends schedule: - cron: 0 0 * * MON @@ -82,11 +78,30 @@ jobs: - name: Compile TypeScript into JavaScript run: pnpm run build - # verify new NPM version is updated + # detect if there were code changes: + detect-code-changes: + name: Detect Code Changes + needs: build + runs-on: ubuntu-latest + outputs: + code_changes: ${{ steps.files.outputs.code_changes }} + steps: + - uses: actions/checkout@v3 + - name: Determine Changed Files + id: files + run: | + if git diff --name-only ${{ github.base_ref }}...${{ github.head_ref }} | grep -qvE '(\.md$|\.github/workflows/)' + then + echo "::set-output name=code_changes::true" + else + echo "::set-output name=code_changes::false" + fi + + # verify new NPM version is updated during push and PR. Skips version number check step if there were code changes verify-npm-version: - name: Verify NPM Version Number is Updated + name: Verify Updated NPM version if: github.event_name == 'push' || github.event_name == 'pull_request' # run version checks only on PR and push - needs: build + needs: detect-code-changes runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -100,6 +115,7 @@ jobs: - name: Install dependencies run: npm install - name: Check if version number is updated + if: needs.build-and-test.outputs.code_changes == 'true' # only make check for code changes id: check_version run: | LATEST_TAG=$(git describe --tags --abbrev=0) @@ -109,10 +125,12 @@ jobs: exit 1 fi - # publish to NPM + # publish to NPM if: + # - It was a push + # - There were code changes publish-npm: name: Publish to NPM - if: github.event_name == 'push' # only run this on push, not PR + if: github.event_name == 'push' && needs.build-and-test.outputs.code_changes == 'true' needs: verify-npm-version runs-on: ubuntu-latest steps: @@ -138,10 +156,12 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - # Create Release on GitHub + # Create Release on GitHub if: + # - It was a push + # - There were code changes release: name: Create Release - if: github.event_name == 'push' # only run this on push, not PR + if: github.event_name == 'push' && needs.build-and-test.outputs.code_changes == 'true' needs: verify-npm-version runs-on: ubuntu-latest steps: