forked from libprima/prima
-
Notifications
You must be signed in to change notification settings - Fork 0
141 lines (118 loc) · 5.5 KB
/
lint_hosted.yml
File metadata and controls
141 lines (118 loc) · 5.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
name: Lint the Fortran code and the MEX gateways on GitHub hosted runners
on:
# Trigger the workflow on push or pull request
#push:
#pull_request: # DANGEROUS! MUST be disabled for self-hosted runners!
# Trigger the workflow by cron. The default time zone of GitHub Actions is UTC.
schedule:
- cron: '0 17 * * *'
# Trigger the workflow manually
workflow_dispatch:
inputs:
git-ref:
description: Git Ref (Optional)
required: false
# Show the git ref in the workflow name if it is invoked manually.
run-name: ${{ github.event_name == 'workflow_dispatch' && format('Manual run {0}', inputs.git-ref) || '' }}
jobs:
test:
name: Lint the Fortran code
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
linter: [flint, mlint]
solver: [newuoa, cobyla, lincoa, bobyqa, uobyqa]
steps:
- name: Run `sudo apt update`
run: sudo apt update || true # Otherwise, free-disk-space or other actions relying on `apt` may fail
- name: Free disk space
uses: jlumbroso/free-disk-space@main
with:
# all of these default to true, but feel free to set to "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: false # Important, or the runner may be shut down due to memory starvation.
- name: Clone Repository (Latest)
uses: actions/checkout@v6.0.2
if: github.event.inputs.git-ref == ''
with:
ssh-key: ${{ secrets.SSH_PRIVATE_KEY_ACT }} # This forces checkout to use SSH, not HTTPS
submodules: recursive
- name: Clone Repository (Custom Ref)
uses: actions/checkout@v6.0.2
if: github.event.inputs.git-ref != ''
with:
ref: ${{ github.event.inputs.git-ref }}
ssh-key: ${{ secrets.SSH_PRIVATE_KEY_ACT }} # This forces checkout to use SSH, not HTTPS
submodules: recursive
- name: Miscellaneous setup
run: export SWAP_SIZE=20 && bash .github/scripts/misc_setup
- name: Set up MATLAB
id: set-up-matlab
if: ${{ matrix.linter == 'mlint' }}
uses: matlab-actions/setup-matlab@v2.6.1
with:
release: latest
cache: false # We should not cache MATLAB; otherwise, an empty directory will be cached since we remove $MATLABROOT in the next step
products: Parallel_Computing_Toolbox
- name: Get fintrf.h and remove MATLAB
if: ${{ matrix.linter == 'mlint' }}
run: |
MATLABROOT=${{steps.set-up-matlab.outputs.matlabroot}}
# fintrf.h must be located under a directory "extern/include/", or mlint cannot find it.
mkdir -p ~/extern/include/
cp "$MATLABROOT"/extern/include/fintrf.h ~/extern/include/ || exit 2
sudo chmod 777 ~/extern/include/fintrf.h || exit 3
# Remove MATLAB, or the runner will run out of space.
sudo rm -rf "$MATLABROOT"/* || exit 4
# mlint uses `locate` to find fintrf.h
sudo apt update || true
sudo apt install plocate -y && sudo updatedb
locate '/extern/include/fintrf.h' || exit 5
- name: Install AOCC
run: bash .github/scripts/install_aocc
- name: Install AOMP
# Retry in case of failure due to transient network issues. If the installation still fails
# after all retries, we let it fail silently and continue with the test. This is fine since
# there are many tests with other compilers, and since the AOMP compiler is tested in
# test_aflang.html. If we try too many times, there may not be enough time left for the test
# to run anyway!
run: bash .github/scripts/install_aomp 3 1800 || true
- name: Install gfortran
uses: fortran-lang/setup-fortran@main
id: setup-fortran
with:
compiler: gcc
version: latest
- name: Install Intel oneAPI
run: bash .github/scripts/install_oneapi_linux.sh
- name: Install g95
run: bash .github/scripts/install_g95
- name: Install nvfortran
run: bash .github/scripts/install_nvfortran
- name: Install Oracle sunf95
run: bash .github/scripts/install_sunf95
- name: Install Flang
run: bash .github/scripts/install_llvm
- name: Conduct the test
# Check the compilers before the test. We continue with the test even if some compilers
# are not found successfully due to unsuccessful installation that were let unresolved in
# the previous steps, e.g., installation of AOMP. This is fine since there are many tests
# with other compilers, and since there is a dedicated workflow to test each compiler.
run: |
type aoccflang && aoccflang --version || true # AOCC Flang, known as "aoccflang" after install_aocc, to be distinguished from LLVM Flang
type amdflang && amdflang --version || true
type flang && flang --version || true
type g95 && g95 --version || true
type gfortran && gfortran --version || true
type ifx && ifx --version || true
type nvfortran && nvfortran --version || true
type sunf95 && sunf95 -V || true
cd "$ROOT_DIR"/fortran/${{ matrix.solver }} && bash ./${{ matrix.linter }} --all
- name: Remove the test data
if: always() # Always run even if the workflow is canceled manually or due to overtime.
run: rm -rf ${{ env.TEST_DIR }}