Skip to content

Docker Build and Push All Images to DockerHub #33

Docker Build and Push All Images to DockerHub

Docker Build and Push All Images to DockerHub #33

name: Docker Build and Push All Images to DockerHub
on:
workflow_dispatch:
inputs:
version:
description: 'Image version tag (e.g. v1.0.0 or latest)'
required: true
default: 'latest'
push_latest:
description: 'Also push latest tag'
required: false
default: false
type: boolean
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:${{ inputs.version }}-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:${{ inputs.version }}-amd64
- name: Tag main image (amd64) as latest
if: inputs.push_latest == 'true'
run: docker tag nexent/nexent:${{ inputs.version }}-amd64 nexent/nexent:amd64
- name: Push latest main image (amd64) to DockerHub
if: inputs.push_latest == 'true'
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:${{ inputs.version }}-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:${{ inputs.version }}-arm64
- name: Tag main image (arm64) as latest
if: inputs.push_latest == 'true'
run: docker tag nexent/nexent:${{ inputs.version }}-arm64 nexent/nexent:arm64
- name: Push latest main image (arm64) to DockerHub
if: inputs.push_latest == 'true'
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:${{ inputs.version }}-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:${{ inputs.version }}-amd64
- name: Tag data process image (amd64) as latest
if: inputs.push_latest == 'true'
run: docker tag nexent/nexent-data-process:${{ inputs.version }}-amd64 nexent/nexent-data-process:amd64
- name: Push latest data process image (amd64) to DockerHub
if: inputs.push_latest == 'true'
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:${{ inputs.version }}-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:${{ inputs.version }}-arm64
- name: Tag data process image (arm64) as latest
if: inputs.push_latest == 'true'
run: docker tag nexent/nexent-data-process:${{ inputs.version }}-arm64 nexent/nexent-data-process:arm64
- name: Push latest data process image (arm64) to DockerHub
if: inputs.push_latest == 'true'
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:${{ inputs.version }}-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:${{ inputs.version }}-amd64
- name: Tag web image (amd64) as latest
if: inputs.push_latest == 'true'
run: docker tag nexent/nexent-web:${{ inputs.version }}-amd64 nexent/nexent-web:amd64
- name: Push latest web image (amd64) to DockerHub
if: inputs.push_latest == 'true'
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:${{ inputs.version }}-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:${{ inputs.version }}-arm64
- name: Tag web image (arm64) as latest
if: inputs.push_latest == 'true'
run: docker tag nexent/nexent-web:${{ inputs.version }}-arm64 nexent/nexent-web:arm64
- name: Push latest web image (arm64) to DockerHub
if: inputs.push_latest == 'true'
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:${{ inputs.version }}-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:${{ inputs.version }}-amd64
- name: Tag terminal image (amd64) as latest
if: inputs.push_latest == 'true'
run: docker tag nexent/nexent-ubuntu-terminal:${{ inputs.version }}-amd64 nexent/nexent-ubuntu-terminal:amd64
- name: Push latest terminal image (amd64) to DockerHub
if: inputs.push_latest == 'true'
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:${{ inputs.version }}-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:${{ inputs.version }}-arm64
- name: Tag terminal image (arm64) as latest
if: inputs.push_latest == 'true'
run: docker tag nexent/nexent-ubuntu-terminal:${{ inputs.version }}-arm64 nexent/nexent-ubuntu-terminal:arm64
- name: Push latest terminal image (arm64) to DockerHub
if: inputs.push_latest == 'true'
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:${{ inputs.version }} \
nexent/nexent:${{ inputs.version }}-amd64 \
nexent/nexent:${{ inputs.version }}-arm64
docker manifest push nexent/nexent:${{ inputs.version }}
- name: Create and push latest manifest for main (DockerHub)
if: inputs.push_latest == 'true'
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:${{ inputs.version }} \
nexent/nexent-data-process:${{ inputs.version }}-amd64 \
nexent/nexent-data-process:${{ inputs.version }}-arm64
docker manifest push nexent/nexent-data-process:${{ inputs.version }}
- name: Create and push latest manifest for data-process (DockerHub)
if: inputs.push_latest == 'true'
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:${{ inputs.version }} \
nexent/nexent-web:${{ inputs.version }}-amd64 \
nexent/nexent-web:${{ inputs.version }}-arm64
docker manifest push nexent/nexent-web:${{ inputs.version }}
- name: Create and push latest manifest for web (DockerHub)
if: inputs.push_latest == 'true'
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:${{ inputs.version }} \
nexent/nexent-ubuntu-terminal:${{ inputs.version }}-amd64 \
nexent/nexent-ubuntu-terminal:${{ inputs.version }}-arm64
docker manifest push nexent/nexent-ubuntu-terminal:${{ inputs.version }}
- name: Create and push latest manifest for terminal (DockerHub)
if: inputs.push_latest == 'true'
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