쉘 스크립트로 Gist 연결 자동화하기

윤뿔소·2024년 7월 22일
0

CS 지식 / 다양한 팁

목록 보기
11/20
post-thumbnail

GIST를 활용하는 도중 매번 같은 노동을 반복하는 저를 보고 너무 불쌍하게 여겨 자동화를 하려고 마음 먹었습니다.
쉘 스크립트를 사용하여 Gist를 자동으로 생성하고, 필요한 파일들을 포함시켜 푸시하는 과정을 담았습니다. 이 작은 스크립트를 통해 아주 큰 성취감을 느꼈습니다.

🚨🚨 HTTP로만 Clone이 가능해 HTTP로 깃헙 Gist와 연결하는 것을 전제로 합니다. 🚨🚨

1. 필요 도구 설치 및 설정

먼저, 개발 환경에 Git과 GitHub CLI를 설치합니다.

Git 설치

Homebrew를 이용한 설치 (MacOS)

Mac OS는 다양한 방법이 있는데 가장 많이 쓰는 brew로 설명하겠습니다.

brew install git

apt를 이용한 설치 (Linux)

sudo apt update # 업데이트
sudo apt install git -y

GitHub CLI 설치

Homebrew를 이용한 설치 (MacOS)

brew install gh

apt를 이용한 설치 (Linux)

공식 문서에 자세하게 명시돼 있습니다.
Mac쓰자..

type -p curl >/dev/null || sudo apt install curl -y
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh -y

GitHub CLI에 로그인하고 세팅을 끝마칩니다.

2. 자동화 스크립트 작성

이제 쉘 스크립트를 작성하여 Gist를 생성하고 파일들을 포함시켜 푸시하는 과정을 자동화합니다.

#!/bin/bash

# 입력 인자 확인
if [ -z "$1" ]; then
  echo "사용법 : $0 {DayNumber}"
  exit 1
fi

DAY_NUMBER=$(printf "%02d" $1)
CURRENT_DATE=$(date +%y%m%d)
FOLDER_NAME="${CURRENT_DATE} : Day${DAY_NUMBER}"

# 중복 파일 확인
if [ -d "$FOLDER_NAME" ]; then
  echo "폴더가 이미 존재합니다: $FOLDER_NAME"
  echo "스크립트를 종료합니다."
  exit 1
fi

# 템플릿 README.md 파일에서 내용 읽기
TEMPLATE_PATH="./README.md"
echo "리드미 템플릿 파일 찾는 중... $TEMPLATE_PATH"
ls -l $TEMPLATE_PATH

if [ ! -f "$TEMPLATE_PATH" ]; then
  echo "리드미 템플릿 파일을 찾을 수 없습니다. : $TEMPLATE_PATH"
  exit 1
fi

TEMPLATE_CONTENT=$(cat "$TEMPLATE_PATH")

# README.md 파일 생성 및 내용 작성
README_PATH="README.md"
echo "$TEMPLATE_CONTENT" > "$README_PATH"

# Gist 생성
GIST_DESCRIPTION="{JID를 입력해주세요} - $DAY_NUMBER"
GIST_OUTPUT=$(gh gist create "$README_PATH" -d "$GIST_DESCRIPTION")

# Gist URL 추출
GIST_URL=$(echo "$GIST_OUTPUT" | grep -o "https://gist.github.com/.*")

if [ ! -z "$GIST_URL" ]; then
  echo "Gist 생성 성공 : $GIST_URL"

  # Gist URL을 Chrome에서 열기
  open -a "Google Chrome" "$GIST_URL"

  # 현재 디렉토리의 상위 폴더로 이동
  cd ..

  # Gist를 같은 폴더명으로 클론
  git clone "$GIST_URL" "$FOLDER_NAME"

  # 클론한 폴더로 이동
  cd "$FOLDER_NAME" || exit

  # 추가 파일 복사
  touch index.js

  # 변경 사항 커밋
  git add .
  git commit -m "Initial commit with additional files for $FOLDER_NAME"

  # 변경 사항 푸시
  git push origin main

  # VSCode 열기
  code .

  echo "$FOLDER_NAME Gist 클론 및 푸시 성공!"
