Skip to content

Docker Build and Push All Images to DockerHub #24

Docker Build and Push All Images to DockerHub

Docker Build and Push All Images to DockerHub #24

name: Docker Build and Push All Images to DockerHub
on:
workflow_dispatch:
inputs:
runner_label_json:
description: 'runner array in json format (e.g. ["ubuntu-latest"] or ["self-hosted"])'
required: true
default: '["ubuntu-latest"]'
jobs:
build-and-push-main-amd64:
runs-on: ${{ fromJson(inputs.runner_label_json) }}
steps:
- name: Set up Docker Buildx
run: |
if ! docker buildx inspect nexent_builder > /dev/null 2>&1; then
docker buildx create --name nexent_builder --use
else
docker buildx use nexent_builder
fi
- name: Checkout code
uses: actions/checkout@v4
- name: Build main image (amd64) and load locally
run: |
docker buildx build --platform linux/amd64 -t nexent/nexent:amd64 --load -f make/main/Dockerfile .
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Push main image (amd64) to DockerHub
run: docker push nexent/nexent:amd64
build-and-push-main-arm64:
runs-on: ${{ fromJson(inputs.runner_label_json) }}
steps:
- name: Set up Docker Buildx
run: |
if ! docker buildx inspect nexent_builder > /dev/null 2>&1; then
docker buildx create --name nexent_builder --use
else
docker buildx use nexent_builder
fi
- name: Checkout code
uses: actions/checkout@v4
- name: Build main image (arm64) and load locally
run: |
docker buildx build --platform linux/arm64 -t nexent/nexent:arm64 --load -f make/main/Dockerfile .
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Push main image (arm64) to DockerHub
run: docker push nexent/nexent:arm64
build-and-push-data-process-amd64:
runs-on: ${{ fromJson(inputs.runner_label_json) }}
steps:
- name: Free up disk space on GitHub runner
run: |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
- name: Set up Docker Buildx
run: |
if ! docker buildx inspect nexent_builder > /dev/null 2>&1; then
docker buildx create --name nexent_builder --use
else
docker buildx use nexent_builder
fi
- name: Checkout code
uses: actions/checkout@v4
- name: Clone model
run: |
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/Nexent-AI/model-assets
cd ./model-assets
GIT_TRACE=1 GIT_CURL_VERBOSE=1 GIT_LFS_LOG=debug git lfs pull
rm -rf .git .gitattributes
- name: Build data process image (amd64) and load locally
run: |
docker buildx build --platform linux/amd64 -t nexent/nexent-data-process:amd64 --load -f make/data_process/Dockerfile .
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Push data process image (amd64) to DockerHub
run: docker push nexent/nexent-data-process:amd64
build-and-push-data-process-arm64:
runs-on: ${{ fromJson(inputs.runner_label_json) }}
steps:
- name: Free up disk space on GitHub runner
run: |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
- name: Set up Docker Buildx
run: |
if ! docker buildx inspect nexent_builder > /dev/null 2>&1; then
docker buildx create --name nexent_builder --use
else
docker buildx use nexent_builder
fi
- name: Checkout code
uses: actions/checkout@v4
- name: Clone model
run: |
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/Nexent-AI/model-assets
cd ./model-assets
GIT_TRACE=1 GIT_CURL_VERBOSE=1 GIT_LFS_LOG=debug git lfs pull
rm -rf .git .gitattributes
- name: Build data process image (arm64) and load locally
run: |
docker buildx build --platform linux/arm64 -t nexent/nexent-data-process:arm64 --load -f make/data_process/Dockerfile .
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Push data process image (arm64) to DockerHub
run: docker push nexent/nexent-data-process:arm64
build-and-push-web-amd64:
runs-on: ${{ fromJson(inputs.runner_label_json) }}
steps:
- name: Set up Docker Buildx
run: |
if ! docker buildx inspect nexent_builder > /dev/null 2>&1; then
docker buildx create --name nexent_builder --use
else
docker buildx use nexent_builder
fi
- name: Checkout code
uses: actions/checkout@v4
- name: Build web image (amd64) and load locally
run: |
docker buildx build --platform linux/amd64 -t nexent/nexent-web:amd64 --load -f make/web/Dockerfile .
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Push web image (amd64) to DockerHub
run: docker push nexent/nexent-web:amd64
build-and-push-web-arm64:
runs-on: ${{ fromJson(inputs.runner_label_json) }}
steps:
- name: Set up Docker Buildx
run: |
if ! docker buildx inspect nexent_builder > /dev/null 2>&1; then
docker buildx create --name nexent_builder --use
else
docker buildx use nexent_builder
fi
- name: Checkout code
uses: actions/checkout@v4
- name: Build web image (arm64) and load locally
run: |
docker buildx build --platform linux/arm64 -t nexent/nexent-web:arm64 --load -f make/web/Dockerfile .
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Push web image (arm64) to DockerHub
run: docker push nexent/nexent-web:arm64
build-and-push-terminal-amd64:
runs-on: ${{ fromJson(inputs.runner_label_json) }}
steps:
- name: Set up Docker Buildx
run: |
if ! docker buildx inspect nexent_builder > /dev/null 2>&1; then
docker buildx create --name nexent_builder --use
else
docker buildx use nexent_builder
fi
- name: Checkout code
uses: actions/checkout@v4
- name: Build terminal image (amd64) and load locally
run: |
docker buildx build --platform linux/amd64 -t nexent/nexent-ubuntu-terminal:amd64 --load -f make/terminal/Dockerfile .
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Push terminal image (amd64) to DockerHub
run: docker push nexent/nexent-ubuntu-terminal:amd64
build-and-push-terminal-arm64:
runs-on: ${{ fromJson(inputs.runner_label_json) }}
steps:
- name: Set up Docker Buildx
run: |
if ! docker buildx inspect nexent_builder > /dev/null 2>&1; then
docker buildx create --name nexent_builder --use
else
docker buildx use nexent_builder
fi
- name: Checkout code
uses: actions/checkout@v4
- name: Build terminal image (arm64) and load locally
run: |
docker buildx build --platform linux/arm64 -t nexent/nexent-ubuntu-terminal:arm64 --load -f make/terminal/Dockerfile .
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Push terminal image (arm64) to DockerHub
run: docker push nexent/nexent-ubuntu-terminal:arm64
manifest-push-main:
runs-on: ubuntu-latest
needs:
- build-and-push-main-amd64
- build-and-push-main-arm64
steps:
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Create and push manifest for main (DockerHub)
run: |
docker manifest create nexent/nexent:latest \
nexent/nexent:amd64 \
nexent/nexent:arm64
docker manifest push nexent/nexent:latest
manifest-push-data-process:
runs-on: ubuntu-latest
needs:
- build-and-push-data-process-amd64
- build-and-push-data-process-arm64
steps:
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Create and push manifest for data-process (DockerHub)
run: |
docker manifest create nexent/nexent-data-process:latest \
nexent/nexent-data-process:amd64 \
nexent/nexent-data-process:arm64
docker manifest push nexent/nexent-data-process:latest
manifest-push-web:
runs-on: ubuntu-latest
needs:
- build-and-push-web-amd64
- build-and-push-web-arm64
steps:
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Create and push manifest for web (DockerHub)
run: |
docker manifest create nexent/nexent-web:latest \
nexent/nexent-web:amd64 \
nexent/nexent-web:arm64
docker manifest push nexent/nexent-web:latest
manifest-push-terminal:
runs-on: ubuntu-latest
needs:
- build-and-push-terminal-amd64
- build-and-push-terminal-arm64
steps:
- name: Login to DockerHub
run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u nexent --password-stdin
- name: Create and push manifest for terminal (DockerHub)
run: |
docker manifest create nexent/nexent-ubuntu-terminal:latest \
nexent/nexent-ubuntu-terminal:amd64 \
nexent/nexent-ubuntu-terminal:arm64
docker manifest push nexent/nexent-ubuntu-terminal:latest