add support for multi arch #263
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: build-docker-images | |
| on: | |
| push: | |
| branches: [ "main" ] | |
| paths-ignore: [ "*.md" ] | |
| pull_request: | |
| branches: [ "main" ] | |
| paths-ignore: [ "*.md" ] | |
| workflow_dispatch: # Allows you to run this workflow manually from the Actions tab | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| BUILDKIT_PROGRESS: "plain" # Full logs for CI build. | |
| REGISTRY_SRC: ${{ vars.REGISTRY_SRC || 'quay.io' }} # For BASE_NAMESPACE of images: where to pull base images from, docker.io or other source registry URL. | |
| REGISTRY_DST: ${{ vars.REGISTRY_DST || 'quay.io' }} # For tags of built images: where to push images to, docker.io or other destination registry URL. | |
| # DOCKER_REGISTRY_USERNAME and DOCKER_REGISTRY_PASSWORD is required for docker image push, they should be set in CI secrets. | |
| DOCKER_REGISTRY_USERNAME: ${{ vars.DOCKER_REGISTRY_USERNAME }} | |
| DOCKER_REGISTRY_PASSWORD: ${{ secrets.DOCKER_REGISTRY_PASSWORD }} | |
| # used to sync image to mirror registry | |
| DOCKER_MIRROR_REGISTRY_USERNAME: ${{ vars.DOCKER_MIRROR_REGISTRY_USERNAME }} | |
| DOCKER_MIRROR_REGISTRY_PASSWORD: ${{ secrets.DOCKER_MIRROR_REGISTRY_PASSWORD }} | |
| CI_PROJECT_NAME: ${{ vars.CI_PROJECT_NAME || 'LabNow/lab-foundation' }} | |
| DOCKER_PLATFORM: amd64,arm64 | |
| jobs: | |
| job-base: | |
| name: 'atom,base,python-3.12' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: | | |
| source ./tool.sh | |
| build_image atom latest docker_atom/Dockerfile | |
| export IMG_PREFIX_SRC="${IMG_PREFIX_DST}" | |
| build_image python-3.12 latest docker_base/Dockerfile --build-arg "PYTHON_VERSION=3.12" | |
| build_image base latest docker_base/Dockerfile --build-arg "PYTHON_VERSION=3.12" | |
| job-python: | |
| name: 'python-3.7,python-3.13' | |
| needs: 'job-base' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: | | |
| source ./tool.sh | |
| export IMG_PREFIX_SRC="${IMG_PREFIX_DST}" | |
| build_image python-3.13 latest docker_base/Dockerfile --build-arg "PYTHON_VERSION=3.13" | |
| build_image python-3.7 latest docker_base/Dockerfile --build-arg "PYTHON_VERSION=3.7" | |
| job-core: | |
| name: 'core' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: | | |
| source ./tool.sh | |
| build_image core latest docker_core/Dockerfile \ | |
| --build-arg "ARG_PROFILE_PYTHON=base,datascience,mkl,database,nlp,cv,chem,tf2,torch" \ | |
| --build-arg "ARG_PROFILE_R=base,datascience" \ | |
| --build-arg "ARG_PROFILE_NODEJS=base" \ | |
| --build-arg "ARG_PROFILE_JAVA=base,maven" \ | |
| --build-arg "ARG_PROFILE_LATEX=base,cjk" | |
| job-py-data: | |
| name: 'py-data' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: source ./tool.sh && build_image py-data latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,mkl,database" | |
| job-py-chem: | |
| name: 'py-chem' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: source ./tool.sh && build_image py-chem latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,mkl,chem,torch" | |
| job-py-std: | |
| name: 'py-std' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: source ./tool.sh && build_image py-std latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,mkl,database,nlp,cv,chem" | |
| job-py-jdk: | |
| name: 'py-jdk' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: | | |
| source ./tool.sh | |
| build_image py-jdk latest docker_core/Dockerfile \ | |
| --build-arg "ARG_PROFILE_PYTHON=datascience,mkl,database,nlp,cv,chem" \ | |
| --build-arg "ARG_PROFILE_JAVA=base" | |
| job-r-base: | |
| name: 'r-base' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: source ./tool.sh && build_image r-base latest docker_core/Dockerfile --build-arg "ARG_PROFILE_R=base" | |
| job-r-std: | |
| name: 'r-std' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: source ./tool.sh && build_image r-std latest docker_core/Dockerfile --build-arg "ARG_PROFILE_R=base,datascience" --build-arg "ARG_PROFILE_JAVA=base" | |
| job-node: | |
| name: 'node' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: source ./tool.sh && build_image node latest docker_core/Dockerfile --build-arg "ARG_PROFILE_NODEJS=base" | |
| job-bun: | |
| name: 'bun' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: source ./tool.sh && build_image bun latest docker_core/Dockerfile --build-arg "ARG_PROFILE_NODEJS=bun" | |
| job-jdk: | |
| name: 'jdk-8,jdk-11,jdk-17,jdk-21,jdk' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: | | |
| source ./tool.sh | |
| build_image jdk-21 latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" --build-arg "VERSION_JDK=21" | |
| build_image jdk-17 latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" --build-arg "VERSION_JDK=17" | |
| build_image jdk-11 latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" --build-arg "VERSION_JDK=11" | |
| build_image jdk-8 latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" --build-arg "VERSION_JDK=8" | |
| job-julia: | |
| name: 'julia' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: source ./tool.sh && build_image julia latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JULIA=base" | |
| job-go: | |
| name: 'go,go-stack' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: | | |
| source ./tool.sh | |
| build_image go latest docker_core/Dockerfile --build-arg "ARG_PROFILE_GO=base" | |
| export IMG_PREFIX_SRC="${IMG_PREFIX_DST}" | |
| build_image go-stack latest docker_core/Dockerfile --build-arg "ARG_PROFILE_GO=base" --build-arg "ARG_PROFILE_NODEJS=base" | |
| job-rust: | |
| name: 'rust' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: source ./tool.sh && build_image rust latest docker_core/Dockerfile --build-arg "ARG_PROFILE_RUST=base" | |
| job-data-science-stack: | |
| name: 'data-science-stack' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: | | |
| source ./tool.sh | |
| build_image data-science-stack latest docker_core/Dockerfile \ | |
| --build-arg "ARG_PROFILE_PYTHON=base,database" \ | |
| --build-arg "ARG_PROFILE_R=base,datascience" \ | |
| --build-arg "ARG_PROFILE_NODEJS=base" \ | |
| --build-arg "ARG_PROFILE_JULIA=base" | |
| job-full-stack: | |
| name: 'full-stack' | |
| needs: job-base | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: | | |
| source ./tool.sh | |
| build_image full-stack latest docker_core/Dockerfile \ | |
| --build-arg "ARG_PROFILE_PYTHON=base,database" \ | |
| --build-arg "ARG_PROFILE_R=base,datascience" \ | |
| --build-arg "ARG_PROFILE_NODEJS=base" \ | |
| --build-arg "ARG_PROFILE_JAVA=base,maven" \ | |
| --build-arg "ARG_PROFILE_JULIA=base" \ | |
| --build-arg "ARG_PROFILE_GO=base" \ | |
| --build-arg "ARG_PROFILE_RUST=base" | |
| ## DockerKit - including image-syncer and docker-compsoe | |
| job-docker_kit: | |
| name: 'docker-kit' | |
| needs: ["job-base"] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - env: | |
| AUTH_FILE_CONTENT: ${{ secrets.AUTH_FILE_CONTENT }} | |
| DOCKER_MIRROR_REGISTRY: ${{ vars.DOCKER_MIRROR_REGISTRY }} | |
| run: | | |
| source ./tool.sh && build_image docker-kit latest docker_docker_kit/Dockerfile | |
| echo "jobs: { job-docker_kit: { name: 'docker-kit' } }" | tee ".github/workflows/build-docker.yml" > /dev/null | |
| printf '%s' "$AUTH_FILE_CONTENT" > .github/workflows/auth.json && ls -alh ./.github/workflows | |
| printenv | grep -v 'PATH' > /tmp/docker.env && echo "REGISTRY_URL=${REGISTRY_DST}" >> /tmp/docker.env | |
| docker run --rm --env-file /tmp/docker.env -v $(pwd):/tmp -w /tmp ${IMG_PREFIX_DST:-labnow}/docker-kit \ | |
| python /opt/utils/image-syncer/run_jobs.py --auth-file=/tmp/.github/workflows/auth.json | |
| ## Sync all images in this build (listed by "names") to mirror registry. | |
| sync_images: | |
| needs: ["job-docker_kit", "job-full-stack", "job-core"] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - env: | |
| AUTH_FILE_CONTENT: ${{ secrets.AUTH_FILE_CONTENT }} | |
| DOCKER_MIRROR_REGISTRY: ${{ vars.DOCKER_MIRROR_REGISTRY }} | |
| run: | | |
| source ./tool.sh | |
| printf '%s' "$AUTH_FILE_CONTENT" > .github/workflows/auth.json && ls -alh ./.github/workflows | |
| printenv | grep -v 'PATH' > /tmp/docker.env && echo "REGISTRY_URL=${REGISTRY_DST}" >> /tmp/docker.env | |
| docker run --rm --env-file /tmp/docker.env -v $(pwd):/tmp -w /tmp ${IMG_PREFIX_DST:-labnow}/docker-kit \ | |
| python /opt/utils/image-syncer/run_jobs.py --auth-file=/tmp/.github/workflows/auth.json |