Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions .github/actions/create-dev-env/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,10 @@ description: Create a build environment
runs:
using: composite
steps:
# actions/setup-python doesn't support Linux aarch64 runners
# See: https://github.com/actions/setup-python/issues/108
# python3 is manually preinstalled in the aarch64 VM self-hosted runner
- name: Set Up Python 🐍
uses: actions/setup-python@v5
with:
python-version: 3.x
if: runner.arch == 'X64'
python-version: "3.12"

- name: Install Dev Dependencies 📦
run: |
Expand Down
31 changes: 0 additions & 31 deletions .github/workflows/aarch64-setup.yml

This file was deleted.

5 changes: 4 additions & 1 deletion .github/workflows/contributed-recipes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,14 @@ jobs:
if: github.repository_owner == 'jupyter' || github.repository_owner == 'mathbunnyru'

steps:
- name: Sleep to allow Docker daemon to start 🕒
if: runner.arch == 'ARM64'
run: sleep 10
shell: bash
- name: Checkout Repo ⚡️
uses: actions/checkout@v4

- name: Build recipe 🛠
# We're pulling here to avoid accidentally using an image that might be present on aarch64 self-hosted runner
run: docker build --pull --rm --force-rm --tag my-custom-image -f ./${{ matrix.dockerfile }} ./
env:
DOCKER_BUILDKIT: 1
Expand Down
18 changes: 5 additions & 13 deletions .github/workflows/docker-build-test-upload.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
steps:
# Image with CUDA needs extra disk space
- name: Free disk space 🧹
if: contains(inputs.variant, 'cuda') && inputs.platform == 'x86_64'
if: contains(inputs.variant, 'cuda') && runner.arch == 'X64'
Copy link
Member Author

@mathbunnyru mathbunnyru Jan 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's use inputs.platform when we want to name things.
runner.arch is better in this case - it's standard when using GitHub runners

uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be
with:
tool-cache: false
Expand All @@ -52,23 +52,15 @@ jobs:
docker-images: false
swap-storage: false

- name: Sleep to allow Docker daemon to start 🕒
if: runner.arch == 'ARM64'
run: sleep 10
shell: bash
- name: Checkout Repo ⚡️
uses: actions/checkout@v4
- name: Create dev environment 📦
uses: ./.github/actions/create-dev-env

# Self-hosted runners share a state (whole VM) between runs
# Also, they might have running or stopped containers,
# which are not cleaned up by `docker system prune`
- name: Reset docker state and cleanup artifacts 🗑️
if: inputs.platform != 'x86_64'
run: |
docker kill $(docker ps --quiet) || true
docker rm $(docker ps --all --quiet) || true
docker system prune --all --force
rm -rf /tmp/jupyter/
shell: bash

- name: Load parent built image to Docker 📥
if: inputs.parent-image != ''
uses: ./.github/actions/load-image
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker-merge-tags.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
with:
name: ${{ inputs.image }}-aarch64-${{ inputs.variant }}-tags
path: /tmp/jupyter/tags/
if: github.repository_owner == 'jupyter' && !contains(inputs.variant, 'cuda')
if: ${{ !contains(inputs.variant, 'cuda') }}

# Docker might be stuck when pulling images
# https://github.com/docker/for-mac/issues/2083
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker-tag-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
steps:
# Image with CUDA needs extra disk space
- name: Free disk space 🧹
if: contains(inputs.variant, 'cuda') && inputs.platform == 'x86_64'
if: contains(inputs.variant, 'cuda') && runner.arch == 'X64'
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be
with:
tool-cache: false
Expand Down
48 changes: 23 additions & 25 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,7 @@ jobs:
parent-image: ""
image: docker-stacks-foundation
platform: aarch64
runs-on: ARM64_FAST
if: github.repository_owner == 'jupyter'
runs-on: ubuntu-24.04-arm
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Github rep has said that they believe the ubuntu-22.04-arm runners may be stable @mathbunnyru - I think using ubuntu 22.04 as runner environment may be fine still - I'm not fully sure.

Copy link
Member Author

@mathbunnyru mathbunnyru Feb 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Github rep has said that they believe the ubuntu-22.04-arm runners may be stable @mathbunnyru

Great, I'll try it out, thanks!

I think using ubuntu 22.04 as runner environment may be fine still - I'm not fully sure.

