aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/build.yml
blob: 850dbdc9a68303f5b941c0861388ae9b8deca3e9 (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
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
name: ci/gh-actions/cli

on:
  push:
  pull_request:
    paths-ignore:
      - 'docs/**'
      - '**/README.md'

# The below variables reduce repetitions across similar targets
env:
  REMOVE_BUNDLED_BOOST : rm -rf /usr/local/share/boost
  BUILD_DEFAULT_LINUX: |
        cmake -S . -B build -D ARCH="default" -D BUILD_TESTS=ON -D CMAKE_BUILD_TYPE=Release && cmake --build build -j3
  APT_INSTALL_LINUX: '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 ccache'
  APT_SET_CONF: |
        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
  CCACHE_SETTINGS: |
        ccache --max-size=150M
        ccache --set-config=compression=true

jobs:
  build-macos:
    runs-on: macOS-latest
    env:
      CCACHE_TEMPDIR: /tmp/.ccache-temp
    steps:
    - uses: actions/checkout@v3
      with:
        submodules: recursive
    - uses: actions/cache@v3
      with:
        path: /Users/runner/Library/Caches/ccache
        key: ccache-${{ runner.os }}-build-${{ github.sha }}
        restore-keys: ccache-${{ runner.os }}-build-
    - name: install dependencies
      run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm miniupnpc expat libunwind-headers protobuf ccache
    - name: build
      run: |
        ${{env.CCACHE_SETTINGS}}
        make -j3

  build-windows:
    runs-on: windows-latest
    env:
      CCACHE_TEMPDIR: C:\Users\runneradmin\.ccache-temp
      CCACHE_DIR: C:\Users\runneradmin\.ccache
    defaults:
      run:
        shell: msys2 {0}
    steps:
    - uses: actions/checkout@v3
      with:
        submodules: recursive
    - uses: actions/cache@v3
      with:
        path: C:\Users\runneradmin\.ccache
        key: ccache-${{ runner.os }}-build-${{ github.sha }}
        restore-keys: ccache-${{ runner.os }}-build-
    - uses: msys2/setup-msys2@v2
      with:
        update: true
        install: mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-ccache mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb mingw-w64-x86_64-unbound git
    - name: build
      run: |
        ${{env.CCACHE_SETTINGS}}
        make release-static-win64 -j2

# See the OS labels and monitor deprecations here:
# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources

  build-ubuntu:
    runs-on: ${{ matrix.os }}
    env:
      CCACHE_TEMPDIR: /tmp/.ccache-temp
    strategy:
      matrix:
        os: [ubuntu-22.04, ubuntu-20.04]
    steps:
    - uses: actions/checkout@v3
      with:
        submodules: recursive
    - uses: actions/cache@v3
      with:
        path: ~/.ccache
        key: ccache-${{ runner.os }}-build-${{ matrix.os }}-${{ github.sha }}
        restore-keys: ccache-${{ runner.os }}-build-${{ matrix.os }}
    - name: remove bundled boost
      run: ${{env.REMOVE_BUNDLED_BOOST}}
    - name: set apt conf
      run: ${{env.APT_SET_CONF}}
    - name: update apt
      run: sudo apt update
    - name: install monero dependencies
      run: ${{env.APT_INSTALL_LINUX}}
    - name: build
      run: |
        ${{env.CCACHE_SETTINGS}}
        ${{env.BUILD_DEFAULT_LINUX}}

  libwallet-ubuntu:
    runs-on: ubuntu-20.04
    env:
      CCACHE_TEMPDIR: /tmp/.ccache-temp
    steps:
    - uses: actions/checkout@v3
      with:
        submodules: recursive
    - uses: actions/cache@v3
      with:
        path: ~/.ccache
        key: ccache-${{ runner.os }}-libwallet-${{ github.sha }}
        restore-keys: ccache-${{ runner.os }}-libwallet-
    - name: remove bundled boost
      run: ${{env.REMOVE_BUNDLED_BOOST}}
    - name: set apt conf
      run: ${{env.APT_SET_CONF}}
    - name: update apt
      run: sudo apt update
    - name: install monero dependencies
      run: ${{env.APT_INSTALL_LINUX}}
    - name: build
      run: |
        ${{env.CCACHE_SETTINGS}}
        cmake .
        make wallet_api -j3

  test-ubuntu:
    needs: build-ubuntu
    runs-on: ubuntu-20.04
    env:
      CCACHE_TEMPDIR: /tmp/.ccache-temp
    steps:
    - uses: actions/checkout@v3
      with:
        submodules: recursive
    - name: ccache
      uses: actions/cache@v3
      with:
        path: ~/.ccache
        key: ccache-${{ runner.os }}-build-ubuntu-latest-${{ github.sha }}
        restore-keys: ccache-${{ runner.os }}-build-ubuntu-latest
    - name: remove bundled boost
      run: ${{env.REMOVE_BUNDLED_BOOST}}
    - name: set apt conf
      run: ${{env.APT_SET_CONF}}
    - name: update apt
      run: sudo apt update
    - name: install monero dependencies
      run: ${{env.APT_INSTALL_LINUX}}
    - name: install Python dependencies
      run: pip install requests psutil monotonic zmq
    - name: tests
      env:
        CTEST_OUTPUT_ON_FAILURE: ON
        DNS_PUBLIC: tcp://9.9.9.9
      run: |
        ${{env.CCACHE_SETTINGS}}
        ${{env.BUILD_DEFAULT_LINUX}}
        cmake --build build --target test

# ARCH="default" (not "native") ensures, that a different execution host can execute binaries compiled elsewhere.
# BUILD_SHARED_LIBS=ON speeds up the linkage part a bit, reduces size, and is the only place where the dynamic linkage is tested.

  source-archive:
    runs-on: ubuntu-20.04
    steps:
    - uses: actions/checkout@v3
      with:
        fetch-depth: 0
        submodules: recursive
    - name: archive
      run: |
        pip install git-archive-all
        export VERSION="monero-$(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@v3
      with:
        name: ${{ env.OUTPUT }}
        path: /home/runner/work/monero/monero/${{ env.OUTPUT }}