๋ฐฑ์ค&ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ํ์ด ์๋ ๊ด๋ฆฌ ๋ ํฌ์งํ ๋ฆฌ
์ฐํ
์ฝ๋ฅผ ์๋ฃํ ํ, ์ฌ์ฌํด์ ๊นํ๋ธ ํ์ด์ง๋ฅผ ๊พธ๋ฏธ๋ ค๋ ์ค ์ถฉ๊ฒฉ์ ์ธ ์ฌ์ค์ ์๊ฒ ๋๋ค...
์ปค๋ฐ ๊ธฐ๋ก... ํ ํ ๋น์๋ค!!๐
์๊ฐํด๋ณด๋ ์ต์ธํ๋ค. ์ง๊ธ๊น์ง ๋งค์ผ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ ํ๊ณ , ๊ณต๋ถํ ๊ฒ๋ค๋ ๊ธฐ๋กํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด๋ ๋ฐฑ์ค, ํ๋ก๊ทธ๋๋จธ์ค์์ ์งํํ๊ณ ๊ณต๋ถ ๊ธฐ๋ก์ ๋
ธ์
์ ์๋ค๋ณด๋ ์ค ์ปค๋ฐ๋ค์ด ์ผ์ผ ๋จ์๋ก ์ด๋ค์ง์ง ์์ ์๋๊ฐ ๋ง๋ผ ๋นํ์ด์ ธ ์์๋ค
...
(์๋ ๋ฌผ๋ก TIL์ด๋ผ ์๊ณ ๋ฆฌ์ฆ ๋ฌธํ๋ก ์ปค๋ฐ์ ์ฑ์ด๋ค๋๊ฒ ๋ณธ๋ง ์ ๋๊ฐ๊ธด ํ๋ฐ... ๋ค๋ค ๊ทธ๋ ๊ฒ ํ์์์?ใ
)
๊ทธ๋ ๋ค๋ฉด... ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ ๋๋ง๋ค ๊นํ๋ธ ์ปค๋ฐ์ผ๋ก ๋จ๊ธฐ๋ฉด ๋์์?
์ฐพ์๋ณด๋ ๋ง์นจ ์๋ฆ๋ค์ด ํ๋ฌ๊ทธ์ธ์ด ์์๋ค. ๊ธฐ์กด LeetCodeHub ์ ํ๊ตญํ ํนํ ํ๋ฌ๊ทธ์ธ์ธ BaekjoonHub ์ด๋ค.
์ด๋ก์จ ๊นํ๋ธ์ ์๋ ์ปค๋ฐ์ด ๊ฐ๋ฅํด์ก๋ค! ๊ฐ๋ฐ์๋ ๋ณต๋ฐ์ผ์ธ์๐โโ๏ธ
๊ธฐ์กด์ ํ์๋ ๋ฐฑ์ค ๋ฌธ์ ๋ค๋ ์์ฝ๊ฒ ์ฎ๊ธธ ์ ์๋ค.
1. ํ๋ฌ๊ทธ์ธ ํ์ฑํ ๋ฐ ๋ ํฌ ์ธํ
2. ๋ฐฑ์ค ๋ง์ดํ์ด์ง์ ์ ์ฒด์ ์ถ ์
๋ก๋(ํ์ํ ๋ถ๋ถ)๋ฅผ ํด๋ฆญ
3. ๊ธฐ์กด์ ํผ ๋ชจ๋ ๋ฌธ์ ๋ค ์
๋ก๋!
๋ค๋ง ํด๋น ๋ฐฉ๋ฒ์ ํ๋ก๊ทธ๋๋จธ์ค์์ ๋จนํ์ง ์์๋ค. ํ๋ก๊ทธ๋๋จธ์ค๋ ๋ฐ๋ก ์ด๋ฏธ ํผ ๋ฌธ์ ๋ค์ ํ๋์ฉ ์ฌ ์ ์ถํด์ผ ํ ๊ฒ ๊ฐ๋ค.
๊ทธ๋! ์๋ ์ปค๋ฐ ์ฐ๊ฒฐ๊น์ง ์๋ฃ๋๋ค. ์์ผ๋ก์ ๊นํ ์๋๋ ํธ๋ฅธ๊ธธ๋ง ๊ฑธ์ ๊ฒ์ด๋ค!(๊ณผ์ฐ?)
ํ์ง๋ง ์์ง ๋ถํธํ๋ค. ํผ ๋ฌธ์ ๊ฐ ํธ์๋ ๋๋ง๋ค README.md๊ฐ ์ด์๊ฒ ๊ด๋ฆฌ๋๋ฉด ์ผ๋ง๋ ์ข์๊น!! ํ์ง๋ง ํ์ฌ๋ก์ฌ ๋ฆฌ๋๋ฏธ๋ฅผ ์๋์ผ๋ก ๊พธ๋ฉฐ์ค์ผ๋ง ํ๋ค.
์ด์ github actions๋ก ์ปค๋ฐํ ๋๋ง๋ค ์ํ๋ ํฌ๋งท์ผ๋ก ๋ฆฌ๋๋ฏธ๋ฅผ ์๋ ์์ฑํด์ฃผ๋๋ก ์ค์ ํ๋ค.
ํ์ฌ๋ก์ ์ด๊ฒ๋ง ์๋ฉด ๋๋ค.
์ฐ๋ฆฌ์ ์์คํ ๊นํ๋ธ ์๊ณ ๋ฆฌ์ฆ ๋ ํฌ์ ์๋ ์ปค๋ฐ๋ ๋(ํน์ ๋์ ๋ฐ์)๋ง๋ค (workflow์) ๋ฏธ๋ฆฌ ์ง์ ๋ ์ก์ ์ด ์๋ ์ํ๋๋ ๊ธฐ๋ฅ
๋ณดํต ํ์ CI/CD๋ฅผ ์ํด ์ฌ์ฉํ๋ ํด์ด๋ค. ์ฐ๋ฆฌ ์๋ฅ์๋ฅ ํ๋ก์ ํธ์์๋ ์ฌ์ฉ๋์์๋ค.
Action ํญ์์ Python package๋ฅผ ๋๋ฅธ๋ค.
.github/workflows ํด๋๊ฐ ์๊ฒผ์ ๊ฒ์ด๋ค.
๋ด๋ถ yml ํ์ผ์ ์ง์ฐ๊ณ ์๋ฌด ์ด๋ฆ์ด๋ ๋ด๊ฐ ์ํ๋ ์ด๋ฆ์ yml ํ์ผ์ ๋ง๋ ๋ค.
๋๋ update-readme.yml ํ์ผ์ ์ถ๊ฐํ๋ค.
๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
(์ฃผ์ : build-run์์ git ์ ์ ๋ช , ์ ์ ์ด๋ฉ์ผ์ ๊ฐ์ ๊นํ์ ๋ง๊ฒ ์ฌ์ค์ ์ด ํ์ํฉ๋๋ค!!)
# ์ด ์ํฌํ๋ก์ฐ๋ update.py ํ์ผ์ ์คํํฉ๋๋ค. ์ฆ README.md ํ์ผ์ ์
๋ฐ์ดํธํฉ๋๋ค.
name: Update readme # GitHub Actions ํญ์์ ํ์ธํ ์ ์๋ ์ก์
์ด๋ฆ
on: # jobs๊ฐ ์คํ๋์ด์ผ ํ๋ ์ํฉ ์ ์
push:
branches: [ "main" ] # main ๋ธ๋์น์ push๊ฐ ๋ฐ์ํ์ ๋
pull_request:
jobs: # ์ค์ ์คํ๋ ๋ด์ฉ
build:
runs-on: ubuntu-latest # ๋น๋ ํ๊ฒฝ
steps:
- uses: actions/checkout@v3 # checkout
- name: Set up Python 3.10
uses: actions/setup-python@v3 # setup-python
with:
python-version: "3.10" # 3.10๋ฒ์ ํ์ด์ฌ ์ฌ์ฉ
- name: Install dependencies # 1) ์คํฌ๋ฆฝํธ์ ํ์ํ dependency ์ค์น
run: |
python -m pip install --upgrade pip
pip install python-leetcode
- name: Run update.py # 2) update.py ์คํ
run: |
python update.py
- name: Commit changes # 3) ์ถ๊ฐ๋ ํ์ผ commit
run: |
git config --global user.name 'BETTERFUTURE4' # ์ ์ ๋ช
git config --global user.email 'rerub0831@gmail.com' # ์ ์ ์ด๋ฉ์ผ
git add -A
git commit -am "auto update README.md" # ์ปค๋ฐ ๋ฉ์์ง
- name: Push changes # 4) ๋ฉ์ธ์ ํธ์
run: |
git push
๊ทธ๋ฆฌ๊ณ ๋ฉ์ธ ๋ฃจํธ์ชฝ์ ์ปค๋ฐ ํ๋ง๋ค ์คํ๋ update.py ํ์ผ์ ๋ง๋ ๋ค.
๋ค์์ update.py ์ด๋ค.
#!/usr/bin/env python
import os
from urllib import parse
HEADER="""#
# ๋ฐฑ์ค & ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ํ์ด ๋ชฉ๋ก
ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฒฝ์ฐ, ํผ ๋ฌธ์ ๋ชฉ๋ก์ ๋ํ ๋ง์ด๊ทธ๋ ์ด์
์ด ํ์ํฉ๋๋ค.
"""
def main():
content = ""
content += HEADER
directories = [];
solveds = [];
for root, dirs, files in os.walk("."):
dirs.sort()
if root == '.':
for dir in ('.git', '.github'):
try:
dirs.remove(dir)
except ValueError:
pass
continue
category = os.path.basename(root)
if category == 'images':
continue
directory = os.path.basename(os.path.dirname(root))
if directory == '.':
continue
if directory not in directories:
if directory in ["๋ฐฑ์ค", "ํ๋ก๊ทธ๋๋จธ์ค"]:
content += "## ๐ {}\n".format(directory)
else:
content += "### ๐ {}\n".format(directory)
content += "| ๋ฌธ์ ๋ฒํธ | ๋งํฌ |\n"
content += "| ----- | ----- |\n"
directories.append(directory)
for file in files:
if category not in solveds:
content += "|{}|[๋งํฌ]({})|\n".format(category, parse.quote(os.path.join(root, file)))
solveds.append(category)
print("category : " + category)
with open("README.md", "w") as fd:
fd.write(content)
if __name__ == "__main__":
main()
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ ์ด๋ค.("๋ฐฑ์ค", "ํ๋ก๊ทธ๋๋จธ์ค" ๋ฑ ํด๋๋ช ํ๋์ฝ๋ฉใ ใ )
๋ฆฌ๋๋ฏธ์ ๋ฐฑ์ค/ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ๋ณ ํผ ๋ฌธ์ ๋ชฉ๋ก์ ํ
์ด๋ธ๋ก ๋ณด์ฌ์ฃผ๋๋ก ์ธํ
ํ๋ค.
๋ค์ ๋ฐฐํฌ ์๋๊ฐ ๋๋ฆฐ ๊ฐ์ ์์ง๋งใ
ใ
;; ์ผ๋จ ๋์๊ฐ๋๊น ๊ทธ๋๋ก ๋๊ณ ๋์ค์ ์์ ํ๋ ค ํ๋ค.
์๋ ์์ฑ๋ ์๋ฆ๋ค์ด ๋ฆฌ๋๋ฏธ ํ ์ด๋ธ!!๐ฅบ
ํ์ฌ ๋ฆฌ๋๋ฏธ๋ update.py ํ์ผ์ ํตํด ๋งค๋ฒ ์ฌ์์ฑ๋๊ณ ์๋ค.
๋ฐ๋ผ์ ๋ฆฌ๋๋ฏธ ๋ด์ฉ์ ์ง์ ์์ ํ๊ณ ์ถ๋ค๋ฉด README.md ํ์ผ์ด ์๋ update.py ํ์ผ์ ์์ ํด์ผ ํ๋ค!
์ด์ ์์ง ๋ง์!!!
Github Action์ผ๋ก ์๋์ผ๋ก README.md์ ๋งํฌ ์์ฑํ๊ธฐ
๊ฟํ์ด๋ค์!!! ์ ๋ ๊ธ๋ณด๊ณ ๋ฐ๋ผํ๋๋ฐ ํ ์ด๋ธ ํ์์ผ๋ก ๋์ค์ง๋ ์๊ณ ์๋ ์ปค๋ฐ์ด ๋๋ฉด [ffinguMac/BOJ] Run failed: Update readme - main (552e3a9) ์ด๋ฐ ๋ฉ์ผ ์๋์ด ์๊พธ ์ค๋ค์...ใ ใ ํ๋ฒ ๋ด์ฃผ์ค์ ์๋์?? ์ ๊น ๊ณ์ ์ ffinguMac์ ๋๋ค!!
๊ธ ์ ์ฝ์์ต๋๋ค !
ํน์ ์ ๋ ํ ์ด๋ธ ๋ฐฉ์์ผ๋ก ๋ฐฑ์ค ๋ฌธ์ ๋ฅผ ์ ๋ก๋ํ๊ณ ์ถ์๋ฐ ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ๋๋ผ๋ ์ ๊นํ๋ธ ์ ๊ทผ ์์ฒญ์ด ์๋๋ค๊ณ ๋์ค๋๋ฐ ์ด๋ป๊ฒ ํด์ผ ํ๋์ง ์ฌ์ญค๋ณผ ์ ์์๊น์ ?