Commit 530e2b38 authored by Ayaz Salikhov's avatar Ayaz Salikhov

Merge branch 'master' into asalikhov/py_codestyle

parents e28a197b 9b87b162
name: Build Docker Images
on:
pull_request:
paths-ignore:
- "*.md"
- "binder/**"
- "docs/**"
- "examples/**"
push:
branches:
- master
paths-ignore:
- "*.md"
- "binder/**"
- "docs/**"
- "examples/**"
jobs:
build:
name: Build Docker Images
runs-on: ubuntu-latest
if: >
!contains(github.event.head_commit.message, 'ci skip') &&
!contains(github.event.pull_request.title, 'ci skip')
steps:
- name: Clone Main Repo
uses: actions/checkout@v2
with:
path: main
- name: Clone Wiki
uses: actions/checkout@v2
with:
repository: ${{github.repository}}.wiki
path: wiki
- name: Set Up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install Dev Dependencies
run: |
python -m pip install --upgrade pip
make -C main dev-env lint-install
- name: Lint Dockerfiles
run: make -C main lint-all
- name: Build Docker Images
run: make -C main build-test-all
- name: Run Post-Build Hooks
run: make -C main hook-all
env:
COMMIT_MSG: "${{github.event.head_commit.message}}"
WIKI_PATH: ../wiki
- name: Login to Docker Hub
if: github.ref == 'refs/heads/master'
run: >
echo '${{secrets.DOCKERHUB_PASSWORD}}' | docker login --username
'${{secrets.DOCKERHUB_USERNAME}}' --password-stdin
- name: Push Images to DockerHub
if: github.ref == 'refs/heads/master'
run: make -C main push-all
- name: Push Wiki to GitHub
if: github.ref == 'refs/heads/master'
# Pass GITHUB_REPOSITORY directly to avoid conflict with GitHub Actions built-in env var
run: make -C main git-commit GITHUB_REPOSITORY='${{ github.repository }}.wiki'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
LOCAL_PATH: ../wiki
name: Build Sphinx Documentation
on:
pull_request:
paths:
- "docs/**"
- ".github/workflows/sphinx.yml"
push:
branches:
- master
paths:
- "docs/**"
- ".github/workflows/sphinx.yml"
jobs:
build:
name: Build Sphinx Documentation
runs-on: ubuntu-latest
if: >
!contains(github.event.head_commit.message , 'ci skip') &&
!contains(github.event.pull_request.title, 'ci skip')
steps:
- name: Checkout Repo
uses: actions/checkout@v2
- name: Set Up Python
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Install Dev Dependencies
run: |
python -m pip install --upgrade pip
make dev-env
- name: Build Documentation
run: make docs
- name: Extract Source Strings
if: github.ref == 'refs/heads/master'
working-directory: docs
run: |
make gettext
sphinx-intl update -p _build/gettext -l en
- name: Push Strings to Master
if: github.ref == 'refs/heads/master'
run: make git-commit
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_REPOSITORY: ${{ github.repository }}
LOCAL_PATH: ./docs/locale/en
---
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.1.0
hooks:
- id: check-yaml
files: .*\.(yaml|yml)$
- repo: https://github.com/adrienverge/yamllint.git
rev: v1.23.0
hooks:
- id: yamllint
args: ['-d {extends: relaxed, rules: {line-length: disable}}', '-s']
files: \.(yaml|yml)$
- repo: https://github.com/openstack-dev/bashate.git
rev: 2.0.0
hooks:
- id: bashate
- repo: local
hooks:
- id: hadolint
name: Hadolint linter
description: Runs Hadolint to check for Dockerfile best practices
language: system
types:
- dockerfile
entry: hadolint
---
dist: bionic
language: python
python:
- 3.7
sudo: required
services:
- docker
jobs:
include:
- stage: diff-test
install:
- pip install --upgrade pip
- make dev-env
- make lint-install
script:
- set -e
- if [ $(make n-docs-diff) -ne 0 ]; then make docs; fi;
- if [ $(make n-other-diff) -ne 0 ]; then make lint-build-test-all DARGS="--build-arg TEST_ONLY_BUILD=1"; fi;
- stage: push-tx
install:
- pip install --upgrade pip
- make dev-env
script:
- if [ $(make n-docs-diff DIFF_RANGE=$TRAVIS_COMMIT_RANGE) -ne 0 ]; then make tx-en; fi;
- stage: full-test
install:
- pip install --upgrade pip
- make dev-env
- make lint-install
script:
- set -e
- make docs
- make lint-build-test-all DARGS="--build-arg TEST_ONLY_BUILD=1"
stages:
- name: diff-test
if: type = pull_request
- name: push-tx
if: type = push AND branch = master
- name: full-test
if: type = cron AND branch = master
env:
global:
# yamllint disable-line
secure: JDQKgB1laaenzmEGI9gduwK/iS0030qsl62njJg3jib0R8wxBi2OeetEdoGl9m4NFsqqnp0OO7nm4rzGfuwjL1A38flSlXOTxhjm/hvo3vmnqVu5lDcdk9+IRkafnfd3Dyd86tLxRVETOqZwCLmdNkB2fmQII8du5IIqbJuUGp8DrG7kVMf3NBr9rjkZRfByQrgG4s1NXuT61VvpWMPJAOhcrImuHBheVJDEV0U3n6Xavd7Wo+pAHrHU8exvYTZ1IzZMbHc6K0iC/NpCHcH9+9DAeLDk/q1aDNqbTExnQevOHZzNqgHC2qFOlN4jfy/TLYLpLXtUismneBBqVSK3iZso3Vqy2BRXWgouI+Tt+08ffocy9XPwEzSwkgPgDlFVUikPOy5imwjpDb13RMIyMY4CKlSOdQx2rH2kPkZ0MJJPcki3KGuGl3qRvqyblMn+lZvjAu6WVLZfo7EtcxsQ0ZZxbAbGoUVl27FHg+UvIfC0I3wEcZIp7oED47Q8s0MdCijD3AwkRPvx/iyp3J0A42su7kkOooFcmUItEIqegQJ4Aki1FBv2i5vHmBobClktytZceLsKvzCeLjMpL9HcUVfUaJDKRwtUYIozpYeBnac+E6J1s6glcqLrXIHWez8N6SzokBa6SPqdtODdzzk5OJupByub6CYWsRXvxIQ7/wI=
......@@ -4,9 +4,8 @@
# Use bash for inline if-statements in arch_patch target
SHELL:=bash
OWNER:=jupyter
ARCH:=$(shell uname -m)
DIFF_RANGE?=master...HEAD
OWNER?=jupyter
# Need to list the images in build dependency order
ifeq ($(ARCH),ppc64le)
......@@ -26,6 +25,7 @@ ALL_IMAGES:=$(ALL_STACKS)
# Linter
HADOLINT="${HOME}/hadolint"
HADOLINT_VERSION="v1.18.0"
help:
# http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
......@@ -74,29 +74,38 @@ dev/%: ## run a foreground container for a stack
docker run -it --rm -p $(PORT):8888 $(DARGS) $(OWNER)/$(notdir $@) $(ARGS)
dev-env: ## install libraries required to build docs and run tests
pip install -r requirements-dev.txt
@pip install -r requirements-dev.txt
lint/%: ARGS?=
lint/%: ## lint the dockerfile(s) for a stack
@echo "Linting Dockerfiles in $(notdir $@)..."
@git ls-files --exclude='Dockerfile*' --ignored $(notdir $@) | grep -v ppc64 | xargs -L 1 $(HADOLINT) $(ARGS)
@echo "Linting Dockerfiles done!"
flake8-lint-all:
@echo "Linting Python source files..."
@git ls-files '**.py' | xargs -L 1 flake8
@echo "Linting Python source files done!"
lint-all: flake8-lint-all $(foreach I,$(ALL_IMAGES),lint/$(I) ) ## lint all stacks
lint-build-test-all: flake8-lint-all $(foreach I,$(ALL_IMAGES),lint/$(I) arch_patch/$(I) build/$(I) test/$(I) ) ## lint, build and test all stacks
docs: ## build HTML documentation
make -C docs html
lint-install: ## install hadolint
@echo "Installing hadolint at $(HADOLINT) ..."
@curl -sL -o $(HADOLINT) "https://github.com/hadolint/hadolint/releases/download/v1.18.0/hadolint-$(shell uname -s)-$(shell uname -m)"
@chmod 700 $(HADOLINT)
@echo "Installation done!"
@$(HADOLINT) --version
git-commit: LOCAL_PATH?=.
git-commit: GITHUB_SHA?=$(shell git rev-parse HEAD)
git-commit: GITHUB_REPOSITORY?=jupyter/docker-stacks
git-commit: GITHUB_TOKEN?=
git-commit: ## commit outstading git changes and push to remote
@git config --global user.name "GitHub Actions"
@git config --global user.email "actions@users.noreply.github.com"
@echo "Publishing outstanding changes in $(LOCAL_PATH) to $(GITHUB_REPOSITORY)"
@cd $(LOCAL_PATH) && \
git remote add publisher https://$(GITHUB_TOKEN)@github.com/$(GITHUB_REPOSITORY).git && \
git checkout master && \
git add -A -- . && \
git commit -m "[ci skip] Automated publish for $(GITHUB_SHA)" || exit 0
@cd $(LOCAL_PATH) && git push -u publisher master
hook/%: export COMMIT_MSG?=$(shell git log -1 --pretty=%B)
hook/%: export GITHUB_SHA?=$(shell git rev-parse HEAD)
hook/%: export WIKI_PATH?=../wiki
hook/%: ## run post-build hooks for an image
BUILD_TIMESTAMP="$$(date -u +%FT%TZ)" \
DOCKER_REPO="$(OWNER)/$(notdir $@)" \
IMAGE_NAME="$(OWNER)/$(notdir $@):latest" \
IMAGE_SHORT_NAME="$(notdir $@)" \
$(SHELL) $(notdir $@)/hooks/run_hook
hook-all: $(foreach I,$(ALL_IMAGES),hook/$(I) ) ## run post-build hooks for all images
img-clean: img-rm-dang img-rm ## clean dangling and jupyter images
......@@ -112,20 +121,40 @@ img-rm-dang: ## remove dangling images (tagged None)
@echo "Removing dangling images ..."
-docker rmi --force $(shell docker images -f "dangling=true" -q) 2> /dev/null
docs: ## build HTML documentation
make -C docs html
lint/%: ARGS?=
lint/%: ## lint the dockerfile(s) for a stack
@echo "Linting Dockerfiles in $(notdir $@)..."
@git ls-files --exclude='Dockerfile*' --ignored $(notdir $@) | grep -v ppc64 | xargs -L 1 $(HADOLINT) $(ARGS)
@echo "Linting done!"
lint-all: $(foreach I,$(ALL_IMAGES),lint/$(I) ) ## lint all stacks
n-docs-diff: ## number of docs/ files changed since branch from master
@git diff --name-only $(DIFF_RANGE) -- docs/ ':!docs/locale' | wc -l | awk '{print $$1}'
lint-build-test-all: $(foreach I,$(ALL_IMAGES),lint/$(I) arch_patch/$(I) build/$(I) test/$(I) ) ## lint, build and test all stacks
lint-install: ## install hadolint
@echo "Installing hadolint at $(HADOLINT) ..."
@curl -sL -o $(HADOLINT) "https://github.com/hadolint/hadolint/releases/download/$(HADOLINT_VERSION)/hadolint-$(shell uname -s)-$(shell uname -m)"
@chmod 700 $(HADOLINT)
@echo "Installation done!"
@$(HADOLINT) --version
n-other-diff: ## number of files outside docs/ changed since branch from master
@git diff --name-only $(DIFF_RANGE) -- ':!docs/' | wc -l | awk '{print $$1}'
pre-commit-all: ## run pre-commit hook on all files
@pre-commit run --all
pre-commit-install: ## set up the git hook scripts
@pre-commit --version
@pre-commit install
pull/%: DARGS?=
pull/%: ## pull a jupyter image
docker pull $(DARGS) $(OWNER)/$(notdir $@)
push/%: DARGS?=
push/%: ## push all tags for a jupyter image
docker push $(DARGS) $(OWNER)/$(notdir $@)
push-all: $(foreach I,$(ALL_IMAGES),push/$(I) ) ## push all tagged images
run/%: DARGS?=
run/%: ## run a bash in interactive mode in a stack
docker run -it --rm $(DARGS) $(OWNER)/$(notdir $@) $(SHELL)
......@@ -134,20 +163,6 @@ run-sudo/%: DARGS?=
run-sudo/%: ## run a bash in interactive mode as root in a stack
docker run -it --rm -u root $(DARGS) $(OWNER)/$(notdir $@) $(SHELL)
tx-en: ## rebuild en locale strings and push to master (req: GH_TOKEN)
@git config --global user.email "travis@travis-ci.org"
@git config --global user.name "Travis CI"
@git checkout master
@make -C docs clean gettext
@cd docs && sphinx-intl update -p _build/gettext -l en
@git add docs/locale/en
@git commit -m "[ci skip] Update en source strings (build: $$TRAVIS_JOB_NUMBER)"
@git remote add origin-tx https://$${GH_TOKEN}@github.com/jupyter/docker-stacks.git
@git push -u origin-tx master
test/%: ## run tests against a stack (only common tests or common tests + specific tests)
@if [ ! -d "$(notdir $@)/test" ]; then TEST_IMAGE="$(OWNER)/$(notdir $@)" pytest -m "not info" test; \
else TEST_IMAGE="$(OWNER)/$(notdir $@)" pytest -m "not info" test $(notdir $@)/test; fi
......
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/all-spark-notebook.svg)](https://hub.docker.com/r/jupyter/all-spark-notebook/) [![docker stars](https://img.shields.io/docker/stars/jupyter/all-spark-notebook.svg)](https://hub.docker.com/r/jupyter/all-spark-notebook/) [![image metadata](https://images.microbadger.com/badges/image/jupyter/all-spark-notebook.svg)](https://microbadger.com/images/jupyter/all-spark-notebook "jupyter/all-spark-notebook image metadata")
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/all-spark-notebook.svg)](https://hub.docker.com/r/jupyter/all-spark-notebook/)
[![docker stars](https://img.shields.io/docker/stars/jupyter/all-spark-notebook.svg)](https://hub.docker.com/r/jupyter/all-spark-notebook/)
[![image metadata](https://images.microbadger.com/badges/image/jupyter/all-spark-notebook.svg)](https://microbadger.com/images/jupyter/all-spark-notebook "jupyter/all-spark-notebook image metadata")
# Jupyter Notebook Python, Scala, R, Spark Stack
Please visit the documentation site for help using and contributing to this image and others.
GitHub Actions in the https://github.com/jupyter/docker-stacks project builds and pushes this image
to Docker Hub.
* [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
* [Selecting an Image :: Core Stacks :: jupyter/all-spark-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-all-spark-notebook)
* [Image Specifics :: Apache Spark](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/specifics.html#apache-spark)
Please visit the project documentation site for help using and contributing to this image and
others.
- [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
- [Selecting an Image :: Core Stacks :: jupyter/all-spark-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-all-spark-notebook)
- [Image Specifics :: Apache Spark](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/specifics.html#apache-spark)
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${SOURCE_COMMIT}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "$INDEX_FILE"
\ No newline at end of file
#!/bin/bash
set -e
# Tag the latest build with the short git sha. Push the tag in addition
# to the "latest" tag already pushed.
GIT_SHA_TAG=${SOURCE_COMMIT:0:12}
docker tag $IMAGE_NAME $DOCKER_REPO:$GIT_SHA_TAG
docker push $DOCKER_REPO:$GIT_SHA_TAG
# Create a working directory.
BUILD_TIMESTAMP=$(date -u +%FT%TZ)
WORKDIR=$(mktemp -d)
GIT_URI="git@github.com:jupyter/docker-stacks.wiki.git"
GIT_SANDBOX="${WORKDIR}/docker-stacks.wiki"
IMAGE_SHORT_NAME=$(basename $DOCKER_REPO)
MANIFEST_FILE="${GIT_SANDBOX}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
INDEX_FILE="${GIT_SANDBOX}/Home.md"
# Configure git so it can push back to GitHub.
eval $(ssh-agent -s)
ssh-add <(base64 -d <(echo "$DEPLOY_KEY"))
ssh-add -l
git config --global user.email "jupyter@googlegroups.com"
git config --global user.name "Jupyter Docker Stacks"
# Glone the GitHub project wiki.
pushd "$WORKDIR"
git clone "$GIT_URI"
popd
# Render the build manifest template.
mkdir -p $(dirname "$MANIFEST_FILE")
source hooks/manifest.tmpl
source hooks/index.tmpl
# Push the wiki update back to GitHub.
pushd "$GIT_SANDBOX"
git add .
git commit -m "DOC: Build ${MANIFEST_FILE}"
git push -u origin master
popd
# Shutdown the ssh agent for good measure.
ssh-agent -k
# Invoke all downstream build triggers.
set +e
for url in $(echo $NEXT_BUILD_TRIGGERS | sed "s/,/ /g")
do
curl -X POST $url
done
\ No newline at end of file
#!/bin/bash
set -e
# Apply tags
GIT_SHA_TAG=${GITHUB_SHA:0:12}
docker tag $IMAGE_NAME "$DOCKER_REPO:$GIT_SHA_TAG"
# Update index
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${GITHUB_SHA}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "${WIKI_PATH}/Home.md"
# Build manifest
MANIFEST_FILE="${WIKI_PATH}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
mkdir -p $(dirname "$MANIFEST_FILE")
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* DockerHub build code: ${BUILD_CODE}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${SOURCE_COMMIT}](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})
* Git commit SHA: [${GITHUB_SHA}](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})
* Git commit message:
\`\`\`
${COMMIT_MSG}
......
......@@ -4,7 +4,8 @@
# Ubuntu 20.04 (focal)
# https://hub.docker.com/_/ubuntu/?tab=tags&name=focal
# OS/ARCH: linux/amd64
ARG ROOT_CONTAINER=ubuntu:focal-20200423@sha256:238e696992ba9913d24cfc3727034985abd136e08ee3067982401acdc30cbf3f
ARG ROOT_CONTAINER=ubuntu:focal-20200703@sha256:d5a6519d9f048100123c568eb83f7ef5bfcad69b01424f420f17c932b00dea76
ARG BASE_CONTAINER=$ROOT_CONTAINER
FROM $BASE_CONTAINER
......@@ -75,9 +76,9 @@ RUN mkdir /home/$NB_USER/work && \
fix-permissions /home/$NB_USER
# Install conda as jovyan and check the md5 sum provided on the download site
ENV MINICONDA_VERSION=4.8.2 \
MINICONDA_MD5=cbda751e713b5a95f187ae70b509403f \
CONDA_VERSION=4.8.2
ENV MINICONDA_VERSION=4.8.3 \
MINICONDA_MD5=d63adf39f2c220950a063e0529d4ff74 \
CONDA_VERSION=4.8.3
WORKDIR /tmp
RUN wget --quiet https://repo.continuum.io/miniconda/Miniconda3-py38_${MINICONDA_VERSION}-Linux-x86_64.sh && \
......@@ -115,7 +116,7 @@ RUN conda install --quiet --yes 'tini=0.18.0' && \
RUN conda install --quiet --yes \
'notebook=6.0.3' \
'jupyterhub=1.1.0' \
'jupyterlab=2.1.4' && \
'jupyterlab=2.1.5' && \
conda clean --all -f -y && \
npm cache clean --force && \
jupyter notebook --generate-config && \
......
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/base-notebook.svg)](https://hub.docker.com/r/jupyter/base-notebook/) [![docker stars](https://img.shields.io/docker/stars/jupyter/base-notebook.svg)](https://hub.docker.com/r/jupyter/base-notebook/) [![image metadata](https://images.microbadger.com/badges/image/jupyter/base-notebook.svg)](https://microbadger.com/images/jupyter/base-notebook "jupyter/base-notebook image metadata")
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/base-notebook.svg)](https://hub.docker.com/r/jupyter/base-notebook/)
[![docker stars](https://img.shields.io/docker/stars/jupyter/base-notebook.svg)](https://hub.docker.com/r/jupyter/base-notebook/)
[![image metadata](https://images.microbadger.com/badges/image/jupyter/base-notebook.svg)](https://microbadger.com/images/jupyter/base-notebook "jupyter/base-notebook image metadata")
# Base Jupyter Notebook Stack
Please visit the documentation site for help using and contributing to this image and others.
GitHub Actions in the https://github.com/jupyter/docker-stacks project builds and pushes this image
to Docker Hub.
* [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
* [Selecting an Image :: Core Stacks :: jupyter/base-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-base-notebook)
Please visit the project documentation site for help using and contributing to this image and
others.
- [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
- [Selecting an Image :: Core Stacks :: jupyter/base-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-base-notebook)
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${PY_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${NB_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${LAB_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${HUB_VERSION_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${SOURCE_COMMIT}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "$INDEX_FILE"
\ No newline at end of file
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* DockerHub build code: ${BUILD_CODE}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${SOURCE_COMMIT}](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})
* Git commit message:
\`\`\`
${COMMIT_MSG}
\`\`\`
## Python Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} python --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda info)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda list)
\`\`\`
## Apt Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} apt list --installed)
\`\`\`
EOF
\ No newline at end of file
#!/bin/bash
if [[ "$COMMIT_MSG" = *"skip ci"* || "$COMMIT_MSG" = *"ci skip"* ]]; then
exit 1;
fi
\ No newline at end of file
#!/bin/bash
set -e
# Apply and push all tags
source hooks/apply_tags
docker push $DOCKER_REPO
# Create a working directory.
BUILD_TIMESTAMP=$(date -u +%FT%TZ)
WORKDIR=$(mktemp -d)
GIT_URI="git@github.com:jupyter/docker-stacks.wiki.git"
GIT_SANDBOX="${WORKDIR}/docker-stacks.wiki"
IMAGE_SHORT_NAME=$(basename $DOCKER_REPO)
MANIFEST_FILE="${GIT_SANDBOX}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
INDEX_FILE="${GIT_SANDBOX}/Home.md"
# Configure git so it can push back to GitHub.
eval $(ssh-agent -s)
ssh-add <(base64 -d <(echo "$DEPLOY_KEY"))
ssh-add -l
git config --global user.email "jupyter@googlegroups.com"
git config --global user.name "Jupyter Docker Stacks"
# Glone the GitHub project wiki.
pushd "$WORKDIR"
git clone "$GIT_URI"
popd
# Render the build manifest template.
mkdir -p $(dirname "$MANIFEST_FILE")
source hooks/manifest.tmpl
source hooks/index.tmpl
# Push the wiki update back to GitHub.
pushd "$GIT_SANDBOX"
git add .
git commit -m "DOC: Build ${MANIFEST_FILE}"
git push -u origin master
popd
# Shutdown the ssh agent for good measure.
ssh-agent -k
# Invoke all downstream build triggers.
set +e
for url in $(echo $NEXT_BUILD_TRIGGERS | sed "s/,/ /g")
do
curl -X POST $url
done
\ No newline at end of file
#!/bin/bash
set -e
# Tag the latest build with the short git sha as well as version of key runtimes
# and packages.
GIT_SHA_TAG=${SOURCE_COMMIT:0:12}
# Apply tags
GIT_SHA_TAG=${GITHUB_SHA:0:12}
docker tag $IMAGE_NAME "$DOCKER_REPO:$GIT_SHA_TAG"
PY_VERSION_TAG="python-$(docker run --rm ${IMAGE_NAME} python --version 2>&1 | awk '{print $2}')"
docker tag $IMAGE_NAME "$DOCKER_REPO:$PY_VERSION_TAG"
......@@ -12,4 +11,43 @@ docker tag $IMAGE_NAME "$DOCKER_REPO:${NB_VERSION_TAG%% }"
LAB_VERSION_TAG="lab-$(docker run --rm -a STDOUT ${IMAGE_NAME} jupyter-lab --version | tr -d '\r')"
docker tag $IMAGE_NAME "$DOCKER_REPO:${LAB_VERSION_TAG%%\r}"
HUB_VERSION_TAG="hub-$(docker run --rm -a STDOUT ${IMAGE_NAME} jupyterhub --version | tr -d '\r')"
docker tag $IMAGE_NAME "$DOCKER_REPO:${HUB_VERSION_TAG%%\r}"
\ No newline at end of file
docker tag $IMAGE_NAME "$DOCKER_REPO:${HUB_VERSION_TAG%%\r}"
# Update index
INDEX_FILE="${WIKI_PATH}/Home.md"
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${PY_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${NB_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${LAB_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${HUB_VERSION_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${GITHUB_SHA}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "$INDEX_FILE"
# Build manifest
MANIFEST_FILE="${WIKI_PATH}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
mkdir -p $(dirname "$MANIFEST_FILE")
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${GITHUB_SHA}](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})
* Git commit message:
\`\`\`
${COMMIT_MSG}
\`\`\`
## Python Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} python --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda info)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda list)
\`\`\`
## Apt Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} apt list --installed)
\`\`\`
EOF
......@@ -101,7 +101,7 @@ if [ $(id -u) == 0 ] ; then
echo "Executing the command: ${cmd[@]}"
exec sudo -E -H -u $NB_USER PATH=$PATH XDG_CACHE_HOME=/home/$NB_USER/.cache PYTHONPATH=${PYTHONPATH:-} "${cmd[@]}"
else
if [[ "$NB_UID" == "$(id -u jovyan)" && "$NB_GID" == "$(id -g jovyan)" ]]; then
if [[ "$NB_UID" == "$(id -u jovyan 2>/dev/null)" && "$NB_GID" == "$(id -g jovyan 2>/dev/null)" ]]; then
# User is not attempting to override user/group via environment
# variables, but they could still have overridden the uid/gid that
# container runs as. Check that the user has an entry in the passwd
......
......@@ -78,6 +78,9 @@ def test_nb_user_change(container):
command=['start.sh', 'bash', '-c', 'sleep infinity']
)
# Give the chown time to complete. Use sleep, not wait, because the
# container sleeps forever.
time.sleep(10)
LOGGER.info(f"Checking if the user is changed to {nb_user} by the start script ...")
output = running_container.logs(stdout=True).decode("utf-8")
assert f"Set username to: {nb_user}" in output, f"User is not changed to {nb_user}"
......@@ -127,6 +130,7 @@ def test_chown_home(container):
],
command=['start.sh', 'bash', '-c', 'chown root:root /home/jovyan && ls -alsh /home']
)
c.wait(timeout=120)
assert "Changing ownership of /home/jovyan to 1000:100 with options '-R'" in c.logs(stdout=True).decode('utf-8')
......
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/datascience-notebook.svg)](https://hub.docker.com/r/jupyter/datascience-notebook/) [![docker stars](https://img.shields.io/docker/stars/jupyter/datascience-notebook.svg)](https://hub.docker.com/r/jupyter/datascience-notebook/) [![image metadata](https://images.microbadger.com/badges/image/jupyter/datascience-notebook.svg)](https://microbadger.com/images/jupyter/datascience-notebook "jupyter/datascience-notebook image metadata")
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/datascience-notebook.svg)](https://hub.docker.com/r/jupyter/datascience-notebook/)
[![docker stars](https://img.shields.io/docker/stars/jupyter/datascience-notebook.svg)](https://hub.docker.com/r/jupyter/datascience-notebook/)
[![image metadata](https://images.microbadger.com/badges/image/jupyter/datascience-notebook.svg)](https://microbadger.com/images/jupyter/datascience-notebook "jupyter/datascience-notebook image metadata")
# Jupyter Notebook Data Science Stack
Please visit the documentation site for help using and contributing to this image and others.
GitHub Actions in the https://github.com/jupyter/docker-stacks project builds and pushes this image
to Docker Hub.
* [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
* [Selecting an Image :: Core Stacks :: jupyter/datascience-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-datascience-notebook)
Please visit the project documentation site for help using and contributing to this image and
others.
- [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
- [Selecting an Image :: Core Stacks :: jupyter/datascience-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-datascience-notebook)
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${PY_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${JULIA_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${R_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${NB_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${LAB_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${HUB_VERSION_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${SOURCE_COMMIT}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "$INDEX_FILE"
\ No newline at end of file
#!/bin/bash
set -e
# Apply and push all tags
source hooks/apply_tags
docker push $DOCKER_REPO
# Tag the latest build with the short git sha. Push the tag in addition
# to the "latest" tag already pushed.
GIT_SHA_TAG=${SOURCE_COMMIT:0:12}
docker tag $IMAGE_NAME $DOCKER_REPO:$GIT_SHA_TAG
docker push $DOCKER_REPO:$GIT_SHA_TAG
# Create a working directory.
BUILD_TIMESTAMP=$(date -u +%FT%TZ)
WORKDIR=$(mktemp -d)
GIT_URI="git@github.com:jupyter/docker-stacks.wiki.git"
GIT_SANDBOX="${WORKDIR}/docker-stacks.wiki"
IMAGE_SHORT_NAME=$(basename $DOCKER_REPO)
MANIFEST_FILE="${GIT_SANDBOX}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
INDEX_FILE="${GIT_SANDBOX}/Home.md"
# Configure git so it can push back to GitHub.
eval $(ssh-agent -s)
ssh-add <(base64 -d <(echo "$DEPLOY_KEY"))
ssh-add -l
git config --global user.email "jupyter@googlegroups.com"
git config --global user.name "Jupyter Docker Stacks"
# Glone the GitHub project wiki.
pushd "$WORKDIR"
git clone "$GIT_URI"
popd
# Render the build manifest template.
mkdir -p $(dirname "$MANIFEST_FILE")
source hooks/manifest.tmpl
source hooks/index.tmpl
# Push the wiki update back to GitHub.
pushd "$GIT_SANDBOX"
git add .
git commit -m "DOC: Build ${MANIFEST_FILE}"
git push -u origin master
popd
# Shutdown the ssh agent for good measure.
ssh-agent -k
# Invoke all downstream build triggers.
set +e
for url in $(echo $NEXT_BUILD_TRIGGERS | sed "s/,/ /g")
do
curl -X POST $url
done
#!/bin/bash
set -e
# Tag the latest build with the short git sha as well as version of key runtimes
# and packages.
GIT_SHA_TAG=${SOURCE_COMMIT:0:12}
# Apply tags
GIT_SHA_TAG=${GITHUB_SHA:0:12}
docker tag $IMAGE_NAME "$DOCKER_REPO:$GIT_SHA_TAG"
PY_VERSION_TAG="python-$(docker run --rm ${IMAGE_NAME} python --version 2>&1 | awk '{print $2}')"
docker tag $IMAGE_NAME "$DOCKER_REPO:$PY_VERSION_TAG"
......@@ -17,3 +16,63 @@ LAB_VERSION_TAG="lab-$(docker run --rm -a STDOUT ${IMAGE_NAME} jupyter-lab --ver
docker tag $IMAGE_NAME "$DOCKER_REPO:${LAB_VERSION_TAG%%\r}"
HUB_VERSION_TAG="hub-$(docker run --rm -a STDOUT ${IMAGE_NAME} jupyterhub --version | tr -d '\r')"
docker tag $IMAGE_NAME "$DOCKER_REPO:${HUB_VERSION_TAG%%\r}"
# Update index
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${PY_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${JULIA_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${R_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${NB_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${LAB_VERSION_TAG}\`<br />\`jupyter/${IMAGE_SHORT_NAME}:${HUB_VERSION_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${GITHUB_SHA}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "${WIKI_PATH}/Home.md"
# Build manifest
MANIFEST_FILE="${WIKI_PATH}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
mkdir -p $(dirname "$MANIFEST_FILE")
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${GITHUB_SHA}](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})
* Git commit message:
\`\`\`
${COMMIT_MSG}
\`\`\`
## Julia Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} julia -E 'using InteractiveUtils; versioninfo()')
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} julia -E 'import Pkg; Pkg.status()')
\`\`\`
## Python Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} python --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda info)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda list)
\`\`\`
## R Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} R --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} R --silent -e 'installed.packages(.Library)[, c(1,3)]')
\`\`\`
## Apt Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} apt list --installed)
\`\`\`
EOF
\ No newline at end of file
# New Features
Thank you for contributing to the Jupyter Docker Stacks! We review pull requests of new features (e.g., new packages, new scripts, new flags) to balance the value of the images to the Jupyter community with the cost of maintaining the images over time.
Thank you for contributing to the Jupyter Docker Stacks! We review pull requests of new features
(e.g., new packages, new scripts, new flags) to balance the value of the images to the Jupyter
community with the cost of maintaining the images over time.
## Suggesting a New Feature
Please follow the process below to suggest a new feature for inclusion in one of the core stacks:
1. [Open a GitHub issue](https://github.com/jupyter/docker-stacks/issues) describing the feature you'd like to contribute.
2. Discuss with the maintainers whether the addition makes sense in [one of the core stacks](../using/selecting.md#Core-Stacks), as a [recipe in the documentation](recipes.md), as a [community stack](stacks.md), or as something else entirely.
1. [Open a GitHub issue](https://github.com/jupyter/docker-stacks/issues) describing the feature
you'd like to contribute.
2. Discuss with the maintainers whether the addition makes sense in
[one of the core stacks](../using/selecting.md#Core-Stacks), as a
[recipe in the documentation](recipes.md), as a [community stack](stacks.md), or as something
else entirely.
## Selection Criteria
Roughly speaking, we evaluate new features based on the following criteria:
* **Usefulness to Jupyter users**: Is the feature generally applicable across domains? Does it work with Jupyter Notebook, JupyterLab, JupyterHub, etc.?
* **Fit with the image purpose**: Does the feature match the theme of the stack in which it will be added? Would it fit better in a new, community stack?
* **Complexity of build / runtime configuration**: How many lines of code does the feature require in one of the Dockerfiles or startup scripts? Does it require new scripts entirely? Do users need to adjust how they use the images?
* **Impact on image metrics**: How many bytes does the feature and its dependencies add to the image(s)? How many minutes do they add to the build time?
* **Ability to support the addition**: Can existing maintainers answer user questions and address future build issues? Are the contributors interested in helping with long-term maintenance? Can we write tests to ensure the feature continues to work over time?
- **Usefulness to Jupyter users**: Is the feature generally applicable across domains? Does it work
with Jupyter Notebook, JupyterLab, JupyterHub, etc.?
- **Fit with the image purpose**: Does the feature match the theme of the stack in which it will be
added? Would it fit better in a new, community stack?
- **Complexity of build / runtime configuration**: How many lines of code does the feature require
in one of the Dockerfiles or startup scripts? Does it require new scripts entirely? Do users need
to adjust how they use the images?
- **Impact on image metrics**: How many bytes does the feature and its dependencies add to the
image(s)? How many minutes do they add to the build time?
- **Ability to support the addition**: Can existing maintainers answer user questions and address
future build issues? Are the contributors interested in helping with long-term maintenance? Can we
write tests to ensure the feature continues to work over time?
## Submitting a Pull Request
If there's agreement that the feature belongs in one or more of the core stacks:
1. Implement the feature in a local clone of the `jupyter/docker-stacks` project.
2. Please build the image locally before submitting a pull request. Building the image locally shortens the debugging cycle by taking some load off [Travis CI](http://travis-ci.org/), which graciously provides free build services for open source projects like this one. If you use `make`, call:
```bash
make build/somestack-notebook
```
3. [Submit a pull request](https://github.com/PointCloudLibrary/pcl/wiki/A-step-by-step-guide-on-preparing-and-submitting-a-pull-request) (PR) with your changes.
4. Watch for Travis to report a build success or failure for your PR on GitHub.
2. Please build the image locally before submitting a pull request. Building the image locally
shortens the debugging cycle by taking some load off GitHub Actions, which graciously provide
free build services for open source projects like this one. If you use `make`, call:
```bash
make build/somestack-notebook
```
3. [Submit a pull request](https://github.com/PointCloudLibrary/pcl/wiki/A-step-by-step-guide-on-preparing-and-submitting-a-pull-request)
(PR) with your changes.
4. Watch for GitHub to report a build success or failure for your PR on GitHub.
5. Discuss changes with the maintainers and address any build issues.
# Image Lint
# Lint
In order to enforce some rules **linters** are used in this project.
Linters can be run either during the **development phase** (by the developer) and during **integration phase** (by Travis).
To integrate and enforce this process in the project lifecycle we are using **git hooks** through [pre-commit][pre-commit].
## Pre-commit hook
### Installation
pre-commit is a Python package that needs to be installed.
This can be achieved by using the generic task used to install all Python development dependencies.
```sh
# Install all development dependencies for the project
$ make dev-env
# It can also be installed directly
$ pip install pre-commit
```
Then the git hooks scripts configured for the project in `.pre-commit-config.yaml` need to be installed in the local git repository.
```sh
$ make pre-commit-install
```
### Run
Now pre-commit (and so configured hooks) will run automatically on `git commit` on each changed file.
However it is also possible to trigger it against all files.
```sh
$ make pre-commit-all
```
## Image Lint
To comply with [Docker best practices][dbp], we are using the [Hadolint][hadolint] tool to analyse each `Dockerfile` .
## Installation
### Installation
There is a specific `make` target to install the linter.
By default `hadolint` will be installed in `${HOME}/hadolint`.
......@@ -15,9 +50,9 @@ $ make lint-install
# Haskell Dockerfile Linter v1.17.6-0-gc918759
```
## Lint
### Linting
### Per Stack
#### Per Stack
The linter can be run per stack.
......@@ -41,7 +76,7 @@ Optionally you can pass arguments to the linter.
$ make lint/scipy-notebook ARGS="--format codeclimate"
```
### All the Stacks
#### All the Stacks
The linter can be run against all the stacks.
......@@ -49,7 +84,7 @@ The linter can be run against all the stacks.
$ make lint-all
```
## Ignoring Rules
### Ignoring Rules
Sometimes it is necessary to ignore [some rules][rules].
The following rules are ignored by default and sor for all images in the `.hadolint.yaml` file.
......@@ -75,4 +110,5 @@ RUN cd /tmp && echo "hello!"
[dbp]: https://docs.docker.com/develop/develop-images/dockerfile_best-practices
[rules]: https://github.com/hadolint/hadolint#rules
[DL3006]: https://github.com/hadolint/hadolint/wiki/DL3006
[DL3008]: https://github.com/hadolint/hadolint/wiki/DL3008
\ No newline at end of file
[DL3008]: https://github.com/hadolint/hadolint/wiki/DL3008
[pre-commit]: https://pre-commit.com/
\ No newline at end of file
# Package Updates
We actively seek pull requests which update packages already included in the project Dockerfiles. This is a great way for first-time contributors to participate in developing the Jupyter Docker Stacks.
We actively seek pull requests which update packages already included in the project Dockerfiles.
This is a great way for first-time contributors to participate in developing the Jupyter Docker
Stacks.
Please follow the process below to update a package version:
1. Locate the Dockerfile containing the library you wish to update (e.g., [base-notebook/Dockerfile](https://github.com/jupyter/docker-stacks/blob/master/base-notebook/Dockerfile), [scipy-notebook/Dockerfile](https://github.com/jupyter/docker-stacks/blob/master/scipy-notebook/Dockerfile))
2. Adjust the version number for the package. We prefer to pin the major and minor version number of packages so as to minimize rebuild side-effects when users submit pull requests (PRs). For example, you'll find the Jupyter Notebook package, `notebook`, installed using conda with `notebook=5.4.*`.
3. Please build the image locally before submitting a pull request. Building the image locally shortens the debugging cycle by taking some load off [Travis CI](http://travis-ci.org/), which graciously provides free build services for open source projects like this one. If you use `make`, call:
```bash
make build/somestack-notebook
```
4. [Submit a pull request](https://github.com/PointCloudLibrary/pcl/wiki/A-step-by-step-guide-on-preparing-and-submitting-a-pull-request) (PR) with your changes.
5. Watch for Travis to report a build success or failure for your PR on GitHub.
6. Discuss changes with the maintainers and address any build issues. Version conflicts are the most common problem. You may need to upgrade additional packages to fix build failures.
1. Locate the Dockerfile containing the library you wish to update (e.g.,
[base-notebook/Dockerfile](https://github.com/jupyter/docker-stacks/blob/master/base-notebook/Dockerfile),
[scipy-notebook/Dockerfile](https://github.com/jupyter/docker-stacks/blob/master/scipy-notebook/Dockerfile))
2. Adjust the version number for the package. We prefer to pin the major and minor version number of
packages so as to minimize rebuild side-effects when users submit pull requests (PRs). For
example, you'll find the Jupyter Notebook package, `notebook`, installed using conda with
`notebook=5.4.*`.
3. Please build the image locally before submitting a pull request. Building the image locally
shortens the debugging cycle by taking some load off GitHub Actions, which graciously provide
free build services for open source projects like this one. If you use `make`, call:
```bash
make build/somestack-notebook
```
4. [Submit a pull request](https://github.com/PointCloudLibrary/pcl/wiki/A-step-by-step-guide-on-preparing-and-submitting-a-pull-request)
(PR) with your changes.
5. Watch for GitHub to report a build success or failure for your PR on GitHub.
6. Discuss changes with the maintainers and address any build issues. Version conflicts are the most
common problem. You may need to upgrade additional packages to fix build failures.
## Notes
In order to help identifying packages that can be updated you can use the following helper tool.
It will list all the packages installed in the `Dockerfile` that can be updated -- dependencies are filtered to focus only on requested packages.
In order to help identifying packages that can be updated you can use the following helper tool. It
will list all the packages installed in the `Dockerfile` that can be updated -- dependencies are
filtered to focus only on requested packages.
```bash
$ make check-outdated/base-notebook
# INFO test_outdated:test_outdated.py:80 3/8 (38%) packages could be updated
# INFO test_outdated:test_outdated.py:82
# INFO test_outdated:test_outdated.py:82
# Package Current Newest
# ---------- --------- --------
# conda 4.7.12 4.8.2
......
# Community Stacks
We love to see the community create and share new Jupyter Docker images. We've put together a [cookiecutter project](https://github.com/jupyter/cookiecutter-docker-stacks) and the documentation below to help you get started defining, building, and sharing your Jupyter environments in Docker. Following these steps will:
1. Setup a project on GitHub containing a Dockerfile based on either the `jupyter/base-notebook` or `jupyter/minimal-notebook` image.
2. Configure Travis CI to build and test your image when users submit pull requests to your repository.
We love to see the community create and share new Jupyter Docker images. We've put together a
[cookiecutter project](https://github.com/jupyter/cookiecutter-docker-stacks) and the documentation
below to help you get started defining, building, and sharing your Jupyter environments in Docker.
Following these steps will:
1. Setup a project on GitHub containing a Dockerfile based on either the `jupyter/base-notebook` or
`jupyter/minimal-notebook` image.
2. Configure GitHub Actions to build and test your image when users submit pull requests to your
repository.
3. Configure Docker Cloud to build and host your images for others to use.
4. Update the [list of community stacks](../using/selecting.html#community-stacks) in this documentation to include your image.
4. Update the [list of community stacks](../using/selecting.html#community-stacks) in this
documentation to include your image.
This approach mirrors how we build and share the core stack images. Feel free to follow it or pave your own path using alternative services and build tools.
This approach mirrors how we build and share the core stack images. Feel free to follow it or pave
your own path using alternative services and build tools.
## Creating a Project
......@@ -17,29 +24,31 @@ First, install [cookiecutter](https://github.com/audreyr/cookiecutter) using pip
pip install cookiecutter # or conda install cookiecutter
```
Run the cookiecutter command pointing to the [jupyter/cookiecutter-docker-stacks](https://github.com/jupyter/cookiecutter-docker-stacks) project on GitHub.
Run the cookiecutter command pointing to the
[jupyter/cookiecutter-docker-stacks](https://github.com/jupyter/cookiecutter-docker-stacks) project
on GitHub.
```bash
cookiecutter https://github.com/jupyter/cookiecutter-docker-stacks.git
```
Enter a name for your new stack image. This will serve as both the git repository
name and the part of the Docker image name after the slash.
Enter a name for your new stack image. This will serve as both the git repository name and the part
of the Docker image name after the slash.
```
stack_name [my-jupyter-stack]:
```
Enter the user or organization name under which this stack will reside on
Docker Cloud / Hub. You must have access to manage this Docker Cloud org in
order to push images here and setup automated builds.
Enter the user or organization name under which this stack will reside on Docker Cloud / Hub. You
must have access to manage this Docker Cloud org in order to push images here and setup automated
builds.
```
stack_org [my-project]:
```
Select an image from the jupyter/docker-stacks project that will serve as the
base for your new image.
Select an image from the jupyter/docker-stacks project that will serve as the base for your new
image.
```
stack_base_image [jupyter/base-notebook]:
......@@ -65,47 +74,66 @@ git push -u origin master
## Configuring Travis
Next, link your GitHub project to Travis CI to build your Docker image whenever you or someone else submits a pull request.
1. Visit [https://docs.travis-ci.com/user/getting-started/#To-get-started-with-Travis-CI](https://docs.travis-ci.com/user/getting-started/#To-get-started-with-Travis-CI) and follow the instructions to add the Travis CI application to your GitHub account.
3. Visit [https://travis-ci.org](https://travis-ci.org).
4. Click the + symbol at the top of the left sidebar.
![Travis sidebar with plus button screenshot](../_static/travis-plus-repo.png)
5. Locate your project repository either in your primary user account or in one of the organizations to which you belong.
6. Click the toggle to enable builds for the project repository.
7. Click the **Settings** button for that repository.
![Travis enable build toggle screenshot](../_static/travis-enable-build.png)
8. Enable **Build only if .travis.yml is present** and **Build pushed pull requests**.
![Travis build settings screenshot](../_static/travis-build-settings.png)
9. Disable **Build pushed branches**.
> NOTE: This section and the cookiecutter template should be updated to describe using GitHub
> Actions now that jupyter/docker-stacks uses that service.
Next, link your GitHub project to Travis CI to build your Docker image whenever you or someone else
submits a pull request.
1. Visit
[https://docs.travis-ci.com/user/getting-started/#To-get-started-with-Travis-CI](https://docs.travis-ci.com/user/getting-started/#To-get-started-with-Travis-CI)
and follow the instructions to add the Travis CI application to your GitHub account.
2. Visit [https://travis-ci.org](https://travis-ci.org).
3. Click the + symbol at the top of the left sidebar.
![Travis sidebar with plus button screenshot](../_static/travis-plus-repo.png)
4. Locate your project repository either in your primary user account or in one of the organizations
to which you belong.
5. Click the toggle to enable builds for the project repository.
6. Click the **Settings** button for that repository.
![Travis enable build toggle screenshot](../_static/travis-enable-build.png)
7. Enable **Build only if .travis.yml is present** and **Build pushed pull requests**.
![Travis build settings screenshot](../_static/travis-build-settings.png)
8. Disable **Build pushed branches**.
## Configuring Docker Cloud
Now, configure Docker Cloud to build your stack image and push it to Docker Hub repository whenever you merge a GitHub pull request to the master branch of your project.
Now, configure Docker Cloud to build your stack image and push it to Docker Hub repository whenever
you merge a GitHub pull request to the master branch of your project.
1. Visit [https://cloud.docker.com/](https://cloud.docker.com/) and login.
2. Select the account or organization matching the one you entered when prompted with `stack_org` by the cookiecutter.
![Docker account selection screenshot](../_static/docker-org-select.png)
2. Select the account or organization matching the one you entered when prompted with `stack_org` by
the cookiecutter. ![Docker account selection screenshot](../_static/docker-org-select.png)
3. Scroll to the bottom of the page and click **Create repository**.
4. Enter the name of the image matching the one you entered when prompted with `stack_name` by the cookiecutter.
![Docker image name and description screenshot](../_static/docker-repo-name.png)
4. Enter the name of the image matching the one you entered when prompted with `stack_name` by the
cookiecutter. ![Docker image name and description screenshot](../_static/docker-repo-name.png)
5. Enter a description for your image.
6. Click **GitHub** under the **Build Settings** and follow the prompts to connect your account if it is not already connected.
7. Select the GitHub organization and repository containing your image definition from the dropdowns.
![Docker from GitHub automated build screenshot](../_static/docker-github-settings.png)
6. Click **GitHub** under the **Build Settings** and follow the prompts to connect your account if
it is not already connected.
7. Select the GitHub organization and repository containing your image definition from the
dropdowns.
![Docker from GitHub automated build screenshot](../_static/docker-github-settings.png)
8. Click the **Create and Build** button.
## Defining Your Image
Make edits the Dockerfile in your project to add third-party libraries and configure Jupyter applications. Refer to the Dockerfiles for the core stacks (e.g., [jupyter/datascience-notebook](https://github.com/jupyter/docker-stacks/blob/master/datascience-notebook/Dockerfile)) to get a feel for what's possible and best practices.
Make edits the Dockerfile in your project to add third-party libraries and configure Jupyter
applications. Refer to the Dockerfiles for the core stacks (e.g.,
[jupyter/datascience-notebook](https://github.com/jupyter/docker-stacks/blob/master/datascience-notebook/Dockerfile))
to get a feel for what's possible and best practices.
[Submit pull requests](https://github.com/PointCloudLibrary/pcl/wiki/A-step-by-step-guide-on-preparing-and-submitting-a-pull-request) to your project repository on GitHub. Ensure your image builds properly on Travis before merging to master. Refer to Docker Cloud for builds of your master branch that you can `docker pull`.
[Submit pull requests](https://github.com/PointCloudLibrary/pcl/wiki/A-step-by-step-guide-on-preparing-and-submitting-a-pull-request)
to your project repository on GitHub. Ensure your image builds properly on Travis before merging to
master. Refer to Docker Cloud for builds of your master branch that you can `docker pull`.
## Sharing Your Image
Finally, if you'd like to add a link to your project to this documentation site, please do the following:
Finally, if you'd like to add a link to your project to this documentation site, please do the
following:
1. Clone ths [jupyter/docker-stacks](https://github.com/jupyter/docker-stacks) GitHub repository.
2. Open the `docs/using/selecting.md` source file and locate the **Community Stacks** section.
3. Add a bullet with a link to your project and a short description of what your Docker image contains.
4. [Submit a pull request](https://github.com/PointCloudLibrary/pcl/wiki/A-step-by-step-guide-on-preparing-and-submitting-a-pull-request) (PR) with your changes. Maintainers will respond and work with you to address any formatting or content issues.
\ No newline at end of file
3. Add a bullet with a link to your project and a short description of what your Docker image
contains.
4. [Submit a pull request](https://github.com/PointCloudLibrary/pcl/wiki/A-step-by-step-guide-on-preparing-and-submitting-a-pull-request)
(PR) with your changes. Maintainers will respond and work with you to address any formatting or
content issues.
# Image Tests
We greatly appreciate pull requests that extend the automated tests that vet the basic functionality of the Docker images.
We greatly appreciate pull requests that extend the automated tests that vet the basic functionality
of the Docker images.
## How the Tests Work
Travis executes `make build-test-all` against pull requests submitted to the `jupyter/docker-stacks` repository. This `make` command builds every docker image. After building each image, the `make` command executes `pytest` to run both image-specific tests like those in [base-notebook/test/](https://github.com/jupyter/docker-stacks/tree/master/base-notebook/test) and common tests defined in [test/](https://github.com/jupyter/docker-stacks/tree/master/test). Both kinds of tests make use of global [pytest fixtures](https://docs.pytest.org/en/latest/fixture.html) defined in the [conftest.py](https://github.com/jupyter/docker-stacks/blob/master/conftest.py) file at the root of the projects.
GitHub executes `make build-test-all` against pull requests submitted to the `jupyter/docker-stacks`
repository. This `make` command builds every docker image. After building each image, the `make`
command executes `pytest` to run both image-specific tests like those in
[base-notebook/test/](https://github.com/jupyter/docker-stacks/tree/master/base-notebook/test) and
common tests defined in [test/](https://github.com/jupyter/docker-stacks/tree/master/test). Both
kinds of tests make use of global [pytest fixtures](https://docs.pytest.org/en/latest/fixture.html)
defined in the [conftest.py](https://github.com/jupyter/docker-stacks/blob/master/conftest.py) file
at the root of the projects.
## Contributing New Tests
Please follow the process below to add new tests:
1. If the test should run against every image built, add your test code to one of the modules in [test/](https://github.com/jupyter/docker-stacks/tree/master/test) or create a new module.
2. If your test should run against a single image, add your test code to one of the modules in `some-notebook/test/` or create a new module.
1. If the test should run against every image built, add your test code to one of the modules in
[test/](https://github.com/jupyter/docker-stacks/tree/master/test) or create a new module.
2. If your test should run against a single image, add your test code to one of the modules in
`some-notebook/test/` or create a new module.
3. Build one or more images you intend to test and run the tests locally. If you use `make`, call:
```bash
make build/somestack-notebook
make test/somestack-notebook
```
4. [Submit a pull request](https://github.com/PointCloudLibrary/pcl/wiki/A-step-by-step-guide-on-preparing-and-submitting-a-pull-request) (PR) with your changes.
5. Watch for Travis to report a build success or failure for your PR on GitHub.
6. Discuss changes with the maintainers and address any issues running the tests on Travis.
```bash
make build/somestack-notebook
make test/somestack-notebook
```
4. [Submit a pull request](https://github.com/PointCloudLibrary/pcl/wiki/A-step-by-step-guide-on-preparing-and-submitting-a-pull-request)
(PR) with your changes.
5. Watch for GitHub to report a build success or failure for your PR on GitHub.
6. Discuss changes with the maintainers and address any issues running the tests on GitHub.
......@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: docker-stacks latest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-13 17:24+0000\n"
"POT-Creation-Date: 2020-08-08 19:06+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -18,12 +18,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../contributing/features.md:1 73568dd40cf8400f866860c92fa9a585
#: ../../contributing/features.md:1 1f4b30ecd7854c24ba6b446ba4edd5af
msgid "# New Features"
msgstr ""
# 64c3ecc68ada47afada78f945253c9e9
#: ../../contributing/features.md:3 68122b604e2e42c6ac8b339086c87100
#: ../../contributing/features.md:3 a0a089fe726f4ba98b685362a66efef4
msgid ""
"Thank you for contributing to the Jupyter Docker Stacks! We review pull "
"requests of new features (e.g., new packages, new scripts, new flags) to "
......@@ -31,24 +31,24 @@ msgid ""
" maintaining the images over time."
msgstr ""
#: ../../contributing/features.md:5 12333534a174461da43d636f2b91508e
#: ../../contributing/features.md:7 0aec09141ec142cf8916ecda7121893e
msgid "## Suggesting a New Feature"
msgstr ""
# c995f8cabb1d4b4fb53a9c56ae8e017b
#: ../../contributing/features.md:7 8cfae9246e674e638795557766880b19
#: ../../contributing/features.md:9 bc1a8da55c8b46f08dce546e3c9ae370
msgid ""
"Please follow the process below to suggest a new feature for inclusion in"
" one of the core stacks:"
msgstr ""
#: ../../contributing/features.md:9 4570b8972003443dbf43728a75f174f7
#: ../../contributing/features.md:11 b75bbd51f6f5485d8520eb0d5e3ae1fd
msgid ""
"[Open a GitHub issue](https://github.com/jupyter/docker-stacks/issues) "
"describing the feature you'd like to contribute."
msgstr ""
#: ../../contributing/features.md:10 5dc9c7f20a014c71b4ab55140024b384
#: ../../contributing/features.md:13 54f000e337af4a86a021fbd997d7db79
msgid ""
"Discuss with the maintainers whether the addition makes sense in [one of "
"the core stacks](../using/selecting.md#Core-Stacks), as a [recipe in the "
......@@ -56,32 +56,32 @@ msgid ""
"something else entirely."
msgstr ""
#: ../../contributing/features.md:12 bfafd430491f4ea4965b7ea6217b4cd9
#: ../../contributing/features.md:18 eb4065ca16dd4d61b0b79194f9b6f211
msgid "## Selection Criteria"
msgstr ""
# ca139cf0df684011bdf6f6f68e151796
#: ../../contributing/features.md:14 f59a6f3d31164e3d928287667e10a7fe
#: ../../contributing/features.md:20 d592f1ed0e6c42ebb1aef28e458da779
msgid ""
"Roughly speaking, we evaluate new features based on the following "
"criteria:"
msgstr ""
#: ../../contributing/features.md:16 2deadaa24a1340a3a148ca5a6f43c392
#: ../../contributing/features.md:22 82d535c284ac4b1dbb81cab01be9fe70
msgid ""
"**Usefulness to Jupyter users**: Is the feature generally applicable "
"across domains? Does it work with Jupyter Notebook, JupyterLab, "
"JupyterHub, etc.?"
msgstr ""
#: ../../contributing/features.md:17 57c4f8a0e92842e291265ece9e88e447
#: ../../contributing/features.md:24 737e8604999a4c488c4f4fcb408025d7
msgid ""
"**Fit with the image purpose**: Does the feature match the theme of the "
"stack in which it will be added? Would it fit better in a new, community "
"stack?"
msgstr ""
#: ../../contributing/features.md:18 e3819ccbbffa4fc99b3c611690473b20
#: ../../contributing/features.md:26 2f3afb23ca24406fb209a961779be680
msgid ""
"**Complexity of build / runtime configuration**: How many lines of code "
"does the feature require in one of the Dockerfiles or startup scripts? "
......@@ -89,14 +89,14 @@ msgid ""
"use the images?"
msgstr ""
#: ../../contributing/features.md:19 9ce572bde2f7408fb3cdb1c29b8f393f
#: ../../contributing/features.md:29 0fb7606257ae4d768e434785d9a02c1c
msgid ""
"**Impact on image metrics**: How many bytes does the feature and its "
"dependencies add to the image(s)? How many minutes do they add to the "
"build time?"
msgstr ""
#: ../../contributing/features.md:20 ee75c19fd4084273bf0b05bb26da1a42
#: ../../contributing/features.md:31 0d8de7ec393740848ddf5a0da5919804
msgid ""
"**Ability to support the addition**: Can existing maintainers answer user"
" questions and address future build issues? Are the contributors "
......@@ -104,71 +104,67 @@ msgid ""
"ensure the feature continues to work over time?"
msgstr ""
#: ../../contributing/features.md:22 22881b02fcdd4c43bc280f7a8214dded
#: ../../contributing/features.md:35 4a13b2d0552143ceab1d7a350bbf3605
msgid "## Submitting a Pull Request"
msgstr ""
# f7ca9b40be90476eb97c8fcd67205e9d
#: ../../contributing/features.md:24 ef4fabecf05c427797009ac7ecc9ffaa
#: ../../contributing/features.md:37 bb1f2f3efd914f66aa1373a8b6562b38
msgid ""
"If there's agreement that the feature belongs in one or more of the core "
"stacks:"
msgstr ""
#: ../../contributing/features.md:26 0ae6b52d2ae94508af546696d256a045
#: ../../contributing/features.md:39 35f409699bb346bc8366ef1dbe982e03
msgid ""
"Implement the feature in a local clone of the `jupyter/docker-stacks` "
"project."
msgstr ""
#: ../../contributing/features.md:29 a043243b82c24bb3a0a6ac6fd4eb4ee3
#: ../../contributing/features.md:40 ../../contributing/packages.md:16
#: 7293d312853c4abda978753a2b60ff84 94d4c3fe5ba94c2e8c4936e4a76bc7f3
msgid ""
"Please build the image locally before submitting a pull request. Building"
" the image locally shortens the debugging cycle by taking some load off "
"[Travis CI](http://travis-ci.org/), which graciously provides free build "
"services for open source projects like this one. If you use `make`, "
"call:"
"GitHub Actions, which graciously provide free build services for open "
"source projects like this one. If you use `make`, call: ```bash make "
"build/somestack-notebook ```"
msgstr ""
#: ../../contributing/features.md:28 ../../contributing/packages.md:10
#: d78d28f63e474115b2f9a07c30192c50 fc7a500fd8944c3b964c5a84c816c430
msgid "```bash make build/somestack-notebook ```"
msgstr ""
#: ../../contributing/features.md:31 ../../contributing/packages.md:13
#: ../../contributing/tests.md:20 00212e32fbc5405cb89e2c1d64747446
#: 0cd21fddaf2744478818394f1db2fee6 200d6bfb805740ca9f26994a2629cf66
#: ../../contributing/features.md:46 ../../contributing/packages.md:22
#: ../../contributing/tests.md:30 3675d6f338b84723a7127fb5b24c737f
#: 965eed2fff184215a5c28d6ea75f2b4f c329b62057d04f6faede305145005946
msgid ""
"[Submit a pull request](https://github.com/PointCloudLibrary/pcl/wiki/A"
"-step-by-step-guide-on-preparing-and-submitting-a-pull-request) (PR) with"
" your changes."
msgstr ""
#: ../../contributing/features.md:32 ../../contributing/packages.md:14
#: ../../contributing/tests.md:21 01006b1634664420a55ab93140eeba1c
#: 1533f4346ec44d63aeff57798ed43311 ac34ca3def304fa1a7bc186ecb08d362
#: ../../contributing/features.md:48 ../../contributing/packages.md:24
#: ../../contributing/tests.md:32 5a921237338542e6a6fd99f42cd656d2
#: a1dc49974c1643bda2f80d34136323e9 ed8607039a744a0bacfe3717febb3b0c
msgid ""
"Watch for Travis to report a build success or failure for your PR on "
"Watch for GitHub to report a build success or failure for your PR on "
"GitHub."
msgstr ""
#: ../../contributing/features.md:33 c1f5f6fff58944579bbac57d11eed188
#: ../../contributing/features.md:49 953bf754003d400499fb07de69e5bccd
msgid "Discuss changes with the maintainers and address any build issues."
msgstr ""
#: ../../contributing/issues.md:1 90d9d26c52694bd39702dbe085548e60
#: ../../contributing/issues.md:1 d00f33cb4fad444098bfade52e940f44
msgid "# Project Issues"
msgstr ""
# 9c2a6e9f67354e86aca23758676fca43
#: ../../contributing/issues.md:3 ce7326457bd24c7284f84626ef7657e2
#: ../../contributing/issues.md:3 52782ccfd9d545f0a8cbc5fdae85c516
msgid ""
"We appreciate your taking the time to report an issue you encountered "
"using the Jupyter Docker Stacks. Please review the following guidelines "
"when reporting your problem."
msgstr ""
#: ../../contributing/issues.md:7 fd5aba92b5364d0e962a55331aee6659
#: ../../contributing/issues.md:7 28eede6be4644c28b6d5dd0c427588bf
msgid ""
"If you believe you’ve found a security vulnerability in any of the "
"Jupyter projects included in Jupyter Docker Stacks images, please report "
......@@ -178,7 +174,7 @@ msgid ""
"notebook.readthedocs.io/en/stable/_downloads/ipython_security.asc)."
msgstr ""
#: ../../contributing/issues.md:13 31028151b38b42cc9a502a2e3b899903
#: ../../contributing/issues.md:13 8d443940580a48f49cc75cd8d460c797
msgid ""
"If you think your problem is unique to the Jupyter Docker Stacks images, "
"please search the [jupyter/docker-stacks issue "
......@@ -189,14 +185,14 @@ msgid ""
msgstr ""
# 69a18cc239b34b94800599bf185f58d6
#: ../../contributing/issues.md:19 3432baed3e664b9981402ba57e82f0d5
#: ../../contributing/issues.md:19 e572b613ae394b70b62b38fbcc392456
msgid ""
"If the issue you're seeing is with one of the open source libraries "
"included in the Docker images and is reproducible outside the images, "
"please file a bug with the appropriate open source project."
msgstr ""
#: ../../contributing/issues.md:22 27a1501090a044fea57a9b3d193d1ef9
#: ../../contributing/issues.md:22 311c5cbf53e3443f92be6f68aa83ea4f
msgid ""
"If you have a general question about how to use the Jupyter Docker Stacks"
" in your environment, in conjunction with other tools, with "
......@@ -204,53 +200,109 @@ msgid ""
"Discourse site](https://discourse.jupyter.org)."
msgstr ""
#: ../../contributing/lint.md:1 f9f3dd16e01847edbfbfcf9ae2985042
msgid "# Image Lint"
#: ../../contributing/lint.md:1 35097c868663402ba1a07d04057f2c6f
msgid "# Lint"
msgstr ""
#: ../../contributing/lint.md:3 af0370f47a714f5c8c7d7209b5bb1aec
#: ../../contributing/lint.md:3 25d10dda1a5d424fb492fc56ef4949ae
msgid ""
"To comply with [Docker best practices][dbp], we are using the "
"[Hadolint][hadolint] tool to analyse each `Dockerfile` ."
"In order to enforce some rules **linters** are used in this project. "
"Linters can be run either during the **development phase** (by the "
"developer) and during **integration phase** (by Travis). To integrate and"
" enforce this process in the project lifecycle we are using **git hooks**"
" through [pre-commit][pre-commit]."
msgstr ""
#: ../../contributing/lint.md:7 6dcf9c5d11b74b99b7938440c24ff309
msgid "## Pre-commit hook"
msgstr ""
#: ../../contributing/lint.md:9 ../../contributing/lint.md:40
#: 5ff980cf70524b309f20519a7d93c8cf 762f7c709146483caaec06a591ed1be3
msgid "### Installation"
msgstr ""
#: ../../contributing/lint.md:11 480cf1862e374b29b37c1dbc9d584249
msgid ""
"pre-commit is a Python package that needs to be installed. This can be "
"achieved by using the generic task used to install all Python development"
" dependencies."
msgstr ""
#: ../../contributing/lint.md:14 357b5cc91a9b40288f11fe71db5471aa
msgid ""
"```sh # Install all development dependencies for the project $ make dev-"
"env # It can also be installed directly $ pip install pre-commit ```"
msgstr ""
#: ../../contributing/lint.md:21 9125ec7b353f4f248d8b72aaaac3d59e
msgid ""
"Then the git hooks scripts configured for the project in `.pre-commit-"
"config.yaml` need to be installed in the local git repository."
msgstr ""
#: ../../contributing/lint.md:23 0ecb8947372d4f9681b4a8fb8a2a930f
msgid "```sh $ make pre-commit-install ```"
msgstr ""
#: ../../contributing/lint.md:5 c731a817fbe8414fb102cf3a1a25ea96
msgid "## Installation"
#: ../../contributing/lint.md:27 fe671ebbac8542c48096bcbeac893809
msgid "### Run"
msgstr ""
#: ../../contributing/lint.md:7 52bbf3443b1d429f87a3930e4ad0fbc0
#: ../../contributing/lint.md:29 ffe3e6145c514786a2e01466279c5548
msgid ""
"Now pre-commit (and so configured hooks) will run automatically on `git "
"commit` on each changed file. However it is also possible to trigger it "
"against all files."
msgstr ""
#: ../../contributing/lint.md:32 ac22aa59c7434960bf368861cd801566
msgid "```sh $ make pre-commit-all ```"
msgstr ""
#: ../../contributing/lint.md:36 71ae8ce818444ba2bc56d2386944d5b3
msgid "## Image Lint"
msgstr ""
#: ../../contributing/lint.md:38 41179f693173417291b77cdff156f487
msgid ""
"To comply with [Docker best practices][dbp], we are using the "
"[Hadolint][hadolint] tool to analyse each `Dockerfile` ."
msgstr ""
#: ../../contributing/lint.md:42 3e900e49cead4074934cfcb6e2996cea
msgid ""
"There is a specific `make` target to install the linter. By default "
"`hadolint` will be installed in `${HOME}/hadolint`."
msgstr ""
#: ../../contributing/lint.md:10 98a0b08d5afe4338aeec1d7699f76a2d
#: ../../contributing/lint.md:45 29c319a53327485d9c071fe5b304e511
msgid "```bash $ make lint-install"
msgstr ""
#: ../../contributing/lint.md:13 1d3fb52955c64b209df424d724c9679c
#: ../../contributing/lint.md:48 c5293dc866fe450caaaafa815b9b5807
msgid ""
"# Installing hadolint at /Users/romain/hadolint ... # Installation done! "
"# Haskell Dockerfile Linter v1.17.6-0-gc918759 ```"
msgstr ""
#: ../../contributing/lint.md:18 507b0e46012d4419948aa6a603086fe3
msgid "## Lint"
#: ../../contributing/lint.md:53 15a35b489c1e411c9d89aab350c63d7f
msgid "### Linting"
msgstr ""
#: ../../contributing/lint.md:20 da32627dc3ed420bae073e85bd79c406
msgid "### Per Stack"
#: ../../contributing/lint.md:55 41ef020cae874c2d9ca519058511cb18
msgid "#### Per Stack"
msgstr ""
#: ../../contributing/lint.md:22 c42134dea1a44a27a508f58af72e698b
#: ../../contributing/lint.md:57 41366eb471f445dab4c340a91e6fa0dc
msgid "The linter can be run per stack."
msgstr ""
#: ../../contributing/lint.md:24 3394806edf7447b88f7ebd1445e4b259
#: ../../contributing/lint.md:59 41f2568c53604a0f9d1592be3d85f282
msgid "```bash $ make lint/scipy-notebook"
msgstr ""
#: ../../contributing/lint.md:27 8bd8362eeb2a4d26b9f1d79da20841e9
#: ../../contributing/lint.md:62 ad960793755e4572ac30b6352b79d637
msgid ""
"# Linting Dockerfiles in scipy-notebook... # scipy-notebook/Dockerfile:4 "
"DL3006 Always tag the version of an image explicitly # scipy-"
......@@ -264,59 +316,59 @@ msgid ""
"splitting. # make: *** [lint/scipy-notebook] Error 1 ```"
msgstr ""
#: ../../contributing/lint.md:37 3274ec37f4224d2b9ab8367292c905dd
#: ../../contributing/lint.md:72 e026e25057904d69b4edf7b553d8f638
msgid "Optionally you can pass arguments to the linter."
msgstr ""
#: ../../contributing/lint.md:39 d4cb9163b89b493a925203d318d9d1ba
#: ../../contributing/lint.md:74 1127ab0649204c5b84764164f5c1b04d
msgid ""
"```bash # Use a different export format $ make lint/scipy-notebook "
"ARGS=\"--format codeclimate\" ```"
msgstr ""
#: ../../contributing/lint.md:44 b41fe7b4867749a89539b155925dc619
msgid "### All the Stacks"
#: ../../contributing/lint.md:79 fdbef21047db45749fafca202efd10a0
msgid "#### All the Stacks"
msgstr ""
#: ../../contributing/lint.md:46 a729e34bfd764f4694567b06dcc084aa
#: ../../contributing/lint.md:81 9a95d1f652b7430a89fbffa9f1ebe75e
msgid "The linter can be run against all the stacks."
msgstr ""
#: ../../contributing/lint.md:48 c84237491ed046fca7551f92bd147365
#: ../../contributing/lint.md:83 8b1bfdcf345d4af99501d154e0dab0b5
msgid "```bash $ make lint-all ```"
msgstr ""
#: ../../contributing/lint.md:52 50166f6463634b4a90d25e7b96cc4b12
msgid "## Ignoring Rules"
#: ../../contributing/lint.md:87 acde0d5ce4f54bbdacdd58ed10db14e0
msgid "### Ignoring Rules"
msgstr ""
#: ../../contributing/lint.md:54 356fc7c100ef4a8fbd748eb27367d356
#: ../../contributing/lint.md:89 f6d04edf48e44471a9e73062d99f9389
msgid ""
"Sometimes it is necessary to ignore [some rules][rules]. The following "
"rules are ignored by default and sor for all images in the "
"`.hadolint.yaml` file."
msgstr ""
#: ../../contributing/lint.md:57 cf97f4a183734b8d9e57b760cfccc627
#: ../../contributing/lint.md:92 af91bdf6147c41cdaea723e48e3d4c55
msgid ""
"[`DL3006`][DL3006]: We use a specific policy to manage image tags. - "
"`base-notebook` `FROM` clause is fixed but based on an argument (`ARG`). "
"- Building downstream images from (`FROM`) the latest is done on purpose."
msgstr ""
#: ../../contributing/lint.md:60 70076669dfb94f11b1194fbd7976a584
#: ../../contributing/lint.md:95 b892962b128f49a791eda29158574c12
msgid ""
"[`DL3008`][DL3008]: System packages are always updated (`apt-get`) to the"
" latest version."
msgstr ""
#: ../../contributing/lint.md:62 bdaf17200ecb4201b6d147943cf1b021
#: ../../contributing/lint.md:97 b85c2a3a25884fe3a2b13bd5b7ba4f0e
msgid ""
"For other rules, the preferred way to do it is to flag ignored rules in "
"the `Dockerfile`."
msgstr ""
#: ../../contributing/lint.md:64 9965b559072043e6a66ec2fec7710ad4
#: ../../contributing/lint.md:99 dcf48a746ba44969b5068eaefdc52bb2
msgid ""
"> It is also possible to ignore rules by using a special comment directly"
" above the Dockerfile instruction you want to make an exception for. "
......@@ -324,33 +376,34 @@ msgid ""
"example:"
msgstr ""
#: ../../contributing/lint.md:66 cb3b17c195084c669cae96359e30709f
#: ../../contributing/lint.md:101 8e111990cdb340eaa85258992d0a5c26
msgid "```dockerfile"
msgstr ""
#: ../../contributing/lint.md:68 3ca17796e05a437d98882aecce21b7a5
#: ../../contributing/lint.md:103 d066e760189f4eb0abc1304a95b7e5f5
msgid "FROM ubuntu"
msgstr ""
#: ../../contributing/lint.md:70 c0214b6cb2d2487fae29e29815c68a05
#: ../../contributing/lint.md:105 6d8b8e215e11402fa32af7a4ba1f76aa
msgid "# hadolint ignore=DL3003,SC1035 RUN cd /tmp && echo \"hello!\" ```"
msgstr ""
#: ../../contributing/lint.md:74 6d86e357bd26405886819fd0f55bc87c
#: ../../contributing/lint.md:109 f2da01d5433947b68f2559c7d80796eb
msgid ""
"[hadolint]: https://github.com/hadolint/hadolint [dbp]: "
"https://docs.docker.com/develop/develop-images/dockerfile_best-practices "
"[rules]: https://github.com/hadolint/hadolint#rules [DL3006]: "
"https://github.com/hadolint/hadolint/wiki/DL3006 [DL3008]: "
"https://github.com/hadolint/hadolint/wiki/DL3008"
"https://github.com/hadolint/hadolint/wiki/DL3008 [pre-commit]: https"
"://pre-commit.com/"
msgstr ""
#: ../../contributing/packages.md:1 0e3c0f42f4484000ad6997221929c575
#: ../../contributing/packages.md:1 e2294b839d07437480f4402937469230
msgid "# Package Updates"
msgstr ""
# 5f269a667f9a4c3ca342cfb49ecaefb2
#: ../../contributing/packages.md:3 8686c5370f0b4a4786e58960d4c0c1f8
#: ../../contributing/packages.md:3 4453da6339b6477f9dcc91eccaa86e31
msgid ""
"We actively seek pull requests which update packages already included in "
"the project Dockerfiles. This is a great way for first-time contributors "
......@@ -358,11 +411,11 @@ msgid ""
msgstr ""
# 30d4a79bce8d439d97e6e3555a088548
#: ../../contributing/packages.md:5 68187b524c5d418281ff4c0ba2d5ea3c
#: ../../contributing/packages.md:7 3c16959d3ead47e0872f7d79c8435824
msgid "Please follow the process below to update a package version:"
msgstr ""
#: ../../contributing/packages.md:7 7629d9afde3d46ca98cbe37c1e7fadad
#: ../../contributing/packages.md:9 64ed93cfb883495eae845d07888bb83b
msgid ""
"Locate the Dockerfile containing the library you wish to update (e.g., "
"[base-notebook/Dockerfile](https://github.com/jupyter/docker-"
......@@ -371,7 +424,7 @@ msgid ""
"/scipy-notebook/Dockerfile))"
msgstr ""
#: ../../contributing/packages.md:8 209a59a32f7d416395da48ba7deb9ec4
#: ../../contributing/packages.md:12 8f9a5ef2958d42dd9fd3e771a43b9703
msgid ""
"Adjust the version number for the package. We prefer to pin the major and"
" minor version number of packages so as to minimize rebuild side-effects "
......@@ -380,26 +433,18 @@ msgid ""
"`notebook=5.4.*`."
msgstr ""
#: ../../contributing/packages.md:11 ae6f768e7d254148afe4f65691363d4c
msgid ""
"Please build the image locally before submitting a pull request. Building"
" the image locally shortens the debugging cycle by taking some load off "
"[Travis CI](http://travis-ci.org/), which graciously provides free build "
"services for open source projects like this one. If you use `make`, call:"
msgstr ""
#: ../../contributing/packages.md:15 33c70276f8544f4c9ce33f0fee67ae97
#: ../../contributing/packages.md:25 bce00ae15d21464fbf78cffd96b278f3
msgid ""
"Discuss changes with the maintainers and address any build issues. "
"Version conflicts are the most common problem. You may need to upgrade "
"additional packages to fix build failures."
msgstr ""
#: ../../contributing/packages.md:17 7cf4452f20ed4bafaf16b523ef383325
#: ../../contributing/packages.md:28 8f564432a8944e909f97d3462756d64f
msgid "## Notes"
msgstr ""
#: ../../contributing/packages.md:19 4d3fe02500b7454ab0413148de50f87e
#: ../../contributing/packages.md:30 1471b87cc5f24f089a3f3c9ca80f7350
msgid ""
"In order to help identifying packages that can be updated you can use the"
" following helper tool. It will list all the packages installed in the "
......@@ -407,11 +452,11 @@ msgid ""
"only on requested packages."
msgstr ""
#: ../../contributing/packages.md:22 829b62bdfee54ce7912f4fd82e0811f1
#: ../../contributing/packages.md:34 c97fe1c61a8a4b9d9717eff5b6cfee0d
msgid "```bash $ make check-outdated/base-notebook"
msgstr ""
#: ../../contributing/packages.md:25 bc22117d06cc4f8792314762474712fa
#: ../../contributing/packages.md:37 10f69925750a4280a0c1e32329505a97
msgid ""
"# INFO test_outdated:test_outdated.py:80 3/8 (38%) packages could be "
"updated # INFO test_outdated:test_outdated.py:82 # Package "
......@@ -420,11 +465,11 @@ msgid ""
"```"
msgstr ""
#: ../../contributing/recipes.md:1 b62539e910b449cab65460c586b9460c
#: ../../contributing/recipes.md:1 51acfd2e5cc04d79b4b0237f60d1e0b7
msgid "# New Recipes"
msgstr ""
#: ../../contributing/recipes.md:3 dc7089fe2a494ea19925cf8af9a59e5a
#: ../../contributing/recipes.md:3 86d268668ef047d699a583bb03b37ab8
msgid ""
"We welcome contributions of [recipes](../using/recipes.md), short "
"examples of using, configuring, or extending the Docker Stacks, for "
......@@ -432,25 +477,25 @@ msgid ""
"new recipe:"
msgstr ""
#: ../../contributing/recipes.md:5 e10b70b695d147fb850d11b48beee7fc
#: ../../contributing/recipes.md:5 bc2e49a608154c85b595d6f682937d8f
msgid "Open the `docs/using/recipes.md` source file."
msgstr ""
#: ../../contributing/recipes.md:6 7151c9e77ada4212adf77cae937e3cae
#: ../../contributing/recipes.md:6 fbb143e5a1534520928e32e4ee7c85ff
msgid ""
"Add a second-level Markdown heading naming your recipe at the bottom of "
"the file (e.g., `## Add the RISE extension`)"
msgstr ""
# 8838b0ff2be24c23afaca9a6f43a9b66
#: ../../contributing/recipes.md:7 541d6ad94859490d98c8a7f04baa4947
#: ../../contributing/recipes.md:7 e791aa1de3774b3eb10d864c2c1bbfac
msgid ""
"Write the body of your recipe under the heading, including whatever "
"command line, Dockerfile, links, etc. you need."
msgstr ""
#: ../../contributing/recipes.md:8 ../../contributing/stacks.md:111
#: 0b5ab045564f4c85a442996b93340288 8c42e042130646cb8e715440d3c88932
#: ../../contributing/recipes.md:8 ../../contributing/stacks.md:137
#: 4b62401782314bd69e0626a418243aa2 e67fe61f4c01439e9a80f7c1f6048e75
msgid ""
"[Submit a pull request](https://github.com/PointCloudLibrary/pcl/wiki/A"
"-step-by-step-guide-on-preparing-and-submitting-a-pull-request) (PR) with"
......@@ -458,11 +503,11 @@ msgid ""
"formatting or content issues."
msgstr ""
#: ../../contributing/stacks.md:1 e23e06546a29406db6e337f82fabc3e6
#: ../../contributing/stacks.md:1 5e9b9b192a664abfa1b62c1b1d3bcb1d
msgid "# Community Stacks"
msgstr ""
#: ../../contributing/stacks.md:3 74ab09f407b744bdac1945aebbd91bcb
#: ../../contributing/stacks.md:3 fd57650d76a640d5b088ee62814d58d8
msgid ""
"We love to see the community create and share new Jupyter Docker images. "
"We've put together a [cookiecutter project](https://github.com/jupyter"
......@@ -471,263 +516,250 @@ msgid ""
"Docker. Following these steps will:"
msgstr ""
#: ../../contributing/stacks.md:5 7b86926f795a4846ab36cb755f3f1306
#: ../../contributing/stacks.md:8 bd5dbaa5f43f426a97e5b9435f09e4cb
msgid ""
"Setup a project on GitHub containing a Dockerfile based on either the "
"`jupyter/base-notebook` or `jupyter/minimal-notebook` image."
msgstr ""
# 8fa22b86dc9f4750b0b903371f16c1e6
#: ../../contributing/stacks.md:6 194fc91e8b984dda94639d27941218e0
#: ../../contributing/stacks.md:10 b09f698e6f7b48e9b3174c2f0117d872
msgid ""
"Configure Travis CI to build and test your image when users submit pull "
"requests to your repository."
"Configure GitHub Actions to build and test your image when users submit "
"pull requests to your repository."
msgstr ""
# cb04d6b8877b47e78277b7025f642ae3
#: ../../contributing/stacks.md:7 3b980b7f6c1d4032b562e2f2ee6987e4
#: ../../contributing/stacks.md:12 fff629a47a9a4e849aba0f0267d0e113
msgid "Configure Docker Cloud to build and host your images for others to use."
msgstr ""
#: ../../contributing/stacks.md:8 38319010672e4fc6a302f43b8df51ffb
#: ../../contributing/stacks.md:13 ec6c068089db4f8b83a065fca595bcd9
msgid ""
"Update the [list of community stacks](../using/selecting.html#community-"
"stacks) in this documentation to include your image."
msgstr ""
# 8e0fd1dc73cc40ceab19307d0cd809c1
#: ../../contributing/stacks.md:10 7718d7d6d0bc4e67bd75b64bdadba041
#: ../../contributing/stacks.md:16 e1e72acfda3748f6a7e5b5f9ea7f3861
msgid ""
"This approach mirrors how we build and share the core stack images. Feel "
"free to follow it or pave your own path using alternative services and "
"build tools."
msgstr ""
#: ../../contributing/stacks.md:12 b8c907e8c118419796d1620ac9e71c8f
#: ../../contributing/stacks.md:19 dd26246cef5542bf858e9b80d07bf908
msgid "## Creating a Project"
msgstr ""
#: ../../contributing/stacks.md:14 b635c7a30ced4430b88fed123c2231f7
#: ../../contributing/stacks.md:21 78b8dce06a1b49b3ab561a4794cf61bd
msgid ""
"First, install [cookiecutter](https://github.com/audreyr/cookiecutter) "
"using pip or conda:"
msgstr ""
#: ../../contributing/stacks.md:16 3db9dc85806e46b791468009008aec23
#: ../../contributing/stacks.md:23 9ff3413066b04a8a87d97edf68c3d098
msgid "```bash pip install cookiecutter # or conda install cookiecutter ```"
msgstr ""
#: ../../contributing/stacks.md:20 2427280d8b0a4f178aa400c8fad76bfc
#: ../../contributing/stacks.md:27 c9c7a9dee7aa47229c9ca71551b505db
msgid ""
"Run the cookiecutter command pointing to the [jupyter/cookiecutter-"
"docker-stacks](https://github.com/jupyter/cookiecutter-docker-stacks) "
"project on GitHub."
msgstr ""
#: ../../contributing/stacks.md:22 32e9f27558ea4e09a52c9f1d62251fbb
#: ../../contributing/stacks.md:31 5f569d16777d427586d3ee933da8bdf7
msgid ""
"```bash cookiecutter https://github.com/jupyter/cookiecutter-docker-"
"stacks.git ```"
msgstr ""
# 676ff068156d4ca7b1043b4a4fe2d1f1
#: ../../contributing/stacks.md:26 a2566ac2324448e9af272bd9c5a1c1c1
#: ../../contributing/stacks.md:35 9702bf91c71e49d4b05b22708b11d0dc
msgid ""
"Enter a name for your new stack image. This will serve as both the git "
"repository name and the part of the Docker image name after the slash."
msgstr ""
#: ../../contributing/stacks.md:29 2dd8006f293643b1ba1ba9771a9bf992
#: ../../contributing/stacks.md:38 302c74268ac043e19e0a1a4becaa3a81
msgid "``` stack_name [my-jupyter-stack]: ```"
msgstr ""
# 96deffa98bab47da82e5598e549c8a39
#: ../../contributing/stacks.md:33 7b87469603c2457d8efbd8d38e1997a7
#: ../../contributing/stacks.md:42 ef070c4a4e5947afad068dd42c94afa8
msgid ""
"Enter the user or organization name under which this stack will reside on"
" Docker Cloud / Hub. You must have access to manage this Docker Cloud org"
" in order to push images here and setup automated builds."
msgstr ""
#: ../../contributing/stacks.md:37 de7fe5882a97405eb9c3e111f4fa3413
#: ../../contributing/stacks.md:46 0f0d1602a3594734af9c9448b96a7992
msgid "``` stack_org [my-project]: ```"
msgstr ""
# b796c2d7c08b4a1db5cdfd3de7d84c16
#: ../../contributing/stacks.md:41 f94ec73b9c784cc1bcfb33494e5ce0df
#: ../../contributing/stacks.md:50 fa5555c0063c40aeb048112658255e4e
msgid ""
"Select an image from the jupyter/docker-stacks project that will serve as"
" the base for your new image."
msgstr ""
#: ../../contributing/stacks.md:44 a64c3be460d0452aab96151c5a8bda12
#: ../../contributing/stacks.md:53 94e00ac700294ef596da279daa673331
msgid "``` stack_base_image [jupyter/base-notebook]: ```"
msgstr ""
# 7ef9d73286d04b12a1350e8d9565df65
#: ../../contributing/stacks.md:48 26646e2da5c2495a9d24b9d5522854e4
#: ../../contributing/stacks.md:57 893a7ded902c463a8362a494a79a5cf8
msgid "Enter a longer description of the stack for your README."
msgstr ""
#: ../../contributing/stacks.md:50 57d24b5517b8495bbf6857ac93cbaf85
#: ../../contributing/stacks.md:59 63b5b03b3a484a5b9027e10194dedeef
msgid ""
"``` stack_description [my-jupyter-stack is a community maintained Jupyter"
" Docker Stack image]: ```"
msgstr ""
# 479d3a5c6ef9481a9dc4033224c540fa
#: ../../contributing/stacks.md:54 8c29ebcb67d94ca6b3761878e460e002
#: ../../contributing/stacks.md:63 75186ce005fc4399b9f1294c87dd4cd2
msgid "Initialize your project as a Git repository and push it to GitHub."
msgstr ""
#: ../../contributing/stacks.md:56 8a1307c751be41299ff0afdb2193fa5c
#: ../../contributing/stacks.md:65 4b5cc135f4de4e6a824e8e89636e38e5
msgid "``` cd <stack_name you chose>"
msgstr ""
#: ../../contributing/stacks.md:59 6cd23d80cc3c4de1a59a3ce5451177cd
#: ../../contributing/stacks.md:68 68bf7622f36343bb9ee98810ef07a89b
msgid ""
"git init git add . git commit -m 'Seed repo' git remote add origin <url "
"from github> git push -u origin master ```"
msgstr ""
#: ../../contributing/stacks.md:66 6e38296bbde24e12898e62d2476e0889
#: ../../contributing/stacks.md:75 ee68ec99549f4a7ab077ca743699acdc
msgid "## Configuring Travis"
msgstr ""
#: ../../contributing/stacks.md:77 f7336f2c3ea14f36a9f467c7803e952c
msgid ""
"> NOTE: This section and the cookiecutter template should be updated to "
"describe using GitHub > Actions now that jupyter/docker-stacks uses that "
"service."
msgstr ""
# 38e3784d96f64d7481f0e1fd17aff9cb
#: ../../contributing/stacks.md:68 af1ed0ba41394284a6e172594a0ced31
#: ../../contributing/stacks.md:80 ad43e39d477944b898cf18ebdc37ec01
msgid ""
"Next, link your GitHub project to Travis CI to build your Docker image "
"whenever you or someone else submits a pull request."
msgstr ""
#: ../../contributing/stacks.md:70 a2d9189c4b174051bd4f4e221c7e1fe5
#: ../../contributing/stacks.md:83 c59b36597fc7460982e6406d66090592
msgid ""
"1. Visit [https://docs.travis-ci.com/user/getting-started/#To-get-"
"started-with-Travis-CI](https://docs.travis-ci.com/user/getting-started"
"/#To-get-started-with-Travis-CI) and follow the instructions to add the "
"Travis CI application to your GitHub account. 3. Visit [https://travis-"
"ci.org](https://travis-ci.org). 4. Click the + symbol at the top of the "
"left sidebar."
"Visit [https://docs.travis-ci.com/user/getting-started/#To-get-started-"
"with-Travis-CI](https://docs.travis-ci.com/user/getting-started/#To-get-"
"started-with-Travis-CI) and follow the instructions to add the Travis CI "
"application to your GitHub account."
msgstr ""
#: ../../contributing/stacks.md:86 9e5d81ade9684748b32c6ade3605a0ec
msgid "Visit [https://travis-ci.org](https://travis-ci.org)."
msgstr ""
#: ../../contributing/stacks.md:73 8334004f6df740dea6a905b9f5972d4c
#: ../../contributing/stacks.md:87 af91579e3ec14edeb8788cdf67fa141e
msgid ""
"![Travis sidebar with plus button screenshot](../_static/travis-plus-"
"repo.png)"
"Click the + symbol at the top of the left sidebar. ![Travis sidebar with "
"plus button screenshot](../_static/travis-plus-repo.png)"
msgstr ""
# ac370ece6fb24becb8034cb994ad8f4b
#: ../../contributing/stacks.md:74 d237527b18974c92886a87127521f56d
#: ../../contributing/stacks.md:89 18584d73dddb4c41b2e7819e17e8968b
msgid ""
"Locate your project repository either in your primary user account or in "
"one of the organizations to which you belong."
msgstr ""
# 6b6a7bab547d4e25bd930009a6a9ea44
#: ../../contributing/stacks.md:75 1dbc14fe092646d0b4248901235b40ed
#: ../../contributing/stacks.md:91 8e2e7f97a52a464ebfead53159d1ab6b
msgid "Click the toggle to enable builds for the project repository."
msgstr ""
#: ../../contributing/stacks.md:76 a610a6a093a247eba3877322568d0bb9
msgid "Click the **Settings** button for that repository."
msgstr ""
#: ../../contributing/stacks.md:77 817ec9e36c8347d2b1f568654e28af83
#: ../../contributing/stacks.md:92 8c1eac1c459442e1b97c8ebbe46385f3
msgid ""
"![Travis enable build toggle screenshot](../_static/travis-enable-"
"build.png)"
"Click the **Settings** button for that repository. ![Travis enable build "
"toggle screenshot](../_static/travis-enable-build.png)"
msgstr ""
#: ../../contributing/stacks.md:78 84e38ed3b3b24e92a4f33db3af03723f
#: ../../contributing/stacks.md:94 605dcce863334fac957041e789237e36
msgid ""
"Enable **Build only if .travis.yml is present** and **Build pushed pull "
"requests**."
msgstr ""
#: ../../contributing/stacks.md:79 b57a3c1f90a74d769abc08bbada764ac
msgid "![Travis build settings screenshot](../_static/travis-build-settings.png)"
"requests**. ![Travis build settings screenshot](../_static/travis-build-"
"settings.png)"
msgstr ""
#: ../../contributing/stacks.md:80 577c4b978be540329cab6349be01db75
#: ../../contributing/stacks.md:96 7b2793aba2404996bccbd9acc3a140e4
msgid "Disable **Build pushed branches**."
msgstr ""
#: ../../contributing/stacks.md:82 9a3a675353694b418d23ce190fcde1c8
#: ../../contributing/stacks.md:98 aa71473c30c940beac55816b2d0e0625
msgid "## Configuring Docker Cloud"
msgstr ""
# f0c01a2906494d039d73324e90cbae44
#: ../../contributing/stacks.md:84 bfd61f89b75543b3b24fbc92d3f70964
#: ../../contributing/stacks.md:100 c8648232b1174610931b9391084910cd
msgid ""
"Now, configure Docker Cloud to build your stack image and push it to "
"Docker Hub repository whenever you merge a GitHub pull request to the "
"master branch of your project."
msgstr ""
#: ../../contributing/stacks.md:86 69cac7c980ab463083404e170a8f5e34
#: ../../contributing/stacks.md:103 af488675981a41eab8cae4129071e5a3
msgid "Visit [https://cloud.docker.com/](https://cloud.docker.com/) and login."
msgstr ""
#: ../../contributing/stacks.md:87 02e0caa91e7b4069a8e07e10914445b0
#: ../../contributing/stacks.md:104 afeb9da9a29b400db62a7c0785d5227c
msgid ""
"Select the account or organization matching the one you entered when "
"prompted with `stack_org` by the cookiecutter."
"prompted with `stack_org` by the cookiecutter. ![Docker account selection"
" screenshot](../_static/docker-org-select.png)"
msgstr ""
#: ../../contributing/stacks.md:88 1984a088c6af48899d61c5fa3f01fe55
msgid "![Docker account selection screenshot](../_static/docker-org-select.png)"
msgstr ""
#: ../../contributing/stacks.md:89 e4725346fb314d54ae78fb41c976709a
#: ../../contributing/stacks.md:106 620c22ad41cd454dbdfab22b9158156e
msgid "Scroll to the bottom of the page and click **Create repository**."
msgstr ""
#: ../../contributing/stacks.md:90 40088f0729d44d2cab75763351776a30
#: ../../contributing/stacks.md:107 895d2943d06e425db1b224f1d72e3124
msgid ""
"Enter the name of the image matching the one you entered when prompted "
"with `stack_name` by the cookiecutter."
msgstr ""
#: ../../contributing/stacks.md:91 31cc5283e7424d7bb9665f599ac70b9f
msgid ""
"![Docker image name and description screenshot](../_static/docker-repo-"
"name.png)"
"with `stack_name` by the cookiecutter. ![Docker image name and "
"description screenshot](../_static/docker-repo-name.png)"
msgstr ""
# 79092e5007ba4bdead594a71e30cd58a
#: ../../contributing/stacks.md:92 39537f0c54a140fba52a17e74a4de963
#: ../../contributing/stacks.md:109 166a9e752d5a410da94fd26ee53a7541
msgid "Enter a description for your image."
msgstr ""
#: ../../contributing/stacks.md:93 502b3baca67f4bc3bead7f72aad08505
#: ../../contributing/stacks.md:110 9269f2d3466a4ec99bc5e18fb953d0db
msgid ""
"Click **GitHub** under the **Build Settings** and follow the prompts to "
"connect your account if it is not already connected."
msgstr ""
# e085cfd6d7664d04bcd14ce89f24b75a
#: ../../contributing/stacks.md:94 8cd69feca10342b082e3ffa365756531
#: ../../contributing/stacks.md:112 c7031cb980624063a69bbbca22342331
msgid ""
"Select the GitHub organization and repository containing your image "
"definition from the dropdowns."
msgstr ""
#: ../../contributing/stacks.md:95 36c799f13fe4421cab13f57df0a1dd3a
msgid ""
"![Docker from GitHub automated build screenshot](../_static/docker-"
"github-settings.png)"
"definition from the dropdowns. ![Docker from GitHub automated build "
"screenshot](../_static/docker-github-settings.png)"
msgstr ""
#: ../../contributing/stacks.md:96 6fe8225f223642748101e2a42becd21b
#: ../../contributing/stacks.md:115 796d545d2dd84b01bdde42b0fee0074f
msgid "Click the **Create and Build** button."
msgstr ""
#: ../../contributing/stacks.md:98 ff46d994b8094fdc945fbfa04b2ab183
#: ../../contributing/stacks.md:117 42867fa2fedb45a39954f5cc4b583375
msgid "## Defining Your Image"
msgstr ""
#: ../../contributing/stacks.md:100 34727a930d0c41969b2d2fd451295f73
#: ../../contributing/stacks.md:119 49468177c5fb451a84cd60d2768a2b94
msgid ""
"Make edits the Dockerfile in your project to add third-party libraries "
"and configure Jupyter applications. Refer to the Dockerfiles for the core"
......@@ -736,7 +768,7 @@ msgid ""
"feel for what's possible and best practices."
msgstr ""
#: ../../contributing/stacks.md:102 39d833a10d1441ff8ab92e2ef863698b
#: ../../contributing/stacks.md:124 5576d815ad70493bbe72f01328de6cf5
msgid ""
"[Submit pull requests](https://github.com/PointCloudLibrary/pcl/wiki/A"
"-step-by-step-guide-on-preparing-and-submitting-a-pull-request) to your "
......@@ -745,54 +777,54 @@ msgid ""
"master branch that you can `docker pull`."
msgstr ""
#: ../../contributing/stacks.md:104 29eecce312564952a12c58e6baa76bcb
#: ../../contributing/stacks.md:128 aad71792a20a445db158a8f7bf2a325c
msgid "## Sharing Your Image"
msgstr ""
# d8e9f1a37f4c4a72bb630e7a3b265b92
#: ../../contributing/stacks.md:106 a067a1e9d7f24067b1b71efc316c5581
#: ../../contributing/stacks.md:130 cc493bc273f14c36992a76f5decbb050
msgid ""
"Finally, if you'd like to add a link to your project to this "
"documentation site, please do the following:"
msgstr ""
#: ../../contributing/stacks.md:108 e5e3359d21684f2cae5e9b8c9ed985ec
#: ../../contributing/stacks.md:133 4924422ac8e94c618f56872713ba1668
msgid ""
"Clone ths [jupyter/docker-stacks](https://github.com/jupyter/docker-"
"stacks) GitHub repository."
msgstr ""
#: ../../contributing/stacks.md:109 c9d209061e8344c0a88a9de41f8c1ea1
#: ../../contributing/stacks.md:134 c24b73c540d441879f7e4ea3d40ff2f3
msgid ""
"Open the `docs/using/selecting.md` source file and locate the **Community"
" Stacks** section."
msgstr ""
# 9d37dfec6fba48e6966c254b476e1e81
#: ../../contributing/stacks.md:110 7faf7108bf0f48e4878f50a5a2cec537
#: ../../contributing/stacks.md:135 98fd6aad1ad14a02bc814defe22ce9ee
msgid ""
"Add a bullet with a link to your project and a short description of what "
"your Docker image contains."
msgstr ""
#: ../../contributing/tests.md:1 c45ba83d713641b89d86ffa1301769d5
#: ../../contributing/tests.md:1 22236142608f4504be42349534c43058
msgid "# Image Tests"
msgstr ""
# 6dbd44985f3c4ba1a3823c90c5944ad0
#: ../../contributing/tests.md:3 b729f245588842a0b0aec7495e8362d5
#: ../../contributing/tests.md:3 11613393a5c74007a7dadd37ad0ef4bf
msgid ""
"We greatly appreciate pull requests that extend the automated tests that "
"vet the basic functionality of the Docker images."
msgstr ""
#: ../../contributing/tests.md:5 478d5e4939c24d1eae1c21dcf96005be
#: ../../contributing/tests.md:6 9aab19f0419248d6980b18a066a095b9
msgid "## How the Tests Work"
msgstr ""
#: ../../contributing/tests.md:7 19e32ceec8ec4ef0b4c3a8ddfebce3dc
#: ../../contributing/tests.md:8 c4ec76da67e74ed7a30cfa32e057fe21
msgid ""
"Travis executes `make build-test-all` against pull requests submitted to "
"GitHub executes `make build-test-all` against pull requests submitted to "
"the `jupyter/docker-stacks` repository. This `make` command builds every "
"docker image. After building each image, the `make` command executes "
"`pytest` to run both image-specific tests like those in [base-"
......@@ -805,49 +837,46 @@ msgid ""
"stacks/blob/master/conftest.py) file at the root of the projects."
msgstr ""
#: ../../contributing/tests.md:9 fae9f419beda411db77ee0e8e99befa5
#: ../../contributing/tests.md:17 158ebcc14b3a48f4bbfb85f42a23512d
msgid "## Contributing New Tests"
msgstr ""
# d317e6be0fbf487e8528ff1fe0bbdb78
#: ../../contributing/tests.md:11 15db53d9689c434cb30c1a79ff9e78f8
#: ../../contributing/tests.md:19 5d7f3aa184a64520bdf4186722d6784c
msgid "Please follow the process below to add new tests:"
msgstr ""
#: ../../contributing/tests.md:13 49c48242ed034964829c4f04357083d5
#: ../../contributing/tests.md:21 1361ba427a584cabbb9bfd1627f08c66
msgid ""
"If the test should run against every image built, add your test code to "
"one of the modules in [test/](https://github.com/jupyter/docker-"
"stacks/tree/master/test) or create a new module."
msgstr ""
#: ../../contributing/tests.md:14 5224cd7b1ee243bda1f00a653e1cfd7c
#: ../../contributing/tests.md:23 03369705269846a09daec3baa3d82c4b
msgid ""
"If your test should run against a single image, add your test code to one"
" of the modules in `some-notebook/test/` or create a new module."
msgstr ""
#: ../../contributing/tests.md:18 6fac39aab4814bc9bc70d2a820d6125a
#: ../../contributing/tests.md:25 4cfce5f6338e43de9c6209c04e55436a
msgid ""
"Build one or more images you intend to test and run the tests locally. If"
" you use `make`, call:"
" you use `make`, call: ```bash make build/somestack-notebook make test"
"/somestack-notebook ```"
msgstr ""
#: ../../contributing/tests.md:16 63873dc63c4f4ee99854f34d8a0be26f
msgid "```bash make build/somestack-notebook make test/somestack-notebook ```"
msgstr ""
#: ../../contributing/tests.md:22 b3b48c0dffa248de8abbfbd25a02bba5
#: ../../contributing/tests.md:33 3b16fb7184f349f28e07f28fcdf6e25b
msgid ""
"Discuss changes with the maintainers and address any issues running the "
"tests on Travis."
"tests on GitHub."
msgstr ""
#: ../../contributing/translations.md:1 7de975a1fcd2429c8b25de5780152e4a
#: ../../contributing/translations.md:1 74b02b85c9f04bbfa10f61d4e0f4c3d1
msgid "# Doc Translations"
msgstr ""
#: ../../contributing/translations.md:3 88ccce80ee8446549f6709441fd09504
#: ../../contributing/translations.md:3 e89669694caa44b4a92ca9004b16ab9b
msgid ""
"We are delighted when members of the Jupyter community want to help "
"translate these documentation pages to other languages. If you're "
......@@ -856,14 +885,14 @@ msgid ""
"updating translations of the Jupyter Docker Stacks documentation."
msgstr ""
#: ../../contributing/translations.md:5 897e68f9d1b8484fa1721c6672e5ec64
#: ../../contributing/translations.md:5 a169495d239445838922f97deb5dcc60
msgid ""
"Follow the steps documented on the [Getting Started as a "
"Translator](https://docs.transifex.com/getting-started-1/translators) "
"page."
msgstr ""
#: ../../contributing/translations.md:6 b929c4dfadf041d8ad27b5478e49cff0
#: ../../contributing/translations.md:6 68339c58d93a46cbb07beb65cd3be415
msgid ""
"Look for *jupyter-docker-stacks* when prompted to choose a translation "
"team. Alternatively, visit https://www.transifex.com/project-jupyter"
......@@ -871,7 +900,7 @@ msgid ""
"the project."
msgstr ""
#: ../../contributing/translations.md:7 5f067106c7f04dfa869295f9b954df96
#: ../../contributing/translations.md:7 cb8843de0486450caf61604d01e63a3a
msgid ""
"See [Translating with the Web "
"Editor](https://docs.transifex.com/translation/translating-with-the-web-"
......@@ -980,9 +1009,6 @@ msgstr ""
#~ msgid "Submit a pull request (PR) with your changes."
#~ msgstr ""
# fa69df66887f47d9a9abcd75fa8a8497
# 7083b6579dca40a487ab6bd7a21e20eb
# 2fbcbd3f9a63431294360d65dac1734a
#~ msgid ""
#~ "Watch for Travis to report a build"
#~ " success or failure for your PR "
......@@ -1338,7 +1364,6 @@ msgstr ""
#~ " locally. If you use make, call:"
#~ msgstr ""
# 760abcc7be7744858eda5ee0b7be3107
#~ msgid ""
#~ "Discuss changes with the maintainers and"
#~ " address any issues running the tests"
......@@ -1453,3 +1478,166 @@ msgstr ""
#~ "on Travis."
#~ msgstr ""
#~ msgid ""
#~ "Please build the image locally before"
#~ " submitting a pull request. Building "
#~ "the image locally shortens the debugging"
#~ " cycle by taking some load off "
#~ "[Travis CI](http://travis-ci.org/), which "
#~ "graciously provides free build services "
#~ "for open source projects like this "
#~ "one. If you use `make`, call:"
#~ msgstr ""
#~ msgid "```bash make build/somestack-notebook ```"
#~ msgstr ""
#~ msgid "# Image Lint"
#~ msgstr ""
#~ msgid "## Installation"
#~ msgstr ""
#~ msgid "## Lint"
#~ msgstr ""
#~ msgid "### Per Stack"
#~ msgstr ""
#~ msgid "### All the Stacks"
#~ msgstr ""
#~ msgid "## Ignoring Rules"
#~ msgstr ""
#~ msgid ""
#~ "[hadolint]: https://github.com/hadolint/hadolint [dbp]:"
#~ " https://docs.docker.com/develop/develop-images"
#~ "/dockerfile_best-practices [rules]: "
#~ "https://github.com/hadolint/hadolint#rules [DL3006]: "
#~ "https://github.com/hadolint/hadolint/wiki/DL3006 [DL3008]: "
#~ "https://github.com/hadolint/hadolint/wiki/DL3008"
#~ msgstr ""
#~ msgid ""
#~ "Please build the image locally before"
#~ " submitting a pull request. Building "
#~ "the image locally shortens the debugging"
#~ " cycle by taking some load off "
#~ "[Travis CI](http://travis-ci.org/), which "
#~ "graciously provides free build services "
#~ "for open source projects like this "
#~ "one. If you use `make`, call:"
#~ msgstr ""
# 8fa22b86dc9f4750b0b903371f16c1e6
#~ msgid ""
#~ "Configure Travis CI to build and "
#~ "test your image when users submit "
#~ "pull requests to your repository."
#~ msgstr ""
#~ msgid ""
#~ "1. Visit [https://docs.travis-ci.com/user"
#~ "/getting-started/#To-get-started-with-"
#~ "Travis-CI](https://docs.travis-ci.com/user/getting-"
#~ "started/#To-get-started-with-Travis-CI)"
#~ " and follow the instructions to add"
#~ " the Travis CI application to your"
#~ " GitHub account. 3. Visit [https"
#~ "://travis-ci.org](https://travis-ci.org). 4. "
#~ "Click the + symbol at the top "
#~ "of the left sidebar."
#~ msgstr ""
#~ msgid ""
#~ "![Travis sidebar with plus button "
#~ "screenshot](../_static/travis-plus-repo.png)"
#~ msgstr ""
#~ msgid "Click the **Settings** button for that repository."
#~ msgstr ""
#~ msgid ""
#~ "![Travis enable build toggle "
#~ "screenshot](../_static/travis-enable-build.png)"
#~ msgstr ""
#~ msgid ""
#~ "Enable **Build only if .travis.yml is"
#~ " present** and **Build pushed pull "
#~ "requests**."
#~ msgstr ""
#~ msgid ""
#~ "![Travis build settings screenshot](../_static"
#~ "/travis-build-settings.png)"
#~ msgstr ""
#~ msgid ""
#~ "Select the account or organization "
#~ "matching the one you entered when "
#~ "prompted with `stack_org` by the "
#~ "cookiecutter."
#~ msgstr ""
#~ msgid ""
#~ "![Docker account selection screenshot](../_static"
#~ "/docker-org-select.png)"
#~ msgstr ""
#~ msgid ""
#~ "Enter the name of the image "
#~ "matching the one you entered when "
#~ "prompted with `stack_name` by the "
#~ "cookiecutter."
#~ msgstr ""
#~ msgid ""
#~ "![Docker image name and description "
#~ "screenshot](../_static/docker-repo-name.png)"
#~ msgstr ""
# e085cfd6d7664d04bcd14ce89f24b75a
#~ msgid ""
#~ "Select the GitHub organization and "
#~ "repository containing your image definition"
#~ " from the dropdowns."
#~ msgstr ""
#~ msgid ""
#~ "![Docker from GitHub automated build "
#~ "screenshot](../_static/docker-github-settings.png)"
#~ msgstr ""
#~ msgid ""
#~ "Travis executes `make build-test-all`"
#~ " against pull requests submitted to "
#~ "the `jupyter/docker-stacks` repository. This"
#~ " `make` command builds every docker "
#~ "image. After building each image, the"
#~ " `make` command executes `pytest` to "
#~ "run both image-specific tests like "
#~ "those in [base-"
#~ "notebook/test/](https://github.com/jupyter/docker-"
#~ "stacks/tree/master/base-notebook/test) and common"
#~ " tests defined in "
#~ "[test/](https://github.com/jupyter/docker-"
#~ "stacks/tree/master/test). Both kinds of tests"
#~ " make use of global [pytest "
#~ "fixtures](https://docs.pytest.org/en/latest/fixture.html) "
#~ "defined in the "
#~ "[conftest.py](https://github.com/jupyter/docker-"
#~ "stacks/blob/master/conftest.py) file at the "
#~ "root of the projects."
#~ msgstr ""
#~ msgid ""
#~ "Build one or more images you "
#~ "intend to test and run the tests"
#~ " locally. If you use `make`, call:"
#~ msgstr ""
#~ msgid "```bash make build/somestack-notebook make test/somestack-notebook ```"
#~ msgstr ""
......@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: docker-stacks latest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-19 15:01+0000\n"
"POT-Creation-Date: 2020-08-08 19:06+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -18,32 +18,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: ../../maintaining/tasks.md:1 088ca8dad40145ad998c886c16b741af
#: ../../maintaining/tasks.md:1 4b12bcf1c691475db62e872bbdca68fa
msgid "# Maintainer Playbook"
msgstr ""
#: ../../maintaining/tasks.md:3 b231b29ae3d84d8a82614784f561140a
#: ../../maintaining/tasks.md:3 f688b20624524b93a14add6065bee956
msgid "## Merging Pull Requests"
msgstr ""
# 0a04eb6c0525428984f07f3c249f5d73
#: ../../maintaining/tasks.md:5 1baaa36062be4e57afb2f854a4391c97
#: ../../maintaining/tasks.md:5 5b916e113fc746d6bf5e1097c7dc928b
msgid ""
"To build new images on Docker Cloud and publish them to the Docker Hub "
"registry, do the following:"
msgstr ""
# f2710754a41e4354b51f4acd6f1f9545
#: ../../maintaining/tasks.md:7 fee1f50210d0497cb8281fab24cbbe4b
msgid "Make sure Travis is green for a PR."
#: ../../maintaining/tasks.md:7 fd849160eef9483f8205d9c6967c475e
msgid "Make sure GitHub Actions status checks pas for the PR."
msgstr ""
# db74ca47dfde4e558a20aff52176347a
#: ../../maintaining/tasks.md:8 92d4db1ab5204a8197d69a38f3fdb879
#: ../../maintaining/tasks.md:8 80c6da1230554f92be8abdef70aa01ff
msgid "Merge the PR."
msgstr ""
#: ../../maintaining/tasks.md:9 294b780a85e64af39c6d5aeab264913a
#: ../../maintaining/tasks.md:9 2e1ced11629f4ec2a259101ac85735c7
msgid ""
"Monitor the Docker Cloud build status for each of the stacks, starting "
"with [jupyter/base-"
......@@ -56,14 +55,14 @@ msgid ""
msgstr ""
# 9149cb3c2bdc48ffa9109b3b6ddcf446
#: ../../maintaining/tasks.md:10 532fe7ad94f14a649d58935fa5492b61
#: ../../maintaining/tasks.md:15 7ddbf4630fa3436e88d0ec901d7268cc
msgid ""
"Manually click the retry button next to any build that fails to resume "
"that build and any dependent builds."
msgstr ""
# d204ada7a14b46338be9b7afb0bc95b0
#: ../../maintaining/tasks.md:11 c804acac883745908b2c79ff1b5e5253
#: ../../maintaining/tasks.md:17 daa76f01193e48b79b1de4e0d6ec8f57
msgid ""
"Try to avoid merging another PR to master until all outstanding builds "
"complete. There's no way at present to propagate the git SHA to build "
......@@ -71,11 +70,11 @@ msgid ""
" of master HEAD."
msgstr ""
#: ../../maintaining/tasks.md:13 8776ad2d8d92419bbb53c21793da6f27
#: ../../maintaining/tasks.md:21 37458f5852104d58b3f9a886f2c3cb83
msgid "## Updating the Ubuntu Base Image"
msgstr ""
#: ../../maintaining/tasks.md:15 bc10da8f9c3a42a095e208abf29a488c
#: ../../maintaining/tasks.md:23 db19a5192fab4cccbe86f6cc73ab778f
msgid ""
"When there's a security fix in the Ubuntu base image or after some time "
"passes, it's a good idea to update the pinned SHA in the [jupyter/base-"
......@@ -85,18 +84,18 @@ msgid ""
"layer will rebuild."
msgstr ""
#: ../../maintaining/tasks.md:17 3107fa471e514777abcbcfccd30b4722
#: ../../maintaining/tasks.md:29 4ced832a1c9844c4a23c7486670a40fc
msgid "## Adding a New Core Image to Docker Cloud"
msgstr ""
# 201f0506bbb24b47b79a5db01db86557
#: ../../maintaining/tasks.md:19 78296cc9864c4f5eaa232479d56ea479
#: ../../maintaining/tasks.md:31 c9553182c042418ab3aba261d6c19d3f
msgid ""
"When there's a new stack definition, do the following before merging the "
"PR with the new stack:"
msgstr ""
#: ../../maintaining/tasks.md:21 0b5c6c42d5134a6689de23bc0f333289
#: ../../maintaining/tasks.md:33 fabe64e7a1af46a7910b3cffeef5411c
msgid ""
"Ensure the PR includes an update to the stack overview diagram [in the "
"documentation](https://github.com/jupyter/docker-"
......@@ -105,212 +104,222 @@ msgid ""
"used to create it."
msgstr ""
# 0e3d12dcfb4b42b8a3d24b9401caa757
#: ../../maintaining/tasks.md:22 9d653c0e44894b7e840f393c26b81544
#: ../../maintaining/tasks.md:36 cb36e81de2574d7eb3a3447dd9c40e68
msgid ""
"Ensure the PR updates the Makefile which is used to build the stacks in "
"order on Travis CI."
"order on GitHub Actions."
msgstr ""
#: ../../maintaining/tasks.md:23 f4694fd251cc4df38f389651a9f34164
#: ../../maintaining/tasks.md:37 a1db6dcafa40462c834b4eb78fb9f8f7
msgid ""
"Create a new repository in the `jupyter` org on Docker Cloud named after "
"the stack folder in the git repo."
msgstr ""
#: ../../maintaining/tasks.md:24 a088d32384274e6b96fd6b4ca9316762
#: ../../maintaining/tasks.md:39 1c547a028fbb4bd4b84066c28f5598d3
msgid "Grant the `stacks` team permission to write to the repo."
msgstr ""
#: ../../maintaining/tasks.md:25 919261a2c2eb4fa4861e5414074d1d59
msgid "Click *Builds* and then *Configure Automated Builds* for the repository."
#: ../../maintaining/tasks.md:40 70b1bbb3c6d34473b9c613903831c122
msgid "Click _Builds_ and then _Configure Automated Builds_ for the repository."
msgstr ""
#: ../../maintaining/tasks.md:26 56589eaa73ad4d01af35ddcaa16b89a7
#: ../../maintaining/tasks.md:41 bfad3b5b351541c88f89dfdf0a4ce909
msgid "Select `jupyter/docker-stacks` as the source repository."
msgstr ""
#: ../../maintaining/tasks.md:27 fd4623531783407b80fb6f0b52a7402c
#: ../../maintaining/tasks.md:42 b15d3cffa47d4b58ab2a15bdff0c4c76
msgid ""
"Choose *Build on Docker Cloud's infrastructure using a Small node* unless"
"Choose _Build on Docker Cloud's infrastructure using a Small node_ unless"
" you have reason to believe a bigger host is required."
msgstr ""
#: ../../maintaining/tasks.md:28 b9b619a6ecd246aea9a1df5fc6ff0419
#: ../../maintaining/tasks.md:44 0a64807f1c46424f8bffdaae134d9af9
msgid ""
"Update the *Build Context* in the default build rule to be `/<name-of-"
"Update the _Build Context_ in the default build rule to be `/<name-of-"
"the-stack>`."
msgstr ""
#: ../../maintaining/tasks.md:29 5a966d025bf1420990df95cb8ac2ad88
#: ../../maintaining/tasks.md:45 e372a3e606e74279a767f664773b4685
msgid ""
"Toggle *Autobuild* to disabled unless the stack is a new root stack "
"Toggle _Autobuild_ to disabled unless the stack is a new root stack "
"(e.g., like `jupyter/base-notebook`)."
msgstr ""
#: ../../maintaining/tasks.md:30 f8150b6ed0284f8b8091a98b4364492e
#: ../../maintaining/tasks.md:47 5dab6662eb524abb9878e0fe7c7b5e03
msgid ""
"If the new stack depends on the build of another stack in the hierarchy: "
"1. Hit *Save* and then click *Configure Automated Builds*. 2. At the very"
" bottom, add a build trigger named *Stack hierarchy trigger*. 3. Copy the"
" build trigger URL. 4. Visit the parent repository *Builds* page and "
"click *Configure Automated Builds*. 5. Add the URL you copied to the "
"*NEXT_BUILD_TRIGGERS* environment variable comma separated list of URLs, "
"creating that environment variable if it does not already exist. 6. Hit "
"*Save*."
"1. Hit _Save_ and then click _Configure Automated Builds_. 2. At the very"
" bottom, add a build trigger named _Stack hierarchy trigger_. 3. Copy the"
" build trigger URL. 4. Visit the parent repository _Builds_ page and "
"click _Configure Automated Builds_. 5. Add the URL you copied to the "
"_NEXT_BUILD_TRIGGERS_ environment variable comma separated list"
msgstr ""
#: ../../maintaining/tasks.md:53 4886079321d54cf5959fc3e409140166
msgid "of URLs, creating that environment variable if it does not already exist."
msgstr ""
#: ../../maintaining/tasks.md:37 b814a7ef513342ddb9891749cdb49341
#: ../../maintaining/tasks.md:54 ../../maintaining/tasks.md:59
#: 7e6dec502b5841db915faf2aa3a8eb41 b2ee46f5748e4ac9a2348e81ab605a7b
msgid "Hit _Save_."
msgstr ""
#: ../../maintaining/tasks.md:55 8f2588957e2944389fcdba97ff7a5929
msgid ""
"If the new stack should trigger other dependent builds: 1. Add an "
"environment variable named *NEXT_BUILD_TRIGGERS*. 2. Copy the build "
"trigger URLs from the dependent builds into the *NEXT_BUILD_TRIGGERS* "
"comma separated list of URLs. 3. Hit *Save*."
"environment variable named _NEXT_BUILD_TRIGGERS_. 2. Copy the build "
"trigger URLs from the dependent builds into the _NEXT_BUILD_TRIGGERS_ "
"comma"
msgstr ""
#: ../../maintaining/tasks.md:58 6f987b32b0eb4bfb9632499dd9547cf8
msgid "separated list of URLs."
msgstr ""
#: ../../maintaining/tasks.md:41 276c0c0679d04b2da6680eda4d5d09ab
#: ../../maintaining/tasks.md:60 c9f9d54989724b62ba46c690970ba576
msgid ""
"Adjust other *NEXT_BUILD_TRIGGERS* values as needed so that the build "
"Adjust other _NEXT_BUILD_TRIGGERS_ values as needed so that the build "
"order matches that in the stack hierarchy diagram."
msgstr ""
#: ../../maintaining/tasks.md:43 783ade249ba442f1a13574bede289441
#: ../../maintaining/tasks.md:63 8ff283d700cd4a9dad9c10a6789cc5f9
msgid "## Adding a New Maintainer Account"
msgstr ""
# e3bd3ced73994d9fad596784e1469cfc
#: ../../maintaining/tasks.md:45 c1982766fae547bca21ef693aec24df0
#: ../../maintaining/tasks.md:65 c0c7ecda9e6344ab9821beb463b849dc
msgid "Visit https://cloud.docker.com/app/jupyter/team/stacks/users"
msgstr ""
# 51b166c70ba743e0b4d335b3471da69a
#: ../../maintaining/tasks.md:46 b8ac817887694fa2a6250be4eccf9865
#: ../../maintaining/tasks.md:66 85e68de60e4a4426b250f5dfb96f30c9
msgid "Add the maintainer's Docker Cloud username."
msgstr ""
# 300f5dbd933f4ee6b5a550efd35f1c52
#: ../../maintaining/tasks.md:47 3ca59c0f57164b74aa62276d7f287105
#: ../../maintaining/tasks.md:67 eff9933085bc46ac81926d7e85e2b3f8
msgid ""
"Visit https://github.com/orgs/jupyter/teams/docker-image-"
"maintainers/members"
msgstr ""
# e26ad8ffb6de489988e076e64b6a1415
#: ../../maintaining/tasks.md:48 ad3194aa73f24de89b008bfff12cfe89
#: ../../maintaining/tasks.md:68 46d01c10e2c44664aee95e5360edd579
msgid "Add the maintainer's GitHub username."
msgstr ""
#: ../../maintaining/tasks.md:50 5398a7484d7146ac9d3ee0df9d0ca1e1
#: ../../maintaining/tasks.md:70 0278ae3e3f354df2accf4716aa4a619c
msgid "## Pushing a Build Manually"
msgstr ""
# 050b5c7a3d9d46bcbe26d54e8585ddd8
#: ../../maintaining/tasks.md:52 a0113e0c62844907b88117436ab655d5
#: ../../maintaining/tasks.md:72 b0260a73403c425da436c59fe8e78e09
msgid ""
"If automated builds on Docker Cloud have got you down, do the following "
"to push a build manually:"
msgstr ""
# ead6a3a714ae4a8a9df5585c18260c16
#: ../../maintaining/tasks.md:54 8322e8f2931946cea180334142dce4d7
#: ../../maintaining/tasks.md:74 b1d36953ee174c3dbc04a153ace6d862
msgid "Clone this repository."
msgstr ""
# 48e1d6954f414fe080d7b4afd9e0c391
#: ../../maintaining/tasks.md:55 53dcb1a948234d96a02151bd0c702410
#: ../../maintaining/tasks.md:75 bd98e36df92b4a83b9fb5298fbabf0bf
msgid "Check out the git SHA you want to build and publish."
msgstr ""
#: ../../maintaining/tasks.md:56 64fa522c1c9743a9a5a94d7f1aca78c8
#: ../../maintaining/tasks.md:76 4b4af44a60f54f5db093942092362794
msgid "`docker login` with your Docker Hub/Cloud credentials."
msgstr ""
#: ../../maintaining/tasks.md:57 5561c3a444184f2f9faf3b2470a7e30d
#: ../../maintaining/tasks.md:77 a60704a1dee24afeac8298732c88133c
msgid "Run `make retry/release-all`."
msgstr ""
#: ../../maintaining/tasks.md:59 75abab343159485b92293fb0eee5e8f3
#: ../../maintaining/tasks.md:79 1d7f037ade384524be9cf5a2da2e1732
msgid "## Enabling a New Doc Language Translation"
msgstr ""
# 5aafef10dc75417785a79aba203175e5
#: ../../maintaining/tasks.md:61 05d5a331576446c8845f8db8c2564f30
#: ../../maintaining/tasks.md:81 9b565e5ad1ae4df9a168536dac18f7e2
msgid "First enable translation on Transifex:"
msgstr ""
# c1a249c0d0cd4e9192ed7814dfde6e34
#: ../../maintaining/tasks.md:63 02c24d7f64de4a40a10b34cb5c3c8b16
#: ../../maintaining/tasks.md:83 c39df2ae52ef49f8b4ff9d184abe8331
msgid ""
"Visit https://www.transifex.com/project-jupyter/jupyter-docker-"
"stacks-1/languages/"
msgstr ""
#: ../../maintaining/tasks.md:64 db93f630f8b84e418893b1c788f6cd2f
msgid "Click *Edit Languages* in the top right."
#: ../../maintaining/tasks.md:84 ec2ee93b70ce405ab43f4da197674467
msgid "Click _Edit Languages_ in the top right."
msgstr ""
# 7efe7d98a98b47bd82d697673d277cbd
#: ../../maintaining/tasks.md:65 64cd60c1323f46cfb4c01a978815a4c1
#: ../../maintaining/tasks.md:85 8c9578ec646e410bb0d4891bb4f5f71e
msgid "Select the language from the dropdown."
msgstr ""
#: ../../maintaining/tasks.md:66 d2a439e2f5014dad830ca1613b743d5c
msgid "Click *Apply*."
#: ../../maintaining/tasks.md:86 5699c36519a34f6b9f2a0c76cb2844a5
msgid "Click _Apply_."
msgstr ""
# 1e3868ee7dae469f9921516dd7973766
#: ../../maintaining/tasks.md:68 135f935d1f654289ba9867871210984f
#: ../../maintaining/tasks.md:88 d7108eada14f448497e580d6401b7593
msgid "Then setup a subproject on ReadTheDocs for the language:"
msgstr ""
# fffa155a75674f0dbe746a15eb3be492
#: ../../maintaining/tasks.md:70 d4e0bd836f974d93aa511ac220b2d32a
#: ../../maintaining/tasks.md:90 12b36373698643b695784e7b0a68d585
msgid "Visit https://readthedocs.org/dashboard/import/manual/"
msgstr ""
#: ../../maintaining/tasks.md:71 4da6f8ab4a9d4f89a09449a2154c5827
msgid "Enter *jupyter-docker-stacks-language_abbreviation* for the project name."
#: ../../maintaining/tasks.md:91 b488eae9bb924b3588d9d14e758ee7b6
msgid "Enter _jupyter-docker-stacks-language_abbreviation_ for the project name."
msgstr ""
# 2869b2f7a89c428f903e3695dd511e9a
#: ../../maintaining/tasks.md:72 0ba7634405354e90a6540f64bbb1e47e
#: ../../maintaining/tasks.md:92 9ebca91beff846648bdc758fc90afec1
msgid "Enter https://github.com/jupyter/docker-stacks for the URL."
msgstr ""
#: ../../maintaining/tasks.md:73 62a52d38a77c473d8160ab4310162a0a
msgid "Check *Edit advanced project options*."
#: ../../maintaining/tasks.md:93 2d3b518fd69640169e17d44018a7a8e4
msgid "Check _Edit advanced project options_."
msgstr ""
#: ../../maintaining/tasks.md:74 2bcec71b1ac142ff94707d9c889b6dc6
msgid "Click *Next*."
#: ../../maintaining/tasks.md:94 75e92ae1b3b0418f8256a68e974ae9e9
msgid "Click _Next_."
msgstr ""
#: ../../maintaining/tasks.md:75 53574ea6cc9b48169a1e1612f9568861
msgid "Select the *Language* from the dropdown on the next screen."
#: ../../maintaining/tasks.md:95 f577fc280c154e37824461b6d8f39528
msgid "Select the _Language_ from the dropdown on the next screen."
msgstr ""
#: ../../maintaining/tasks.md:76 9296b95300784a3094d56add04e6812f
msgid "Click *Finish*."
#: ../../maintaining/tasks.md:96 810b06550ec44599a81792006973d3af
msgid "Click _Finish_."
msgstr ""
# 529f3729d2474287adec0ff895100248
#: ../../maintaining/tasks.md:78 6006f4be03a449d8a788839778a9cf70
#: ../../maintaining/tasks.md:98 08613ea94d7c4b7c99cc0c3e775670bc
msgid "Finally link the new language subproject to the top level doc project:"
msgstr ""
# 024aaf54695141839eaa5537b4087a81
#: ../../maintaining/tasks.md:80 97d1554572034f1a9c1e14c2de3f96da
#: ../../maintaining/tasks.md:100 2a798b799c2649769bdbc0f202c49e50
msgid ""
"Visit https://readthedocs.org/dashboard/jupyter-docker-"
"stacks/translations/"
msgstr ""
#: ../../maintaining/tasks.md:81 ec8db5a40970438fb6d6641fff20c8ec
msgid "Select the subproject you created from the *Project* dropdown."
#: ../../maintaining/tasks.md:101 3c1717d4974c4e4a98dbbbcf947e93ec
msgid "Select the subproject you created from the _Project_ dropdown."
msgstr ""
#: ../../maintaining/tasks.md:82 8bc67e5bc244476e853fe4122c1e0c72
msgid "Click *Add*."
#: ../../maintaining/tasks.md:102 91e9666e3b1348e7830a077ca601add8
msgid "Click _Add_."
msgstr ""
# a798b8e31be7408d9301187ff3e3ef69
......@@ -526,3 +535,102 @@ msgstr ""
#~ msgid "Click Add."
#~ msgstr ""
# f2710754a41e4354b51f4acd6f1f9545
#~ msgid "Make sure Travis is green for a PR."
#~ msgstr ""
# 0e3d12dcfb4b42b8a3d24b9401caa757
#~ msgid ""
#~ "Ensure the PR updates the Makefile "
#~ "which is used to build the stacks"
#~ " in order on Travis CI."
#~ msgstr ""
#~ msgid ""
#~ "Click *Builds* and then *Configure "
#~ "Automated Builds* for the repository."
#~ msgstr ""
#~ msgid ""
#~ "Choose *Build on Docker Cloud's "
#~ "infrastructure using a Small node* "
#~ "unless you have reason to believe "
#~ "a bigger host is required."
#~ msgstr ""
#~ msgid ""
#~ "Update the *Build Context* in the "
#~ "default build rule to be `/<name-"
#~ "of-the-stack>`."
#~ msgstr ""
#~ msgid ""
#~ "Toggle *Autobuild* to disabled unless "
#~ "the stack is a new root stack "
#~ "(e.g., like `jupyter/base-notebook`)."
#~ msgstr ""
#~ msgid ""
#~ "If the new stack depends on the"
#~ " build of another stack in the "
#~ "hierarchy: 1. Hit *Save* and then "
#~ "click *Configure Automated Builds*. 2. "
#~ "At the very bottom, add a build"
#~ " trigger named *Stack hierarchy trigger*."
#~ " 3. Copy the build trigger URL. "
#~ "4. Visit the parent repository *Builds*"
#~ " page and click *Configure Automated "
#~ "Builds*. 5. Add the URL you copied"
#~ " to the *NEXT_BUILD_TRIGGERS* environment "
#~ "variable comma separated list of URLs,"
#~ " creating that environment variable if "
#~ "it does not already exist. 6. Hit"
#~ " *Save*."
#~ msgstr ""
#~ msgid ""
#~ "If the new stack should trigger "
#~ "other dependent builds: 1. Add an "
#~ "environment variable named *NEXT_BUILD_TRIGGERS*."
#~ " 2. Copy the build trigger URLs "
#~ "from the dependent builds into the "
#~ "*NEXT_BUILD_TRIGGERS* comma separated list of"
#~ " URLs. 3. Hit *Save*."
#~ msgstr ""
#~ msgid ""
#~ "Adjust other *NEXT_BUILD_TRIGGERS* values as"
#~ " needed so that the build order "
#~ "matches that in the stack hierarchy "
#~ "diagram."
#~ msgstr ""
#~ msgid "Click *Edit Languages* in the top right."
#~ msgstr ""
#~ msgid "Click *Apply*."
#~ msgstr ""
#~ msgid ""
#~ "Enter *jupyter-docker-stacks-"
#~ "language_abbreviation* for the project name."
#~ msgstr ""
#~ msgid "Check *Edit advanced project options*."
#~ msgstr ""
#~ msgid "Click *Next*."
#~ msgstr ""
#~ msgid "Select the *Language* from the dropdown on the next screen."
#~ msgstr ""
#~ msgid "Click *Finish*."
#~ msgstr ""
#~ msgid "Select the subproject you created from the *Project* dropdown."
#~ msgstr ""
#~ msgid "Click *Add*."
#~ msgstr ""
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -4,41 +4,61 @@
To build new images on Docker Cloud and publish them to the Docker Hub registry, do the following:
1. Make sure Travis is green for a PR.
1. Make sure GitHub Actions status checks pas for the PR.
2. Merge the PR.
3. Monitor the Docker Cloud build status for each of the stacks, starting with [jupyter/base-notebook](https://cloud.docker.com/app/jupyter/repository/docker/jupyter/base-notebook/general) and ending with [jupyter/all-spark-notebook](https://cloud.docker.com/app/jupyter/repository/docker/jupyter/all-spark-notebook/general). See the [stack hierarchy diagram](../using/selecting.html#image-relationships) for the current, complete build order.
4. Manually click the retry button next to any build that fails to resume that build and any dependent builds.
5. Try to avoid merging another PR to master until all outstanding builds complete. There's no way at present to propagate the git SHA to build through the Docker Cloud build trigger API. Every build trigger works off of master HEAD.
3. Monitor the Docker Cloud build status for each of the stacks, starting with
[jupyter/base-notebook](https://cloud.docker.com/app/jupyter/repository/docker/jupyter/base-notebook/general)
and ending with
[jupyter/all-spark-notebook](https://cloud.docker.com/app/jupyter/repository/docker/jupyter/all-spark-notebook/general).
See the [stack hierarchy diagram](../using/selecting.html#image-relationships) for the current,
complete build order.
4. Manually click the retry button next to any build that fails to resume that build and any
dependent builds.
5. Try to avoid merging another PR to master until all outstanding builds complete. There's no way
at present to propagate the git SHA to build through the Docker Cloud build trigger API. Every
build trigger works off of master HEAD.
## Updating the Ubuntu Base Image
When there's a security fix in the Ubuntu base image or after some time passes, it's a good idea to update the pinned SHA in the [jupyter/base-notebook Dockerfile](https://github.com/jupyter/docker-stacks/blob/master/base-notebook/Dockerfile). Submit it as a regular PR and go through the build process. Expect the build to take a while to complete: every image layer will rebuild.
When there's a security fix in the Ubuntu base image or after some time passes, it's a good idea to
update the pinned SHA in the
[jupyter/base-notebook Dockerfile](https://github.com/jupyter/docker-stacks/blob/master/base-notebook/Dockerfile).
Submit it as a regular PR and go through the build process. Expect the build to take a while to
complete: every image layer will rebuild.
## Adding a New Core Image to Docker Cloud
When there's a new stack definition, do the following before merging the PR with the new stack:
1. Ensure the PR includes an update to the stack overview diagram [in the documentation](https://github.com/jupyter/docker-stacks/blob/master/docs/using/selecting.md#image-relationships). The image links to the [blockdiag source](http://interactive.blockdiag.com/) used to create it.
2. Ensure the PR updates the Makefile which is used to build the stacks in order on Travis CI.
3. Create a new repository in the `jupyter` org on Docker Cloud named after the stack folder in the git repo.
1. Ensure the PR includes an update to the stack overview diagram
[in the documentation](https://github.com/jupyter/docker-stacks/blob/master/docs/using/selecting.md#image-relationships).
The image links to the [blockdiag source](http://interactive.blockdiag.com/) used to create it.
2. Ensure the PR updates the Makefile which is used to build the stacks in order on GitHub Actions.
3. Create a new repository in the `jupyter` org on Docker Cloud named after the stack folder in the
git repo.
4. Grant the `stacks` team permission to write to the repo.
5. Click *Builds* and then *Configure Automated Builds* for the repository.
5. Click _Builds_ and then _Configure Automated Builds_ for the repository.
6. Select `jupyter/docker-stacks` as the source repository.
7. Choose *Build on Docker Cloud's infrastructure using a Small node* unless you have reason to believe a bigger host is required.
8. Update the *Build Context* in the default build rule to be `/<name-of-the-stack>`.
9. Toggle *Autobuild* to disabled unless the stack is a new root stack (e.g., like `jupyter/base-notebook`).
7. Choose _Build on Docker Cloud's infrastructure using a Small node_ unless you have reason to
believe a bigger host is required.
8. Update the _Build Context_ in the default build rule to be `/<name-of-the-stack>`.
9. Toggle _Autobuild_ to disabled unless the stack is a new root stack (e.g., like
`jupyter/base-notebook`).
10. If the new stack depends on the build of another stack in the hierarchy:
1. Hit *Save* and then click *Configure Automated Builds*.
2. At the very bottom, add a build trigger named *Stack hierarchy trigger*.
1. Hit _Save_ and then click _Configure Automated Builds_.
2. At the very bottom, add a build trigger named _Stack hierarchy trigger_.
3. Copy the build trigger URL.
4. Visit the parent repository *Builds* page and click *Configure Automated Builds*.
5. Add the URL you copied to the *NEXT_BUILD_TRIGGERS* environment variable comma separated list of URLs, creating that environment variable if it does not already exist.
6. Hit *Save*.
4. Visit the parent repository _Builds_ page and click _Configure Automated Builds_.
5. Add the URL you copied to the _NEXT_BUILD_TRIGGERS_ environment variable comma separated list
of URLs, creating that environment variable if it does not already exist.
6. Hit _Save_.
11. If the new stack should trigger other dependent builds:
1. Add an environment variable named *NEXT_BUILD_TRIGGERS*.
2. Copy the build trigger URLs from the dependent builds into the *NEXT_BUILD_TRIGGERS* comma separated list of URLs.
3. Hit *Save*.
12. Adjust other *NEXT_BUILD_TRIGGERS* values as needed so that the build order matches that in the stack hierarchy diagram.
1. Add an environment variable named _NEXT_BUILD_TRIGGERS_.
2. Copy the build trigger URLs from the dependent builds into the _NEXT_BUILD_TRIGGERS_ comma
separated list of URLs.
3. Hit _Save_.
12. Adjust other _NEXT_BUILD_TRIGGERS_ values as needed so that the build order matches that in the
stack hierarchy diagram.
## Adding a New Maintainer Account
......@@ -61,22 +81,22 @@ If automated builds on Docker Cloud have got you down, do the following to push
First enable translation on Transifex:
1. Visit https://www.transifex.com/project-jupyter/jupyter-docker-stacks-1/languages/
2. Click *Edit Languages* in the top right.
2. Click _Edit Languages_ in the top right.
3. Select the language from the dropdown.
4. Click *Apply*.
4. Click _Apply_.
Then setup a subproject on ReadTheDocs for the language:
1. Visit https://readthedocs.org/dashboard/import/manual/
2. Enter *jupyter-docker-stacks-language_abbreviation* for the project name.
2. Enter _jupyter-docker-stacks-language_abbreviation_ for the project name.
3. Enter https://github.com/jupyter/docker-stacks for the URL.
4. Check *Edit advanced project options*.
5. Click *Next*.
6. Select the *Language* from the dropdown on the next screen.
7. Click *Finish*.
4. Check _Edit advanced project options_.
5. Click _Next_.
6. Select the _Language_ from the dropdown on the next screen.
7. Click _Finish_.
Finally link the new language subproject to the top level doc project:
1. Visit https://readthedocs.org/dashboard/jupyter-docker-stacks/translations/
2. Select the subproject you created from the *Project* dropdown.
3. Click *Add*.
2. Select the subproject you created from the _Project_ dropdown.
3. Click _Add_.
# Selecting an Image
* [Core Stacks](#core-stacks)
* [Image Relationships](#image-relationships)
* [Community Stacks](#community-stacks)
- [Core Stacks](#core-stacks)
- [Image Relationships](#image-relationships)
- [Community Stacks](#community-stacks)
Using one of the Jupyter Docker Stacks requires two choices:
......@@ -13,193 +13,238 @@ This section provides details about the first.
## Core Stacks
The Jupyter team maintains a set of Docker image definitions in the [https://github.com/jupyter/docker-stacks](https://github.com/jupyter/docker-stacks) GitHub
repository. The following sections describe these images including their contents, relationships, and versioning strategy.
The Jupyter team maintains a set of Docker image definitions in the
[https://github.com/jupyter/docker-stacks](https://github.com/jupyter/docker-stacks) GitHub
repository. The following sections describe these images including their contents, relationships,
and versioning strategy.
### jupyter/base-notebook
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/base-notebook)
| [Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/base-notebook/Dockerfile)
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/base-notebook) |
[Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/base-notebook/Dockerfile)
| [Docker Hub image tags](https://hub.docker.com/r/jupyter/base-notebook/tags/)
`jupyter/base-notebook` is a small image supporting the [options common across all core stacks](common.md). It is the basis for all other stacks.
`jupyter/base-notebook` is a small image supporting the
[options common across all core stacks](common.md). It is the basis for all other stacks.
* Minimally-functional Jupyter Notebook server (e.g., no LaTeX support for saving notebooks as PDFs)
* [Miniconda](https://conda.io/miniconda.html) Python 3.x in `/opt/conda`
* No preinstalled scientific computing packages
* Unprivileged user `jovyan` (`uid=1000`, configurable, see options) in group `users` (`gid=100`) with ownership over the `/home/jovyan` and `/opt/conda` paths
* `tini` as the container entrypoint and a `start-notebook.sh` script as the default command
* A `start-singleuser.sh` script useful for launching containers in JupyterHub
* A `start.sh` script useful for running alternative commands in the container (e.g. `ipython`, `jupyter kernelgateway`, `jupyter lab`)
* Options for a self-signed HTTPS certificate and passwordless sudo
- Minimally-functional Jupyter Notebook server (e.g., no LaTeX support for saving notebooks as PDFs)
- [Miniconda](https://conda.io/miniconda.html) Python 3.x in `/opt/conda`
- No preinstalled scientific computing packages
- Unprivileged user `jovyan` (`uid=1000`, configurable, see options) in group `users` (`gid=100`)
with ownership over the `/home/jovyan` and `/opt/conda` paths
- `tini` as the container entrypoint and a `start-notebook.sh` script as the default command
- A `start-singleuser.sh` script useful for launching containers in JupyterHub
- A `start.sh` script useful for running alternative commands in the container (e.g. `ipython`,
`jupyter kernelgateway`, `jupyter lab`)
- Options for a self-signed HTTPS certificate and passwordless sudo
### jupyter/minimal-notebook
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/minimal-notebook)
| [Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/minimal-notebook/Dockerfile)
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/minimal-notebook) |
[Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/minimal-notebook/Dockerfile)
| [Docker Hub image tags](https://hub.docker.com/r/jupyter/minimal-notebook/tags/)
`jupyter/minimal-notebook` adds command line tools useful when working in Jupyter applications.
* Everything in `jupyter/base-notebook`
* [TeX Live](https://www.tug.org/texlive/) for notebook document conversion
* [git](https://git-scm.com/), [emacs](https://www.gnu.org/software/emacs/) (actually `emacs-nox`), [vi](https://vim.org/) (actually `vim-tiny`), [jed](https://www.jedsoft.org/jed/), [nano](https://www.nano-editor.org/), tzdata, and unzip
- Everything in `jupyter/base-notebook`
- [TeX Live](https://www.tug.org/texlive/) for notebook document conversion
- [git](https://git-scm.com/), [emacs](https://www.gnu.org/software/emacs/) (actually `emacs-nox`),
[vi](https://vim.org/) (actually `vim-tiny`), [jed](https://www.jedsoft.org/jed/),
[nano](https://www.nano-editor.org/), tzdata, and unzip
### jupyter/r-notebook
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/r-notebook)
| [Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/r-notebook/Dockerfile)
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/r-notebook) |
[Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/r-notebook/Dockerfile)
| [Docker Hub image tags](https://hub.docker.com/r/jupyter/r-notebook/tags/)
`jupyter/r-notebook` includes popular packages from the R ecosystem.
* Everything in `jupyter/minimal-notebook` and its ancestor images
* The [R](https://www.r-project.org/) interpreter and base environment
* [IRKernel](https://irkernel.github.io/) to support R code in Jupyter notebooks
* [tidyverse](https://www.tidyverse.org/) packages, including [ggplot2](http://ggplot2.org/), [dplyr](http://dplyr.tidyverse.org/),
[tidyr](http://tidyr.tidyverse.org/), [readr](http://readr.tidyverse.org/), [purrr](http://purrr.tidyverse.org/), [tibble](http://tibble.tidyverse.org/),
[stringr](http://stringr.tidyverse.org/), [lubridate](http://lubridate.tidyverse.org/), and
[broom](https://cran.r-project.org/web/packages/broom/vignettes/broom.html) from [conda-forge](https://conda-forge.github.io/feedstocks)
* [devtools](https://cran.r-project.org/web/packages/devtools/index.html),
[shiny](https://shiny.rstudio.com/), [rmarkdown](http://rmarkdown.rstudio.com/), [forecast](https://cran.r-project.org/web/packages/forecast/forecast.pdf),
[rsqlite](https://cran.r-project.org/web/packages/RSQLite/index.html),
[nycflights13](https://cran.r-project.org/web/packages/nycflights13/index.html), [caret](http://topepo.github.io/caret/index.html), [tidymodels](https://www.tidymodels.org/),
[rcurl](https://cran.r-project.org/web/packages/RCurl/index.html), and [randomforest](https://cran.r-project.org/web/packages/randomForest/randomForest.pdf)
packages from [conda-forge](https://conda-forge.github.io/feedstocks)
- Everything in `jupyter/minimal-notebook` and its ancestor images
- The [R](https://www.r-project.org/) interpreter and base environment
- [IRKernel](https://irkernel.github.io/) to support R code in Jupyter notebooks
- [tidyverse](https://www.tidyverse.org/) packages, including [ggplot2](http://ggplot2.org/),
[dplyr](http://dplyr.tidyverse.org/), [tidyr](http://tidyr.tidyverse.org/),
[readr](http://readr.tidyverse.org/), [purrr](http://purrr.tidyverse.org/),
[tibble](http://tibble.tidyverse.org/), [stringr](http://stringr.tidyverse.org/),
[lubridate](http://lubridate.tidyverse.org/), and
[broom](https://cran.r-project.org/web/packages/broom/vignettes/broom.html) from
[conda-forge](https://conda-forge.github.io/feedstocks)
- [devtools](https://cran.r-project.org/web/packages/devtools/index.html),
[shiny](https://shiny.rstudio.com/), [rmarkdown](http://rmarkdown.rstudio.com/),
[forecast](https://cran.r-project.org/web/packages/forecast/forecast.pdf),
[rsqlite](https://cran.r-project.org/web/packages/RSQLite/index.html),
[nycflights13](https://cran.r-project.org/web/packages/nycflights13/index.html),
[caret](http://topepo.github.io/caret/index.html), [tidymodels](https://www.tidymodels.org/),
[rcurl](https://cran.r-project.org/web/packages/RCurl/index.html), and
[randomforest](https://cran.r-project.org/web/packages/randomForest/randomForest.pdf) packages
from [conda-forge](https://conda-forge.github.io/feedstocks)
### jupyter/scipy-notebook
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/scipy-notebook)
| [Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/scipy-notebook/Dockerfile)
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/scipy-notebook) |
[Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/scipy-notebook/Dockerfile)
| [Docker Hub image tags](https://hub.docker.com/r/jupyter/scipy-notebook/tags/)
`jupyter/scipy-notebook` includes popular packages from the scientific Python ecosystem.
* Everything in `jupyter/minimal-notebook` and its ancestor images
* [dask](https://dask.org/), [pandas](https://pandas.pydata.org/), [numexpr](https://github.com/pydata/numexpr), [matplotlib](https://matplotlib.org/), [scipy](https://www.scipy.org/),
[seaborn](https://seaborn.pydata.org/), [scikit-learn](http://scikit-learn.org/stable/), [scikit-image](http://scikit-image.org/),
[sympy](http://www.sympy.org/en/index.html), [cython](http://cython.org/), [patsy](https://patsy.readthedocs.io/en/latest/),
[statsmodel](http://www.statsmodels.org/stable/index.html), [cloudpickle](https://github.com/cloudpipe/cloudpickle), [dill](https://pypi.python.org/pypi/dill),
[numba](https://numba.pydata.org/), [bokeh](https://bokeh.pydata.org/en/latest/), [sqlalchemy](https://www.sqlalchemy.org/), [hdf5](http://www.h5py.org/),
[vincent](http://vincent.readthedocs.io/en/latest/), [beautifulsoup](https://www.crummy.com/software/BeautifulSoup/),
[protobuf](https://developers.google.com/protocol-buffers/docs/pythontutorial), [xlrd](http://www.python-excel.org/), [bottleneck](https://bottleneck.readthedocs.io/en/latest/), and [pytables](https://www.pytables.org/) packages
* [ipywidgets](https://ipywidgets.readthedocs.io/en/stable/) and [ipympl](https://github.com/matplotlib/jupyter-matplotlib) for interactive visualizations and plots in Python notebooks
* [Facets](https://github.com/PAIR-code/facets) for visualizing machine learning datasets
- Everything in `jupyter/minimal-notebook` and its ancestor images
- [dask](https://dask.org/), [pandas](https://pandas.pydata.org/),
[numexpr](https://github.com/pydata/numexpr), [matplotlib](https://matplotlib.org/),
[scipy](https://www.scipy.org/), [seaborn](https://seaborn.pydata.org/),
[scikit-learn](http://scikit-learn.org/stable/), [scikit-image](http://scikit-image.org/),
[sympy](http://www.sympy.org/en/index.html), [cython](http://cython.org/),
[patsy](https://patsy.readthedocs.io/en/latest/),
[statsmodel](http://www.statsmodels.org/stable/index.html),
[cloudpickle](https://github.com/cloudpipe/cloudpickle),
[dill](https://pypi.python.org/pypi/dill), [numba](https://numba.pydata.org/),
[bokeh](https://bokeh.pydata.org/en/latest/), [sqlalchemy](https://www.sqlalchemy.org/),
[hdf5](http://www.h5py.org/), [vincent](http://vincent.readthedocs.io/en/latest/),
[beautifulsoup](https://www.crummy.com/software/BeautifulSoup/),
[protobuf](https://developers.google.com/protocol-buffers/docs/pythontutorial),
[xlrd](http://www.python-excel.org/), [bottleneck](https://bottleneck.readthedocs.io/en/latest/),
and [pytables](https://www.pytables.org/) packages
- [ipywidgets](https://ipywidgets.readthedocs.io/en/stable/) and
[ipympl](https://github.com/matplotlib/jupyter-matplotlib) for interactive visualizations and
plots in Python notebooks
- [Facets](https://github.com/PAIR-code/facets) for visualizing machine learning datasets
### jupyter/tensorflow-notebook
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/tensorflow-notebook)
| [Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/tensorflow-notebook/Dockerfile)
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/tensorflow-notebook) |
[Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/tensorflow-notebook/Dockerfile)
| [Docker Hub image tags](https://hub.docker.com/r/jupyter/tensorflow-notebook/tags/)
`jupyter/tensorflow-notebook` includes popular Python deep learning libraries.
* Everything in `jupyter/scipy-notebook` and its ancestor images
* [tensorflow](https://www.tensorflow.org/) and [keras](https://keras.io/) machine learning libraries
- Everything in `jupyter/scipy-notebook` and its ancestor images
- [tensorflow](https://www.tensorflow.org/) and [keras](https://keras.io/) machine learning
libraries
### jupyter/datascience-notebook
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/datascience-notebook)
| [Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/datascience-notebook/Dockerfile)
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/datascience-notebook) |
[Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/datascience-notebook/Dockerfile)
| [Docker Hub image tags](https://hub.docker.com/r/jupyter/datascience-notebook/tags/)
`jupyter/datascience-notebook` includes libraries for data analysis from the Julia, Python, and R communities.
`jupyter/datascience-notebook` includes libraries for data analysis from the Julia, Python, and R
communities.
* Everything in the `jupyter/scipy-notebook` and `jupyter/r-notebook` images, and their ancestor images
* The [Julia](https://julialang.org/) compiler and base environment
* [IJulia](https://github.com/JuliaLang/IJulia.jl) to support Julia code in Jupyter notebooks
* [HDF5](https://github.com/JuliaIO/HDF5.jl), [Gadfly](http://gadflyjl.org/stable/), and [RDatasets](https://github.com/johnmyleswhite/RDatasets.jl) packages
- Everything in the `jupyter/scipy-notebook` and `jupyter/r-notebook` images, and their ancestor
images
- The [Julia](https://julialang.org/) compiler and base environment
- [IJulia](https://github.com/JuliaLang/IJulia.jl) to support Julia code in Jupyter notebooks
- [HDF5](https://github.com/JuliaIO/HDF5.jl), [Gadfly](http://gadflyjl.org/stable/), and
[RDatasets](https://github.com/johnmyleswhite/RDatasets.jl) packages
### jupyter/pyspark-notebook
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/pyspark-notebook)
| [Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/pyspark-notebook/Dockerfile)
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/pyspark-notebook) |
[Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/pyspark-notebook/Dockerfile)
| [Docker Hub image tags](https://hub.docker.com/r/jupyter/pyspark-notebook/tags/)
`jupyter/pyspark-notebook` includes Python support for Apache Spark.
* Everything in `jupyter/scipy-notebook` and its ancestor images
* [Apache Spark](https://spark.apache.org/) with Hadoop binaries
- Everything in `jupyter/scipy-notebook` and its ancestor images
- [Apache Spark](https://spark.apache.org/) with Hadoop binaries
### jupyter/all-spark-notebook
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/all-spark-notebook)
| [Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/all-spark-notebook/Dockerfile)
[Source on GitHub](https://github.com/jupyter/docker-stacks/tree/master/all-spark-notebook) |
[Dockerfile commit history](https://github.com/jupyter/docker-stacks/commits/master/all-spark-notebook/Dockerfile)
| [Docker Hub image tags](https://hub.docker.com/r/jupyter/all-spark-notebook/tags/)
`jupyter/all-spark-notebook` includes Python, R, and Scala support for Apache Spark.
* Everything in `jupyter/pyspark-notebook` and its ancestor images
* [IRKernel](https://irkernel.github.io/) to support R code in Jupyter notebooks
* [Apache Toree](https://toree.apache.org/) and [spylon-kernel](https://github.com/maxpoint/spylon-kernel) to support Scala code in Jupyter notebooks
* [ggplot2](http://ggplot2.org/), [sparklyr](http://spark.rstudio.com/), and [rcurl](https://cran.r-project.org/web/packages/RCurl/index.html) packages
- Everything in `jupyter/pyspark-notebook` and its ancestor images
- [IRKernel](https://irkernel.github.io/) to support R code in Jupyter notebooks
- [Apache Toree](https://toree.apache.org/) and
[spylon-kernel](https://github.com/maxpoint/spylon-kernel) to support Scala code in Jupyter
notebooks
- [ggplot2](http://ggplot2.org/), [sparklyr](http://spark.rstudio.com/), and
[rcurl](https://cran.r-project.org/web/packages/RCurl/index.html) packages
### Image Relationships
The following diagram depicts the build dependency tree of the core images. (i.e., the `FROM` statements in their Dockerfiles). Any given image inherits the
complete content of all ancestor images pointing to it.
The following diagram depicts the build dependency tree of the core images. (i.e., the `FROM`
statements in their Dockerfiles). Any given image inherits the complete content of all ancestor
images pointing to it.
[![Image inheritance
diagram](../images/inherit.svg)](http://interactive.blockdiag.com/?compression=deflate&src=eJyFzTEPgjAQhuHdX9Gws5sQjGzujsaYKxzmQrlr2msMGv-71K0srO_3XGud9NNA8DSfgzESCFlBSdi0xkvQAKTNugw4QnL6GIU10hvX-Zh7Z24OLLq2SjaxpvP10lX35vCf6pOxELFmUbQiUz4oQhYzMc3gCrRt2cWe_FKosmSjyFHC6OS1AwdQWCtyj7sfh523_BI9hKlQ25YdOFdv5fcH0kiEMA)
### Builds
Pull requests to the `jupyter/docker-stacks` repository trigger builds of all images on Travis CI. These images are for testing purposes only and are not saved for
use. When pull requests merge to master, all images rebuild on Docker Cloud and become available to `docker pull` from Docker Hub.
Pull requests to the `jupyter/docker-stacks` repository trigger builds of all images on GitHub
Actions. These images are for testing purposes only and are not saved for use. When pull requests
merge to master, all images rebuild on Docker Cloud and become available to `docker pull` from
Docker Hub.
### Versioning
The `latest` tag in each Docker Hub repository tracks the master branch `HEAD` reference on GitHub. `latest` is a moving target, by definition, and will have
backward-incompatible changes regularly.
The `latest` tag in each Docker Hub repository tracks the master branch `HEAD` reference on GitHub.
`latest` is a moving target, by definition, and will have backward-incompatible changes regularly.
Every image on Docker Hub also receives a 12-character tag which corresponds with the git commit SHA that triggered the image build. You can inspect the state of
the `jupyter/docker-stacks` repository for that commit to review the definition of the image (e.g., images with tag 7c45ec67c8e7 were built from
Every image on Docker Hub also receives a 12-character tag which corresponds with the git commit SHA
that triggered the image build. You can inspect the state of the `jupyter/docker-stacks` repository
for that commit to review the definition of the image (e.g., images with tag 7c45ec67c8e7 were built
from
[https://github.com/jupyter/docker-stacks/tree/7c45ec67c8e7](https://github.com/jupyter/docker-stacks/tree/7c45ec67c8e7)).
You must refer to git-SHA image tags when stability and reproducibility are important in your work. (e.g. `FROM jupyter/scipy-notebook:7c45ec67c8e7`, `docker run
-it --rm jupyter/scipy-notebook:7c45ec67c8e7`). You should only use `latest` when a one-off container instance is acceptable (e.g., you want to briefly try a new
library in a notebook).
You must refer to git-SHA image tags when stability and reproducibility are important in your work.
(e.g. `FROM jupyter/scipy-notebook:7c45ec67c8e7`,
`docker run -it --rm jupyter/scipy-notebook:7c45ec67c8e7`). You should only use `latest` when a
one-off container instance is acceptable (e.g., you want to briefly try a new library in a
notebook).
## Community Stacks
The core stacks are just a tiny sample of what's possible when combining Jupyter with other technologies. We encourage members of the Jupyter community to create
their own stacks based on the core images and link them below.
The core stacks are just a tiny sample of what's possible when combining Jupyter with other
technologies. We encourage members of the Jupyter community to create their own stacks based on the
core images and link them below.
* [csharp-notebook is a community Jupyter Docker Stack image. Try C# in Jupyter Notebooks](https://github.com/tlinnet/csharp-notebook). The image includes more
than 200 Jupyter Notebooks with example C# code and can readily be tried online via mybinder.org. Click here to launch
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/tlinnet/csharp-notebook/master).
- [csharp-notebook is a community Jupyter Docker Stack image. Try C# in Jupyter Notebooks](https://github.com/tlinnet/csharp-notebook).
The image includes more than 200 Jupyter Notebooks with example C# code and can readily be tried
online via mybinder.org. Click here to launch
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/tlinnet/csharp-notebook/master).
* [education-notebook is a community Jupyter Docker Stack image](https://github.com/umsi-mads/education-notebook). The image includes nbgrader and RISE on top of
the datascience-notebook image. Click here to launch it on
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/umsi-mads/education-notebook/master).
- [education-notebook is a community Jupyter Docker Stack image](https://github.com/umsi-mads/education-notebook).
The image includes nbgrader and RISE on top of the datascience-notebook image. Click here to
launch it on
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/umsi-mads/education-notebook/master).
* __crosscompass/ihaskell-notebook__
- **crosscompass/ihaskell-notebook**
[Source on GitHub](https://github.com/jamesdbrock/ihaskell-notebook)
| [Dockerfile commit history](https://github.com/jamesdbrock/ihaskell-notebook/commits/master/Dockerfile)
[Source on GitHub](https://github.com/jamesdbrock/ihaskell-notebook) |
[Dockerfile commit history](https://github.com/jamesdbrock/ihaskell-notebook/commits/master/Dockerfile)
| [Docker Hub image tags](https://hub.docker.com/r/crosscompass/ihaskell-notebook/tags)
`crosscompass/ihaskell-notebook` is based on [IHaskell](https://github.com/gibiansky/IHaskell). Includes popular packages and example notebooks.
`crosscompass/ihaskell-notebook` is based on [IHaskell](https://github.com/gibiansky/IHaskell).
Includes popular packages and example notebooks.
Try it on [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jamesdbrock/learn-you-a-haskell-notebook/master?urlpath=lab/tree/ihaskell_examples/ihaskell/IHaskell.ipynb)
Try it on
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jamesdbrock/learn-you-a-haskell-notebook/master?urlpath=lab/tree/ihaskell_examples/ihaskell/IHaskell.ipynb)
* [java-notebook is a community Jupyter Docker Stack image](https://github.com/jbindinga/java-notebook). The image includes
[IJava](https://github.com/SpencerPark/IJava) kernel on top of the minimal-notebook image. Click here to launch it on
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jbindinga/java-notebook/master).
- [java-notebook is a community Jupyter Docker Stack image](https://github.com/jbindinga/java-notebook).
The image includes [IJava](https://github.com/SpencerPark/IJava) kernel on top of the
minimal-notebook image. Click here to launch it on
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jbindinga/java-notebook/master).
* [sage-notebook](https://github.com/sharpTrick/sage-notebook) is a community Jupyter Docker Stack image with the [sagemath](https://sagemath.org) kernel on top of
the minimal-notebook image. Click here to launch it on
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/sharpTrick/sage-notebook/master).
- [sage-notebook](https://github.com/sharpTrick/sage-notebook) is a community Jupyter Docker Stack
image with the [sagemath](https://sagemath.org) kernel on top of the minimal-notebook image. Click
here to launch it on
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/sharpTrick/sage-notebook/master).
* [GPU-Jupyter](https://github.com/iot-salzburg/gpu-jupyter/): Leverage Jupyter Notebooks with the power of your NVIDIA GPU and perform GPU calculations using
Tensorflow and Pytorch in collaborative notebooks.
This is done by generating a Dockerfile, that consists of the **nvidia/cuda** base image,
the well-maintained **docker-stacks** that is integrated as submodule
and GPU-able libraries like **Tensorflow**, **Keras** and **PyTorch** on top of it.
- [GPU-Jupyter](https://github.com/iot-salzburg/gpu-jupyter/): Leverage Jupyter Notebooks with the
power of your NVIDIA GPU and perform GPU calculations using Tensorflow and Pytorch in
collaborative notebooks. This is done by generating a Dockerfile, that consists of the
**nvidia/cuda** base image, the well-maintained **docker-stacks** that is integrated as submodule
and GPU-able libraries like **Tensorflow**, **Keras** and **PyTorch** on top of it.
* [cgspatial-notebook](https://github.com/SCiO-systems/cgspatial-notebook) is a community Jupyter Docker Stack image. The image includes major geospatial Python &
R libraries on top of the datascience-notebook image. Try it on
binder:[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/SCiO-systems/cgspatial-notebook/master)
- [cgspatial-notebook](https://github.com/SCiO-systems/cgspatial-notebook) is a community Jupyter
Docker Stack image. The image includes major geospatial Python & R libraries on top of the
datascience-notebook image. Try it on
binder:[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/SCiO-systems/cgspatial-notebook/master)
See the [contributing guide](../contributing/stacks.md) for information about how to create your own Jupyter Docker Stack.
See the [contributing guide](../contributing/stacks.md) for information about how to create your own
Jupyter Docker Stack.
......@@ -25,8 +25,6 @@ RUN apt-get update && apt-get install -yq --no-install-recommends \
texlive-xetex \
texlive-fonts-recommended \
texlive-plain-generic \
# Optional dependency
texlive-fonts-extra \
# ----
tzdata \
unzip \
......
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/minimal-notebook.svg)](https://hub.docker.com/r/jupyter/minimal-notebook/) [![docker stars](https://img.shields.io/docker/stars/jupyter/minimal-notebook.svg)](https://hub.docker.com/r/jupyter/minimal-notebook/) [![image metadata](https://images.microbadger.com/badges/image/jupyter/minimal-notebook.svg)](https://microbadger.com/images/jupyter/minimal-notebook "jupyter/minimal-notebook image metadata")
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/minimal-notebook.svg)](https://hub.docker.com/r/jupyter/minimal-notebook/)
[![docker stars](https://img.shields.io/docker/stars/jupyter/minimal-notebook.svg)](https://hub.docker.com/r/jupyter/minimal-notebook/)
[![image metadata](https://images.microbadger.com/badges/image/jupyter/minimal-notebook.svg)](https://microbadger.com/images/jupyter/minimal-notebook "jupyter/minimal-notebook image metadata")
# Minimal Jupyter Notebook Stack
Please visit the documentation site for help using and contributing to this image and others.
GitHub Actions in the https://github.com/jupyter/docker-stacks project builds and pushes this image
to Docker Hub.
* [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
* [Selecting an Image :: Core Stacks :: jupyter/minimal-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-minimal-notebook)
Please visit the project documentation site for help using and contributing to this image and
others.
- [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
- [Selecting an Image :: Core Stacks :: jupyter/minimal-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-minimal-notebook)
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${SOURCE_COMMIT}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "$INDEX_FILE"
\ No newline at end of file
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* DockerHub build code: ${BUILD_CODE}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${SOURCE_COMMIT}](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})
* Git commit message:
\`\`\`
${COMMIT_MSG}
\`\`\`
## Python Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} python --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda info)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda list)
\`\`\`
## Apt Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} apt list --installed)
\`\`\`
EOF
\ No newline at end of file
#!/bin/bash
set -e
# Tag the latest build with the short git sha. Push the tag in addition
# to the "latest" tag already pushed.
GIT_SHA_TAG=${SOURCE_COMMIT:0:12}
docker tag $IMAGE_NAME $DOCKER_REPO:$GIT_SHA_TAG
docker push $DOCKER_REPO:$GIT_SHA_TAG
# Create a working directory.
BUILD_TIMESTAMP=$(date -u +%FT%TZ)
WORKDIR=$(mktemp -d)
GIT_URI="git@github.com:jupyter/docker-stacks.wiki.git"
GIT_SANDBOX="${WORKDIR}/docker-stacks.wiki"
IMAGE_SHORT_NAME=$(basename $DOCKER_REPO)
MANIFEST_FILE="${GIT_SANDBOX}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
INDEX_FILE="${GIT_SANDBOX}/Home.md"
# Configure git so it can push back to GitHub.
eval $(ssh-agent -s)
ssh-add <(base64 -d <(echo "$DEPLOY_KEY"))
ssh-add -l
git config --global user.email "jupyter@googlegroups.com"
git config --global user.name "Jupyter Docker Stacks"
# Glone the GitHub project wiki.
pushd "$WORKDIR"
git clone "$GIT_URI"
popd
# Render the build manifest template.
mkdir -p $(dirname "$MANIFEST_FILE")
source hooks/manifest.tmpl
source hooks/index.tmpl
# Push the wiki update back to GitHub.
pushd "$GIT_SANDBOX"
git add .
git commit -m "DOC: Build ${MANIFEST_FILE}"
git push -u origin master
popd
# Shutdown the ssh agent for good measure.
ssh-agent -k
# Invoke all downstream build triggers.
set +e
for url in $(echo $NEXT_BUILD_TRIGGERS | sed "s/,/ /g")
do
curl -X POST $url
done
\ No newline at end of file
#!/bin/bash
set -e
# Apply tags
GIT_SHA_TAG=${GITHUB_SHA:0:12}
docker tag $IMAGE_NAME "$DOCKER_REPO:$GIT_SHA_TAG"
# Update index
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${GITHUB_SHA}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "${WIKI_PATH}/Home.md"
# Build manifest
MANIFEST_FILE="${WIKI_PATH}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
mkdir -p $(dirname "$MANIFEST_FILE")
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* DockerHub build code: ${BUILD_CODE}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${SOURCE_COMMIT}](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})
* Git commit SHA: [${GITHUB_SHA}](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})
* Git commit message:
\`\`\`
${COMMIT_MSG}
\`\`\`
## R Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} R --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} R --silent -e 'installed.packages(.Library)[, c(1,3)]')
\`\`\`
## Python Packages
\`\`\`
......
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/pyspark-notebook.svg)](https://hub.docker.com/r/jupyter/pyspark-notebook/) [![docker stars](https://img.shields.io/docker/stars/jupyter/pyspark-notebook.svg)](https://hub.docker.com/r/jupyter/pyspark-notebook/) [![image metadata](https://images.microbadger.com/badges/image/jupyter/pyspark-notebook.svg)](https://microbadger.com/images/jupyter/pyspark-notebook "jupyter/pyspark-notebook image metadata")
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/pyspark-notebook.svg)](https://hub.docker.com/r/jupyter/pyspark-notebook/)
[![docker stars](https://img.shields.io/docker/stars/jupyter/pyspark-notebook.svg)](https://hub.docker.com/r/jupyter/pyspark-notebook/)
[![image metadata](https://images.microbadger.com/badges/image/jupyter/pyspark-notebook.svg)](https://microbadger.com/images/jupyter/pyspark-notebook "jupyter/pyspark-notebook image metadata")
# Jupyter Notebook Python, Spark Stack
Please visit the documentation site for help using and contributing to this image and others.
GitHub Actions in the https://github.com/jupyter/docker-stacks project builds and pushes this image
to Docker Hub.
* [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
* [Selecting an Image :: Core Stacks :: jupyter/pyspark-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-pyspark-notebook)
* [Image Specifics :: Apache Spark](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/specifics.html#apache-spark)
Please visit the project documentation site for help using and contributing to this image and
others.
- [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
- [Selecting an Image :: Core Stacks :: jupyter/pyspark-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-pyspark-notebook)
- [Image Specifics :: Apache Spark](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/specifics.html#apache-spark)
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${SOURCE_COMMIT}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "$INDEX_FILE"
\ No newline at end of file
#!/bin/bash
set -e
# Tag the latest build with the short git sha. Push the tag in addition
# to the "latest" tag already pushed.
GIT_SHA_TAG=${SOURCE_COMMIT:0:12}
docker tag $IMAGE_NAME $DOCKER_REPO:$GIT_SHA_TAG
docker push $DOCKER_REPO:$GIT_SHA_TAG
# Create a working directory.
BUILD_TIMESTAMP=$(date -u +%FT%TZ)
WORKDIR=$(mktemp -d)
GIT_URI="git@github.com:jupyter/docker-stacks.wiki.git"
GIT_SANDBOX="${WORKDIR}/docker-stacks.wiki"
IMAGE_SHORT_NAME=$(basename $DOCKER_REPO)
MANIFEST_FILE="${GIT_SANDBOX}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
INDEX_FILE="${GIT_SANDBOX}/Home.md"
# Configure git so it can push back to GitHub.
eval $(ssh-agent -s)
ssh-add <(base64 -d <(echo "$DEPLOY_KEY"))
ssh-add -l
git config --global user.email "jupyter@googlegroups.com"
git config --global user.name "Jupyter Docker Stacks"
# Glone the GitHub project wiki.
pushd "$WORKDIR"
git clone "$GIT_URI"
popd
# Render the build manifest template.
mkdir -p $(dirname "$MANIFEST_FILE")
source hooks/manifest.tmpl
source hooks/index.tmpl
# Push the wiki update back to GitHub.
pushd "$GIT_SANDBOX"
git add .
git commit -m "DOC: Build ${MANIFEST_FILE}"
git push -u origin master
popd
# Shutdown the ssh agent for good measure.
ssh-agent -k
# Invoke all downstream build triggers.
set +e
for url in $(echo $NEXT_BUILD_TRIGGERS | sed "s/,/ /g")
do
curl -X POST $url
done
\ No newline at end of file
#!/bin/bash
set -e
# Apply tags
GIT_SHA_TAG=${GITHUB_SHA:0:12}
docker tag $IMAGE_NAME "$DOCKER_REPO:$GIT_SHA_TAG"
# Update index
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${GITHUB_SHA}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "${WIKI_PATH}/Home.md"
# Build manifest
MANIFEST_FILE="${WIKI_PATH}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
mkdir -p $(dirname "$MANIFEST_FILE")
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* DockerHub build code: ${BUILD_CODE}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${SOURCE_COMMIT}](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})
* Git commit SHA: [${GITHUB_SHA}](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})
* Git commit message:
\`\`\`
${COMMIT_MSG}
......
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/r-notebook.svg)](https://hub.docker.com/r/jupyter/r-notebook/) [![docker stars](https://img.shields.io/docker/stars/jupyter/r-notebook.svg)](https://hub.docker.com/r/jupyter/r-notebook/) [![image metadata](https://images.microbadger.com/badges/image/jupyter/r-notebook.svg)](https://microbadger.com/images/jupyter/r-notebook "jupyter/r-notebook image metadata")
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/r-notebook.svg)](https://hub.docker.com/r/jupyter/r-notebook/)
[![docker stars](https://img.shields.io/docker/stars/jupyter/r-notebook.svg)](https://hub.docker.com/r/jupyter/r-notebook/)
[![image metadata](https://images.microbadger.com/badges/image/jupyter/r-notebook.svg)](https://microbadger.com/images/jupyter/r-notebook "jupyter/r-notebook image metadata")
# Jupyter Notebook R Stack
* [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
* [Selecting an Image :: Core Stacks :: jupyter/r-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-r-notebook)
GitHub Actions in the https://github.com/jupyter/docker-stacks project builds and pushes this image
to Docker Hub.
Please visit the project documentation site for help using and contributing to this image and
others.
- [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
- [Selecting an Image :: Core Stacks :: jupyter/r-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-r-notebook)
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${SOURCE_COMMIT}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "$INDEX_FILE"
\ No newline at end of file
#!/bin/bash
set -e
# Tag the latest build with the short git sha. Push the tag in addition
# to the "latest" tag already pushed.
GIT_SHA_TAG=${SOURCE_COMMIT:0:12}
docker tag $IMAGE_NAME $DOCKER_REPO:$GIT_SHA_TAG
docker push $DOCKER_REPO:$GIT_SHA_TAG
# Create a working directory.
BUILD_TIMESTAMP=$(date -u +%FT%TZ)
WORKDIR=$(mktemp -d)
GIT_URI="git@github.com:jupyter/docker-stacks.wiki.git"
GIT_SANDBOX="${WORKDIR}/docker-stacks.wiki"
IMAGE_SHORT_NAME=$(basename $DOCKER_REPO)
MANIFEST_FILE="${GIT_SANDBOX}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
INDEX_FILE="${GIT_SANDBOX}/Home.md"
# Configure git so it can push back to GitHub.
eval $(ssh-agent -s)
ssh-add <(base64 -d <(echo "$DEPLOY_KEY"))
ssh-add -l
git config --global user.email "jupyter@googlegroups.com"
git config --global user.name "Jupyter Docker Stacks"
# Glone the GitHub project wiki.
pushd "$WORKDIR"
git clone "$GIT_URI"
popd
# Render the build manifest template.
mkdir -p $(dirname "$MANIFEST_FILE")
source hooks/manifest.tmpl
source hooks/index.tmpl
# Push the wiki update back to GitHub.
pushd "$GIT_SANDBOX"
git add .
git commit -m "DOC: Build ${MANIFEST_FILE}"
git push -u origin master
popd
# Shutdown the ssh agent for good measure.
ssh-agent -k
# Invoke all downstream build triggers.
set +e
for url in $(echo $NEXT_BUILD_TRIGGERS | sed "s/,/ /g")
do
curl -X POST $url
done
\ No newline at end of file
#!/bin/bash
set -e
# Apply tags
GIT_SHA_TAG=${GITHUB_SHA:0:12}
docker tag $IMAGE_NAME "$DOCKER_REPO:$GIT_SHA_TAG"
# Update index
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${GITHUB_SHA}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "${WIKI_PATH}/Home.md"
# Build manifest
MANIFEST_FILE="${WIKI_PATH}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
mkdir -p $(dirname "$MANIFEST_FILE")
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* DockerHub build code: ${BUILD_CODE}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${SOURCE_COMMIT}](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})
* Git commit SHA: [${GITHUB_SHA}](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})
* Git commit message:
\`\`\`
${COMMIT_MSG}
\`\`\`
## Julia Packages
## R Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} julia -E 'using InteractiveUtils; versioninfo()')
$(docker run --rm ${IMAGE_NAME} R --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} julia -E 'import Pkg; Pkg.status()')
$(docker run --rm ${IMAGE_NAME} R --silent -e 'installed.packages(.Library)[, c(1,3)]')
\`\`\`
## Python Packages
......@@ -33,16 +47,6 @@ $(docker run --rm ${IMAGE_NAME} conda info)
$(docker run --rm ${IMAGE_NAME} conda list)
\`\`\`
## R Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} R --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} R --silent -e 'installed.packages(.Library)[, c(1,3)]')
\`\`\`
## Apt Packages
\`\`\`
......
docker
flake8
pre-commit
pytest
recommonmark==0.5.0
recommonmark
requests
sphinx>=1.6
sphinx-intl
......
......@@ -18,11 +18,11 @@ USER $NB_UID
RUN conda install --quiet --yes \
'beautifulsoup4=4.9.*' \
'conda-forge::blas=*=openblas' \
'bokeh=2.0.*' \
'bokeh=2.1.*' \
'bottleneck=1.3.*' \
'cloudpickle=1.4.*' \
'cloudpickle=1.5.*' \
'cython=0.29.*' \
'dask=2.15.*' \
'dask=2.20.*' \
'dill=0.3.*' \
'h5py=2.10.*' \
'hdf5=1.10.*' \
......@@ -32,17 +32,17 @@ RUN conda install --quiet --yes \
# numba update to 0.49 fails resolving deps.
'numba=0.48.*' \
'numexpr=2.7.*' \
'pandas=1.0.*' \
'pandas=1.1.*' \
'patsy=0.5.*' \
'protobuf=3.11.*' \
'protobuf=3.12.*' \
'pytables=3.6.*' \
'scikit-image=0.16.*' \
'scikit-learn=0.22.*' \
'scipy=1.4.*' \
'scikit-image=0.17.*' \
'scikit-learn=0.23.*' \
'scipy=1.5.*' \
'seaborn=0.10.*' \
'sqlalchemy=1.3.*' \
'statsmodels=0.11.*' \
'sympy=1.5.*' \
'sympy=1.6.*' \
'vincent=0.4.*' \
'widgetsnbextension=3.5.*'\
'xlrd=1.2.*' \
......
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/scipy-notebook.svg)](https://hub.docker.com/r/jupyter/scipy-notebook/) [![docker stars](https://img.shields.io/docker/stars/jupyter/scipy-notebook.svg)](https://hub.docker.com/r/jupyter/scipy-notebook/) [![image metadata](https://images.microbadger.com/badges/image/jupyter/scipy-notebook.svg)](https://microbadger.com/images/jupyter/scipy-notebook "jupyter/scipy-notebook image metadata")
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/scipy-notebook.svg)](https://hub.docker.com/r/jupyter/scipy-notebook/)
[![docker stars](https://img.shields.io/docker/stars/jupyter/scipy-notebook.svg)](https://hub.docker.com/r/jupyter/scipy-notebook/)
[![image metadata](https://images.microbadger.com/badges/image/jupyter/scipy-notebook.svg)](https://microbadger.com/images/jupyter/scipy-notebook "jupyter/scipy-notebook image metadata")
# Jupyter Notebook Scientific Python Stack
Please visit the documentation site for help using and contributing to this image and others.
GitHub Actions in the https://github.com/jupyter/docker-stacks project builds and pushes this image
to Docker Hub.
* [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
* [Selecting an Image :: Core Stacks :: jupyter/scipy-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-scipy-notebook)
Please visit the project documentation site for help using and contributing to this image and
others.
- [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
- [Selecting an Image :: Core Stacks :: jupyter/scipy-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-scipy-notebook)
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${SOURCE_COMMIT}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "$INDEX_FILE"
\ No newline at end of file
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* DockerHub build code: ${BUILD_CODE}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${SOURCE_COMMIT}](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})
* Git commit message:
\`\`\`
${COMMIT_MSG}
\`\`\`
## Python Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} python --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda info)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda list)
\`\`\`
## Apt Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} apt list --installed)
\`\`\`
EOF
\ No newline at end of file
#!/bin/bash
set -e
# Tag the latest build with the short git sha. Push the tag in addition
# to the "latest" tag already pushed.
GIT_SHA_TAG=${SOURCE_COMMIT:0:12}
docker tag $IMAGE_NAME $DOCKER_REPO:$GIT_SHA_TAG
docker push $DOCKER_REPO:$GIT_SHA_TAG
# Create a working directory.
BUILD_TIMESTAMP=$(date -u +%FT%TZ)
WORKDIR=$(mktemp -d)
GIT_URI="git@github.com:jupyter/docker-stacks.wiki.git"
GIT_SANDBOX="${WORKDIR}/docker-stacks.wiki"
IMAGE_SHORT_NAME=$(basename $DOCKER_REPO)
MANIFEST_FILE="${GIT_SANDBOX}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
INDEX_FILE="${GIT_SANDBOX}/Home.md"
# Configure git so it can push back to GitHub.
eval $(ssh-agent -s)
ssh-add <(base64 -d <(echo "$DEPLOY_KEY"))
ssh-add -l
git config --global user.email "jupyter@googlegroups.com"
git config --global user.name "Jupyter Docker Stacks"
# Glone the GitHub project wiki.
pushd "$WORKDIR"
git clone "$GIT_URI"
popd
# Render the build manifest template.
mkdir -p $(dirname "$MANIFEST_FILE")
source hooks/manifest.tmpl
source hooks/index.tmpl
# Push the wiki update back to GitHub.
pushd "$GIT_SANDBOX"
git add .
git commit -m "DOC: Build ${MANIFEST_FILE}"
git push -u origin master
popd
# Shutdown the ssh agent for good measure.
ssh-agent -k
# Invoke all downstream build triggers.
set +e
for url in $(echo $NEXT_BUILD_TRIGGERS | sed "s/,/ /g")
do
curl -X POST $url
done
\ No newline at end of file
#!/bin/bash
set -e
# Apply tags
GIT_SHA_TAG=${GITHUB_SHA:0:12}
docker tag $IMAGE_NAME "$DOCKER_REPO:$GIT_SHA_TAG"
# Update index
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${GITHUB_SHA}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "${WIKI_PATH}/Home.md"
# Build manifest
MANIFEST_FILE="${WIKI_PATH}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
mkdir -p $(dirname "$MANIFEST_FILE")
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${GITHUB_SHA}](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})
* Git commit message:
\`\`\`
${COMMIT_MSG}
\`\`\`
## Python Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} python --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda info)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda list)
\`\`\`
## Apt Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} apt list --installed)
\`\`\`
EOF
\ No newline at end of file
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/tensorflow-notebook.svg)](https://hub.docker.com/r/jupyter/tensorflow-notebook/) [![docker stars](https://img.shields.io/docker/stars/jupyter/tensorflow-notebook.svg)](https://hub.docker.com/r/jupyter/tensorflow-notebook/) [![image metadata](https://images.microbadger.com/badges/image/jupyter/tensorflow-notebook.svg)](https://microbadger.com/images/jupyter/tensorflow-notebook "jupyter/tensorflow-notebook image metadata")
[![docker pulls](https://img.shields.io/docker/pulls/jupyter/tensorflow-notebook.svg)](https://hub.docker.com/r/jupyter/tensorflow-notebook/)
[![docker stars](https://img.shields.io/docker/stars/jupyter/tensorflow-notebook.svg)](https://hub.docker.com/r/jupyter/tensorflow-notebook/)
[![image metadata](https://images.microbadger.com/badges/image/jupyter/tensorflow-notebook.svg)](https://microbadger.com/images/jupyter/tensorflow-notebook "jupyter/tensorflow-notebook image metadata")
# Jupyter Notebook Deep Learning Stack
Please visit the documentation site for help using and contributing to this image and others.
GitHub Actions in the https://github.com/jupyter/docker-stacks project builds and pushes this image
to Docker Hub.
* [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
* [Selecting an Image :: Core Stacks :: jupyter/tensorflow-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-tensorflow-notebook)
* [Image Specifics :: Tensorflow](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/specifics.html#tensorflow)
Please visit the project documentation site for help using and contributing to this image and
others.
- [Jupyter Docker Stacks on ReadTheDocs](http://jupyter-docker-stacks.readthedocs.io/en/latest/index.html)
- [Selecting an Image :: Core Stacks :: jupyter/tensorflow-notebook](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-tensorflow-notebook)
- [Image Specifics :: Tensorflow](http://jupyter-docker-stacks.readthedocs.io/en/latest/using/specifics.html#tensorflow)
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${SOURCE_COMMIT}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "$INDEX_FILE"
\ No newline at end of file
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* DockerHub build code: ${BUILD_CODE}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${SOURCE_COMMIT}](https://github.com/jupyter/docker-stacks/commit/${SOURCE_COMMIT})
* Git commit message:
\`\`\`
${COMMIT_MSG}
\`\`\`
## Python Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} python --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda info)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda list)
\`\`\`
## Apt Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} apt list --installed)
\`\`\`
EOF
\ No newline at end of file
#!/bin/bash
set -e
# Tag the latest build with the short git sha. Push the tag in addition
# to the "latest" tag already pushed.
GIT_SHA_TAG=${SOURCE_COMMIT:0:12}
docker tag $IMAGE_NAME $DOCKER_REPO:$GIT_SHA_TAG
docker push $DOCKER_REPO:$GIT_SHA_TAG
# Create a working directory.
BUILD_TIMESTAMP=$(date -u +%FT%TZ)
WORKDIR=$(mktemp -d)
GIT_URI="git@github.com:jupyter/docker-stacks.wiki.git"
GIT_SANDBOX="${WORKDIR}/docker-stacks.wiki"
IMAGE_SHORT_NAME=$(basename $DOCKER_REPO)
MANIFEST_FILE="${GIT_SANDBOX}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
INDEX_FILE="${GIT_SANDBOX}/Home.md"
# Configure git so it can push back to GitHub.
eval $(ssh-agent -s)
ssh-add <(base64 -d <(echo "$DEPLOY_KEY"))
ssh-add -l
git config --global user.email "jupyter@googlegroups.com"
git config --global user.name "Jupyter Docker Stacks"
# Glone the GitHub project wiki.
pushd "$WORKDIR"
git clone "$GIT_URI"
popd
# Render the build manifest template.
mkdir -p $(dirname "$MANIFEST_FILE")
source hooks/manifest.tmpl
source hooks/index.tmpl
# Push the wiki update back to GitHub.
pushd "$GIT_SANDBOX"
git add .
git commit -m "DOC: Build ${MANIFEST_FILE}"
git push -u origin master
popd
# Shutdown the ssh agent for good measure.
ssh-agent -k
# Invoke all downstream build triggers.
set +e
for url in $(echo $NEXT_BUILD_TRIGGERS | sed "s/,/ /g")
do
curl -X POST $url
done
\ No newline at end of file
#!/bin/bash
set -e
# Apply tags
GIT_SHA_TAG=${GITHUB_SHA:0:12}
docker tag $IMAGE_NAME "$DOCKER_REPO:$GIT_SHA_TAG"
# Update index
INDEX_ROW="|\`${BUILD_TIMESTAMP}\`|\`jupyter/${IMAGE_SHORT_NAME}:${GIT_SHA_TAG}\`|[Git diff](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})<br />[Dockerfile](https://github.com/jupyter/docker-stacks/blob/${GITHUB_SHA}/${IMAGE_SHORT_NAME}/Dockerfile)<br />[Build manifest](./${IMAGE_SHORT_NAME}-${GIT_SHA_TAG})|"
sed "/|-|/a ${INDEX_ROW}" -i "${WIKI_PATH}/Home.md"
# Build manifest
MANIFEST_FILE="${WIKI_PATH}/manifests/${IMAGE_SHORT_NAME}-${GIT_SHA_TAG}.md"
mkdir -p $(dirname "$MANIFEST_FILE")
cat << EOF > "$MANIFEST_FILE"
* Build datetime: ${BUILD_TIMESTAMP}
* Docker image: ${DOCKER_REPO}:${GIT_SHA_TAG}
* Docker image size: $(docker images ${IMAGE_NAME} --format "{{.Size}}")
* Git commit SHA: [${GITHUB_SHA}](https://github.com/jupyter/docker-stacks/commit/${GITHUB_SHA})
* Git commit message:
\`\`\`
${COMMIT_MSG}
\`\`\`
## Python Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} python --version)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda info)
\`\`\`
\`\`\`
$(docker run --rm ${IMAGE_NAME} conda list)
\`\`\`
## Apt Packages
\`\`\`
$(docker run --rm ${IMAGE_NAME} apt list --installed)
\`\`\`
EOF
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment