diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d8a5f30e..be020072 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Create a release on pypi.org +name: Publish on: push: @@ -32,3 +32,70 @@ jobs: uses: pypa/gh-action-pypi-publish@master with: password: ${{ secrets.PYPI_API_TOKEN }} + + publish-docker: + runs-on: ubuntu-20.04 + env: + DEFAULT_REGISTRY: quay.io + IMAGE_NAME: jupyterhub/repo2docker + + services: + # So that we can test this in PRs/branches + local-registry: + image: registry:2 + ports: + - 5000:5000 + + steps: + - name: Should we push this image to a public registry? + run: | + if [ "${{ startsWith(github.ref, 'refs/tags/') || (github.ref == 'refs/heads/main') }}" = "true" ]; then + REGISTRY=$DEFAULT_REGISTRY + else + REGISTRY=localhost:5000 + fi + echo "REGISTRY=$REGISTRY" >> $GITHUB_ENV + echo "Publishing to $REGISTRY" + + # versioneer requires the full git history for non-tags + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + # Setup docker to build for multiple platforms, see: + # https://github.com/docker/build-push-action/tree/v2.4.0#usage + # https://github.com/docker/build-push-action/blob/v2.4.0/docs/advanced/multi-platform.md + + - name: Set up QEMU (for docker buildx) + uses: docker/setup-qemu-action@25f0500ff22e406f7191a2a8ba8cda16901ca018 + + - name: Set up Docker Buildx (for multi-arch builds) + uses: docker/setup-buildx-action@2a4b53665e15ce7d7049afb11ff1f70ff1610609 + with: + # Allows pushing to registry on localhost:5000 + driver-opts: network=host + + - name: Setup push rights to Docker Hub + if: env.REGISTRY != 'localhost:5000' + run: | + docker login -u "${{ secrets.DOCKER_REGISTRY_USERNAME }}" -p "${{ secrets.DOCKER_REGISTRY_TOKEN }}" "${{ env.REGISTRY }}" + + # when building jupyter/repo2docker:master + # also push jupyter/repo2docker:1.2.3-3.abcd1234 (replace + with -) + - name: Get list of repo2docker docker tags + run: | + VERSION=$(python3 -c 'import versioneer; print(versioneer.get_version().replace("+", "-"))') + TAGS="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:$VERSION" + if [ "${{ github.ref }}" == "refs/heads/main" ]; then + TAGS="$TAGS,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:main" + fi + echo "TAGS=$TAGS" + echo "TAGS=$TAGS" >> $GITHUB_ENV + + - name: Build and push repo2docker + uses: docker/build-push-action@e1b7f96249f2e4c8e4ac1519b9608c0d48944a1f + with: + context: . + platforms: linux/amd64 + push: true + tags: ${{ env.TAGS }} diff --git a/Dockerfile b/Dockerfile index 5cd812ac..105eb03f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,8 +5,7 @@ RUN apk add --no-cache git python3 python3-dev py-pip build-base # build wheels in first image ADD . /tmp/src -# restore the hooks directory so that the repository isn't marked as dirty -RUN cd /tmp/src && git clean -xfd && git checkout -- hooks && git status +RUN cd /tmp/src && git clean -xfd && git status RUN mkdir /tmp/wheelhouse \ && cd /tmp/wheelhouse \ && pip3 install wheel \ diff --git a/README.md b/README.md index 5cf08cd8..a6d27735 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![Build Status](https://github.com/jupyterhub/repo2docker/workflows/Continuous%20Integration/badge.svg)](https://github.com/jupyterhub/repo2docker/actions) [![Documentation Status](https://readthedocs.org/projects/repo2docker/badge/?version=latest)](http://repo2docker.readthedocs.io/en/latest/?badge=latest) [![Contribute](https://img.shields.io/badge/I_want_to_contribute!-grey?logo=jupyter)](https://repo2docker.readthedocs.io/en/latest/contributing/contributing.html) +[![Docker Repository on Quay](https://quay.io/repository/jupyterhub/repo2docker/status "Docker Repository on Quay")](https://quay.io/repository/jupyterhub/repo2docker) `repo2docker` fetches a git repository and builds a container image based on the configuration files found in the repository. @@ -95,3 +96,8 @@ files that ``repo2docker`` can use, see the The philosophy of repo2docker is inspired by [Heroku Build Packs](https://devcenter.heroku.com/articles/buildpacks). + + +## Docker Image + +Repo2Docker can be run inside a Docker container if access to the Docker Daemon is provided, for example see [BinderHub](https://github.com/jupyterhub/binderhub). Docker images are [published to quay.io](https://quay.io/repository/jupyterhub/repo2docker). The old [Docker Hub image](https://hub.docker.com/r/jupyter/repo2docker) is no longer supported. diff --git a/hooks/README.md b/hooks/README.md deleted file mode 100644 index 0ff34e00..00000000 --- a/hooks/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Docker build hooks - -These define our [custom hooks for docker automated builds](https://docs.docker.com/docker-hub/builds/advanced/#custom-build-phase-hooks) diff --git a/hooks/post_push b/hooks/post_push deleted file mode 100644 index d03f1c6b..00000000 --- a/hooks/post_push +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -# when building jupyter/repo2docker:main -# also push jupyter/repo2docker:1.2.3-3.abcd1234 (replace + with -) -version=$(docker run $DOCKER_REPO:$DOCKER_TAG jupyter-repo2docker --version | sed s@+@-@) -VERSION_IMAGE="$DOCKER_REPO:$version" -docker tag $DOCKER_REPO:$DOCKER_TAG "$VERSION_IMAGE" -docker push "$VERSION_IMAGE"