1+ name : Containerization
2+
3+ on :
4+ release :
5+ types : [published]
6+ workflow_dispatch :
7+
8+ jobs :
9+ Container :
10+ runs-on : ubuntu-latest
11+ strategy :
12+ matrix :
13+ config :
14+ - { name: 'cpu', base_image: 'ubuntu:22.04'}
15+ - { name: 'gpu', base_image: 'nvcr.io/nvidia/nvhpc:23.11-devel-cuda12.3-ubuntu22.04'}
16+
17+ steps :
18+ - name : Clone
19+ uses : actions/checkout@v4
20+ with :
21+ path : mfc
22+
23+ - name : Login
24+ uses : docker/login-action@v3
25+ with :
26+ username : ${{ secrets.DOCKERHUB_USERNAME }}
27+ password : ${{ secrets.DOCKERHUB_TOKEN }}
28+
29+ - name : Setup
30+ uses : docker/setup-buildx-action@v3
31+
32+ - name : Stage
33+ run : |
34+ sudo mkdir -p /mnt/share
35+ sudo chmod 777 /mnt/share
36+ cp -r mfc/* /mnt/share/
37+ cp -r mfc/.git /mnt/share/.git
38+ cp mfc/.github/Dockerfile /mnt/share/
39+ cp mfc/.github/.dockerignore /mnt/share/
40+ docker buildx create --name mfcbuilder --driver docker-container --use
41+
42+ - name : Build and Deploy
43+ uses : docker/build-push-action@v5
44+ with :
45+ builder : mfcbuilder
46+ context : /mnt/share
47+ file : /mnt/share/Dockerfile
48+ build-args : |
49+ BASE_IMAGE=${{ matrix.config.base_image }}
50+ TARGET=${{ matrix.config.name }}
51+ CC_COMPILER=${{ contains(matrix.config.name, 'gpu') && 'nvc' || 'gcc' }}
52+ CXX_COMPILER=${{ contains(matrix.config.name, 'gpu') && 'nvc++' || 'g++' }}
53+ FC_COMPILER=${{ contains(matrix.config.name, 'gpu') && 'nvfortran' || 'gfortran' }}
54+ COMPILER_PATH=${{ contains(matrix.config.name, 'gpu') && '/opt/nvidia/hpc_sdk/Linux_x86_64/compilers/bin' || '/usr/bin' }}
55+ COMPILER_LD_LIBRARY_PATH=${{ contains(matrix.config.name, 'gpu') && '/opt/nvidia/hpc_sdk/Linux_x86_64/compilers/lib' || '/usr/lib' }}
56+ tags : sbryngelson/mfc:${{ github.ref_name }}-${{ matrix.config.name }}
57+ push : true
58+ cache-from : type=gha
59+ cache-to : type=gha,mode=max
0 commit comments