Definitely still fine, because that's what self-hosted runners are still running, and I had 0 issues due to that 😄
So, in a way, switching to ubuntu-22.04-arm is even better (we're changing less important things).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ooooh looking better so far - not seen all tests pass but some

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ooooh looking better so far - not seen all tests pass but some

Yes, and actually, the last run of 24.04 was fine as well.
But I'm completely ok with switching to ubuntu-22.04-arm first


x86_64-foundation:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand All @@ -83,9 +82,8 @@ jobs:
parent-image: docker-stacks-foundation
image: base-notebook
platform: aarch64
runs-on: ARM64_FAST
runs-on: ubuntu-24.04-arm
needs: [aarch64-foundation]
if: github.repository_owner == 'jupyter'

x86_64-base:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand All @@ -102,9 +100,9 @@ jobs:
parent-image: base-notebook
image: minimal-notebook
platform: aarch64
runs-on: ARM64_FAST
runs-on: ubuntu-24.04-arm
needs: [aarch64-base]
if: github.repository_owner == 'jupyter' && !contains(github.event.pull_request.title, '[FAST_BUILD]')
if: ${{ !contains(github.event.pull_request.title, '[FAST_BUILD]') }}

x86_64-minimal:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand All @@ -122,9 +120,9 @@ jobs:
parent-image: minimal-notebook
image: scipy-notebook
platform: aarch64
runs-on: ARM64_FAST
runs-on: ubuntu-24.04-arm
needs: [aarch64-minimal]
if: github.repository_owner == 'jupyter' && !contains(github.event.pull_request.title, '[FAST_BUILD]')
if: ${{ !contains(github.event.pull_request.title, '[FAST_BUILD]') }}

x86_64-scipy:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand All @@ -142,9 +140,9 @@ jobs:
parent-image: minimal-notebook
image: r-notebook
platform: aarch64
runs-on: ARM64_SLOW
runs-on: ubuntu-24.04-arm
needs: [aarch64-minimal]
if: github.repository_owner == 'jupyter' && !contains(github.event.pull_request.title, '[FAST_BUILD]')
if: ${{ !contains(github.event.pull_request.title, '[FAST_BUILD]') }}

x86_64-r:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand All @@ -162,9 +160,9 @@ jobs:
parent-image: minimal-notebook
image: julia-notebook
platform: aarch64
runs-on: ARM64_SLOW
runs-on: ubuntu-24.04-arm
needs: [aarch64-minimal]
if: github.repository_owner == 'jupyter' && !contains(github.event.pull_request.title, '[FAST_BUILD]')
if: ${{ !contains(github.event.pull_request.title, '[FAST_BUILD]') }}

x86_64-julia:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand All @@ -182,9 +180,9 @@ jobs:
parent-image: scipy-notebook
image: tensorflow-notebook
platform: aarch64
runs-on: ARM64_SLOW
runs-on: ubuntu-24.04-arm
needs: [aarch64-scipy]
if: github.repository_owner == 'jupyter' && !contains(github.event.pull_request.title, '[FAST_BUILD]')
if: ${{ !contains(github.event.pull_request.title, '[FAST_BUILD]') }}

x86_64-tensorflow:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand Down Expand Up @@ -213,9 +211,9 @@ jobs:
parent-image: scipy-notebook
image: pytorch-notebook
platform: aarch64
runs-on: ARM64_SLOW
runs-on: ubuntu-24.04-arm
needs: [aarch64-scipy]
if: github.repository_owner == 'jupyter' && !contains(github.event.pull_request.title, '[FAST_BUILD]')
if: ${{ !contains(github.event.pull_request.title, '[FAST_BUILD]') }}

x86_64-pytorch:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand Down Expand Up @@ -255,9 +253,9 @@ jobs:
parent-image: scipy-notebook
image: datascience-notebook
platform: aarch64
runs-on: ARM64_SLOW
runs-on: ubuntu-24.04-arm
needs: [aarch64-scipy]
if: github.repository_owner == 'jupyter' && !contains(github.event.pull_request.title, '[FAST_BUILD]')
if: ${{ !contains(github.event.pull_request.title, '[FAST_BUILD]') }}

x86_64-datascience:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand All @@ -275,9 +273,9 @@ jobs:
parent-image: scipy-notebook
image: pyspark-notebook
platform: aarch64
runs-on: ARM64_FAST
runs-on: ubuntu-24.04-arm
needs: [aarch64-scipy]
if: github.repository_owner == 'jupyter' && !contains(github.event.pull_request.title, '[FAST_BUILD]')
if: ${{ !contains(github.event.pull_request.title, '[FAST_BUILD]') }}

x86_64-pyspark:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand All @@ -295,9 +293,9 @@ jobs:
parent-image: pyspark-notebook
image: all-spark-notebook
platform: aarch64
runs-on: ARM64_FAST
runs-on: ubuntu-24.04-arm
needs: [aarch64-pyspark]
if: github.repository_owner == 'jupyter' && !contains(github.event.pull_request.title, '[FAST_BUILD]')
if: ${{ !contains(github.event.pull_request.title, '[FAST_BUILD]') }}

x86_64-all-spark:
uses: ./.github/workflows/docker-build-test-upload.yml
Expand Down Expand Up @@ -348,7 +346,7 @@ jobs:
aarch64-pyspark,
aarch64-all-spark,
]
if: github.repository_owner == 'jupyter' && !contains(github.event.pull_request.title, '[FAST_BUILD]')
if: ${{ !contains(github.event.pull_request.title, '[FAST_BUILD]') }}

