Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update pipeline #19

Merged
merged 4 commits into from
Jan 16, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 59 additions & 11 deletions .github/workflows/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ name: CI/CD Pipeline
on:
push:
branches: [ "main" ]
pull_request:
paths-ignore:
pull_request:
branches: [ "main" ]
paths-ignore:
# Schedule pipeline to run monday midnight after sunday ends
schedule:
- cron: 0 0 * * MON
Expand Down Expand Up @@ -76,12 +78,31 @@ 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
# 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 Updated NPM version
if: github.event_name == 'push' || github.event_name == 'pull_request' # run version checks only on PR and push
needs: detect-code-changes
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
Expand All @@ -93,28 +114,55 @@ 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
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)
PACKAGE_VERSION=$(node -p "require('./package.json').version")
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 if:
# - It was a push
# - There were code changes
publish-npm:
name: Publish to NPM
if: github.event_name == 'push' && needs.build-and-test.outputs.code_changes == 'true'
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 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
needs: publish-npm
if: github.event_name == 'push' && needs.build-and-test.outputs.code_changes == 'true'
needs: verify-npm-version
runs-on: ubuntu-latest
steps:
- name: Checkout code
Expand Down
Loading