- 
                Notifications
    You must be signed in to change notification settings 
- Fork 121
MFC Containerization #971
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MFC Containerization #971
Changes from all commits
aa5055d
              f348b78
              0aca803
              2ec9209
              3297583
              09dc88d
              67f67be
              bea47ca
              987a04b
              121ad13
              b03c950
              b9dc1b3
              a56e1e3
              4e5516d
              18cf465
              615bab4
              cbf9f61
              06c7592
              7b21a8f
              d86b17a
              File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| { | ||
| "name": "MFC Container", | ||
| "image": "sbryngelson/mfc:latest-cpu", | ||
| "workspaceFolder": "/opt/MFC", | ||
| "settings": { | ||
| "terminal.integrated.shell.linux": "/bin/bash", | ||
| "editor.formatOnSave": true | ||
| }, | ||
| } | ||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| node_modules/ | ||
| package.json | ||
| yarn.lock | ||
|  | ||
| .venv/ | ||
| .vscode/ | ||
| src/*/autogen/ | ||
|  | ||
| *.swo | ||
| *.swp | ||
|  | ||
| *:Zone.Identifier | ||
|  | ||
| .nfs* | ||
|  | ||
| __pycache__ | ||
|  | ||
| *.egg-info | ||
|  | ||
| .DS_Store | ||
|  | ||
| # NVIDIA Nsight Compute | ||
| *.nsys-rep | ||
| *.sqlite | ||
|  | ||
| docs/*/initial* | ||
| docs/*/result* | ||
| docs/documentation/*-example.png | ||
| docs/documentation/examples.md | ||
|  | ||
| examples/*batch/*/ | ||
| examples/**/D/* | ||
| examples/**/p* | ||
| examples/**/D_* | ||
| examples/**/*.inf | ||
| examples/**/*.inp | ||
| examples/**/*.o* | ||
| examples/**/silo* | ||
| examples/**/restart_data* | ||
| examples/**/*.out | ||
| examples/**/binary | ||
| examples/**/fort.1 | ||
| examples/**/*.sh | ||
| examples/**/*.err | ||
| examples/**/viz/ | ||
| examples/*.jpg | ||
| examples/*.png | ||
| examples/*/workloads/ | ||
| examples/*/run-*/ | ||
| examples/*/logs/ | ||
| examples/**/*.f90 | ||
| workloads/ | ||
|  | ||
| benchmarks/*batch/*/ | ||
| benchmarks/*/D/* | ||
| benchmarks/*/p* | ||
| benchmarks/*/D_* | ||
| benchmarks/*/*.inf | ||
| benchmarks/*/*.inp | ||
| benchmarks/*/*.dat | ||
| benchmarks/*/*.o* | ||
| benchmarks/*/silo* | ||
| benchmarks/*/restart_data* | ||
| benchmarks/*/*.out | ||
| benchmarks/*/binary | ||
| benchmarks/*/fort.1 | ||
| benchmarks/*/*.sh | ||
| benchmarks/*/*.err | ||
| benchmarks/*/viz/ | ||
| benchmarks/*.jpg | ||
| benchmarks/*.png | ||
|  | ||
| *.mod | ||
|  | ||
| # Video Files | ||
| *.mp4 | ||
| *.mov | ||
| *.mkv | ||
| *.avi | 
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| ARG BASE_IMAGE | ||
| FROM ${BASE_IMAGE} | ||
|  | ||
| ARG TARGET | ||
| ARG CC_COMPILER | ||
| ARG CXX_COMPILER | ||
| ARG FC_COMPILER | ||
| ARG COMPILER_PATH | ||
| ARG COMPILER_LD_LIBRARY_PATH | ||
|  | ||
| RUN apt-get update -y && \ | ||
| if [ "$TARGET" != "gpu" ]; then \ | ||
| apt-get install -y \ | ||
| build-essential git make cmake gcc g++ gfortran bc\ | ||
| python3 python3-venv python3-pip \ | ||
| openmpi-bin libopenmpi-dev libfftw3-dev \ | ||
| mpich libmpich-dev; \ | ||
| else \ | ||
| apt-get install -y \ | ||
| build-essential git make cmake bc\ | ||
| python3 python3-venv python3-pip \ | ||
| libfftw3-dev \ | ||
| openmpi-bin libopenmpi-dev; \ | ||
| fi && \ | ||
| rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | ||
|  | ||
| ENV OMPI_ALLOW_RUN_AS_ROOT=1 | ||
| ENV OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 | ||
| ENV PATH="/opt/MFC:$PATH" | ||
|  | ||
| COPY ../ /opt/MFC | ||
|         
                  Malmahrouqi3 marked this conversation as resolved.
              Show resolved
            Hide resolved There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: Build Context Restricts Parent Directory AccessThe  | ||
|  | ||
| ENV CC=${CC_COMPILER} | ||
| ENV CXX=${CXX_COMPILER} | ||
| ENV FC=${FC_COMPILER} | ||
| ENV PATH="${COMPILER_PATH}:$PATH" | ||
| ENV LD_LIBRARY_PATH="${COMPILER_LD_LIBRARY_PATH}:${LD_LIBRARY_PATH:-}" | ||
|  | ||
| RUN echo "TARGET=$TARGET CC=$CC_COMPILER FC=$FC_COMPILER" && \ | ||
| cd /opt/MFC && \ | ||
| if [ "$TARGET" = "gpu" ]; then \ | ||
| ./mfc.sh build --gpu -j $(nproc); \ | ||
| else \ | ||
| ./mfc.sh build -j $(nproc); \ | ||
| fi | ||
|  | ||
| RUN cd /opt/MFC && \ | ||
| if [ "$TARGET" = "gpu" ]; then \ | ||
| ./mfc.sh test -a --dry-run --gpu -j $(nproc); \ | ||
| else \ | ||
| ./mfc.sh test -a --dry-run -j $(nproc); \ | ||
| fi | ||
|  | ||
| WORKDIR /opt/MFC | ||
| ENTRYPOINT ["tail", "-f", "/dev/null"] | ||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,132 @@ | ||
| name: Containerization | ||
|  | ||
| on: | ||
| release: | ||
| types: [published] | ||
| workflow_dispatch: | ||
| inputs: | ||
| tag: | ||
| description: 'tag to containerize' | ||
| required: true | ||
|  | ||
| concurrency: | ||
| group: Containerization | ||
| cancel-in-progress: false | ||
|  | ||
| jobs: | ||
| Container: | ||
| strategy: | ||
| matrix: | ||
| config: | ||
| - { name: 'cpu', runner: 'ubuntu-22.04', base_image: 'ubuntu:22.04' } | ||
| - { name: 'gpu', runner: 'ubuntu-22.04', base_image: 'nvcr.io/nvidia/nvhpc:23.11-devel-cuda_multi-ubuntu22.04' } | ||
| - { name: 'gpu', runner: 'ubuntu-22.04-arm', base_image: 'nvcr.io/nvidia/nvhpc:23.11-devel-cuda_multi-ubuntu22.04' } | ||
| runs-on: ${{ matrix.config.runner }} | ||
| outputs: | ||
| tag: ${{ steps.clone.outputs.tag }} | ||
| steps: | ||
| - name: Free Disk Space | ||
| uses: jlumbroso/free-disk-space@main | ||
| with: | ||
| tool-cache: false | ||
| android: true | ||
| dotnet: true | ||
| haskell: true | ||
| large-packages: true | ||
| docker-images: true | ||
| swap-storage: true | ||
|  | ||
| - name: Login | ||
| uses: docker/login-action@v3 | ||
| with: | ||
| username: ${{ secrets.DOCKERHUB_USERNAME }} | ||
| password: ${{ secrets.DOCKERHUB_PASSWORD }} | ||
|  | ||
| - name: Setup Buildx | ||
| uses: docker/setup-buildx-action@v3 | ||
|  | ||
| - name: Setup QEMU | ||
| uses: docker/setup-qemu-action@v3 | ||
|  | ||
| - name: Clone | ||
| id: clone | ||
| run: | | ||
| TAG="${{ github.event.inputs.tag || github.ref_name }}" | ||
| echo "tag=$TAG" >> $GITHUB_OUTPUT | ||
| echo "TAG=$TAG" >> $GITHUB_ENV | ||
| git clone --branch "$TAG" --depth 1 https://github.com/MFlowCode/MFC.git mfc | ||
|  | ||
| - name: Stage | ||
| run: | | ||
| sudo fallocate -l 8G /swapfile | ||
| sudo chmod 600 /swapfile | ||
| sudo mkswap /swapfile | ||
| sudo swapon /swapfile | ||
| sudo mkdir -p /home/runner/tmp | ||
| export TMPDIR=/home/runner/tmp | ||
| free -h | ||
| sudo mkdir -p /mnt/share | ||
| sudo chmod 777 /mnt/share | ||
| cp -r mfc/* /mnt/share/ | ||
| cp -r mfc/.git /mnt/share/.git | ||
| cp mfc/.github/Dockerfile /mnt/share/ | ||
| cp mfc/.github/.dockerignore /mnt/share/ | ||
| docker buildx create --name mfcbuilder --driver docker-container --use | ||
|  | ||
| - name: Build and push image (cpu) | ||
| if: ${{ matrix.config.name == 'cpu' }} | ||
| uses: docker/build-push-action@v6 | ||
| with: | ||
| builder: mfcbuilder | ||
| context: /mnt/share | ||
| file: /mnt/share/Dockerfile | ||
| platforms: linux/amd64,linux/arm64 | ||
| build-args: | | ||
| BASE_IMAGE=${{ matrix.config.base_image }} | ||
| TARGET=${{ matrix.config.name }} | ||
| CC_COMPILER=${{ 'gcc' }} | ||
| CXX_COMPILER=${{ 'g++' }} | ||
| FC_COMPILER=${{ 'gfortran' }} | ||
| COMPILER_PATH=${{ '/usr/bin' }} | ||
| COMPILER_LD_LIBRARY_PATH=${{ '/usr/lib' }} | ||
| tags: ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }} | ||
| push: true | ||
|  | ||
| - name: Build and push image (gpu) | ||
| if: ${{ matrix.config.name == 'gpu' }} | ||
| uses: docker/build-push-action@v5 | ||
| with: | ||
| builder: default | ||
| context: /mnt/share | ||
| file: /mnt/share/Dockerfile | ||
| build-args: | | ||
| BASE_IMAGE=${{ matrix.config.base_image }} | ||
| TARGET=${{ matrix.config.name }} | ||
| CC_COMPILER=${{ 'nvc' }} | ||
| CXX_COMPILER=${{ 'nvc++' }} | ||
| FC_COMPILER=${{ 'nvfortran' }} | ||
| COMPILER_PATH=${{ '/opt/nvidia/hpc_sdk/Linux_x86_64/compilers/bin' }} | ||
| COMPILER_LD_LIBRARY_PATH=${{ '/opt/nvidia/hpc_sdk/Linux_x86_64/compilers/lib' }} | ||
| tags: ${{ secrets.DOCKERHUB_USERNAME }}/mfc:${{ env.TAG }}-${{ matrix.config.name }}-${{ matrix.config.runner}} | ||
| push: true | ||
|  | ||
| manifests: | ||
| runs-on: ubuntu-latest | ||
| needs: Container | ||
| steps: | ||
| - name: Login | ||
| uses: docker/login-action@v3 | ||
| with: | ||
| username: ${{ secrets.DOCKERHUB_USERNAME }} | ||
| password: ${{ secrets.DOCKERHUB_PASSWORD }} | ||
|  | ||
| - name: Create and Push Manifest Lists | ||
| env: | ||
| TAG: ${{ needs.Container.outputs.tag }} | ||
| REGISTRY: ${{ secrets.DOCKERHUB_USERNAME }}/mfc | ||
| run: | | ||
| docker buildx imagetools create -t $REGISTRY:latest-cpu $REGISTRY:$TAG-cpu | ||
| docker manifest create $REGISTRY:$TAG-gpu $REGISTRY:$TAG-gpu-ubuntu-22.04 $REGISTRY:$TAG-gpu-ubuntu-22.04-arm | ||
| docker manifest create $REGISTRY:latest-gpu $REGISTRY:$TAG-gpu-ubuntu-22.04 $REGISTRY:$TAG-gpu-ubuntu-22.04-arm | ||
| There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: Manifest Tags Overwritten, Causing Race ConditionsThe  | ||
| docker manifest push $REGISTRY:$TAG-gpu | ||
| docker manifest push $REGISTRY:latest-gpu | ||
Uh oh!
There was an error while loading. Please reload this page.