aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/build.yml
blob: ef55788d234e0395c2eb1b274b3ef1f37276dbd6 (plain)
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
name: ci/gh-actions/gui

on: [push, pull_request]

env:
  FREE_DISKSPACE: |
    sudo rm -rf /usr/local/.ghcup /usr/share/dotnet /usr/share/swift /usr/share/miniconda
  QT_TAG: v5.15.17-lts-lgpl
  QT_PREFIX: ${{ github.workspace }}/qt-install

jobs:
  build-macos:
    runs-on: macos-latest
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: recursive
    - name: install dependencies
      run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libsodium miniupnpc unbound libunwind-headers protobuf qt5 pkg-config
    - name: build
      run: DEV_MODE=ON make release -j3
    - name: test qml
      run: build/release/bin/monero-wallet-gui.app/Contents/MacOS/monero-wallet-gui --test-qml

  build-ubuntu:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: recursive
    - name: remove bundled boost
      run: sudo rm -rf /usr/local/share/boost
    - name: set apt conf
      run: |
        echo "Acquire::Retries \"3\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom
        echo "Acquire::http::Timeout \"120\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom
        echo "Acquire::ftp::Timeout \"120\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom
    - name: update apt
      run: sudo apt update
    - name: install monero dependencies
      run: sudo apt -y install build-essential cmake libboost-all-dev miniupnpc libunbound-dev graphviz doxygen libunwind8-dev pkg-config libssl-dev libzmq3-dev libsodium-dev libhidapi-dev libnorm-dev libusb-1.0-0-dev libpgm-dev libprotobuf-dev protobuf-compiler
    - name: install monero gui dependencies
      run: sudo apt -y install qtbase5-dev qtdeclarative5-dev qml-module-qtqml-models2 qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs qml-module-qtquick-xmllistmodel qml-module-qt-labs-settings qml-module-qt-labs-platform qml-module-qt-labs-folderlistmodel qttools5-dev-tools qml-module-qtquick-templates2 libqt5svg5-dev libgcrypt20-dev xvfb
    - name: build
      run: DEV_MODE=ON make release -j3
    - name: test qml
      run: xvfb-run -a build/release/bin/monero-wallet-gui --test-qml

  build-windows:
    runs-on: windows-latest
    defaults:
      run:
        shell: msys2 {0}
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: recursive
    - uses: eine/setup-msys2@v2
      with:
        msystem: ucrt64
        update: true
        install: make
        pacboy: toolchain:p pcre:p cmake:p boost:p openssl:p zeromq:p libsodium:p hidapi:p protobuf-c:p libusb:p unbound:p git qt5:p libgcrypt:p angleproject:p
    - name: add qmake.exe and windeployqt.exe
      run: |
        cp -f "$MSYSTEM_PREFIX/bin/qmake-qt5.exe" "$MSYSTEM_PREFIX/bin/qmake.exe"
        cp -f "$MSYSTEM_PREFIX/bin/windeployqt-qt5.exe" "$MSYSTEM_PREFIX/bin/windeployqt.exe"
    - name: build
      run: DEV_MODE=ON make release-win64 -j2
    - name: deploy
      run: make deploy
      working-directory: build/release
    - name: test qml
      run: build/release/bin/monero-wallet-gui --test-qml

  macos-bundle:
    runs-on: macos-15
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: recursive
    - name: install dependencies
      run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq miniupnpc unbound libunwind-headers protobuf pkg-config
    - name: clone qt repo
      run: git clone -b "${QT_TAG}" --recursive --depth 1 --shallow-submodules https://github.com/qt/qt5
    - name: build qt from source
      run: |
        cd qt5
        mkdir build && cd build
        ../configure -prefix "${QT_PREFIX}" -opensource -confirm-license -release -nomake examples -nomake tests -no-rpath -skip qtwebengine -skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtnetworkauth -skip qtpurchasing -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qttools -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip gamepad -skip serialbus -skip location -skip webengine
        make -j"$(sysctl -n hw.ncpu)"
        make install
        cd ../qttools/src/linguist/lrelease
        ../../../../build/qtbase/bin/qmake
        make -j"$(sysctl -n hw.ncpu)"
        make install
        cd ../../../../qttools/src/macdeployqt/macdeployqt/
        ../../../../build/qtbase/bin/qmake
        make -j"$(sysctl -n hw.ncpu)"
        make install
    - name: build monero-gui
      run: |
        mkdir build && cd build
        cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH="${QT_PREFIX}" ..
        make -j"$(sysctl -n hw.ncpu)"
    - name: deploy
      run: make deploy
      working-directory: build
    - name: test qml
      run: build/bin/monero-wallet-gui.app/Contents/MacOS/monero-wallet-gui --test-qml
    - name: create .tar
      run: tar -cf monero-wallet-gui.tar monero-wallet-gui.app
      working-directory: build/bin
    - uses: actions/upload-artifact@v4
      with:
        name: ${{ github.job }}
        path: build/bin/monero-wallet-gui.tar

  docker-linux-static:
    runs-on: ubuntu-22.04
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: recursive
    - name: install dependencies
      run: sudo apt -y install xvfb libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xkb1 libxcb-shape0 libxkbcommon-x11-0
    - name: free up diskspace
      run: ${{env.FREE_DISKSPACE}}
    - name: prepare build environment
      run: docker build --tag monero:build-env-linux --build-arg THREADS=3 --file Dockerfile.linux .
    - name: build
      run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-linux sh -c 'make release-static -j3'
    - name: sha256sum
      run: shasum -a256 /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
    - name: test qml
      run: xvfb-run -a /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui --test-qml
    - uses: actions/upload-artifact@v4
      with:
        name: ${{ github.job }}
        path: |
          /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
          /home/runner/work/monero-gui/monero-gui/build/release/bin/monerod

  docker-windows-static:
    runs-on: ubuntu-22.04
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: recursive
    - name: free up diskspace
      run: ${{env.FREE_DISKSPACE}}
    - name: prepare build environment
      run: docker build --tag monero:build-env-windows --build-arg THREADS=3 --file Dockerfile.windows .
    - name: build
      run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-windows sh -c 'make depends root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j3'
    - name: sha256sum
      run: shasum -a256 /home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monero-wallet-gui.exe
    - uses: actions/upload-artifact@v4
      with:
        name: ${{ github.job }}
        path: |
          /home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monero-wallet-gui.exe
          /home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monerod.exe

  docker-android:
    runs-on: ubuntu-22.04
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: recursive
    - name: free up diskspace
      run: ${{env.FREE_DISKSPACE}}
    - name: prepare build environment
      run: docker build --tag monero:build-env-android --build-arg THREADS=3 --file Dockerfile.android .
    - name: build
      run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -e THREADS=3 monero:build-env-android
    - uses: actions/upload-artifact@v4
      with:
        name: ${{ github.job }}
        path: /home/runner/work/monero-gui/monero-gui/build/Android/release/android-build/monero-gui.apk

  source-archive:
    runs-on: ubuntu-22.04
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: recursive
    - name: archive
      run: |
        pip install git-archive-all
        export VERSION="monero-gui-$(git describe)"
        export OUTPUT="$VERSION.tar"
        echo "OUTPUT=$OUTPUT" >> $GITHUB_ENV
        /home/runner/.local/bin/git-archive-all --prefix "$VERSION/" --force-submodules "$OUTPUT"
    - uses: actions/upload-artifact@v4
      with:
        name: ${{ env.OUTPUT }}
        path: /home/runner/work/monero-gui/monero-gui/${{ env.OUTPUT }}