diff --git a/.github/actions/test-cc/action.yml b/.github/actions/test-cc/action.yml index 0c58f142..bb930ed0 100644 --- a/.github/actions/test-cc/action.yml +++ b/.github/actions/test-cc/action.yml @@ -30,6 +30,7 @@ runs: [[ "$ccv" == ${{ inputs.version }}* ]] && (echo "found ${{ env.CC }} version: $ccv") || (echo "unexpected ${{ env.CC }} version: $ccv"; exit 1) - name: Test compile (bash) + working-directory: test shell: bash run: | ${{ env.CC }} -o hw hw.c diff --git a/.github/actions/test-cxx/action.yml b/.github/actions/test-cxx/action.yml index 76f20f1c..f7b3ae71 100644 --- a/.github/actions/test-cxx/action.yml +++ b/.github/actions/test-cxx/action.yml @@ -30,6 +30,7 @@ runs: [[ "$cxxv" == ${{ matrix.toolchain.version }}* ]] && (echo "found ${{ env.CXX }} version: $cxxv") || (echo "unexpected ${{ env.CXX }} version: $cxxv"; exit 1) - name: Test compile (bash) + working-directory: test shell: bash run: | ${{ env.CXX }} -o hw hw.cpp diff --git a/.github/actions/test-fc/action.yml b/.github/actions/test-fc/action.yml index 33df26df..6c1a5969 100644 --- a/.github/actions/test-fc/action.yml +++ b/.github/actions/test-fc/action.yml @@ -30,6 +30,7 @@ runs: [[ "$fcv" == ${{ inputs.version }}* ]] && (echo "found ${{ env.FC }} version: $fcv") || (echo "unexpected ${{ env.FC }} version: $fcv"; exit 1) - name: Test compile (bash) + working-directory: test shell: bash run: | # macos-13/gfortran 7-9 compatibility workaround @@ -42,13 +43,15 @@ runs: args="-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib" fi fi - + + # hello world program ${{ env.FC }} $args -o hw hw.f90 output=$(./hw '2>&1') - [[ "$output" == *"hello world"* ]] && echo "$output" || (echo "Unexpected Fortran program output: $output"; exit 1) + [[ "$output" == *"hello world"* ]] && echo "$output" || (echo "Unexpected Fortran program 'hw' output: $output"; exit 1) rm hw - name: Test compile Fortran (pwsh) + working-directory: test if: ${{ (success() || failure()) && runner.os == 'Windows' }} shell: pwsh run: | @@ -63,6 +66,7 @@ runs: rm hw.exe - name: Test compile Fortran (powershell) + working-directory: test if: ${{ (success() || failure()) && runner.os == 'Windows' }} shell: powershell run: | @@ -77,6 +81,7 @@ runs: rm hw.exe - name: Test compile Fortran (cmd) + working-directory: test if: ${{ (success() || failure()) && runner.os == 'Windows' }} shell: cmd run: | diff --git a/.github/compat/compat.csv b/.github/compat/compat.csv new file mode 100644 index 00000000..a04edb67 --- /dev/null +++ b/.github/compat/compat.csv @@ -0,0 +1,10 @@ +compiler,gcc,gcc,gcc,gcc,gcc,gcc,gcc,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel,intel,intel,intel,intel,intel,intel,intel,intel,intel,intel,nvidia-hpc,nvidia-hpc,nvidia-hpc,nvidia-hpc,nvidia-hpc,nvidia-hpc,nvidia-hpc,nvidia-hpc,nvidia-hpc +version,10,11,12,13,7,8,9,2021.1,2021.10,2021.2,2021.3,2021.4,2021.5,2021.6,2021.7.1,2021.7,2021.8,2021.9,2021.1.2,2021.1.2,2021.1,2021.2,2021.4,2022.0,2022.1,2022.2.1,2022.2,2023.0,2023.1,2023.2,20.11,21.11,22.1,22.11,23.11,23.3,23.5,23.7,23.9 +runner,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +macos-11,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,,,,,,,,,,,,,,,,,,,,, +macos-12,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,,,,,,,,,,,,,,,,,,,,, +macos-13,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,,,,,,,,,,,,,,,,,,,,, +ubuntu-20.04,✓,✓,,✓,✓,✓,✓,✓,✓,✓,,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓ +ubuntu-22.04,✓,✓,✓,✓,,,✓,✓,✓,✓,,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓ +windows-2019,✓,✓,✓,✓,,✓,✓,,✓,,,,,✓,,✓,✓,✓,,,,,,,✓,,✓,✓,✓,✓,,,,,,,,, +windows-2022,✓,✓,✓,✓,,✓,✓,,✓,,,,,✓,,✓,✓,✓,,,,,,,✓,,✓,✓,✓,✓,,,,,,,,, diff --git a/.github/compat/long_compat.csv b/.github/compat/long_compat.csv new file mode 100644 index 00000000..93113538 --- /dev/null +++ b/.github/compat/long_compat.csv @@ -0,0 +1,209 @@ +runner,compiler,version,support +macos-11,gcc,10,✓ +macos-11,gcc,11,✓ +macos-11,gcc,12,✓ +macos-11,gcc,13,✓ +macos-11,gcc,6, +macos-11,gcc,7,✓ +macos-11,gcc,8,✓ +macos-11,gcc,9,✓ +macos-11,intel-classic,2021.1.2, +macos-11,intel-classic,2021.1,✓ +macos-11,intel-classic,2021.10,✓ +macos-11,intel-classic,2021.2,✓ +macos-11,intel-classic,2021.3,✓ +macos-11,intel-classic,2021.4,✓ +macos-11,intel-classic,2021.5,✓ +macos-11,intel-classic,2021.6,✓ +macos-11,intel-classic,2021.7.1,✓ +macos-11,intel-classic,2021.7,✓ +macos-11,intel-classic,2021.8,✓ +macos-11,intel-classic,2021.9,✓ +macos-12,gcc,10,✓ +macos-12,gcc,11,✓ +macos-12,gcc,12,✓ +macos-12,gcc,13,✓ +macos-12,gcc,6, +macos-12,gcc,7,✓ +macos-12,gcc,8,✓ +macos-12,gcc,9,✓ +macos-12,intel-classic,2021.1.2, +macos-12,intel-classic,2021.1,✓ +macos-12,intel-classic,2021.10,✓ +macos-12,intel-classic,2021.2,✓ +macos-12,intel-classic,2021.3,✓ +macos-12,intel-classic,2021.4,✓ +macos-12,intel-classic,2021.5,✓ +macos-12,intel-classic,2021.6,✓ +macos-12,intel-classic,2021.7.1,✓ +macos-12,intel-classic,2021.7,✓ +macos-12,intel-classic,2021.8,✓ +macos-12,intel-classic,2021.9,✓ +macos-13,gcc,10,✓ +macos-13,gcc,11,✓ +macos-13,gcc,12,✓ +macos-13,gcc,13,✓ +macos-13,gcc,6, +macos-13,gcc,7,✓ +macos-13,gcc,8,✓ +macos-13,gcc,9,✓ +macos-13,intel-classic,2021.1.2, +macos-13,intel-classic,2021.1,✓ +macos-13,intel-classic,2021.10,✓ +macos-13,intel-classic,2021.2,✓ +macos-13,intel-classic,2021.3,✓ +macos-13,intel-classic,2021.4,✓ +macos-13,intel-classic,2021.5,✓ +macos-13,intel-classic,2021.6,✓ +macos-13,intel-classic,2021.7.1,✓ +macos-13,intel-classic,2021.7,✓ +macos-13,intel-classic,2021.8,✓ +macos-13,intel-classic,2021.9,✓ +ubuntu-20.04,gcc,10,✓ +ubuntu-20.04,gcc,11,✓ +ubuntu-20.04,gcc,12, +ubuntu-20.04,gcc,13,✓ +ubuntu-20.04,gcc,6, +ubuntu-20.04,gcc,7,✓ +ubuntu-20.04,gcc,8,✓ +ubuntu-20.04,gcc,9,✓ +ubuntu-20.04,intel-classic,2021.1.2,✓ +ubuntu-20.04,intel-classic,2021.1,✓ +ubuntu-20.04,intel-classic,2021.10,✓ +ubuntu-20.04,intel-classic,2021.2,✓ +ubuntu-20.04,intel-classic,2021.3, +ubuntu-20.04,intel-classic,2021.4,✓ +ubuntu-20.04,intel-classic,2021.5,✓ +ubuntu-20.04,intel-classic,2021.6,✓ +ubuntu-20.04,intel-classic,2021.7.1,✓ +ubuntu-20.04,intel-classic,2021.7,✓ +ubuntu-20.04,intel-classic,2021.8,✓ +ubuntu-20.04,intel-classic,2021.9,✓ +ubuntu-20.04,intel,2021.1.2,✓ +ubuntu-20.04,intel,2021.1,✓ +ubuntu-20.04,intel,2021.2,✓ +ubuntu-20.04,intel,2021.4,✓ +ubuntu-20.04,intel,2022.0,✓ +ubuntu-20.04,intel,2022.1,✓ +ubuntu-20.04,intel,2022.2.1,✓ +ubuntu-20.04,intel,2022.2,✓ +ubuntu-20.04,intel,2023.0,✓ +ubuntu-20.04,intel,2023.1,✓ +ubuntu-20.04,intel,2023.2,✓ +ubuntu-20.04,nvidia-hpc,20.11,✓ +ubuntu-20.04,nvidia-hpc,20.7, +ubuntu-20.04,nvidia-hpc,20.9, +ubuntu-20.04,nvidia-hpc,21.1, +ubuntu-20.04,nvidia-hpc,21.11,✓ +ubuntu-20.04,nvidia-hpc,22.1,✓ +ubuntu-20.04,nvidia-hpc,22.11,✓ +ubuntu-20.04,nvidia-hpc,23.11,✓ +ubuntu-20.04,nvidia-hpc,23.3,✓ +ubuntu-20.04,nvidia-hpc,23.5,✓ +ubuntu-20.04,nvidia-hpc,23.7,✓ +ubuntu-20.04,nvidia-hpc,23.9,✓ +ubuntu-22.04,gcc,10,✓ +ubuntu-22.04,gcc,11,✓ +ubuntu-22.04,gcc,12,✓ +ubuntu-22.04,gcc,13,✓ +ubuntu-22.04,gcc,6, +ubuntu-22.04,gcc,7, +ubuntu-22.04,gcc,8, +ubuntu-22.04,gcc,9,✓ +ubuntu-22.04,intel-classic,2021.1.2,✓ +ubuntu-22.04,intel-classic,2021.1,✓ +ubuntu-22.04,intel-classic,2021.10,✓ +ubuntu-22.04,intel-classic,2021.2,✓ +ubuntu-22.04,intel-classic,2021.3, +ubuntu-22.04,intel-classic,2021.4,✓ +ubuntu-22.04,intel-classic,2021.5,✓ +ubuntu-22.04,intel-classic,2021.6,✓ +ubuntu-22.04,intel-classic,2021.7.1,✓ +ubuntu-22.04,intel-classic,2021.7,✓ +ubuntu-22.04,intel-classic,2021.8,✓ +ubuntu-22.04,intel-classic,2021.9,✓ +ubuntu-22.04,intel,2021.1.2,✓ +ubuntu-22.04,intel,2021.1,✓ +ubuntu-22.04,intel,2021.2,✓ +ubuntu-22.04,intel,2021.4,✓ +ubuntu-22.04,intel,2022.0,✓ +ubuntu-22.04,intel,2022.1,✓ +ubuntu-22.04,intel,2022.2.1,✓ +ubuntu-22.04,intel,2022.2,✓ +ubuntu-22.04,intel,2023.0,✓ +ubuntu-22.04,intel,2023.1,✓ +ubuntu-22.04,intel,2023.2,✓ +ubuntu-22.04,nvidia-hpc,20.11,✓ +ubuntu-22.04,nvidia-hpc,20.7, +ubuntu-22.04,nvidia-hpc,20.9, +ubuntu-22.04,nvidia-hpc,21.1, +ubuntu-22.04,nvidia-hpc,21.11,✓ +ubuntu-22.04,nvidia-hpc,22.1,✓ +ubuntu-22.04,nvidia-hpc,22.11,✓ +ubuntu-22.04,nvidia-hpc,23.11,✓ +ubuntu-22.04,nvidia-hpc,23.3,✓ +ubuntu-22.04,nvidia-hpc,23.5,✓ +ubuntu-22.04,nvidia-hpc,23.7,✓ +ubuntu-22.04,nvidia-hpc,23.9,✓ +windows-2019,gcc,10,✓ +windows-2019,gcc,11,✓ +windows-2019,gcc,12,✓ +windows-2019,gcc,13,✓ +windows-2019,gcc,6, +windows-2019,gcc,7, +windows-2019,gcc,8,✓ +windows-2019,gcc,9,✓ +windows-2019,intel-classic,2021.1.2, +windows-2019,intel-classic,2021.1, +windows-2019,intel-classic,2021.10,✓ +windows-2019,intel-classic,2021.2, +windows-2019,intel-classic,2021.3, +windows-2019,intel-classic,2021.4, +windows-2019,intel-classic,2021.5, +windows-2019,intel-classic,2021.6,✓ +windows-2019,intel-classic,2021.7.1, +windows-2019,intel-classic,2021.7,✓ +windows-2019,intel-classic,2021.8,✓ +windows-2019,intel-classic,2021.9,✓ +windows-2019,intel,2021.1.2, +windows-2019,intel,2021.1, +windows-2019,intel,2021.2, +windows-2019,intel,2021.4, +windows-2019,intel,2022.0, +windows-2019,intel,2022.1,✓ +windows-2019,intel,2022.2.1, +windows-2019,intel,2022.2,✓ +windows-2019,intel,2023.0,✓ +windows-2019,intel,2023.1,✓ +windows-2019,intel,2023.2,✓ +windows-2022,gcc,10,✓ +windows-2022,gcc,11,✓ +windows-2022,gcc,12,✓ +windows-2022,gcc,13,✓ +windows-2022,gcc,6, +windows-2022,gcc,7, +windows-2022,gcc,8,✓ +windows-2022,gcc,9,✓ +windows-2022,intel-classic,2021.1.2, +windows-2022,intel-classic,2021.1, +windows-2022,intel-classic,2021.10,✓ +windows-2022,intel-classic,2021.2, +windows-2022,intel-classic,2021.3, +windows-2022,intel-classic,2021.4, +windows-2022,intel-classic,2021.5, +windows-2022,intel-classic,2021.6,✓ +windows-2022,intel-classic,2021.7.1, +windows-2022,intel-classic,2021.7,✓ +windows-2022,intel-classic,2021.8,✓ +windows-2022,intel-classic,2021.9,✓ +windows-2022,intel,2021.1.2, +windows-2022,intel,2021.1, +windows-2022,intel,2021.2, +windows-2022,intel,2021.4, +windows-2022,intel,2022.0, +windows-2022,intel,2022.1,✓ +windows-2022,intel,2022.2.1, +windows-2022,intel,2022.2,✓ +windows-2022,intel,2023.0,✓ +windows-2022,intel,2023.1,✓ +windows-2022,intel,2023.2,✓ diff --git a/.github/compat/matrix.yml b/.github/compat/matrix.yml new file mode 100644 index 00000000..63fdf1bc --- /dev/null +++ b/.github/compat/matrix.yml @@ -0,0 +1,83 @@ +os: + - ubuntu-22.04 + - ubuntu-20.04 + - macos-13 + - macos-12 + - macos-11 + - windows-2022 + - windows-2019 +toolchain: + - {compiler: gcc, version: 13} + - {compiler: gcc, version: 12} + - {compiler: gcc, version: 11} + - {compiler: gcc, version: 10} + - {compiler: gcc, version: 9} + - {compiler: gcc, version: 8} + - {compiler: gcc, version: 7} + - {compiler: gcc, version: 6} + - {compiler: intel, version: '2023.2'} + - {compiler: intel, version: '2023.1'} + - {compiler: intel, version: '2023.0'} + - {compiler: intel, version: '2022.2.1'} + - {compiler: intel, version: '2022.2'} + - {compiler: intel, version: '2022.1'} + - {compiler: intel, version: '2022.0'} + - {compiler: intel, version: '2021.4'} + - {compiler: intel, version: '2021.2'} + - {compiler: intel, version: '2021.1.2'} + - {compiler: intel, version: '2021.1'} + - {compiler: intel-classic, version: '2021.10'} + - {compiler: intel-classic, version: '2021.9'} + - {compiler: intel-classic, version: '2021.8'} + - {compiler: intel-classic, version: '2021.7.1'} + - {compiler: intel-classic, version: '2021.7'} + - {compiler: intel-classic, version: '2021.6'} + - {compiler: intel-classic, version: '2021.5'} + - {compiler: intel-classic, version: '2021.4'} + - {compiler: intel-classic, version: '2021.3'} + - {compiler: intel-classic, version: '2021.2'} + - {compiler: intel-classic, version: '2021.1.2'} + - {compiler: intel-classic, version: '2021.1'} + - {compiler: nvidia-hpc, version: '23.11'} + - {compiler: nvidia-hpc, version: '23.9'} + - {compiler: nvidia-hpc, version: '23.7'} + - {compiler: nvidia-hpc, version: '23.5'} + - {compiler: nvidia-hpc, version: '23.3'} + - {compiler: nvidia-hpc, version: '23.1'} + - {compiler: nvidia-hpc, version: '22.11'} + - {compiler: nvidia-hpc, version: '22.9'} + - {compiler: nvidia-hpc, version: '22.7'} + - {compiler: nvidia-hpc, version: '22.5'} + - {compiler: nvidia-hpc, version: '22.3'} + - {compiler: nvidia-hpc, version: '22.2'} + - {compiler: nvidia-hpc, version: '22.1'} + - {compiler: nvidia-hpc, version: '21.11'} + - {compiler: nvidia-hpc, version: '21.9'} + - {compiler: nvidia-hpc, version: '21.7'} + - {compiler: nvidia-hpc, version: '21.5'} + - {compiler: nvidia-hpc, version: '21.3'} + - {compiler: nvidia-hpc, version: '21.2'} + - {compiler: nvidia-hpc, version: '21.1'} + - {compiler: nvidia-hpc, version: '20.11'} + - {compiler: nvidia-hpc, version: '20.9'} + - {compiler: nvidia-hpc, version: '20.7'} +exclude: + # ifx not available for mac + - os: macos-13 + toolchain: {compiler: intel} + - os: macos-12 + toolchain: {compiler: intel} + - os: macos-11 + toolchain: {compiler: intel} + # nvidia-hpc not available for mac + - os: macos-13 + toolchain: {compiler: nvidia-hpc} + - os: macos-12 + toolchain: {compiler: nvidia-hpc} + - os: macos-11 + toolchain: {compiler: nvidia-hpc} + # nvidia-hpc not available for windows + - os: windows-2022 + toolchain: {compiler: nvidia-hpc} + - os: windows-2019 + toolchain: {compiler: nvidia-hpc} \ No newline at end of file diff --git a/.github/compat/matrix_json_from_csv.py b/.github/compat/matrix_json_from_csv.py new file mode 100644 index 00000000..da1485c8 --- /dev/null +++ b/.github/compat/matrix_json_from_csv.py @@ -0,0 +1,24 @@ +import csv +import json +import sys +from pathlib import Path + +csv_path = Path(sys.argv[1]) # path to CSV file +jsn_path = Path(sys.argv[2]) # path to JSON file + +include = [] + +with open(csv_path, "r") as csv_file: + reader = csv.DictReader(csv_file) + for row in reader: + if not any(row["support"].strip()): + continue + include.append( + { + "os": row["runner"], + "toolchain": {"compiler": row["compiler"], "version": row["version"]}, + } + ) + +with open(jsn_path, "w") as jsn_file: + json.dump({"include": include}, jsn_file) diff --git a/update_compat_table.py b/.github/compat/update_compat_table.py similarity index 87% rename from update_compat_table.py rename to .github/compat/update_compat_table.py index a5501e18..3b1a07b6 100644 --- a/update_compat_table.py +++ b/.github/compat/update_compat_table.py @@ -19,6 +19,6 @@ r".*", re.DOTALL, ) - ct = '{}'.format('\n{}\n'.format(table)) + ct = "{}".format("\n{}\n".format(table)) readme = update_path.open().read() update_path.open("w").write(r.sub(ct, readme)) diff --git a/wide_compat_reports.py b/.github/compat/wide_compat_reports.py similarity index 97% rename from wide_compat_reports.py rename to .github/compat/wide_compat_reports.py index fb663f40..97b495f0 100644 --- a/wide_compat_reports.py +++ b/.github/compat/wide_compat_reports.py @@ -23,7 +23,7 @@ columns=["compiler", "version"], values="support", sort=False, - aggfunc="first" + aggfunc="first", ).sort_values(by=["runner"]) # write wide CSV diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b778fae5..24d806a8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,5 +1,7 @@ name: Test - +# Workflow has two modes: assert and report +# Push and pull request run in assert mode. +# Schedule and dispatch run in report mode. on: push: paths-ignore: @@ -11,182 +13,60 @@ on: paths-ignore: - '**.md' schedule: - - cron: '0 0 1 * *' - + - cron: '0 0 * * 0' + workflow_dispatch: jobs: - test_latest: - name: Test latest versions - if: github.event_name != 'schedule' - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: - - ubuntu-22.04 - - ubuntu-20.04 - - macos-13 - - macos-12 - - macos-11 - - windows-2022 - - windows-2019 - toolchain: - - {compiler: gcc, version: 13} - - {compiler: intel, version: '2023.2'} - - {compiler: intel-classic, version: '2021.10'} - - {compiler: nvidia-hpc, version: '23.11'} - exclude: - # ifx not available for mac - - os: macos-13 - toolchain: {compiler: intel} - - os: macos-12 - toolchain: {compiler: intel} - - os: macos-11 - toolchain: {compiler: intel} - # nvidia-hpc not available for mac - - os: macos-13 - toolchain: {compiler: nvidia-hpc} - - os: macos-12 - toolchain: {compiler: nvidia-hpc} - - os: macos-11 - toolchain: {compiler: nvidia-hpc} - # nvidia-hpc not available for windows - - os: windows-2022 - toolchain: {compiler: nvidia-hpc} - - os: windows-2019 - toolchain: {compiler: nvidia-hpc} - + options: + name: Set options + runs-on: ubuntu-latest + outputs: + mode: ${{ steps.mode.outputs.mode }} + matrix: ${{ steps.matrix.outputs.matrix }} steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Setup Fortran - id: setup-fortran - continue-on-error: true - uses: ./ - with: - compiler: ${{ matrix.toolchain.compiler }} - version: ${{ matrix.toolchain.version }} + - name: Set mode + id: mode + run: | + if [[ "$trigger" == "schedule" ]] || [[ "$trigger" == "workflow_dispatch" ]]; then + echo "mode=report" >> "$GITHUB_OUTPUT" + else + echo "mode=assert" >> "$GITHUB_OUTPUT" + fi - - name: Test Fortran compiler - if: steps.setup-fortran.outcome == 'success' - uses: ./.github/actions/test-fc - with: - compiler: ${{ matrix.toolchain.compiler }} - version: ${{ matrix.toolchain.version }} - - - name: Test C compiler - continue-on-error: true - if: steps.setup-fortran.outcome == 'success' - uses: ./.github/actions/test-cc - with: - compiler: ${{ matrix.toolchain.compiler }} - version: ${{ matrix.toolchain.version }} - - - name: Test C++ compiler - continue-on-error: true - if: steps.setup-fortran.outcome == 'success' - uses: ./.github/actions/test-cxx - with: - compiler: ${{ matrix.toolchain.compiler }} - version: ${{ matrix.toolchain.version }} - - test_full: - name: Full compatibility test - if: github.event_name == 'schedule' + - name: Set matrix + working-directory: .github/compat + id: matrix + run: | + mode=${{ steps.mode.outputs.mode }} + if [[ "$mode" == "report" ]]; then + yq -o json matrix.yml > matrix.json + else + python matrix_json_from_csv.py "long_compat.csv" "matrix.json" + fi + matrix=$(cat matrix.json | jq -r tostring) + echo "matrix=$matrix" >> "$GITHUB_OUTPUT" + + # debugging + - name: Show matrix + run: echo "${{ toJSON(fromJSON(steps.matrix.outputs.matrix)) }}" + + test: + name: Test + needs: options runs-on: ${{ matrix.os }} + continue-on-error: ${{ needs.options.outputs.mode == 'report' }} strategy: fail-fast: false - matrix: - os: - - ubuntu-22.04 - - ubuntu-20.04 - - macos-13 - - macos-12 - - macos-11 - - windows-2022 - - windows-2019 - toolchain: - - {compiler: gcc, version: 13} - - {compiler: gcc, version: 12} - - {compiler: gcc, version: 11} - - {compiler: gcc, version: 10} - - {compiler: gcc, version: 9} - - {compiler: gcc, version: 8} - - {compiler: gcc, version: 7} - - {compiler: gcc, version: 6} - - {compiler: intel, version: '2023.2'} - - {compiler: intel, version: '2023.1'} - - {compiler: intel, version: '2023.0'} - - {compiler: intel, version: '2022.2.1'} - - {compiler: intel, version: '2022.2'} - - {compiler: intel, version: '2022.1'} - - {compiler: intel, version: '2022.0'} - - {compiler: intel, version: '2021.4'} - - {compiler: intel, version: '2021.2'} - - {compiler: intel, version: '2021.1.2'} - - {compiler: intel, version: '2021.1'} - - {compiler: intel-classic, version: '2021.10'} - - {compiler: intel-classic, version: '2021.9'} - - {compiler: intel-classic, version: '2021.8'} - - {compiler: intel-classic, version: '2021.7.1'} - - {compiler: intel-classic, version: '2021.7'} - - {compiler: intel-classic, version: '2021.6'} - - {compiler: intel-classic, version: '2021.5'} - - {compiler: intel-classic, version: '2021.4'} - - {compiler: intel-classic, version: '2021.3'} - - {compiler: intel-classic, version: '2021.2'} - - {compiler: intel-classic, version: '2021.1.2'} - - {compiler: intel-classic, version: '2021.1'} - - {compiler: nvidia-hpc, version: '23.11'} - - {compiler: nvidia-hpc, version: '23.9'} - - {compiler: nvidia-hpc, version: '23.7'} - - {compiler: nvidia-hpc, version: '23.5'} - - {compiler: nvidia-hpc, version: '23.3'} - - {compiler: nvidia-hpc, version: '23.1'} - - {compiler: nvidia-hpc, version: '22.11'} - - {compiler: nvidia-hpc, version: '22.9'} - - {compiler: nvidia-hpc, version: '22.7'} - - {compiler: nvidia-hpc, version: '22.5'} - - {compiler: nvidia-hpc, version: '22.3'} - - {compiler: nvidia-hpc, version: '22.2'} - - {compiler: nvidia-hpc, version: '22.1'} - - {compiler: nvidia-hpc, version: '21.11'} - - {compiler: nvidia-hpc, version: '21.9'} - - {compiler: nvidia-hpc, version: '21.7'} - - {compiler: nvidia-hpc, version: '21.5'} - - {compiler: nvidia-hpc, version: '21.3'} - - {compiler: nvidia-hpc, version: '21.2'} - - {compiler: nvidia-hpc, version: '21.1'} - - {compiler: nvidia-hpc, version: '20.11'} - - {compiler: nvidia-hpc, version: '20.9'} - - {compiler: nvidia-hpc, version: '20.7'} - exclude: - # ifx not available for mac - - os: macos-13 - toolchain: {compiler: intel} - - os: macos-12 - toolchain: {compiler: intel} - - os: macos-11 - toolchain: {compiler: intel} - # nvidia-hpc not available for mac - - os: macos-13 - toolchain: {compiler: nvidia-hpc} - - os: macos-12 - toolchain: {compiler: nvidia-hpc} - - os: macos-11 - toolchain: {compiler: nvidia-hpc} - # nvidia-hpc not available for windows - - os: windows-2022 - toolchain: {compiler: nvidia-hpc} - - os: windows-2019 - toolchain: {compiler: nvidia-hpc} + matrix: ${{ fromJSON(needs.options.outputs.matrix) }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Fortran id: setup-fortran - continue-on-error: true + continue-on-error: ${{ needs.options.outputs.mode == 'report' }} uses: ./ with: compiler: ${{ matrix.toolchain.compiler }} @@ -201,7 +81,7 @@ jobs: - name: Test C compiler continue-on-error: true - if: steps.setup-fortran.outcome == 'success' + if: needs.options.outputs.mode == 'report' && steps.setup-fortran.outcome == 'success' uses: ./.github/actions/test-cc with: compiler: ${{ matrix.toolchain.compiler }} @@ -209,16 +89,17 @@ jobs: - name: Test C++ compiler continue-on-error: true - if: steps.setup-fortran.outcome == 'success' + if: needs.options.outputs.mode == 'report' && steps.setup-fortran.outcome == 'success' uses: ./.github/actions/test-cxx with: compiler: ${{ matrix.toolchain.compiler }} version: ${{ matrix.toolchain.version }} - name: Create compatibility report + if: needs.options.outputs.mode == 'report' shell: bash run: | - mkdir compat + mkdir -p compat support=$([ "${{ steps.setup-fortran.outcome }}" == "success" ] && echo "✓" || echo "") prefix="${{ matrix.os }},${{ matrix.toolchain.compiler }},${{ matrix.toolchain.version }}" report="compat/${prefix//,/_}.csv" @@ -226,15 +107,18 @@ jobs: cat "$report" - name: Upload compatibility report + if: needs.options.outputs.mode == 'report' uses: actions/upload-artifact@v3 with: name: compat path: compat/*.csv - + compat: name: Report compatibility - if: github.event_name == 'schedule' - needs: test_full + needs: + - options + - test + if: needs.options.outputs.mode == 'report' runs-on: ubuntu-latest permissions: contents: write @@ -250,7 +134,7 @@ jobs: python-version: 3.9 - name: Install packages - run: pip install tabulate pandas + run: pip install -r requirements.txt - name: Download reports uses: actions/download-artifact@v3 @@ -260,21 +144,26 @@ jobs: - name: Concatenate reports run: | - echo "runner,compiler,version,support" > long_compat.csv - cat compat/*.csv >> long_compat.csv + echo "runner,compiler,version,support" > .github/compat/long_compat.csv + cat compat/*.csv >> .github/compat/long_compat.csv - - name: Make wide CSV and MD table - run: python wide_compat_reports.py "long_compat.csv" "compat.csv" + - name: Make wide reports + working-directory: .github/compat + run: | + python wide_compat_reports.py "long_compat.csv" "compat.csv" + cat compat.md - name: Upload artifacts uses: actions/upload-artifact@v3 with: name: compat path: | - compat.csv - compat.md + .github/compat/long_compat.csv + .github/compat/compat.csv + .github/compat/compat.md - name: Check for changes + working-directory: .github/compat id: diff run: | if ! [ -f compat.csv ]; then @@ -294,7 +183,7 @@ jobs: - name: Update README if: ${{ steps.diff.outputs.diff == 'true' && github.event_name == 'push' }} - run: python update_compat_table.py "compat.md" "README.md" + run: python .github/compat/update_compat_table.py ".github/compat/compat.md" "README.md" - name: Print README diff if: ${{ steps.diff.outputs.diff == 'true' && github.event_name == 'push' }} @@ -313,7 +202,7 @@ jobs: default_branch="${{ github.event.repository.default_branch }}" git switch -c "$updated_branch" - git add compat.csv README.md + git add .github/compat/compat.csv README.md git commit -m "Update compatibility matrix" git push -u origin "$updated_branch" - gh pr create -B "$default_branch" -H "$updated_branch" --title "Update compatibility matrix" --body-file compat.md + gh pr create -B "$default_branch" -H "$updated_branch" --title "Update compatibility matrix" --body-file .github/compat/compat.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..182f1004 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.github/compat/*.json +.github/compat/*.md +**/.DS_Store +venv/ diff --git a/README.md b/README.md index 4a570087..afbb2e61 100644 --- a/README.md +++ b/README.md @@ -97,15 +97,15 @@ These are made available to subsequent workflow steps via the [`GITHUB_ENV` envi Toolchain support varies across GitHub-hosted runner images. -| runner | gcc 10 | gcc 11 | gcc 12 | gcc 13 | gcc 6 | gcc 7 | gcc 8 | gcc 9 | intel-classic 2021.1.2 | intel-classic 2021.1 | intel-classic 2021.10 | intel-classic 2021.2 | intel-classic 2021.3 | intel-classic 2021.4 | intel-classic 2021.5 | intel-classic 2021.6 | intel-classic 2021.7.1 | intel-classic 2021.7 | intel-classic 2021.8 | intel-classic 2021.9 | intel 2021.1.2 | intel 2021.1 | intel 2021.2 | intel 2021.4 | intel 2022.0 | intel 2022.1 | intel 2022.2.1 | intel 2022.2 | intel 2023.0 | intel 2023.1 | intel 2023.2 | -|:-------------|:----------------|:----------------|:----------------|:----------------|:---------------|:---------------|:---------------|:---------------|:--------------------------------|:------------------------------|:-------------------------------|:------------------------------|:------------------------------|:------------------------------|:------------------------------|:------------------------------|:--------------------------------|:------------------------------|:------------------------------|:------------------------------|:------------------------|:----------------------|:----------------------|:----------------------|:----------------------|:----------------------|:------------------------|:----------------------|:----------------------|:----------------------|:----------------------| -| macos-11 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | | | | | | | | -| macos-12 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | | | | | | | | -| macos-13 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | | | | | | | | -| ubuntu-20.04 | ✓ | ✓ | | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| ubuntu-22.04 | ✓ | ✓ | ✓ | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| windows-2019 | ✓ | ✓ | ✓ | ✓ | | | ✓ | ✓ | | | ✓ | | | | | ✓ | | ✓ | ✓ | ✓ | | | | | | ✓ | | ✓ | ✓ | ✓ | ✓ | -| windows-2022 | ✓ | ✓ | ✓ | ✓ | | | ✓ | ✓ | | | ✓ | | | | | ✓ | | ✓ | ✓ | ✓ | | | | | | ✓ | | ✓ | ✓ | ✓ | ✓ | +| runner | gcc 10 | gcc 11 | gcc 12 | gcc 13 | gcc 7 | gcc 8 | gcc 9 | intel-classic 2021.1 | intel-classic 2021.10 | intel-classic 2021.2 | intel-classic 2021.3 | intel-classic 2021.4 | intel-classic 2021.5 | intel-classic 2021.6 | intel-classic 2021.7.1 | intel-classic 2021.7 | intel-classic 2021.8 | intel-classic 2021.9 | intel-classic 2021.1.2 | intel 2021.1.2 | intel 2021.1 | intel 2021.2 | intel 2021.4 | intel 2022.0 | intel 2022.1 | intel 2022.2.1 | intel 2022.2 | intel 2023.0 | intel 2023.1 | intel 2023.2 | nvidia-hpc 20.11 | nvidia-hpc 21.11 | nvidia-hpc 22.1 | nvidia-hpc 22.11 | nvidia-hpc 23.11 | nvidia-hpc 23.3 | nvidia-hpc 23.5 | nvidia-hpc 23.7 | nvidia-hpc 23.9 | +|:-------------|:----------------|:----------------|:----------------|:----------------|:---------------|:---------------|:---------------|:------------------------------|:-------------------------------|:------------------------------|:------------------------------|:------------------------------|:------------------------------|:------------------------------|:--------------------------------|:------------------------------|:------------------------------|:------------------------------|:--------------------------------|:------------------------|:----------------------|:----------------------|:----------------------|:----------------------|:----------------------|:------------------------|:----------------------|:----------------------|:----------------------|:----------------------|:--------------------------|:--------------------------|:-------------------------|:--------------------------|:--------------------------|:-------------------------|:-------------------------|:-------------------------|:-------------------------| +| macos-11 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | | | | | | | | | | | | | | | | | | +| macos-12 | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | | | | | | | | | | | | | | | | | | | | | | +| macos-13 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | | | | | | | | | | | | | | | | | | +| ubuntu-20.04 | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| ubuntu-22.04 | ✓ | ✓ | ✓ | ✓ | | | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| windows-2019 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | | ✓ | | | | | ✓ | | ✓ | ✓ | ✓ | | | | | | | ✓ | | ✓ | ✓ | ✓ | ✓ | | | | | | | | | | +| windows-2022 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | | ✓ | | | | | ✓ | | ✓ | ✓ | ✓ | | | | | | | ✓ | | ✓ | ✓ | ✓ | ✓ | | | | | | | | | | **Note:** on `macos-13`, `gfortran` 7-9 require flag `-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib`. diff --git a/compat.csv b/compat.csv deleted file mode 100644 index dfe9d31e..00000000 --- a/compat.csv +++ /dev/null @@ -1,10 +0,0 @@ -compiler,gcc,gcc,gcc,gcc,gcc,gcc,gcc,gcc,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel-classic,intel,intel,intel,intel,intel,intel,intel,intel,intel,intel,intel -version,10,11,12,13,6,7,8,9,2021.1.2,2021.1,2021.10,2021.2,2021.3,2021.4,2021.5,2021.6,2021.7.1,2021.7,2021.8,2021.9,2021.1.2,2021.1,2021.2,2021.4,2022.0,2022.1,2022.2.1,2022.2,2023.0,2023.1,2023.2 -runner,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -macos-11,✓,✓,✓,✓,✓,✓,✓,✓,,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,,,,,,,,,,, -macos-12,✓,✓,✓,✓,✓,✓,✓,✓,,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,,,,,,,,,,, -macos-13,✓,✓,✓,✓,,✓,✓,✓,,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,,,,,,,,,,, -ubuntu-20.04,✓,✓,,✓,,✓,✓,✓,✓,✓,✓,✓,,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓ -ubuntu-22.04,✓,✓,✓,✓,,,,✓,✓,✓,✓,✓,,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓,✓ -windows-2019,✓,✓,✓,✓,,,✓,✓,,,✓,,,,,✓,,✓,✓,✓,,,,,,✓,,✓,✓,✓,✓ -windows-2022,✓,✓,✓,✓,,,✓,✓,,,✓,,,,,✓,,✓,✓,✓,,,,,,✓,,✓,✓,✓,✓ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..debfb475 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pandas +tabulate \ No newline at end of file diff --git a/hw.c b/test/hw.c similarity index 100% rename from hw.c rename to test/hw.c diff --git a/hw.cpp b/test/hw.cpp similarity index 100% rename from hw.cpp rename to test/hw.cpp diff --git a/hw.f90 b/test/hw.f90 similarity index 100% rename from hw.f90 rename to test/hw.f90