Black and Prettier formatting #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This is a GitHub workflow defining a set of jobs with a set of steps. | |
# ref: https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions | |
# | |
# Test build release artifacts (PyPI package, Docker images) and publish them on | |
# pushed git tags. | |
# | |
name: Release | |
on: | |
pull_request: | |
paths-ignore: | |
- "docs/**" | |
- "**.md" | |
- "**.rst" | |
- ".github/workflows/*" | |
- "!.github/workflows/release.yml" | |
push: | |
paths-ignore: | |
- "docs/**" | |
- "**.md" | |
- "**.rst" | |
- ".github/workflows/*" | |
- "!.github/workflows/release.yml" | |
branches-ignore: | |
- "dependabot/**" | |
- "pre-commit-ci-update-config" | |
tags: | |
- "**" | |
workflow_dispatch: | |
jobs: | |
build-release: | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.9" | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "14" | |
- name: install build requirements | |
run: | | |
npm install -g yarn | |
pip install --upgrade pip | |
pip install build | |
pip freeze | |
- name: build release | |
run: | | |
python -m build --sdist --wheel . | |
ls -l dist | |
- name: verify sdist | |
run: | | |
./ci/check_sdist.py dist/jupyterhub-*.tar.gz | |
- name: verify data-files are installed where they are found | |
run: | | |
pip install dist/*.whl | |
./ci/check_installed_data.py | |
- name: verify sdist can be installed without npm/yarn | |
run: | | |
docker run --rm -v $PWD/dist:/dist:ro docker.io/library/python:3.9-slim-bullseye bash -c 'pip install /dist/jupyterhub-*.tar.gz' | |
# ref: https://github.com/actions/upload-artifact#readme | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: jupyterhub-${{ github.sha }} | |
path: "dist/*" | |
if-no-files-found: error | |
- name: Publish to PyPI | |
if: startsWith(github.ref, 'refs/tags/') | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} | |
run: | | |
pip install twine | |
twine upload --skip-existing dist/* | |
publish-docker: | |
runs-on: ubuntu-20.04 | |
timeout-minutes: 20 | |
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 | |
echo "REGISTRY=quay.io/" >> $GITHUB_ENV | |
else | |
echo "REGISTRY=localhost:5000/" >> $GITHUB_ENV | |
fi | |
- uses: actions/checkout@v4 | |
# 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@v3 | |
- name: Set up Docker Buildx (for multi-arch builds) | |
uses: docker/setup-buildx-action@v3 | |
with: | |
# Allows pushing to registry on localhost:5000 | |
driver-opts: network=host | |
- name: Setup push rights to Docker Hub | |
# This was setup by... | |
# 1. Creating a [Robot Account](https://quay.io/organization/jupyterhub?tab=robots) in the JupyterHub | |
# . Quay.io org | |
# 2. Giving it enough permissions to push to the jupyterhub and singleuser images | |
# 3. Putting the robot account's username and password in GitHub actions environment | |
if: env.REGISTRY != 'localhost:5000/' | |
run: | | |
docker login -u "${{ secrets.QUAY_USERNAME }}" -p "${{ secrets.QUAY_PASSWORD }}" "${{ env.REGISTRY }}" | |
docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" -p "${{ secrets.DOCKERHUB_TOKEN }}" docker.io | |
# image: jupyterhub/jupyterhub | |
# | |
# https://github.com/jupyterhub/action-major-minor-tag-calculator | |
# If this is a tagged build this will return additional parent tags. | |
# E.g. 1.2.3 is expanded to Docker tags | |
# [{prefix}:1.2.3, {prefix}:1.2, {prefix}:1, {prefix}:latest] unless | |
# this is a backported tag in which case the newer tags aren't updated. | |
# For branches this will return the branch name. | |
# If GITHUB_TOKEN isn't available (e.g. in PRs) returns no tags []. | |
- name: Get list of jupyterhub tags | |
id: jupyterhubtags | |
uses: jupyterhub/action-major-minor-tag-calculator@v3 | |
with: | |
githubToken: ${{ secrets.GITHUB_TOKEN }} | |
prefix: >- | |
${{ env.REGISTRY }}jupyterhub/jupyterhub: | |
jupyterhub/jupyterhub: | |
defaultTag: "${{ env.REGISTRY }}jupyterhub/jupyterhub:noref" | |
branchRegex: ^\w[\w-.]*$ | |
- name: Build and push jupyterhub | |
uses: docker/build-push-action@v5 | |
with: | |
context: . | |
platforms: linux/amd64,linux/arm64 | |
push: true | |
# tags parameter must be a string input so convert `gettags` JSON | |
# array into a comma separated list of tags | |
tags: ${{ join(fromJson(steps.jupyterhubtags.outputs.tags)) }} | |
# image: jupyterhub/jupyterhub-onbuild | |
# | |
- name: Get list of jupyterhub-onbuild tags | |
id: onbuildtags | |
uses: jupyterhub/action-major-minor-tag-calculator@v3 | |
with: | |
githubToken: ${{ secrets.GITHUB_TOKEN }} | |
prefix: >- | |
${{ env.REGISTRY }}jupyterhub/jupyterhub-onbuild: | |
jupyterhub/jupyterhub-onbuild: | |
defaultTag: "${{ env.REGISTRY }}jupyterhub/jupyterhub-onbuild:noref" | |
branchRegex: ^\w[\w-.]*$ | |
- name: Build and push jupyterhub-onbuild | |
uses: docker/build-push-action@v5 | |
with: | |
build-args: | | |
BASE_IMAGE=${{ fromJson(steps.jupyterhubtags.outputs.tags)[0] }} | |
context: onbuild | |
platforms: linux/amd64,linux/arm64 | |
push: true | |
tags: ${{ join(fromJson(steps.onbuildtags.outputs.tags)) }} | |
# image: jupyterhub/jupyterhub-demo | |
# | |
- name: Get list of jupyterhub-demo tags | |
id: demotags | |
uses: jupyterhub/action-major-minor-tag-calculator@v3 | |
with: | |
githubToken: ${{ secrets.GITHUB_TOKEN }} | |
prefix: >- | |
${{ env.REGISTRY }}jupyterhub/jupyterhub-demo: | |
jupyterhub/jupyterhub-demo: | |
defaultTag: "${{ env.REGISTRY }}jupyterhub/jupyterhub-demo:noref" | |
branchRegex: ^\w[\w-.]*$ | |
- name: Build and push jupyterhub-demo | |
uses: docker/build-push-action@v5 | |
with: | |
build-args: | | |
BASE_IMAGE=${{ fromJson(steps.onbuildtags.outputs.tags)[0] }} | |
context: demo-image | |
# linux/arm64 currently fails: | |
# ERROR: Could not build wheels for argon2-cffi which use PEP 517 and cannot be installed directly | |
# ERROR: executor failed running [/bin/sh -c python3 -m pip install notebook]: exit code: 1 | |
platforms: linux/amd64 | |
push: true | |
tags: ${{ join(fromJson(steps.demotags.outputs.tags)) }} | |
# image: jupyterhub/singleuser | |
# | |
- name: Get list of jupyterhub/singleuser tags | |
id: singleusertags | |
uses: jupyterhub/action-major-minor-tag-calculator@v3 | |
with: | |
githubToken: ${{ secrets.GITHUB_TOKEN }} | |
prefix: >- | |
${{ env.REGISTRY }}jupyterhub/singleuser: | |
jupyterhub/singleuser: | |
defaultTag: "${{ env.REGISTRY }}jupyterhub/singleuser:noref" | |
branchRegex: ^\w[\w-.]*$ | |
- name: Build and push jupyterhub/singleuser | |
uses: docker/build-push-action@v5 | |
with: | |
build-args: | | |
JUPYTERHUB_VERSION=${{ github.ref_type == 'tag' && github.ref_name || format('git:{0}', github.sha) }} | |
context: singleuser | |
platforms: linux/amd64,linux/arm64 | |
push: true | |
tags: ${{ join(fromJson(steps.singleusertags.outputs.tags)) }} |