-
Notifications
You must be signed in to change notification settings - Fork 0
204 lines (182 loc) · 6.77 KB
/
publish.yaml
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
name: 📦 패키지 배포
# .changeset, packages 디렉토리의 변경사항들이 main 브렌치에 push될때 이벤트를 실행한다.
on:
push:
paths:
- ".changeset/**"
- "src/**/*.ts"
- "src/**/*.tsx"
- "README.md"
branches:
- main
jobs:
set_env:
name: 🏃♀️ 액션 커스텀 전역변수 설정
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.result }}
steps:
- name: Checkout branch
uses: actions/checkout@v3
with:
fetch-depth: 0
# package.json의 버전을 가져온다.
- name: package.json에서 버전 가져오기
id: version
run: |
result=$(make get_version | tail -1)
echo "result=$result" >> "$GITHUB_OUTPUT"
is-run:
name: 🏃♀️ Changesets 실행
runs-on: ubuntu-latest
outputs:
result: ${{ steps.result.outputs.result }}
steps:
- name: Checkout branch
uses: actions/checkout@v3
with:
fetch-depth: 0
# Node.js를 설치한다.
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: "lts/*"
# Changeset을 실행하기 위해서 의존성을 설치한다.
- name: Install dependencies
run: yarn install --frozen-lockfile --ignore-engines
env:
CI: true
# Changesets에서 제공하는 Action을 사용할 수 있다.
# NPM에 배포, Git 태그 생성 등의 작업을 수행한다.
- name: Create release Pull Request or publish to NPM
id: changesets
uses: changesets/action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# PR 프로세스를 거쳐서 npm에 배포된 버전보다 소스코드의 버전이 높은지 확인한다.
- name: Check version
id: version
run: |
result=$(make is_run | tail -1)
echo "test=$result"
echo "result=$result" >> "$GITHUB_OUTPUT"
- id: result
# Changeset 기록이 없고 package 버전이 높다면 PUBLSIH
# Changeset 기록이 없고 package 버전이 같다면 ERROR
# Changeset 기록이 있고 package 버전이 높다면 PULL_REQUEST
# Changeset 기록이 있고 package 버전이 같다면 PULL_REQEUST
run: |
if [ "${{ steps.changesets.outputs.hasChangesets }}" == "false" ] && [ "${{ steps.version.outputs.result }}" == "true" ]; then
echo "result=PUBLISH" >> "$GITHUB_OUTPUT"
elif [ "${{ steps.changesets.outputs.hasChangesets }}" == "false" ] && [ "${{ steps.version.outputs.result }}" == "false" ]; then
echo "result=ERROR" >> "$GITHUB_OUTPUT"
elif [ "${{ steps.changesets.outputs.hasChangesets }}" == "true" ] && [ "${{ steps.version.outputs.result }}" == "true" ]; then
echo "result=PULL_REQUEST, true, true" >> "$GITHUB_OUTPUT"
elif [ "${{ steps.changesets.outputs.hasChangesets }}" == "true" ] && [ "${{ steps.version.outputs.result }}" == "false" ]; then
echo "result=PULL_REQUEST, true, false" >> "$GITHUB_OUTPUT"
else
echo "result=GITHUB ACTION ERROR deploy.yaml 65 line check" >> "$GITHUB_OUTPUT"
fi
check-env:
name: 🔎 액션 커스텀 전역변수 확인
runs-on: ubuntu-latest
needs: [is-run, set_env]
env:
result: ${{ needs.is-run.outputs.result }}
version: ${{ needs.set_env.outputs.version }}
steps:
- name: Check env
run: |
echo "result=$result"
npm-release:
name: 🚀 NPM 패키지배포
runs-on: ubuntu-latest
needs: [is-run]
if: ${{ needs.is-run.outputs.result == 'PUBLISH' }}
steps:
# 레포지토리에 체크아웃하여 소스를 가져온다.
- name: Checkout branch
uses: actions/checkout@v2
with:
fetch-depth: 0
# bun 설치한다.
- uses: oven-sh/setup-bun@v1
with:
bun-version: latest
# 빌드 및 테스트를 위해서 의존성을 설치한다.
- name: Install dependencies
run: bun install
env:
CI: true
# 패키지를 빌드한다.
- name: Build packages
run: bun run build
# 배포를 위해 .npmrc 파일을 생성하고 인증 토큰을 추가한다
- name: NPM_TOKEN 설정
run: |
cat << EOF > "$HOME/.npmrc"
//registry.npmjs.org/:_authToken=$NPM_TOKEN
EOF
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Publish
run: npm publish
# github package에 배포하는 것은 메인 배포가 아니기 때문에 npm 배포가 정상적으로 완료된다면 github package에 배포한다.
gh-release:
name: 🚀 깃허브 패키지배포
needs: [is-run]
if: ${{ needs.is-run.outputs.result == 'PUBLISH' }}
runs-on: ubuntu-latest
steps:
# 레포지토리에 체크아웃하여 소스를 가져온다.
- name: Checkout branch
uses: actions/checkout@v3
with:
fetch-depth: 0
# @hyeon 또는 @*/* 패키지를 Github에 배포하기위해서 @Hansanghyeon:*로 이름을 변경한다
- name: Rename package name
run: |
sed -i 's/"@hyeon\/eslint-config"/"@hansanghyeon\/eslint-config"/' package.json
# bun 설치한다.
- uses: oven-sh/setup-bun@v1
with:
bun-version: latest
# 빌드 및 테스트를 위해서 의존성을 설치한다.
- name: Install dependencies
run: bun install
env:
CI: true
# 패키지를 빌드한다.
- name: Build packages
run: bun run build
# 배포를 위해 .npmrc 파일을 생성하고 인증 토큰을 추가한다.
- name: Configure npm
run: |
cat << EOF > "$HOME/.npmrc"
@hansanghyeon:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=$GH_TOKEN
EOF
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Github package에 배포한다.
# 그리고 배포완료된 주소를 가져온다
- name: Publish
run: npm publish
release:
name: 🚀 릴리즈
runs-on: ubuntu-latest
needs: [npm-release, gh-release, set_env]
env:
version: ${{ needs.set_env.outputs.version }}
steps:
- name: Release 생성
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ needs.set_env.outputs.version }}
release_name: ${{ needs.set_env.outputs.version }}
body: |
${{ needs.set_env.outputs.version }} 릴리즈
NPM: https://www.npmjs.com/package/@hyeon/calc-ts/v/${{ needs.set_env.outputs.version }}