Docker Build and Push All Images to DockerHub #24
This file contains hidden or 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
| 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 |