-
Notifications
You must be signed in to change notification settings - Fork 0
132 lines (125 loc) · 3.43 KB
/
pipeline.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: CI/CD Pipeline
# Workflow triggers
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# Schedule pipeline to run monday midnight after sunday ends
schedule:
- cron: 0 0 * * MON
# Enable manual runs of workflow
workflow_dispatch:
# Workflow stages
jobs:
# Perform Lint Checks
lint:
name: Style and Lint Checks
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./
steps:
- uses: actions/checkout@v3
- name: Use Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: '20.x'
- name: Install pnpm
run: npm install -g pnpm
- name: Install Dependencies
run: pnpm install
- name: Run lint script
run: pnpm run lint
# Run Unit Tests
test:
name: Unit Tests
needs: lint
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./
steps:
- uses: actions/checkout@v3
- name: Use Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: 20.x
- name: Install pnpm
run: npm install -g pnpm
- name: Install dependencies
run: pnpm install
- name: Run unit tests with jest
run: pnpm run test
# Build Application
build:
name: Build Application
needs: test
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./
steps:
- uses: actions/checkout@v3
- name: Use Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: '20.x'
- name: Install pnpm
run: npm install -g pnpm
- name: Install Dependencies
run: pnpm install
- 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
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- 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")
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
- name: Publish to NPM
if: steps.check_version.outputs.version
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
# Create Release
release:
name: Create Release
if: github.event_name == 'push' # only run this on push, not PR
needs: publish-npm
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Extract version number
id: package_version
run: echo "::set-output name=VERSION::$(jq -r .version package.json)"
- name: Create Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.package_version.outputs.VERSION }}
release_name: Release ${{ steps.package_version.outputs.VERSION }}
draft: false
prerelease: false