αααααΆαααΎααααα Habr ααααα·α αααα»αααΆαααΆαααααΆααααα’αΎααααα’ααααααα·α αα½α αααα»αααααΌαααΆαααααα»αααααΎαααααΆααααααα»αααΆα (beta) αααα GitHub - αααααααΆαα
ααΆα αΆααααΈααΌα ααΆααΆααΆααα·ααΆααα·αα αααΆααααααααα’αΆα ααααΌαααΆααααααααααααΆααα·ααααααΆαα»αααΆαααααα αααααα·ααααα»αααΆαααΆααααα αααααΈααΆ "beta" αααααα ααα»ααααααΆααΊααΆαα»αααΆαααααΆαααααααααααααααΆ αααα’αα»ααααΆαα±ααα§ααααααααααααΎαααα»αααααΆααα―αααα ααΆααΊα’αααΈααΆαααααΎααΆαααΆαα½ααα αα αααα·ααααΆαααααααααα»αααΉααα·ααΆαα’αααΈαα αααα»αα’ααααααααα
αα»αααααααααα·
ααααα·αααΎααΎαα αΆααααααΎαααΆαααααΆααααααα αααααΆαααα ααααΆααΆαααααααααα»αααΆααα·ααΆαααΆαα αααα»αααααΎαααΆαααααΆαααααααααααααΎαααΏα ααΆααααα½α ααΆααααα½α αα·αα₯ααα·ααααααααααΆααααΆααααααΆαα»αααα ααααα "α’αααΈαααα»α" ααααΆαααααα½α αααα»αααααΌαα αααΆααααααΆα αααΎαααα α αΎααα·ααααααΆααααα’αααααααΆα αααΎαα
ααα»ααααα½αα ααα½αααααΎαααΎαααΆααααα αα αααααααααΆαααΆαααΈαααααα α αΎαα’αααααααα·αα αααααα’αααΈααΆαααΆα α’αααααααα αα·αααΆααααααααΆαααααααΆααα’αααΈαααΆααα’ααααα ααΌα ααΆααΆααααα ααααα ααααααα·αα·αααααα ααααΆαα αααααα₯α‘αΌααααααΆα’αΆα ααααΎααΆααα ααΎ GitHub αα·α GitLab α
ααΆααΆααα·αααΆαα αααααΊααΆαααααΎαααααΆαααααα½αααααααα»ααααααααααΌαα
αααααΎαα α»αααααααααααααα»αααΊ GitHub Pages α
α’αααΈααααα
α’αααααΆαα·αααΉα gh-pages
- αααααΊααΆαααααΎααα½ααααααΆαααααααΆαα»αα―αααΆααααα»αααααααααααα ααααα α αΎαααΆααααΌαααΆααααααααΌααααα₯ααα·ααααα α αΎαααααααααΈααΎα―αααΆα ααΆααααααΌαααΆαααααΎα‘αΎαααΎααααΈαααααΆαα»αααα αααααααααΆαααααα½ααααααα αα»αααΆααααααααΌαααΆααααααααα GitHub αααα’αααααααΎααααΆααααΆααα’αα α αΎαααΆααα
αααα»αααΆααααααααααΆααα
ααααΆααααααααααααΎααΆααΆαα½αα gh-pages
αααααΆααααα αααααα’αααααααΎααααΆαα - ααααΆααααΆα
ααααα‘αααααααΆαααααα username.github.io
ααΆαα½αααΉααααααααα ααααααα
αααα»α master
ααΆααΆα
α’αααα’αΆα
ααΎαααααααΆααααα’α·ααααααα CNAME
ααΆαα½ααααααααα αα·αααα‘αΎα DNS ααααα’ααααααααααααΆαααααααα’ααααα
ααΎαααΆαααΈααα GitHub α
αααα»αααααΆααααΆααΆαα’αααααααΆα αααΎααα ααΈαααα’αααΈαααααααααΎαααα ααααααααααα ααΌα αααααα·ααααααΆα’αααΈααααααα»αααΉααα·ααΆαααααααααααααααα
αααα αΆααΎαα‘αΎα
αααα αΆααΊααΆαα αααααααΎαααΆαααΈαααααΎααα·αα·αααα α αΆαααΆα αααααΌααααααααααααΈααααααα αα·αααααΎαααααΆααα ααΎααααΈααααα½αααααΎαααΆααααααΎαααααα αα·ααααα»αααΆαα αααα»αααααΆααα ααΆααααααΆ ααααα·αααΎα’ααααααααΆαα»αααααααα αααα»αααααΆααα―αααααΆα ααααα‘αααα½α αααααΆααααααααααΆαααΆαααααΆααααααΌαααΆαα½ααα ααΎααα ααααα α αΆαααΆα αααααΌαααΆαααααααΆαααα·ααααΆααααα»αααααααααααΆααααααΆαααααααααααΆααααααααααα·αα·αααα αα·αααΆαααααα»αααααααΆααα αααα»αααααΆααααα αααααααααΆααα
ααΆαααΆααααααΌαααα
ααααΈαααα ααΆαααα αααα»αααΆαααΌαααααΉαααα α‘αΎααα ααΎααα ααααα α¬αα αααα»αααααΉαααα·ααααααααααΆαααΈ GitHub CI/CD αααααΎααααααΎαααααΈααααΌαααΆαααααααααΆαα αααα’αα»ααααΆαα±αααααααααΆαααΆαααααααααΌαααΆαα’αα»αααααααααΆααα·αααααααΉαααααααα·α αα½α αααα»αα
α’αααΈαααΆαααΈααααααΎαααααααα·αα·αααα
αααα»αααΉααα·ααααααααΆαααα α·ααααα»αααΆααααΆαα·αααααΎααΆαα»ααααααα ααα»αααααααα»αααΉαα αααααααα ααα»α αα½αα ααα½αααααααα»αααΆααααααα»αα’αα‘α»ααααααααΎαααΎα αα·αααααΎααααΆααααΌα ααΆααααααα
1) ααααΎαααΎααααΆαααΈαααααΎααααααΆαααααΉαααΆααΆααααααααααα·ααΈααααα’ααα α¬αα½ααααα αααΆααααΆααααΆααααα’αΆα ααααΎαα ααΆαα αααα»αααΆααααααα·αααααα αααααααααα»ααααα½αα―αααααΌααααααααα»αααΆααα½αα ααα½ααααααΆααααα αααααααααΎααΆα ααααααααΎα αααααααααΆαααααααααΆα αα·αααααααααααααα·ααααααΆααααα αααΎαα ααΎαααΈαααααααααααΊααΆα ααα»ααααααα’ααΎααααΈααααααα»αααΆαααααααααααααα½αα―ααα αααα»ααααααααααααααα·ααΈαααα½α;
2) ααΎαααΆαααΈαααααΎααα½αααΆαααααααΌαααααΎαααΎαααΊααΆαααααΎαααααΆαααααα½α ααα»ααααααΆααΆαααααααα·α
αΆαααΆααΆαααααΆααααΆαααααα»αααααΌααααα»αααΆαααΆααααααα»αααΆα GitHub Pages α’αααααααΌαααααα‘αΎαααΆαα»ααα·αα
ααΆαααααΎαααΎααααΆαααΈαααααΎααααααααα»αααΊααα’ααααΎα
ααα»α
ααΈαα½αα
__
ααΆααααααΎααααα αΆ
ααΆααα·α αα α ααααααΊααααΌααααααααααααΈα (ααΆααα·αα―αααΆαααααααα ααΆαααααααα) αααααΉααααααΎαααααααα·αα·αααααααααααααααααααα·ααΈααααΆααα―αααα αααααααααΆαααΉαααΆαααααααααΉααα»αααΆαααααα·ααααΆααα·αααα·αα ααααααΈααααα½αααΆααΉαααααααααααααααααααααα½α ααΆααααα αα αααα»αααααΆααααΆααΆαααα
α§ααααααααααΆαααααααααααΆα
α§ααααααααααΎαααΉαααααΎααΎααααΈαααααααΆααααα αΆα
- αααααααΆα GitHub;
- Python3.7;
- Pelican;
- α αααΈα;
- ααααα GitHub α
ααΆααααααααΆααααα αΆ
ααΌα
αααα αααααΆααααΈααΆαααααΆααα―αααΆααααααααα·α
αα·ααααααΈαααααααααααααΈααααααΆαααααααααΆαααααΌαααΆαααααα ααΆα
αααΆααααΆααααΆααααααΆααααααΉααααααααΆααααα αΆαααααΆαααΎαα‘αΎαααΆαααααα»αα αα
αααααααα α’αααααααΌαααααΆαααΎααααΈααααΎαα»αααΆααααα
ααΆααα·αααααΆα’αααΈαα»αααΆαααααΈααα Github αααα½αααΆααααΆαα
ααΆααααααααααααΈααααααααΆαα
αΆααααααΎαααααααααΎαα―αααΆααααααΆαααααααααα»αααα―αααΆα .github
αα·αααααααααααΆα workflows
. αααα’αΆα
ααααΌαααΆαααααΎααααα α¬ααΈαααααα·ααΈαα·αααααα
αααα»αααααΆαααααααααΆααα
ααΎαααααααααΆααα
α§ααΆα αααααααααααααααααΈαααα
αααα»αααΉαααααΎα’ααααΆαα·ααααΆααααααααααα’αααΈααααααααααα
name: CI # Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΠ°: Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Actions
on: [push] # Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄Π°Π½Π½ΡΠΉ ΡΠΊΡΠΈΠΏΡ
jobs: # ΡΠΎΠ±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ
build: # ΡΠ±ΠΎΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ..
runs-on: ubuntu-latest # ..Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π°
steps: # ΡΠ°Π³ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ΄Π΅Π»Π°Π½Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΠ±ΡΠ°Π·Π°
- uses: actions/checkout@v1 # ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ Π² ΡΠ°ΠΌΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ Π²Π΅ΡΠΊΡ
- name: Run a one-line script # ΠΈΠΌΡ ΡΠ°Π±ΠΎΡΡ Π½ΠΎΠΌΠ΅Ρ 1
run: echo Hello, world! # ΡΡΡΡ ΡΠ°Π±ΠΎΡΡ Π½ΠΎΠΌΠ΅Ρ 1 (bash-ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΏΠΈΡΠ°Π½Π° Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ)
- name: Run a multi-line script # ΠΈΠΌΡ ΡΠ°Π±ΠΎΡΡ Π½ΠΎΠΌΠ΅Ρ 2
run: | # ΡΡΡΡ ΡΠ°Π±ΠΎΡΡ Π½ΠΎΠΌΠ΅Ρ 2 (ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½Π°Ρ)
echo Add other actions to build,
echo test, and deploy your project.
α αΌαααΎααααααααααααα½αα―ααααααα’ααααΎααααΌα
0) α’αααααα’αΆα αα»αααααα "CI" ααΆαα ααΆααΆαααα αΆααααααΆαα·α
1) αααααΆαααα α’αααααααΌαααααΎαααΎααααααααΆα/ααααααααΉαα αΆααααααΎαααααααΈα αααα»αααααΈααααααΎα αααααΊααΆααΆααααα»αααααααΆααααΆαααααααααΆα α·αααααααΈαα ααΆααααααΆααα
on:
push
2) ααΎαααααΉααα»αααΌαααΆααα
ααΎααΌαααααΆααααααααααΈαααΉαααααΌαααΆαααΆααα±ααααααΎαααΆαααΆα§ααΆα ααα α
αΆααααΆααααΈ Ubuntu αααα
α·αααααΉααα»αααΆαα
αΆαααΆα
αα αααα»ααααααΉαααΎα
build:
runs-on: ubuntu-latest
3) αα αααα»αααα αΆαααααΌαααΎαααΉααααα αααα·ααααΆαααΎααααΈαααα ααααααΆααααΆαααΆαααααΆααα
3.1) αα
ααΆααΆαααααΎαααααΌαααΆα (ααα αΆααααααααΆα checkout
):
- uses: actions/checkout@v1
3.2) ααα‘αΎα Pythonα
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: 3.7
3.3) ααα‘αΎαααΆαα’αΆααααααααααΆαααΈαααααΎαααααααΎα:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
3.4) αααααΎαααααααααααααα αααααααΉαααααΌαααΆααααααΎαα
- name: Make output folder
run: mkdir output
4) ααΎααααΈα±ααααΆαααΆααα ααΎααα αααααααΆαααΆααααΈαααααΆααααααΆ αααααΊαα·αααααΌααα»αααΆαααααΆααααααΌαααΈαα»α αα·αα’αΆα ααααααααΆαααααΆααααααΌααα ααΆααααααΆααααα αααααααααα·αααΆαααΆααααααααα·α ααααΆ ααα αΆααααααΆααααΊααααΌαααααΌαααααΆααααα αααααααΆαααααα
- name: Clone master branch
run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git" --branch master --single-branch ./output
ααα αΆααααα α α’αααααααααααα
- α’ααα
GITHUB_ACTOR
GitHub ααα‘αΎαααααααα½αααΆ α αΎααααααΊααΆαααααα’αααααααΎααααΆααααΆααααααα α»ααααααααααΈααααααααΌαααΆαα αΆααααααΎαα - α’ααα
secrets.ACCESS_TOKEN
αααααααΌαααΆααααααΎααα·αα·ααααααααΆαααααΆααααααααααα Github ααΎαα’αΆα ααααααΆααααΆααΆα’αααααα·ααααΆαααααααααααΆαα αααα»αααααΆααSecrets
ααΆααααααααααΆααααααααΎαα ααΌαα αααΆαααΆαααα»αα’αα‘α»ααααααααΆαα αααααΆαααααΆααααΉαααααΌαααΆααααααα±ααααΎααααα ααΆααΉααα·αααΆααα·αααα·α αΌαααααΎααΆαααααα ααααΌα ααΆαααααααααΆαα»αααααΆααα
5) α αΌααααααα ααΆααααααΎααααααααααααΎαα
- name: Generate static pages
run: pelican content -o output -s publishconf.py
αααΆαααΆαααααααααααΆααααααΌααα
αααΆαααΈαααααΎαααΊααα½ααα»αααααΌαα
ααααααα―αααΆααααα―αααΆααααααΆααααααΎαααΉαααααΌαααΆαααααΎ (-o output
) αα·αα―αααΆαααααααα
ααΆαααααααααααααΎαααααΎααΎααααΈαααααΎα (-s publishconf.py
; α’αααα’αΆα
α’αΆαα’αααΈαα·ααΈααΆααααααααα»αααΆααααααααΆααααααααΌαααααΆα αα·αααΆαααααααααααΆααααΆαααααα»αααααααΆααα
αααα»αα―αααΆα Pelican).
αααα»αααΌαααααΉαα’αααααΈα’αααΈαααααΆααα
αααα»αααααααααΎαα output
ααααΆααααα αααααααααΌαααΆαααααΌααα½α
α αΎαα
6) ααααααα α git αα·ααα·αα·ααααα―αααΆααααααΆαααααΆααααααΌαααααααΎαα
- name: Set git config and add changes
run: |
git config --global user.email "${GITHUB_ACTOR}@https://users.noreply.github.com/"
git config --global user.name "${GITHUB_ACTOR}"
git add --all
working-directory: ./output
αα
α
ααα»α
ααα α’ααααααααααααΆαααα½α
α αΎαααααΌαααΆαααααΎ α αΎαααααΆαααΆαααααΌαααΆαα
ααα’α»ααααα αΆα αααααΆααααααααΆααΈααα αΆααααααΉαααααΌαααΆαα
αΆααααααΎαα ααΆααααααααΆαα
ααααΆαααΆαααΉαααΎααα
ααΌα
- cd output
.
7) α
αΌααααααΎαααΆαααααααααΆ ααααΎααΆαααααΆααααααΌα αα·ααα»ααα½αααΆαα
αααα»αααααΆααα ααΌα
ααααβααΆβααΆαβααααααααΆβαα·αβα₯αβααααααααβαα α αΎαβααΌα
ααααβαα·αβαααααΎαβααα α»αβαααα»αβααΆαβααΆαβαα (ααααααβααααααβααΊβαα·αβααα 0
) - ααΆααααΌα ααΌααα·αα·αααααΎαααΆααΎααΆα
αΆαααΆα
ααααα»αααΆαααααααααΆα
α·ααα αα·ααααα»αα’αααΈαα½αααΆαααααααα ααΎααααΈααααΎααΌα
αααααΎαααααΎααΆααααααααΆ git diff-index --quiet --cached HEAD --
αααααΉααααα
αααα
ααααΆααΈα 0
ααααα·αααΎαα·αααΆαααΆαααααΆααααααΌαααΆααααααΉααααααα»αααααα ααααα αα·α 1
ααΆαααΆαααααΆααααααΌαααααααα αααααΆααααααΎαααααΎαααΆαααααααααααΆααααααααΆαααα ααΌα
αααα αα
αααα»αααααααΆαα’αααΈααΆαααααα·ααααα·ααααααααΈα ααΎαααΉααααααααΆααααααΆαααΆαααααααααα’αααΈααααΆαααΆαααααα ααααααα
ααααΆααααΆαααα αααα½αα±ααααΆαααΆαααααααααααααααααα· α αΎαααααΎααααΎαααΌααααΆαααΆαααα’αααΈααΆαααΆααααααααΈαα
ααΎαααα’αα»αααααααααααΆαααΆααααααα αααα»αααααααααΎαααΆαα½αααΉαααααααααααααααα½α ααΆααααα α
- name: Push and send notification
run: |
COMMIT_MESSAGE="Update pages on $(date +'%Y-%m-%d %H:%M:%S')"
git diff-index --quiet --cached HEAD -- && echo "No changes!" && exit 0 || echo $COMMIT_MESSAGE
# Only if repo have changes
git commit -m "${COMMIT_MESSAGE}"
git push https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git master
working-directory: ./output
αααααα
ααΆαααααα ααααααΈαααααααα’αα»ααααΆαα±ααα’ααααα·ααα·αα’αααΈααΆααααααΎαααααααα·αα·ααααα αααααααααααΆαααααΆααααααΌααααααααΆαααα ααααΆααα―ααα αα·αααΆαααααΆαααααΎααΆαααΆαα½α git ααΈαααααααααααααααΆαα½α α¬αααααΎαα―αααΆαααΆααααα ααα»α αααααΆαααααααΆα GitHub αααααααΆαααΉαααααΎα’αααΈαααααααααΆαααααααα½αα―αα ααααα·αααΎααααααΈαααΆααααααα·αααΆαααααΉααα»α ααΆαααΌαααααΉαααΉαααααΌαααΆαααααΎαα ααΆααα’ααΈαααααααα’αααα
αααααΌαααα
αααα»αααΉαα αΆαα ααααΈααααααΆαααΆααααααααα»α αααααα αΆαα α»ααααααααααααααΆαααααΎααΆαααΌαααααΉαααΆααΆαααααααααΆα α·ααααα½αααααΌαααΆααα»ααα ααααΆααααααΆααα
α’αΆααααααΆαααααααΆααα·αααααΆααΆαααΎααααΌαααΆαααααΎ ααααα·αα·ααααααααΆααΌααααα αα·αααααααααΆααα’αααααααΎααααΆαααααααΆαααααΌαααΆαααααΎααααΌαααΆαααααααα
name: Push content to the user's GitHub pages repository
on:
push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: 3.7
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Make output folder
run: mkdir output
- name: Clone master branch
run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git" --branch master --single-branch ./output
- name: Generate static pages
run: pelican content -o output -s publishconf.py
- name: Set git config and add changes
run: |
git config --global user.email "${GITHUB_ACTOR}@https://users.noreply.github.com/"
git config --global user.name "${GITHUB_ACTOR}"
git add --all
working-directory: ./output
- name: Push and send notification
run: |
COMMIT_MESSAGE="Update pages on $(date +'%Y-%m-%d %H:%M:%S')"
git diff-index --quiet --cached HEAD -- && echo "No changes!" && exit 0 || echo $COMMIT_MESSAGE
git commit -m "${COMMIT_MESSAGE}"
git push https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git master
curl "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMessage?text=$COMMIT_MESSAGE %0ALook at ${GITHUB_ACTOR}.github.io %0ARepository%3A github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io&chat_id=${{ secrets.ADMIN_ID }}"
working-directory: ./output
ααΌαααα’αααααα
ααααααβααβααΆαβαααβαα½αβαααβαααα αΆαβαααα»αβααααΆααβαααααααΆαβααβααααΆααβααααα
ααΆαααΈ bot α’αααΈααΆααααα
ααααααααΈα
αααααΆααααααααα
ααααα: www.habr.com