스터디 진행 과정 중 옵시디언을 지리와 노션처럼 사용하기로 했다.
이로 인해 글이 업로드 되었다는 것을 디스코드에 공유하기로 했다.
이 과정을 자동화하기 위해
- 옵시디언에 글을 작성하면 자동 커밋 + Push 가 된다.
- Push 된 파일들을 디스코드로 공유한다.
정도로 분류했다.
1번은 옵시디언 확장 프로그램으로 해결이 가능하며
2번은 Github Action 으로 해결이 가능해 보였다.
요구사항
- 옵시디언에 글을 작성하면 Github 에 업로드
- 업로드 된 글을 Discord 의 웹훅으로 알림을 준다.
알림 내용
제목을 통해 어떤 글이 추가되었는지 알 수 있다. 이는 파일 경로로 유추가 가능하다.
- 옵시디언 주소 연결하여, 바로 갈 수 있도록 한다.
- 각 글의 카테고리를 분류하여 어떤 주제인지 알려준다.
- 글이 작성된 시간을 기록한다.
- 작성자를 기록한다.
이슈
- github 에서 지원하던
github.event.head_commit
은 지원이 중단되었다.
이슈 : https://github.com/orgs/community/discussions/25597 - 유니코드 이스케이프 문자 때문에 JSON 이 깨진다.
이를 위한 해결 방법으로는 디코딩을 하면 되는데, 다른 것들까지 원치 않는 것 까지 디코딩이 된다.
해결 방법
- 잘 만들어진 서드파티를 활용한다
잘 만들어진 서드파티 : tj-actions/changed-files@v42 - 처음에는 JSON Body 전체를 디쾽 하려 했으나, 생각해보니 듣록된 경로+파일 이름만 디코딩하면 되는 문제였다.
구현 방법
- github action 에 대한 yml 을 추가한다.
- main 에 반영된 커밋들 중 폴더를 기준으로 파일 URL 을 생성한다.
- 생성된 URL 은 한번 디코딩 해준다.
- DIscord 으로 웹훅 알림을 준다.
- DIscord 주소는 Github Action 환경변수로 관리한다.
- 2번 과정의 경우 배열을 이용하여 코드를 좀 줄인다.
전체적인 Yaml 파일은 다음과 같다.
name: CI
on:
push:
branches:
- main
jobs:
notify_changes:
runs-on: ubuntu-latest
name: Notify Changes
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Get Changed Files
id: changed-files
uses: tj-actions/changed-files@v42
- name: Prepare Discord Notifications
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
id: prepare-notifications
run: |
declare -A categories=(
["Meeting"]="새로 등록된 미팅 목록"
["Projects"]="새로 등록된 프로젝트 이슈"
["Reference"]="새로 등록된 레퍼런스 자료"
["Notices"]="새로 등록된 공지사항"
)
for category in "${!categories[@]}"; do
category_changes=""
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
if [[ $file == *"$category"* ]]; then
decoded_string=$(printf '%b' "$file")
category_changes+="\n- https://github.com/lucycato-backend/obsidian/blob/main/$decoded_string"
fi
done
if [[ $category_changes != '' ]]; then
category_changes="**${categories[$category]}** \n업로드 시간: $(TZ=Asia/Seoul date +'%Y-%m-%d %H:%M:%S') \n작성자: ${{ github.actor }} $category_changes"
echo "Changes in $category: $category_changes"
curl -X POST -H "Content-Type: application/json" -d "{\"content\": \"$category_changes\"}" $DISCORD_WEBHOOK_URL
fi
done
결과
2개의 파일이 삭제되었고, 1개의 파일이 삭제되었다.
추가된 파일은 아래처럼 알림으로 확인할 수 있다. (싱크가 안맞긴하다.)
'사이드 프로젝트' 카테고리의 다른 글
[Flutter] - 플루터 커뮤니티 컨트리뷰터 회고 (0) | 2024.02.16 |
---|---|
디스크 이슈로 인한 서버 이전 회고 (0) | 2024.02.11 |