|
1 | 1 | name: Test and build |
2 | | - |
3 | 2 | on: |
4 | 3 | push: |
5 | 4 | branches: [main] |
|
9 | 8 |
|
10 | 9 | jobs: |
11 | 10 | test: |
12 | | - runs-on: ${{matrix.os}} |
| 11 | + runs-on: ${{ matrix.os }} |
13 | 12 | strategy: |
14 | 13 | fail-fast: false |
15 | 14 | matrix: |
16 | | - os: |
17 | | - - ubuntu-latest |
18 | | - - windows-latest |
19 | | - - macos-latest |
20 | | - python-version: ['3.14'] |
| 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 |
21 | 28 |
|
22 | 29 | steps: |
23 | 30 | - uses: actions/checkout@v6 |
| 31 | + |
24 | 32 | - uses: astral-sh/setup-uv@v7 |
25 | 33 | with: |
26 | 34 | enable-cache: true |
|
31 | 39 | - name: Install dependencies |
32 | 40 | run: uv sync |
33 | 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 | +
|
34 | 111 | - name: Run mypy |
35 | 112 | run: mypy . |
36 | 113 |
|
|
0 commit comments