์ ๋ ์ด ์์ ์ด Binder๋ก ์ฌ๋๋ค์ ์ํฌํ๋ก๋ฅผ ๊ฐ์ ํ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๊ณ ์์๊ณ ํน์ BinderHub์์ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉํ ์๋ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ปค๋ฐ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์๋๋ฉด ๋๊ตฐ๊ฐ๊ฐ https://<mybinderhub.org>/v2/gh/org/repo/master
๋ฅผ ๋๋ฅด๊ธฐ๋ง ํ๋ฉด ํด๋น BinderHub์ Docker ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ํ๊ณ ์บ์ํ๋๋ก ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ์ด ๋น๋๋ฅผ ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐํ๊ธฐ ์ํด GitHub ์์
์ด ํน์ URL์ "๋ฐฉ๋ฌธ"ํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ด๊ฒ์ ํน์ BinderHub(์ mybinder.org
)์์ ์คํ๋ ๊ฒ์ผ๋ก ์์๋๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ๊นจ๋ํ ๋ฐฉ๋ฒ์ผ ์ ์์ผ๋ฉฐ Docker ๋ ์ง์คํธ๋ฆฌ์์ ์๋ ์ํธ ์์ฉ๋ ํ์ํ์ง ์์ต๋๋ค(BinderHub์์ ์ํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ )
์๋ง๋ ์ด๊ฒ์ BinderHub ์ ์ฉ์ด๊ธฐ ๋๋ฌธ์ jupyterhub ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํธ์คํ ํด์ผ ํ๋ ์์ ์ผ ๊ฒ์ ๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฑฐ๋ ๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ PR/๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๊ฒํ ํ ์ ์๋ค๋ฉด ์ง์ ๊ตฌํํด ๋ณด๊ณ ์ถ์ต๋๋ค.
Issue-Label Bot์ ์ด ๋ฌธ์ ์ feature_request
๋ ์ด๋ธ์ 0.97์ ์ ๋ขฐ๋๋ก ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค. ๋ด ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ค๋ฉด ์ด ๋๊ธ์ :thumbsup: ๋๋ :thumbsdown:์ผ๋ก ํ์ํ์ญ์์ค!
๋งํฌ: ์ด ๋ด์ ๋ํ ์ฑ ํํ์ด์ง , ๋์๋ณด๋ ๋ฐ ์ฝ๋ .
@choldgraf ์ด๊ฒ์ ํ๋ฅญํ ์์ด๋์ด์ ๋๋ค. ๋งํฌ "๋ฐฉ๋ฌธ"์ ํน์ ์์ ๊ณผ ๊ฐ์ง ์์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๋งํฌ๋ฅผ "๋ฐฉ๋ฌธ"ํ๋ ๋ฐฉ๋ฒ์ ์์๋ด์ผ ํฉ๋๋ค. ๋ฐ์ธ๋ํ๋ธ์ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ ๋ค์ ๋งํฌ๊ฐ ์ค๋น๋๋ฉด? ๊ทธ๋ฐ ๊ฒ์ด ์กด์ฌํฉ๋๊น? ๊ทธ๊ฒ์ด ์์ผ๋ฉด ์ ๋ ๋ ์ผ๋ก ์ผ์ข ์ ํดํน์ ํ ์ ์์ต๋๊น?
์๊ฐ์ ์๋ ค์ฃผ์ธ์. ๋ฐ์ธ๋ ๋น๋ ํ ๋น์ ํธ๋ฆฌ๊ฑฐํ๋ ์์ด๋์ด๊ฐ ๋ง์์ ๋ญ๋๋ค. ํ ๋จ๊ณ ๋ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฐ์ธ๋ํ๋ธ์ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ ๋ค์ ์ค๋น๊ฐ ๋๋ฉด ๋งํฌ๋ฅผ ์ป์ ์ ์๋ API๊ฐ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๊ฒ์ด ์กด์ฌํฉ๋๊น?
๋ค, ๊ทธ๋ ์ต๋๋ค. pyhf
๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ PR์ ๋ณํฉํ ๋ Binder ๋น๋๋ฅผ ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐํ์ฌ ์ถ์ Binder ๋ฐฐ์ง๊ฐ ํญ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋ฏธ๋ฆฌ ๋น๋๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ๋๋ก ํ์ง๋ง @betatim ๊ณผ์ ํ ๋ก ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ธฐ์ต๋๋ค๋ฉด ์ด๊ฒ์ ๋ค์์์ ์ ํํ ๋ณด์ฆํ์ง ์์ต๋๋ค. ๋ฐ์ธ๋ ํ.
@betatim ์ด์ ๊ฐ์ด ๋ฐ์ธ๋ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒ์ด ๊ถ์ฅ๋์ง ์๋ ์ด์ ์ ๋ํด ๋ ์์ธํ ์ค๋ช ํ ์ ์์ต๋๊น? ์ฐ๋ฆฌ๊ฐ ๋ฌป๋ ์ด์ ๋ ์ฐ๋ฆฌ๊ฐ ์ด ์ก์ ์ด ์๋ํ๋ ๋ฐฉ์์ ์ต์ ํํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ด๋ฉฐ @choldgraf ๋ mybinder.org์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ด ์ก์ ์ API๋ฅผ ๋์ฑ ๋จ์ํํ๊ธฐ ์ํด ๋ฐ์ธ๋ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒ์ด๋ผ๊ณ ์ง์ ํ์ต๋๋ค.
์ฌ๋๋ค์ด ์ด ์์ ์ ์ํํ๋๋ก ์ ๊ทน์ ์ผ๋ก ๊ถ์ฅํ์ง ์๋ ์ด์ ๋ ์ด ๊ธฐ๋ฅ์ ๋๊ท๋ชจ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ ์ ํ์ ์ผ๋ถ ํํ๋ฅผ ๊ตฌํํ๊ฑฐ๋ "์ด์ ๋ฒ์ ๋น๋๋ฅผ ์ค์ง"ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ฃผ์ ๋ถ๊ธฐ์ ๋ณํฉํ ๋ ์๋์ผ๋ก ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์ฑ์คํ ์์ ์๊ฐ ์๋ ๊ฐ๋ณ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ๊ด์ฐฎ์ต๋๋ค. ๋ชจ๋ PR์ ๋ชจ๋ ์ปค๋ฐ์์ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์ธ์ฒ๋์ง ์์ ๋์ค์ mybinder.org๋ฅผ ๋น ๋ฅด๊ฒ ์๋ํ ๊ฒ์ ๋๋ค(์ผ๋ถ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ๋น๋ํ๋ ๋ฐ CPU ์๊ฐ์ด ๋ช ์๊ฐ ๊ฑธ๋ฆฝ๋๋ค). .
์ ์ ์ง ๊ด๋ฆฌ๋๊ณ mybinder.org(๋ฉ์ธ ๋ธ๋์น์ ๋ณํฉ ์ ์๋ ๋น๋)์ ์ข์ ๋์์ ๊ตฌํํ๋ ํ๋์ GH ์์ ์ ๊ฐ๋ ๊ฒ์ด ๊ฐ ๊ธธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋์์ ์ ์ ๋ ๋ง์ ์ฌ๋๋ค์ด ์ด์ ๋ํด ํ๋ช ํด์ง๊ณ ์์ ์ ๊ฒ์ ๊ตฌํํ๋ ๊ฒ์ ๋๋ค(์ด ๊ฒฝ์ฐ ๊ฐ๋ณ ์ ์ฅ์๋ฅผ ์ถ์ ํด์ผ ํจ).
์ถ๊ฐ ๋ณด๋์ค ํฌ์ธํธ๋ฅผ ์ป์ผ๋ ค๋ฉด GH ์กฐ์น๊ฐ PR์ด "mybinder.org์์ ์ฌ์ ํ ์๋"ํ๋ ๊ฒฝ์ฐ ๊ถ์ฅ๋๋ ํ
์คํธ ๋ฐฉ๋ฒ๋ ๊ตฌํํ๋ฉด ์ข์ ๊ฒ์
๋๋ค. ์ด๋ CI์์ repo2docker .
์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ์์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๊ฒ์
๋๋ค. . ํด๋ฆญํ๋ฉด ๋ฐ์ธ๋๋ฅผ ์คํํ๋ ๋งํฌ๋ฅผ PR ๋๊ธ์ ๊ฒ์ํ ์๋ ์์ต๋๋ค(์๋ ๋น๋๋ ์๋).
์ถ๊ฐ ํฌ๋ ๋ง์ ์ํด ์ฐ๋ฆฌ๋ ์ฌ๋๋ค์๊ฒ ์ปจํ
์ด๋ ๋ด๋ถ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ์ฝ๋๊ฐ ์ฌ์ ํ ์คํ๋๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ ์๋ ์์ต๋๋ค(์ ๋ repo2docker . -- jupyter-nbconvert --execute some/notebook.ipynb
์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค).
๋ฐ๋ผ์ ์ ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ ์ฌ๋๋ค์ด ๊ณต์ ํ ์ ์๋๋ก mybinder.org์์ ์ฌ์ฉํ ์ ์๋ ์ปดํจํ ๋ฆฌ์์ค์ ์ด๊ฒ์ด ๋๋ฆฌ ํผ์ง ๊ฒฝ์ฐ ํ์ํ ์๋ ์ ํ/๋จ์ฉ ๋ฐฉ์ง ๊ธฐ๋ฅ์ ๊ตฌ์ถํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ธ์ ๋ฆฌ์์ค์ ๋ฌธ์ ์ ๋๋ค. ๋๋ ์ด๊ฒ์ด ์กด์ฌํ๊ธฐ๋ฅผ ์ํ๊ณ ์ฝ๊ฐ์ ์กฐ์ ๊ณผ ํ๋ ฅ์ผ๋ก ๊ทธ๊ฒ์ ํด๋ผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์๋ "API" ์ฝ๋: https://github.com/jupyterhub/binderhub/blob/master/examples/binder-api.py
์ข์ ์ด๊ฒ์ ํ์คํ ๋ค๋ฃจ๊ธฐ ์ฌ์ด ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํผ๋๋ฐฑ์ ๋ค์ ํ์ ์๊ฐ:
์ด ์์ ๋ ์ง๋์ฃผ github ๋ธ๋ก๊ทธ์๋ ์๊ฐ๋์์ต๋๋ค!
name: Binder
on:
pull_request:
types: [opened, reopened]
jobs:
Create-Binder-Badge:
runs-on: ubuntu-latest
steps:
- name: comment on PR with Binder link
uses: actions/github-script<strong i="11">@v1</strong>
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
var BRANCH_NAME = process.env.BRANCH_NAME;
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/${context.repo.owner}/${context.repo.repo}/${BRANCH_NAME}) :point_left: Launch a binder notebook on this branch`
})
env:
BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
์ ์ณ๋๊ณ : @betatim ์๋ง๋ ์์ ์๊ฐ ๋ฐ์ธ๋ ๋ฌธ์์ ์์ด์ผ ํฉ๋๊น?
์ง๋ฌธ์ด๋ ํผ๋๋ฐฑ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์. mybinder.org ์บ์ฑ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ธฐ ์ํด API ํธ์ถ์์ ๋ฒ ์ดํน ํ๋ก์ธ์ค๋ฅผ ์์ํ๊ฒ ์ต๋๋ค.
@choldgraf ๋๋ ์ด๊ฒ์ ์๋ํ์ง๋ง ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ถํ๊ณ ์์ ์ ๋ ์ง์คํธ๋ฆฌ์ ํธ์ํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ์ฆ๊ธฐ์ง ์์ต๋๋ค. API๋ฅผ ์ฌ์ฉํ ๋ ์ผ์ด ์คํจํ๋ฉด ํฌ๋ช ํ์ง ์๊ณ ๋น๋์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ด์ ๋ ๋น๋๊ฐ ์ค๋จ๋๋ ์์ธ์ ์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ ๊ฒฐ๊ณผ ๋น๋ ์๊ฐ์ด ์ค์ ๋ก ์๋นํ ๊ธธ๋ค๋ ๊ฒ์ ์์์ต๋๋ค(์ก์ ์์ ๋น๋ํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ) -- ์ ๊ทธ๋ฐ์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ง๊ธ ๋น์ฅ์ ์บ์๋ฅผ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์์ ์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ Actions์์ ๋น๋ํ๋ ์ฌ๋๋ค์ ์ํ README์ ๋ํ ๊ถ์ฅ ์ฌํญ์ด ์์ง๋ง mybinder.org๋ก ์ฐ๊ธฐํ๋ ์๋ ๋ณด์ฌ์ค๋๋ค.
ํผ๋๋ฐฑ์ด๋ ๋ ๋ง์ ์์ด๋์ด๋ฅผ ๋ฃ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
ํ - ํฅ๋ฏธ๋กญ๋ค์. ๋ค์์ ๋ํด ์ข ๋ ํ์ฅํ ์ ์์ต๋๊น?
API๋ฅผ ์ฌ์ฉํ ๋ ์ผ์ด ์คํจํ๋ฉด ํฌ๋ช ํ์ง ์์ต๋๋ค.
๋ฐ์ธ๋ ๋ฌธ์ ์ธ๊ฐ์? ๊ฐ์ ํ๊ธฐ ์ํด ๋ ๋์ ์ค๋ฅ ๋ก๊น ์ด ํ์ํ ๊ฒ์ด ์์ต๋๊น?
๋น๋ถ๊ฐ์ ์ ๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. mybinder.org๋ Google ์ปจํ ์ด๋ ๋ ์ง์คํธ๋ฆฌ์์ ์คํ๋๋ฉฐ(?) Dockerhub๋ณด๋ค ํนํ ๋๋ฆฌ๊ฑฐ๋ ๋นจ๋ผ์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. Dockerhub์ ์บ์๋ ๋ ์ด์ด ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ด ์์ ์ ์์ต๋๊น?
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์ง์ ๊ฐ์ธ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ Docker์ ์ต์ํ์ง ์์ ์ฌ๋๋ค์ ๋์์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ธ๋์ ์ด์์ ์ด์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์ ์ง์ ๋ ์ง์คํธ๋ฆฌ๊ฐ ํ๋ฅญํ ์ฅ๊ธฐ์ ์๋ฃจ์ ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค(๋ด ์๊ฐ์๋ ๊ธฐ์ ์ ์ผ๋ก ๋ ์ ์๊ณ ์๋ ํน์ ์ฐ๊ตฌ์์ด ์์ด ๋งค์ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค!)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค, ๊ทธ๋ ์ต๋๋ค.
pyhf
๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ PR์ ๋ณํฉํ ๋ Binder ๋น๋๋ฅผ ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐํ์ฌ ์ถ์ Binder ๋ฐฐ์ง๊ฐ ํญ์ ์ฌ์ฉ์๋ฅผ ์ํด ๋ฏธ๋ฆฌ ๋น๋๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ๋๋ก ํ์ง๋ง @betatim ๊ณผ์ ํ ๋ก ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ธฐ์ต๋๋ค๋ฉด ์ด๊ฒ์ ๋ค์์์ ์ ํํ ๋ณด์ฆํ์ง ์์ต๋๋ค. ๋ฐ์ธ๋ ํ.