diff --git a/.github/actions/install-mesa/action.yml b/.github/actions/install-mesa/action.yml new file mode 100644 index 000000000..77691ecdf --- /dev/null +++ b/.github/actions/install-mesa/action.yml @@ -0,0 +1,120 @@ +name : 'install-mesa' + +description: 'Download and install the MESA SDK and install MESA' + +inputs: + sdk: + description: 'The version of the MESA SDK to install' + required: false + default: '23.7.3' + +runs: + + using: 'composite' + + steps: + - name: Delete unused packages + run: | + # runners have 150GB of disk space and the Ubuntu image is big so we sometimes found it ran out of space for MESA + # others have encountered this too so we took commands from this action + # https://github.com/jlumbroso/free-disk-space + # currently commented because we don't need it and these commands can need changing when the Ubuntu image changes + sudo rm -rf /usr/local/lib/android + # sudo apt-get remove -y '^aspnetcore-.*' + # sudo apt-get remove -y '^dotnet-.*' # 990 MB + # sudo apt-get remove -y '^llvm-.*' # 1052 MB + # sudo apt-get remove -y 'php.*' # 56.6 MB + # sudo apt-get remove -y '^mysql-.*' # 209 MB + # sudo apt-get remove -y azure-cli google-cloud-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri # 2274 MB + sudo apt-get autoremove -y # 771 MB + sudo apt-get clean + shell: bash + + - name: Create LFS file list + run: | + git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id + shell: bash + + - name: Restore LFS cache + uses: actions/cache@v4 + id: lfs-cache + with: + path: .git/lfs + key: ${{ runner.os }}-${{ hashFiles('.lfs-assets-id') }}-v1 + + - name: Git LFS Pull + run: git lfs pull + shell: bash + if: steps.lfs-cache.outputs.cache-hit != 'true' + + - name: Git LFS Checkout + run: git lfs checkout + shell: bash + if: steps.lfs-cache.outputs.cache-hit == 'true' + + - name: Install dependencies Linux + run: | + sudo apt-get -y update + sudo apt-get -y install wget binutils make perl libx11-6 libx11-dev zlib1g zlib1g-dev tcsh + shell: bash + + - uses: actions/cache@v4 + id: cache + with: + path: | + mesasdk-x86_64-linux-${{inputs.sdk}}.tar.gz + key: ${{ runner.os }}-${{inputs.sdk}} + + - name: Get SDK ${{ runner.os }} '21.4.1' + if: ${{ (steps.cache.outputs.cache-hit != 'true') && ( inputs.sdk == '21.4.1') }} + run: | + wget -q https://zenodo.org/record/5802444/files/mesasdk-x86_64-linux-21.4.1.tar.gz + shell: bash + + - name: Get SDK ${{ runner.os }} '22.6.1' + if: ${{ (steps.cache.outputs.cache-hit != 'true') && ( inputs.sdk == '22.6.1') }} + run: | + wget -q https://zenodo.org/record/7457681/files/mesasdk-x86_64-linux-22.6.1.tar.gz + shell: bash + + - name: Get SDK ${{ runner.os }} '23.7.3' + if: ${{ (steps.cache.outputs.cache-hit != 'true') && ( inputs.sdk == '23.7.3') }} + run: | + wget -q https://zenodo.org/record/10624843/files/mesasdk-x86_64-linux-23.7.3.tar.gz + shell: bash + + - name: Get SDK ${{ runner.os }} '24.7.1' + if: ${{ (steps.cache.outputs.cache-hit != 'true') && ( inputs.sdk == '24.7.1') }} + run: | + wget -q https://zenodo.org/records/13768913/files/mesasdk-x86_64-linux-24.7.1.tar.gz + shell: bash + + - name: Unpack SDK ${{ runner.os }} ${{inputs.sdk}} + run: | + tar xvf mesasdk-x86_64-linux-${{inputs.sdk}}.tar.gz + shell: bash + + - name: Compile + run: | + # Linux runners have 4 cores + # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories + export OMP_NUM_THREADS=4 + export NPROCS=4 + export "MESASDK_ROOT=$(readlink -f mesasdk)" + source "${MESASDK_ROOT}/bin/mesasdk_init.sh" + export "MESA_DIR=$(readlink -f ./)" + # Save environment variables to Github environment + echo "OMP_NUM_THREADS=${OMP_NUM_THREADS}" >> $GITHUB_ENV + echo "NPROCS=${NPROCS}" >> $GITHUB_ENV + echo "MESASDK_ROOT=${MESASDK_ROOT}" >> $GITHUB_ENV + echo "MESA_DIR=${MESA_DIR}" >> $GITHUB_ENV + # Everything is run as root so we need to disable the root check in the install script + sed -i 's/\${EUID:-\$(id -u)}/1/' install + # Turn off caching during build to save more space + sed -i 's/use_cache_for_eos = .true./use_cache_for_eos = .false./g' $MESA_DIR/eos/public/eos_def.f90 + sed -i 's/use_cache = .true./use_cache = .false./g' $MESA_DIR/star/private/star_private_def.f90 + ./install + if [ ! -f lib/libbinary.a ]; then + exit 1 + fi + shell: bash diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index 789f52197..e76bb2e68 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -7,102 +7,15 @@ jobs: strategy: fail-fast: false matrix: - sdk: ["21.4.1", "22.6.1", "23.7.3"] + sdk: ["22.6.1", "23.7.3", "24.7.1"] runs-on: ubuntu-latest steps: - - name: Delete unused packages - run: | - # runners have 150GB of disk space and the Ubuntu image is big so we sometimes found it ran out of space for MESA - # others have encountered this too so we took commands from this action - # https://github.com/jlumbroso/free-disk-space - # currently commented because we don't need it and these commands can need changing when the Ubuntu image changes - sudo rm -rf /usr/local/lib/android - # sudo apt-get remove -y '^aspnetcore-.*' - # sudo apt-get remove -y '^dotnet-.*' # 990 MB - # sudo apt-get remove -y '^llvm-.*' # 1052 MB - # sudo apt-get remove -y 'php.*' # 56.6 MB - # sudo apt-get remove -y '^mysql-.*' # 209 MB - # sudo apt-get remove -y azure-cli google-cloud-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri # 2274 MB - sudo apt-get autoremove -y # 771 MB - sudo apt-get clean - - name: Checkout - uses: actions/checkout@v3.0.0 - - - name: Create LFS file list - run: | - git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id - - - name: Restore LFS cache - uses: actions/cache@v3 - id: lfs-cache - with: - path: .git/lfs - key: ${{ runner.os }}-${{ hashFiles('.lfs-assets-id') }}-v1 - - - name: Git LFS Pull - run: git lfs pull - if: steps.lfs-cache.outputs.cache-hit != 'true' - - - name: Git LFS Checkout - run: git lfs checkout - if: steps.lfs-cache.outputs.cache-hit == 'true' - - - name: Install dependencies Linux - run: | - sudo apt-get -y update - sudo apt-get -y install wget binutils make perl libx11-6 libx11-dev zlib1g zlib1g-dev tcsh - shell: bash + uses: actions/checkout@v4 - - uses: actions/cache@v3 - id: cache + - name: Install MESA on ${{ runner.os }} with SDK ${{matrix.sdk}} + uses: ./.github/actions/install-mesa with: - path: | - mesasdk-x86_64-linux-${{matrix.sdk}}.tar.gz - key: ${{ runner.os }}-${{matrix.sdk}} - - - - name: Get SDK ${{ runner.os }} '21.4.1' - if: ${{ (steps.cache.outputs.cache-hit != 'true') && ( matrix.sdk == '21.4.1') }} - run: | - wget -q https://zenodo.org/record/5802444/files/mesasdk-x86_64-linux-21.4.1.tar.gz - shell: bash - - - name: Get SDK ${{ runner.os }} '22.6.1' - if: ${{ (steps.cache.outputs.cache-hit != 'true') && ( matrix.sdk == '22.6.1') }} - run: | - wget -q https://zenodo.org/record/7457681/files/mesasdk-x86_64-linux-22.6.1.tar.gz - shell: bash - - - name: Get SDK ${{ runner.os }} '23.7.3' - if: ${{ (steps.cache.outputs.cache-hit != 'true') && ( matrix.sdk == '23.7.3') }} - run: | - wget -q https://zenodo.org/record/10624843/files/mesasdk-x86_64-linux-23.7.3.tar.gz - shell: bash - - - name: Unpack SDK ${{ runner.os }} ${{matrix.sdk}} - run: | - tar xvf mesasdk-x86_64-linux-${{matrix.sdk}}.tar.gz - shell: bash - - - name: Compile - shell: bash - run: | - # Linux runners have 4 cores - # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories - export OMP_NUM_THREADS=4 - export NPROCS=4 - export "MESASDK_ROOT=$(readlink -f mesasdk)" - source "${MESASDK_ROOT}/bin/mesasdk_init.sh" - export "MESA_DIR=$(readlink -f ./)" - # Everything is run as root so we need to disable the root check in the install script - sed -i 's/\${EUID:-\$(id -u)}/1/' install - # Turn off caching during build to save more space - sed -i 's/use_cache_for_eos = .true./use_cache_for_eos = .false./g' $MESA_DIR/eos/public/eos_def.f90 - sed -i 's/use_cache = .true./use_cache = .false./g' $MESA_DIR/star/private/star_private_def.f90 - ./install - if [ ! -f lib/libbinary.a ]; then - exit 1 - fi + sdk: ${{matrix.sdk}} diff --git a/.github/workflows/test-mesa.yml b/.github/workflows/test-mesa.yml new file mode 100644 index 000000000..f5ed09c6d --- /dev/null +++ b/.github/workflows/test-mesa.yml @@ -0,0 +1,108 @@ +name: Test Mesa + +on: [workflow_dispatch, release] + +jobs: + test_mesa: + environment: gh-action-testhub + strategy: + fail-fast: false + + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref }} + + - name: Print git hash + run: | + cd $GITHUB_WORKSPACE + pwd + git branch + git log --pretty=format:'%h' -n 1 + shell: bash + + - name: Install MESA on ${{ runner.os }} with SDK 24.7.1 + uses: ./.github/actions/install-mesa + with: + sdk: "24.7.1" + + - name: Checkout mesa_test + uses: actions/checkout@v4 + with: + repository: MESAHub/mesa_test + path: mesa_test # Store in $GITHUB_WORKSPACE/mesa_test + + - name: Install mesa_test + run: | + cd $GITHUB_WORKSPACE/mesa_test + sudo gem install mesa_test + cd $GITHUB_WORKSPACE + mkdir /home/runner/.mesa_test + shell: bash + + - name: Create mesa_test config file + env: + OMP_NUM_THREADS: ${{env.OMP_NUM_THREADS}} + NPROCS: ${{env.NPROCS}} + MESASDK_ROOT: ${{env.MESASDK_ROOT}} + MESA_DIR: ${{env.MESA_DIR}} + run: | + MESA_TEST_YML=/home/runner/.mesa_test/config.yml + echo "---" > $MESA_TEST_YML + echo "computer_name: GitHub_Runner" >> $MESA_TEST_YML + echo "email: ${{ secrets.MESA_TEST_EMAIL }}" >> $MESA_TEST_YML + echo "password: ${{ secrets.MESA_TEST_PASSWORD }}" >> $MESA_TEST_YML + echo "logs_token: ${{ secrets.MESA_TEST_LOGS_TOKEN }}" >> $MESA_TEST_YML + echo "github_protocol: :ssh" >> $MESA_TEST_YML + echo "mesa_mirror: $GITHUB_WORKSPACE/mirror" >> $MESA_TEST_YML + echo "mesa_work: $GITHUB_WORKSPACE" >> $MESA_TEST_YML + echo "platform: Linux" >> $MESA_TEST_YML + echo "platform_version: Ubuntu" >> $MESA_TEST_YML + shell: bash + + - name: Test Problem 13 + env: + OMP_NUM_THREADS: ${{env.OMP_NUM_THREADS}} + NPROCS: ${{env.NPROCS}} + MESASDK_ROOT: ${{env.MESASDK_ROOT}} + MESA_DIR: ${{env.MESA_DIR}} + run: | + source "${MESASDK_ROOT}/bin/mesasdk_init.sh" + mesa_test test 13 + shell: bash + + - name: Test Problem 15 + env: + OMP_NUM_THREADS: ${{env.OMP_NUM_THREADS}} + NPROCS: ${{env.NPROCS}} + MESASDK_ROOT: ${{env.MESASDK_ROOT}} + MESA_DIR: ${{env.MESA_DIR}} + run: | + source "${MESASDK_ROOT}/bin/mesasdk_init.sh" + mesa_test test 15 + shell: bash + + - name: Test Problem 29 + env: + OMP_NUM_THREADS: ${{env.OMP_NUM_THREADS}} + NPROCS: ${{env.NPROCS}} + MESASDK_ROOT: ${{env.MESASDK_ROOT}} + MESA_DIR: ${{env.MESA_DIR}} + run: | + source "${MESASDK_ROOT}/bin/mesasdk_init.sh" + mesa_test test 29 + shell: bash + + - name: Test Problem 41 + env: + OMP_NUM_THREADS: ${{env.OMP_NUM_THREADS}} + NPROCS: ${{env.NPROCS}} + MESASDK_ROOT: ${{env.MESASDK_ROOT}} + MESA_DIR: ${{env.MESA_DIR}} + run: | + source "${MESASDK_ROOT}/bin/mesasdk_init.sh" + mesa_test test 41 + shell: bash