우선 이 블로그를 만들기 위해서..
위의 ‘quartz’ 라는 publishing tool을 조금 수정해서 사용하고 있다.
문득, obsidian에서 수정한 사항을 직접 build하고 publish하는 과정이 귀찮아져서,,
obsidian vault를 통째로 github에 올리고 push 될때마다 자동으로 publish해주면 좋을 것 같다는 생각에
github action을 이용하여 가능한 방법들을 찾아보았다.
github action을 이용하면 기본적으로 자기 repository 파일들을 받아오는듯
github action은 jobs/steps에 표기된 순서대로 작업이 실행된다고 한다..
그래서 만든 step들이다.
Step 01 §
quartz에서는 obsidian vault가 content라는 폴더로 네이밍 되어있어야 돼서
content라는 폴더 만든 뒤
모든 파일들을 content 폴더 밑으로 이동시켜 주었다
- name : move entire files to content
run : |
mkdir content
shopt -s extglob
mv -v ./!(content) content/
Step 02 §
빌드를 하려면 quartz repository가 필요하다.
with
구문을 이용해서 repository를 명시해주고,, quartz라는 폴더로 clone하도록 하였다.
- name : Checkout quartz
uses : actions/checkout@v3
with :
clean : false
repository : parkjbdev/quartz
path : ./quartz
Step 03 §
기본으로 깔린 nodejs 버전이 좀 옛날거같다.
21버전으로 올려준다.
- uses : actions/setup-node@v4
with :
node-version : 21
Step 04 §
아까 content에 넣어둔 vault를 quartz 밑으로 옮겨두고 빌드하기
- name : Move Content and change directory
run : |
mv -v content quartz/content
cd quartz
yarn
yarn quartz build
pwd
ls
Step 05 §
내 github page에 올려야 되니까.. repository를 clone해왔다..
근데 유지하고 싶은 파일 있는게 아니라면 굳이안해도 될듯?
CNAME만 가져오려고 우선 ghpage
라는 폴더로 clone하였다.
- name : parkjbdev ghpage
uses : actions/checkout@v3
with :
clean : false
repository : parkjbdev/parkjbdev.github.io
path : ./ghpage
Step 06 §
clone한 ghpage
폴더로 가서 필요한 파일빼고 다 날려버린다..
그런 뒤에 quartz에서 빌드한 결과 (quartz/public
) 에 있는 파일들을 다 복사해온다
- name : clean parkjbdev ghpage and copy from build
run : |
cd ghpage
shopt -s extglob
rm -rf ./!(CNAME)
cp -r ../quartz/public/** .
pwd
ls
Step 07 §
마지막으로, github page에 commit하고 push한다..
push 권한 얻으려면 personal token이나 ssh deploy key 발급해서 등록해야되는데, 보안이슈 때문에 ssh deploy key를 권장한다고 한다.
ssh-keygen
해서 하나 만들어주고,
- push할 repository에는 deploy key에 퍼블릭키를,
- action이 수행되는 지금 이 repository에는 github action secret 키에 프라이빗 키를 등록해준다. (ssh deploy key 쓰면 아래처럼 DEPLOY_PRIVATE_KEY
)
자세한건 https://cpina.github.io/push-to-another-repository-docs/index.html 참조하기..
- name : Deploy to external repository
uses : cpina/github-action-push-to-another-repository@main
env :
SSH_DEPLOY_KEY : ${{ secrets.DEPLOY_PRIVATE_KEY }}
with :
source-directory : ghpage
destination-github-username : parkjbdev
destination-repository-name : parkjbdev.github.io
user-email : dev@parkjb.com
publish.yml 전문 §
name : Publish
on :
push :
branches : [ "main" ]
pull_request :
branches : [ "main" ]
workflow_dispatch :
jobs :
build :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v3
# Step 01
- name : move entire files to content
run : |
mkdir content
shopt -s extglob
mv -v ./!(content) content/
# Step 02
- name : Checkout quartz
uses : actions/checkout@v3
with :
clean : false
repository : parkjbdev/quartz
path : ./quartz
# Step 03
- uses : actions/setup-node@v4
with :
node-version : 21
# Step 04
- name : Move Content and change directory
run : |
mv -v content quartz/content
cd quartz
yarn
yarn quartz build
pwd
ls
# Step 05
- name : parkjbdev ghpage
uses : actions/checkout@v3
with :
clean : false
repository : parkjbdev/parkjbdev.github.io
path : ./ghpage
# Step 06
- name : clean parkjbdev ghpage and copy from build
run : |
cd ghpage
shopt -s extglob
rm -rf ./!(CNAME)
cp -r ../quartz/public/** .
pwd
ls
# Step 07
- name : Deploy to external repository
uses : cpina/github-action-push-to-another-repository@main
env :
SSH_DEPLOY_KEY : ${{ secrets.DEPLOY_PRIVATE_KEY }}
with :
source-directory : ghpage
destination-github-username : parkjbdev
destination-repository-name : parkjbdev.github.io
user-email : dev@parkjb.com
Please enable JavaScript to view the comments powered by Disqus.