aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/builds.yml
blob: 2b90752d0b28b6163182f4215b19f2dd8d4fdab3 (plain) (blame)
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
142
143
144
145
146
147
148
149
name: Builds

on: [push, pull_request]

env:
  GH_BASE_BRANCH: master

concurrency:
  group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-macos
  cancel-in-progress: true

jobs:
  build:
    runs-on: ${{matrix.os}}
    name: ${{matrix.name}}
    permissions: write-all
    strategy:
      fail-fast: false
      matrix:
        include:
          - identifier: windows-debug
            os: windows-latest
            name: 🏁 Windows Debug
            target: template_debug
            platform: windows
            arch: x86_64
          - identifier: windows-release
            os: windows-latest
            name: 🏁 Windows Release
            target: template_release
            platform: windows
            arch: x86_64
          - identifier: macos-debug
            os: macos-latest
            name: 🍎 macOS (universal) Debug
            target: template_debug
            platform: macos
            arch: universal
          - identifier: macos-release
            os: macos-latest
            name: 🍎 macOS (universal) Release
            target: template_release
            platform: macos
            arch: universal
          - identifier: linux-debug
            os: ubuntu-latest
            name: 🐧 Linux Debug
            runner: ubuntu-20.04
            target: template_debug
            platform: linux
            arch: x86_64
          - identifier: linux-release
            os: ubuntu-latest
            name: 🐧 Linux Release
            runner: ubuntu-20.04
            target: template_release
            platform: linux
            arch: x86_64

    steps:
      - name: Checkout project
        uses: actions/checkout@v4.1.1
        with:
          submodules: recursive

      - name: Setup build cache
        uses: OpenVicProject/openvic-cache@master
        with:
          cache-name: ${{ matrix.identifier }}
          base-branch: ${{ env.GH_BASE_BRANCH }}
        continue-on-error: true

      - name: Set up Python
        uses: actions/setup-python@v5.0.0
        with:
          python-version: "3.x"

      - name: Set up SCons
        shell: bash
        run: |
          python -c "import sys; print(sys.version)"
          python -m pip install scons
          scons --version

      - name: Linux dependencies
        if: ${{ matrix.platform == 'linux' }}
        run: |
          sudo apt-get update -qq
          sudo apt-get install -qqq build-essential pkg-config
          g++ --version
          sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 12
          sudo update-alternatives --set g++ /usr/bin/g++-12
          g++ --version

      - name: Compile with SCons
        uses: OpenVicProject/openvic-build@master
        with:
          platform: ${{ matrix.platform }}
          target: ${{ matrix.target }}
          sconsflags: arch=${{ matrix.arch }} build_ovsim_library=yes

      - name: Delete compilation files
        if: ${{ matrix.platform == 'windows' }}
        run: |
          Remove-Item bin/* -Include *.exp,*.pdb -Force

      - name: Upload library artifact
        uses: actions/upload-artifact@v4.3.0
        with:
          name: ${{ github.event.repository.name }}-${{ matrix.identifier }}-library
          path: |
            ${{ github.workspace }}/bin/libopenvic-simulation.*

      - name: Upload executable artifact
        uses: actions/upload-artifact@v4.3.0
        with:
          name: ${{ github.event.repository.name }}-${{ matrix.identifier }}-executable
          path: |
            ${{ github.workspace }}/bin/openvic-simulation.headless.*

      - name: Archive Release
        uses: thedoctor0/zip-release@0.7.6
        with:
          type: "zip"
          filename: "../../../libopenvic-simulation.${{ matrix.platform }}.${{ matrix.arch }}.zip"
          directory: "${{ github.workspace }}/bin/"
        if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')

      - name: Create and upload asset
        uses: ncipollo/release-action@v1.13.0
        with:
          allowUpdates: true
          artifacts: "libopenvic-simulation.${{ matrix.platform }}.${{ matrix.arch }}.zip"
          omitNameDuringUpdate: true
          omitBodyDuringUpdate: true
          token: ${{ secrets.GITHUB_TOKEN }}
        if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')

  merge-library-files:
    runs-on: ubuntu-latest
    needs: build
    name: 📚 Merge Library Files
    steps:
      - name: Merge Artifacts
        uses: actions/upload-artifact/merge@v4.3.0
        with:
          delete-merged: true
          name: ${{ github.event.repository.name }}-library
          pattern: ${{ github.event.repository.name }}-*-library