else
  echo "Gist URL을 찾을 수 없습니다."
fi

코드 설명

입력 인자 확인

if [ -z "$1" ]; then
  echo "사용법 : $0 {DayNumber}"
  exit 1
fi

스크립트가 실행될 때 DayNumber를 입력으로 받습니다. 입력 인자가 없으면 에러 처리로 사용법을 출력하고 종료합니다.

폴더 이름 생성

DAY_NUMBER=$(printf "%02d" $1)
CURRENT_DATE=$(date +%y%m%d)
FOLDER_NAME="${CURRENT_DATE} : Day${DAY_NUMBER}"

입력받은 미션 번호와 현재 날짜(date)를 조합해 폴더 이름을 생성합니다.

중복 폴더 확인

if [ -d "$FOLDER_NAME" ]; then
  echo "폴더가 이미 존재합니다: $FOLDER_NAME"
  echo "스크립트를 종료합니다."
  exit 1
fi

에러 처리 : 동일한 이름의 폴더가 이미 존재하면 안내문을 출력하고 스크립트를 종료합니다.

템플릿 파일 확인 및 읽기

TEMPLATE_PATH="./README.md"
echo "리드미 템플릿 파일 찾는 중... $TEMPLATE_PATH"
ls -l $TEMPLATE_PATH

if [ ! -f "$TEMPLATE_PATH" ]; then
  echo "리드미 템플릿 파일을 찾을 수 없습니다. : $TEMPLATE_PATH"
  exit 1
fi

TEMPLATE_CONTENT=$(cat "$TEMPLATE_PATH")

템플릿 README.md 파일을 확인하고, 내용을 읽어옵니다.

README.md 파일 생성 및 작성

README_PATH="README.md"
echo "$TEMPLATE_CONTENT" > "$README_PATH"

템플릿 파일을 그대로 사용해 README.md 파일을 생성합니다.

Gist 생성 및 URL 추출

GIST_DESCRIPTION="{JID를 입력해주세요} $DAY_NUMBER"
GIST_OUTPUT=$(gh gist create "$README_PATH" -d "$GIST_DESCRIPTION")

GIST_URL=$(echo "$GIST_OUTPUT" | grep -o "https://gist.github.com/.*")

GitHub CLI(gh 명령어)를 사용해 Gist를 생성하고, Gist URL을 추출합니다.
{JID를 입력해주세요} 부분에 본인의 JID를 입력해주면 Gist Description을 수정을 안해도 되니 더 편합니다!
여기서 레포지토리 공개 여부 기본값은 secret입니다.

Gist 클론

cd ..
git clone "$GIST_URL" "$FOLDER_NAME"
cd "$FOLDER_NAME" || exit

상위 디렉토리로 이동해 Gist를 클론합니다.

추가 파일 복사 및 커밋

touch index.js

git add .
git commit -m "Initial commit with additional files for $FOLDER_NAME"
git push origin main

필요한 파일들을 클론된 디렉토리로 복사하고, 변경 사항을 커밋해 푸시합니다.
여기서는 빈 JS 파일인 index.js를 생성해 넣어줬습니다.

VSCode 열기

code .

VSCode로 해당 디렉토리를 엽니다.

3. 스크립트 실행

스크립트를 실행해봅시다. 절대 경로로 해도 되고, 상대 경로로 해도 됩니다.

  1. 스크립트에 실행 권한 부여
chmod +x /yourPath/setup-script.sh
  1. 스크립트 실행
/yourPath/setup-script.sh 6

아니면 상대경로로 해도 됩니다.

결과

실행한 뒤 파일이 제대로 생긴 걸 볼 수 있습니다!


이제 Gist 생성을 자동화할 수 있습니다. 쉘 스크립트를 배우고 나서 이렇게 오래 걸릴지 몰랐지만 어쨌든 해냈습니다 ㅠㅠ

참고

profile
코뿔소처럼 저돌적으로

0개의 댓글