|
7 | 7 | workflow_call: |
8 | 8 |
|
9 | 9 | jobs: |
10 | | - test: |
11 | | - runs-on: ${{ matrix.os }} |
12 | | - strategy: |
13 | | - fail-fast: false |
14 | | - matrix: |
15 | | - include: |
16 | | - - os: ubuntu-latest |
17 | | - python-version: '3.14' |
18 | | - muse2_asset: muse2_linux.tar.gz |
19 | | - muse2_exe: muse2 |
20 | | - - os: windows-latest |
21 | | - python-version: '3.14' |
22 | | - muse2_asset: muse2_windows.zip |
23 | | - muse2_exe: muse2.exe |
24 | | - - os: macos-latest |
25 | | - python-version: '3.14' |
26 | | - muse2_asset: muse2_macos_arm.tar.gz |
27 | | - muse2_exe: muse2 |
28 | | - |
29 | | - steps: |
30 | | - - uses: actions/checkout@v6 |
31 | | - |
32 | | - - uses: astral-sh/setup-uv@v7 |
33 | | - with: |
34 | | - enable-cache: true |
35 | | - prune-cache: false |
36 | | - activate-environment: true |
37 | | - python-version: ${{ matrix.python-version }} |
38 | | - |
39 | | - - name: Install dependencies |
40 | | - run: uv sync |
41 | | - |
42 | | - # Query the GitHub API for the latest MUSE2 release tag (e.g. "v2.0.0"). |
43 | | - # The tag is written to GITHUB_OUTPUT so subsequent steps can reference it. |
44 | | - - name: Get latest MUSE2 release tag |
45 | | - id: muse2_release |
46 | | - shell: bash |
47 | | - run: | |
48 | | - TAG=$(curl -sSf \ |
49 | | - -H "Accept: application/vnd.github+json" \ |
50 | | - -H "Authorization: Bearer ${{ github.token }}" \ |
51 | | - https://api.github.com/repos/EnergySystemsModellingLab/MUSE2/releases/latest \ |
52 | | - | jq -r '.tag_name') |
53 | | -
|
54 | | - if [[ -z "$TAG" || "$TAG" == "null" ]]; then |
55 | | - echo "::error::Failed to retrieve latest MUSE2 release tag." |
56 | | - exit 1 |
57 | | - fi |
58 | | -
|
59 | | - echo "Resolved latest MUSE2 release: $TAG" |
60 | | - echo "tag=$TAG" >> "$GITHUB_OUTPUT" |
61 | | -
|
62 | | - # Download the platform-appropriate MUSE2 release asset. |
63 | | - # 'shell: bash' is used on all platforms |
64 | | - - name: Download MUSE2 release asset |
65 | | - shell: bash |
66 | | - run: | |
67 | | - curl -sSfL \ |
68 | | - "https://github.com/EnergySystemsModellingLab/MUSE2/releases/download/${{ steps.muse2_release.outputs.tag }}/${{ matrix.muse2_asset }}" \ |
69 | | - --output "muse2_asset_download" |
70 | | -
|
71 | | - - name: Extract MUSE2 and set environment variable (Linux / macOS) |
72 | | - if: runner.os == 'Linux' || runner.os == 'macOS' |
73 | | - shell: bash |
74 | | - run: | |
75 | | - mkdir -p muse2_bin |
76 | | - tar -xf muse2_asset_download -C muse2_bin |
77 | | - chmod +x "muse2_bin/${{ matrix.muse2_exe }}" |
78 | | - echo "MUSE2_PATH=${{ github.workspace }}/muse2_bin/${{ matrix.muse2_exe }}" >> "$GITHUB_ENV" |
79 | | -
|
80 | | - - name: Extract MUSE2 and set environment variable (Windows) |
81 | | - if: runner.os == 'Windows' |
82 | | - shell: pwsh |
83 | | - run: | |
84 | | - New-Item -ItemType Directory -Force -Path muse2_bin | Out-Null |
85 | | - Rename-Item -Path "muse2_asset_download" -NewName "muse2_asset_download.zip" |
86 | | - Expand-Archive -Path "muse2_asset_download.zip" -DestinationPath muse2_bin -Force |
87 | | - $exePath = "${{ github.workspace }}\muse2_bin\${{ matrix.muse2_exe }}" |
88 | | - echo "MUSE2_PATH=$exePath" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append |
89 | | -
|
90 | | - # Confirm the muse2 executable is present and the environment variable is set correctly. |
91 | | - - name: Verify MUSE2 installation (Linux / macOS) |
92 | | - if: runner.os == 'Linux' || runner.os == 'macOS' |
93 | | - shell: bash |
94 | | - run: | |
95 | | - if [[ ! -f "$MUSE2_PATH" ]]; then |
96 | | - echo "::error::MUSE2 executable not found at: $MUSE2_PATH" |
97 | | - exit 1 |
98 | | - fi |
99 | | - echo "MUSE2_PATH is set to: $MUSE2_PATH" |
100 | | -
|
101 | | - - name: Verify MUSE2 installation (Windows) |
102 | | - if: runner.os == 'Windows' |
103 | | - shell: pwsh |
104 | | - run: | |
105 | | - if (-not (Test-Path -Path $env:MUSE2_PATH -PathType Leaf)) { |
106 | | - Write-Error "MUSE2 executable not found at: $env:MUSE2_PATH" |
107 | | - exit 1 |
108 | | - } |
109 | | - Write-Host "MUSE2_PATH is set to: $env:MUSE2_PATH" |
110 | | -
|
111 | | - - name: Run tests |
112 | | - run: pytest |
113 | | - |
114 | | - - name: Upload coverage to Codecov |
115 | | - if: runner.os == 'Linux' |
116 | | - uses: codecov/codecov-action@v5 |
117 | | - with: |
118 | | - token: ${{ secrets.CODECOV_TOKEN }} |
119 | | - files: ./coverage.xml |
120 | | - fail_ci_if_error: true |
| 10 | + test_release: |
| 11 | + name: Test against latest MUSE2 release |
| 12 | + uses: ./.github/workflows/test-with-muse2.yml |
| 13 | + with: |
| 14 | + muse2_source: release |
| 15 | + secrets: inherit |
| 16 | + |
| 17 | + test_main: |
| 18 | + name: Test against MUSE2 main |
| 19 | + uses: ./.github/workflows/test-with-muse2.yml |
| 20 | + with: |
| 21 | + muse2_source: main |
| 22 | + secrets: inherit |
0 commit comments