aarch64-images-tag-push-fast:
uses: ./.github/workflows/docker-tag-push.yml
Expand All @@ -367,7 +365,7 @@ jobs:
{ image: base-notebook, variant: default },
]
needs: [aarch64-foundation, aarch64-base]
if: github.repository_owner == 'jupyter' && contains(github.event.pull_request.title, '[FAST_BUILD]')
if: contains(github.event.pull_request.title, '[FAST_BUILD]')

x86_64-images-tag-push:
uses: ./.github/workflows/docker-tag-push.yml
Expand Down Expand Up @@ -505,4 +503,4 @@ jobs:
contributed-recipes:
uses: ./.github/workflows/contributed-recipes.yml
needs: [merge-tags]
if: github.repository_owner == 'jupyter' && (github.ref == 'refs/heads/main' || github.event_name == 'schedule')
if: github.ref == 'refs/heads/main' || github.event_name == 'schedule'
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
This changelog only contains breaking and/or significant changes manually introduced to this repository (using Pull Requests).
All image manifests can be found in [the wiki](https://github.com/jupyter/docker-stacks/wiki).

## 2025-01-28

Affected: all images.

- **Non-breaking:**: start using GitHub-hosted `aarch64` runners.

## 2024-12-03

Affected: all images.
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ more information is available in the [documentation](https://jupyter-docker-stac
- Starting from `2022-07-05`, `aarch64` self-hosted runners were sponsored by [`@mathbunnyru`](https://github.com/mathbunnyru/).
Please, consider [sponsoring his work](https://github.com/sponsors/mathbunnyru) on GitHub
- Starting from `2023-10-31`, `aarch64` self-hosted runners are sponsored by an amazing [`2i2c non-profit organization`](https://2i2c.org)
- Starting from `2025-01-28`, we use GitHub-hosted `aarch64` runners

## CPU Architectures

Expand Down
1 change: 0 additions & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@

linkcheck_ignore = [
r".*github\.com.*#", # javascript based anchors
r"https://github\.com/jupyter/docker-stacks/settings/actions/runners/new\?arch=arm64\&os=linux", # only works for users with permissions to change runners
r"http://127\.0\.0\.1:.*", # various examples
r"https://mybinder\.org/v2/gh/.*", # lots of 500 errors
r"https://packages\.ubuntu\.com/search\?keywords=openjdk", # frequent read timeouts
Expand Down
1 change: 0 additions & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ Table of Contents

maintaining/new-images-and-packages-policy
maintaining/tasks
maintaining/aarch64-runner

.. toctree::
:maxdepth: 2
Expand Down
30 changes: 0 additions & 30 deletions docs/maintaining/aarch64-runner.md

This file was deleted.

8 changes: 4 additions & 4 deletions docs/using/recipe_code/generate_matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@

def generate_matrix() -> dict[str, Any]:
dockerfiles = sorted(file.name for file in THIS_DIR.glob("*.dockerfile"))
runs_on = ["ubuntu-latest"]
if REPOSITORY_OWNER == "jupyter":
runs_on.append("ARM64")
runs_on = ["ubuntu-latest", "ubuntu-24.04-arm"]
return {
"dockerfile": dockerfiles,
"runs-on": runs_on,
"exclude": [{"dockerfile": "oracledb.dockerfile", "runs-on": "ARM64"}],
"exclude": [
{"dockerfile": "oracledb.dockerfile", "runs-on": "ubuntu-24.04-arm"}
],
}


Expand Down
6 changes: 0 additions & 6 deletions images/minimal-notebook/setup-scripts/setup_julia.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,6 @@ def get_latest_julia_url() -> tuple[str, str]:
triplet = unify_aarch64(platform.machine()) + "-linux-gnu"
file_info = [vf for vf in latest_version_files if vf["triplet"] == triplet][0]
LOGGER.info(f"Latest version: {file_info['version']} url: {file_info['url']}")
BROKEN_VERSION = "1.11.3"
if file_info["version"] == BROKEN_VERSION:
LOGGER.warning(
f"Not using Julia {BROKEN_VERSION}, because it hangs in GitHub self-hosted runners"
)
return file_info["url"].replace(BROKEN_VERSION, "1.11.1"), "1.11.1"
return file_info["url"], file_info["version"]


Expand Down
Loading